On Wed, 21 Sep 2022 08:31:45 -0700
Dave Jiang <[email protected]> wrote:

> Add the emulation support for handling "Get Security State" opcode for a
> CXL memory device for the cxl_test. The function will copy back device
> security state bitmask to the output payload.
> 
> The security state data is added as platform_data for the mock mem device.
> 
> Reviewed-by: Davidlohr Bueso <[email protected]>
> Signed-off-by: Dave Jiang <[email protected]>
FWIW LGTM

Reviewed-by: Jonathan Cameron <[email protected]>

> ---
>  tools/testing/cxl/test/cxl.c       |   18 ++++++++++++++++++
>  tools/testing/cxl/test/mem.c       |   20 ++++++++++++++++++++
>  tools/testing/cxl/test/mem_pdata.h |   10 ++++++++++
>  3 files changed, 48 insertions(+)
>  create mode 100644 tools/testing/cxl/test/mem_pdata.h
> 
> diff --git a/tools/testing/cxl/test/cxl.c b/tools/testing/cxl/test/cxl.c
> index a072b2d3e726..6dd286a52839 100644
> --- a/tools/testing/cxl/test/cxl.c
> +++ b/tools/testing/cxl/test/cxl.c
> @@ -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;
>  }
>  
> diff --git a/tools/testing/cxl/test/mem.c b/tools/testing/cxl/test/mem.c
> index aa2df3a15051..9002a3ae3ea5 100644
> --- a/tools/testing/cxl/test/mem.c
> +++ b/tools/testing/cxl/test/mem.c
> @@ -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;
>       }
> diff --git a/tools/testing/cxl/test/mem_pdata.h 
> b/tools/testing/cxl/test/mem_pdata.h
> new file mode 100644
> index 000000000000..6a7b111147eb
> --- /dev/null
> +++ b/tools/testing/cxl/test/mem_pdata.h
> @@ -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
> 
> 


Reply via email to