On Tue, 08 Nov 2022 10:26:48 -0700
Dave Jiang <[email protected]> wrote:

> The mock cxl mem devs needs a way to go into "locked" status to simulate
> when the platform is rebooted. Add a sysfs mechanism so the device security
> state is set to "locked" and the frozen state bits are cleared.
> 
> Signed-off-by: Dave Jiang <[email protected]>
Reviewed-by: Jonathan Cameron <[email protected]>

> ---
>  tools/testing/cxl/test/cxl.c |   40 ++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 40 insertions(+)
> 
> diff --git a/tools/testing/cxl/test/cxl.c b/tools/testing/cxl/test/cxl.c
> index 6dd286a52839..7384573e8b12 100644
> --- a/tools/testing/cxl/test/cxl.c
> +++ b/tools/testing/cxl/test/cxl.c
> @@ -628,6 +628,45 @@ static void mock_companion(struct acpi_device *adev, 
> struct device *dev)
>  #define SZ_512G (SZ_64G * 8)
>  #endif
>  
> +static ssize_t security_lock_show(struct device *dev,
> +                               struct device_attribute *attr, char *buf)
> +{
> +     struct cxl_mock_mem_pdata *mdata = dev_get_platdata(dev);
> +
> +     return sysfs_emit(buf, "%u\n",
> +                       !!(mdata->security_state & 
> CXL_PMEM_SEC_STATE_LOCKED));
> +}
> +
> +static ssize_t security_lock_store(struct device *dev, struct 
> device_attribute *attr,
> +                                const char *buf, size_t count)
> +{
> +     struct cxl_mock_mem_pdata *mdata = dev_get_platdata(dev);
> +     u32 mask = CXL_PMEM_SEC_STATE_FROZEN | CXL_PMEM_SEC_STATE_USER_PLIMIT |
> +                CXL_PMEM_SEC_STATE_MASTER_PLIMIT;
> +     int val;
> +
> +     if (kstrtoint(buf, 0, &val) < 0)
> +             return -EINVAL;
> +
> +     if (val == 1) {
> +             if (!(mdata->security_state & CXL_PMEM_SEC_STATE_USER_PASS_SET))
> +                     return -ENXIO;
> +             mdata->security_state |= CXL_PMEM_SEC_STATE_LOCKED;
> +             mdata->security_state &= ~mask;
> +     } else {
> +             return -EINVAL;
> +     }
> +     return count;
> +}
> +
> +static DEVICE_ATTR_RW(security_lock);
> +
> +static struct attribute *cxl_mock_mem_attrs[] = {
> +     &dev_attr_security_lock.attr,
> +     NULL
> +};
> +ATTRIBUTE_GROUPS(cxl_mock_mem);
> +
>  static __init int cxl_test_init(void)
>  {
>       struct cxl_mock_mem_pdata *mem_pdata;
> @@ -752,6 +791,7 @@ static __init int cxl_test_init(void)
>                       goto err_mem;
>               }
>  
> +             pdev->dev.groups = cxl_mock_mem_groups;
>               rc = platform_device_add(pdev);
>               if (rc) {
>                       platform_device_put(pdev);
> 
> 


Reply via email to