From patchwork Thu Feb 27 22:38:11 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shiju Jose X-Patchwork-Id: 13995267 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0C365C1B087 for ; Thu, 27 Feb 2025 22:39:36 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 6B500280009; Thu, 27 Feb 2025 17:39:33 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 6633D280001; Thu, 27 Feb 2025 17:39:33 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 52B09280009; Thu, 27 Feb 2025 17:39:33 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 35485280001 for ; Thu, 27 Feb 2025 17:39:33 -0500 (EST) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id DC846523EC for ; Thu, 27 Feb 2025 22:39:32 +0000 (UTC) X-FDA: 83167192584.03.13EE899 Received: from frasgout.his.huawei.com (frasgout.his.huawei.com [185.176.79.56]) by imf11.hostedemail.com (Postfix) with ESMTP id F2BE540006 for ; Thu, 27 Feb 2025 22:39:30 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=none; dmarc=pass (policy=quarantine) header.from=huawei.com; spf=pass (imf11.hostedemail.com: domain of shiju.jose@huawei.com designates 185.176.79.56 as permitted sender) smtp.mailfrom=shiju.jose@huawei.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1740695971; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=cSb5B6pyxQRYWyN2Z3OtHVRtU308BYr28tom9rE9pcI=; b=dn4vJjoHLLlV3UaMrL2aRZMUZ/wOq4e7oGGmL2e+vPMqC/zv9fElR8PnTlsaN8FVDVWwFY IAAgsjre0wyosotW5L+/utgjszjSCCs9OIyfOjAmUjFC9Bqy39lgHjO4UNRyU11aBKYmyS oU9YvjJcmiVvZ2F2eXgzgYBQry97EJw= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1740695971; a=rsa-sha256; cv=none; b=GY4Leph1t8svUxLCLiUddaLQPFlmDduDeby4Ik0uRRTUFa/ieVNQDTQJxo56Gk3N/Mk692 sJ/5XfsKiPyuALdEZA89xSW+0JCcql0o6NAuZ8/8WssGFjjGtaN4RJPkKOIjCAcFNYCIRg 1rJPVAhsJXsOpPfWSq/ESSkCh2vtq6c= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=none; dmarc=pass (policy=quarantine) header.from=huawei.com; spf=pass (imf11.hostedemail.com: domain of shiju.jose@huawei.com designates 185.176.79.56 as permitted sender) smtp.mailfrom=shiju.jose@huawei.com Received: from mail.maildlp.com (unknown [172.18.186.31]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4Z3mQ42Zcfz6L53c; Fri, 28 Feb 2025 06:35:40 +0800 (CST) Received: from frapeml500007.china.huawei.com (unknown [7.182.85.172]) by mail.maildlp.com (Postfix) with ESMTPS id 3ABB71404F5; Fri, 28 Feb 2025 06:39:29 +0800 (CST) Received: from P_UKIT01-A7bmah.china.huawei.com (10.48.149.240) 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; Thu, 27 Feb 2025 23:39:26 +0100 From: To: , , , , , , , , , CC: , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , Subject: [PATCH 4/8] cxl/mbox: Add support for PERFORM_MAINTENANCE mailbox command Date: Thu, 27 Feb 2025 22:38:11 +0000 Message-ID: <20250227223816.2036-5-shiju.jose@huawei.com> X-Mailer: git-send-email 2.43.0.windows.1 In-Reply-To: <20250227223816.2036-1-shiju.jose@huawei.com> References: <20250227223816.2036-1-shiju.jose@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.48.149.240] X-ClientProxiedBy: lhrpeml500011.china.huawei.com (7.191.174.215) To frapeml500007.china.huawei.com (7.182.85.172) X-Rspamd-Server: rspam02 X-Stat-Signature: 6dzrxpnxtf33rq65kugxikw9iwiub8xb X-Rspamd-Queue-Id: F2BE540006 X-Rspam-User: X-HE-Tag: 1740695970-960789 X-HE-Meta: U2FsdGVkX1/jmG3JCSPCALaqcdBjRemj/0w8KxZ215dpTLimtyAzXuKXIGroN/BollaXldXfwZazmpLvC4WFaoUODSiqv1+j1CL1xVKCOJQGww52GtnOmTYfohbBLYieD81JUfb4ZAfpAJciZA8A2LMGK0/znUJKDsUrQ+wYwg1FrjkdAYSEWqmdlVyQ/Oqa/2pc9h9AADpNedBISWRHYvHL7DSp3p6d915t9NGZeihPuZvj1pb1u9384YMzslttVx8sKKozWfvYqdJP5d05My9aLlsbnksRj3u+c/lIED5BK5E0725yZC9zAtxplhp3GyPDDyFmWdmnqIiwiQiun4dP4zs3TiXVFsc2OHVr9773+59XEQze4VA08numZ4NYt8uwHcePEw8V2lZd1Eud4OPL5XXdWqm7HSfDN6wzQ8tL10PLWK9DkmburAavvCX2otg0p7CjYrc3YcSxZtSjMBJWZbx7pCWtj37120rumaO2MviMJFdlJl1BifnSrIyl7Z6NuDQvAftGCJ3K/xp3hySVJCWQ6013hED1rBnWlBQwJR9xzGrXkrYoFW0BiNEP8kpT/+ZHHxx8WZFnGvFvRZDRmTYG3dusSBvqCfHkyiwefByRkVXNGQ00ZQ49fOKu14NCxJi+Un/yvWJd84Jh12lvq8H7w9pWeZwxFoORUKoQFn88e2LWjRqVWiawd2OuGrx8fvqc6OMTaHyq2ji0j8rozyp3v3r8K8a8mLRzuaWunAFzDvuK55Hd88iye6yuuR4Tb2m0twdABdyfBVCK7hMkR0CG8C+gDOLo03DuORa98WetkQqncDBOtloAPBIMbBDV5xSVK4T7qRrBss0dFU0uWWON5ms5USMoTySJPiCLOT56/SWd8zUtr9TFn1HjKsmQvWCfNLjRziXl1h5J5+wVoe0dVbR4tG9hqXlItLXxBpM9ZhohpgJaNkgTEBHSBBAEOhDzpASYJvYFgfv ovRUwn3k 8aCxADqDS9Qk2qNfmpg778pEcMfQPOek9ADFZXiOguGS+IoxZN3uA59wia2NRV1VHuSj32GsyZdbBa1H8oVJT22l05VgYw5E+96+lmfqVV2hVYEj8Je46V98EM+Ek5rtnDtC5rbh+1IIjGQ4jL9ntDqwfLtZEYIpxc6ampvEftXT9+YsvOH1JH6Wn3CcD7xUBhU6mBe1qCBe8IILn5oHd02ayqphrl9EMLA39OIguElkzwt2eCyidbeTGmQAAIpOLzcuQgtVjtpyn/Wi4/QLzBelfPC1tqHShq02o X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: From: Shiju Jose Add support for PERFORM_MAINTENANCE mailbox command. CXL spec 3.2 section 8.2.10.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 | 34 ++++++++++++++++++++++++++++++++++ drivers/cxl/cxlmem.h | 17 +++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/drivers/cxl/core/mbox.c b/drivers/cxl/core/mbox.c index d72764056ce6..19d46a284650 100644 --- a/drivers/cxl/core/mbox.c +++ b/drivers/cxl/core/mbox.c @@ -824,6 +824,40 @@ static const uuid_t log_uuid[] = { [VENDOR_DEBUG_UUID] = DEFINE_CXL_VENDOR_DEBUG_UUID, }; +int cxl_do_maintenance(struct cxl_mailbox *cxl_mbox, + u8 class, u8 subclass, + void *data_in, size_t data_in_size) +{ + 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) = + kmalloc(cxl_mbox->payload_size, GFP_KERNEL); + pi->hdr.op_class = class; + pi->hdr.op_subclass = subclass; + hdr_size = 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 = (struct cxl_mbox_cmd) { + .opcode = CXL_MBOX_OP_DO_MAINTENANCE, + .size_in = hdr_size + data_in_size, + .payload_in = 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 a08405f94a30..642ce976dcee 100644 --- a/drivers/cxl/cxlmem.h +++ b/drivers/cxl/cxlmem.h @@ -527,6 +527,7 @@ enum cxl_opcode { CXL_MBOX_OP_GET_SUPPORTED_FEATURES = 0x0500, CXL_MBOX_OP_GET_FEATURE = 0x0501, CXL_MBOX_OP_SET_FEATURE = 0x0502, + CXL_MBOX_OP_DO_MAINTENANCE = 0x0600, CXL_MBOX_OP_IDENTIFY = 0x4000, CXL_MBOX_OP_GET_PARTITION_INFO = 0x4100, CXL_MBOX_OP_SET_PARTITION_INFO = 0x4101, @@ -827,6 +828,19 @@ enum { CXL_PMEM_SEC_PASS_USER, }; +/* + * Perform Maintenance CXL 3.2 Spec 8.2.10.7.1 + */ + +/* + * Perform Maintenance input payload + * CXL rev 3.2 section 8.2.10.7.1 Table 8-117 + */ +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); @@ -898,4 +912,7 @@ struct cxl_hdm { struct seq_file; struct dentry *cxl_debugfs_create_dir(const char *dir); void cxl_dpa_debug(struct seq_file *file, struct cxl_dev_state *cxlds); +int cxl_do_maintenance(struct cxl_mailbox *cxl_mbox, + u8 class, u8 subclass, + void *data_in, size_t data_in_size); #endif /* __CXL_MEM_H__ */