]> www.infradead.org Git - linux.git/commitdiff
tools/testing/cxl: Set Shutdown State support
authorDavidlohr Bueso <dave@stgolabs.net>
Thu, 20 Feb 2025 22:02:35 +0000 (14:02 -0800)
committerDave Jiang <dave.jiang@intel.com>
Fri, 14 Mar 2025 22:55:27 +0000 (15:55 -0700)
Add support to emulate the CXL Set Shutdown State operation.

Signed-off-by: Davidlohr Bueso <dave@stgolabs.net>
Reviewed-by: Dave Jiang <dave.jiang@intel.com>
Reviewed-by: Li Ming <ming.li@zohomail.com>
Reviewed-by: Ira Weiny <ira.weiny@intel.com>
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Link: https://patch.msgid.link/20250220220235.276831-5-dave@stgolabs.net
Signed-off-by: Dave Jiang <dave.jiang@intel.com>
tools/testing/cxl/test/mem.c

index 8d731bd639882012df96c17c1e1de99301285c9d..c99105dabe300eae1df2b0cf697e35fe6e115995 100644 (file)
@@ -65,6 +65,10 @@ static struct cxl_cel_entry mock_cel[] = {
                .opcode = cpu_to_le16(CXL_MBOX_OP_GET_HEALTH_INFO),
                .effect = CXL_CMD_EFFECT_NONE,
        },
+       {
+               .opcode = cpu_to_le16(CXL_MBOX_OP_SET_SHUTDOWN_STATE),
+               .effect = POLICY_CHANGE_IMMEDIATE,
+       },
        {
                .opcode = cpu_to_le16(CXL_MBOX_OP_GET_POISON),
                .effect = CXL_CMD_EFFECT_NONE,
@@ -161,6 +165,7 @@ struct cxl_mockmem_data {
        u8 event_buf[SZ_4K];
        u64 timestamp;
        unsigned long sanitize_timeout;
+       u8 shutdown_state;
 };
 
 static struct mock_event_log *event_find_log(struct device *dev, int log_type)
@@ -1088,6 +1093,21 @@ static int mock_health_info(struct cxl_mbox_cmd *cmd)
        return 0;
 }
 
+static int mock_set_shutdown_state(struct cxl_mockmem_data *mdata,
+                                  struct cxl_mbox_cmd *cmd)
+{
+       struct cxl_mbox_set_shutdown_state_in *ss = cmd->payload_in;
+
+       if (cmd->size_in != sizeof(*ss))
+               return -EINVAL;
+
+       if (cmd->size_out != 0)
+               return -EINVAL;
+
+       mdata->shutdown_state = ss->state;
+       return 0;
+}
+
 static struct mock_poison {
        struct cxl_dev_state *cxlds;
        u64 dpa;
@@ -1421,6 +1441,9 @@ static int cxl_mock_mbox_send(struct cxl_mailbox *cxl_mbox,
        case CXL_MBOX_OP_PASSPHRASE_SECURE_ERASE:
                rc = mock_passphrase_secure_erase(mdata, cmd);
                break;
+       case CXL_MBOX_OP_SET_SHUTDOWN_STATE:
+               rc = mock_set_shutdown_state(mdata, cmd);
+               break;
        case CXL_MBOX_OP_GET_POISON:
                rc = mock_get_poison(cxlds, cmd);
                break;