From nobody Sat Nov 23 10:55:05 2024 Received: from frasgout.his.huawei.com (frasgout.his.huawei.com [185.176.79.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 33F1E1E0086; Fri, 22 Nov 2024 18:05:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.176.79.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1732298727; cv=none; b=ckODw7CWRNjGc5vgUwUgbZhQ2oE/co5UoNlciLdGK50+zK3WlVXwI1VMvKGSAdGJd8QYWQr/X1uDmzsqmegn39AdeRxGKDJ9mGQADS7wICZC0ZEZaFt60RpjecpbI9o33cNGQOIpDf+cN9k4YMX0ZNcyZsVK3hXhZovGDSN27aw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1732298727; c=relaxed/simple; bh=2X6Zay9+ltgDEoEQl6HAQp8/QU+XR4q1XdRpGtPuxUI=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Daf4dGwXLlMVQfIEtvuELSs4i1cKepWJy9NqGfQIM2Mf4n0H3A7C/ga4cqpejQqHDoFulwRXkesk1ss/Pen/WHjiQeW8tKXfM1fqbJX0NebEN3HcaqwrtO0196q2HnaKgZ+maA+dDhb3MtZafQ96QdtcUfIkT915WZtlpplLkxI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; arc=none smtp.client-ip=185.176.79.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com Received: from mail.maildlp.com (unknown [172.18.186.231]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4Xw2y95mzhz6K96r; Sat, 23 Nov 2024 02:02:57 +0800 (CST) Received: from frapeml500007.china.huawei.com (unknown [7.182.85.172]) by mail.maildlp.com (Postfix) with ESMTPS id 255B4140B3C; Sat, 23 Nov 2024 02:05:21 +0800 (CST) Received: from P_UKIT01-A7bmah.china.huawei.com (10.126.171.16) by frapeml500007.china.huawei.com (7.182.85.172) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.39; Fri, 22 Nov 2024 19:05:19 +0100 From: To: , , , , CC: , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , Subject: [PATCH v17 16/18] cxl/mbox: Add support for PERFORM_MAINTENANCE mailbox command Date: Fri, 22 Nov 2024 18:04:13 +0000 Message-ID: <20241122180416.1932-17-shiju.jose@huawei.com> X-Mailer: git-send-email 2.43.0.windows.1 In-Reply-To: <20241122180416.1932-1-shiju.jose@huawei.com> References: <20241122180416.1932-1-shiju.jose@huawei.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: lhrpeml500002.china.huawei.com (7.191.160.78) To frapeml500007.china.huawei.com (7.182.85.172) Content-Type: text/plain; charset="utf-8" From: Shiju Jose Add support for PERFORM_MAINTENANCE mailbox command. CXL spec 3.1 section 8.2.9.7.1 describes the Perform Maintenance command. This command requests the device to execute the maintenance operation specified by the maintenance operation class and the maintenance operation subclass. Reviewed-by: Jonathan Cameron Reviewed-by: Dave Jiang Signed-off-by: Shiju Jose --- drivers/cxl/core/mbox.c | 35 +++++++++++++++++++++++++++++++++++ drivers/cxl/cxlmem.h | 17 +++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/drivers/cxl/core/mbox.c b/drivers/cxl/core/mbox.c index 117205f45d7c..22e3f8ec1533 100644 --- a/drivers/cxl/core/mbox.c +++ b/drivers/cxl/core/mbox.c @@ -1085,6 +1085,41 @@ int cxl_set_feature(struct cxl_dev_state *cxlds, } EXPORT_SYMBOL_NS_GPL(cxl_set_feature, CXL); =20 +int cxl_do_maintenance(struct cxl_memdev_state *mds, + u8 class, u8 subclass, + void *data_in, size_t data_in_size) +{ + struct cxl_mailbox *cxl_mbox =3D &mds->cxlds.cxl_mbox; + struct cxl_memdev_maintenance_pi { + struct cxl_mbox_do_maintenance_hdr hdr; + u8 data[]; + } __packed; + struct cxl_mbox_cmd mbox_cmd; + size_t hdr_size; + + struct cxl_memdev_maintenance_pi *pi __free(kfree) =3D + kmalloc(cxl_mbox->payload_size, GFP_KERNEL); + pi->hdr.op_class =3D class; + pi->hdr.op_subclass =3D subclass; + hdr_size =3D sizeof(pi->hdr); + /* + * Check minimum mbox payload size is available for + * the maintenance data transfer. + */ + if (hdr_size + data_in_size > cxl_mbox->payload_size) + return -ENOMEM; + + memcpy(pi->data, data_in, data_in_size); + mbox_cmd =3D (struct cxl_mbox_cmd) { + .opcode =3D CXL_MBOX_OP_DO_MAINTENANCE, + .size_in =3D hdr_size + data_in_size, + .payload_in =3D pi, + }; + + return cxl_internal_send_cmd(cxl_mbox, &mbox_cmd); +} +EXPORT_SYMBOL_NS_GPL(cxl_do_maintenance, CXL); + /** * cxl_enumerate_cmds() - Enumerate commands for a device. * @mds: The driver data for the operation diff --git a/drivers/cxl/cxlmem.h b/drivers/cxl/cxlmem.h index 56cba1e97d65..b30e743f33fa 100644 --- a/drivers/cxl/cxlmem.h +++ b/drivers/cxl/cxlmem.h @@ -493,6 +493,7 @@ enum cxl_opcode { CXL_MBOX_OP_GET_SUPPORTED_FEATURES =3D 0x0500, CXL_MBOX_OP_GET_FEATURE =3D 0x0501, CXL_MBOX_OP_SET_FEATURE =3D 0x0502, + CXL_MBOX_OP_DO_MAINTENANCE =3D 0x0600, CXL_MBOX_OP_IDENTIFY =3D 0x4000, CXL_MBOX_OP_GET_PARTITION_INFO =3D 0x4100, CXL_MBOX_OP_SET_PARTITION_INFO =3D 0x4101, @@ -882,6 +883,19 @@ struct cxl_mbox_set_feat_hdr { u8 rsvd[9]; } __packed; =20 +/* + * Perform Maintenance CXL 3.1 Spec 8.2.9.7.1 + */ + +/* + * Perform Maintenance input payload + * CXL rev 3.1 section 8.2.9.7.1 Table 8-102 + */ +struct cxl_mbox_do_maintenance_hdr { + u8 op_class; + u8 op_subclass; +} __packed; + int cxl_internal_send_cmd(struct cxl_mailbox *cxl_mbox, struct cxl_mbox_cmd *cmd); int cxl_dev_state_identify(struct cxl_memdev_state *mds); @@ -959,4 +973,7 @@ int cxl_set_feature(struct cxl_dev_state *cxlds, const uuid_t feat_uuid, u8 feat_version, void *feat_data, size_t feat_data_size, u8 feat_flag); +int cxl_do_maintenance(struct cxl_memdev_state *mds, + u8 class, u8 subclass, + void *data_in, size_t data_in_size); #endif /* __CXL_MEM_H__ */ --=20 2.43.0