Commit 6eb52f63 authored by Davidlohr Bueso's avatar Davidlohr Bueso Committed by Dave Jiang
Browse files

tools/testing/cxl: Set Shutdown State support



Add support to emulate the CXL Set Shutdown State operation.

Signed-off-by: default avatarDavidlohr Bueso <dave@stgolabs.net>
Reviewed-by: default avatarDave Jiang <dave.jiang@intel.com>
Reviewed-by: default avatarLi Ming <ming.li@zohomail.com>
Reviewed-by: default avatarIra Weiny <ira.weiny@intel.com>
Reviewed-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
Link: https://patch.msgid.link/20250220220235.276831-5-dave@stgolabs.net


Signed-off-by: default avatarDave Jiang <dave.jiang@intel.com>
parent 7d0ecc0b
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -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;