@@ -10,6 +10,7 @@
#include <linux/mm.h>
#include <cxlmem.h>
#include "mock.h"
+#include "mem_pdata.h"
#define NR_CXL_HOST_BRIDGES 2
#define NR_CXL_ROOT_PORTS 2
@@ -629,8 +630,18 @@ static void mock_companion(struct acpi_device *adev, struct device *dev)
static __init int cxl_test_init(void)
{
+ struct cxl_mock_mem_pdata *mem_pdata;
int rc, i;
+ /*
+ * Only a zeroed copy of this data structure is needed since no
+ * additional initialization is needed for initial state.
+ * platform_device_add_data() will make a copy of this data.
+ */
+ mem_pdata = kzalloc(sizeof(*mem_pdata), GFP_KERNEL);
+ if (!mem_pdata)
+ return -ENOMEM;
+
register_cxl_mock_ops(&cxl_mock_ops);
cxl_mock_pool = gen_pool_create(ilog2(SZ_2M), NUMA_NO_NODE);
@@ -735,6 +746,12 @@ static __init int cxl_test_init(void)
pdev->dev.parent = &dport->dev;
set_dev_node(&pdev->dev, i % 2);
+ rc = platform_device_add_data(pdev, mem_pdata, sizeof(*mem_pdata));
+ if (rc) {
+ platform_device_put(pdev);
+ goto err_mem;
+ }
+
rc = platform_device_add(pdev);
if (rc) {
platform_device_put(pdev);
@@ -785,6 +802,7 @@ static __init int cxl_test_init(void)
gen_pool_destroy(cxl_mock_pool);
err_gen_pool_create:
unregister_cxl_mock_ops(&cxl_mock_ops);
+ kfree(mem_pdata);
return rc;
}
@@ -8,6 +8,7 @@
#include <linux/sizes.h>
#include <linux/bits.h>
#include <cxlmem.h>
+#include "mem_pdata.h"
#define LSA_SIZE SZ_128K
#define DEV_SIZE SZ_2G
@@ -137,6 +138,22 @@ static int mock_partition_info(struct cxl_dev_state *cxlds,
return 0;
}
+static int mock_get_security_state(struct cxl_dev_state *cxlds,
+ struct cxl_mbox_cmd *cmd)
+{
+ struct cxl_mock_mem_pdata *mdata = dev_get_platdata(cxlds->dev);
+
+ if (cmd->size_in)
+ return -EINVAL;
+
+ if (cmd->size_out != sizeof(u32))
+ return -EINVAL;
+
+ memcpy(cmd->payload_out, &mdata->security_state, sizeof(u32));
+
+ return 0;
+}
+
static int mock_get_lsa(struct cxl_dev_state *cxlds, struct cxl_mbox_cmd *cmd)
{
struct cxl_mbox_get_lsa *get_lsa = cmd->payload_in;
@@ -230,6 +247,9 @@ static int cxl_mock_mbox_send(struct cxl_dev_state *cxlds, struct cxl_mbox_cmd *
case CXL_MBOX_OP_GET_HEALTH_INFO:
rc = mock_health_info(cxlds, cmd);
break;
+ case CXL_MBOX_OP_GET_SECURITY_STATE:
+ rc = mock_get_security_state(cxlds, cmd);
+ break;
default:
break;
}
new file mode 100644
@@ -0,0 +1,10 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+
+#ifndef _MEM_PDATA_H_
+#define _MEM_PDATA_H_
+
+struct cxl_mock_mem_pdata {
+ u32 security_state;
+};
+
+#endif