From patchwork Thu Mar 20 18:04:42 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shiju Jose X-Patchwork-Id: 14024293 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 3FC5BC36002 for ; Thu, 20 Mar 2025 18:05:48 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 6247928000C; Thu, 20 Mar 2025 14:05:46 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 584F0280008; Thu, 20 Mar 2025 14:05:46 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3D8AE28000C; Thu, 20 Mar 2025 14:05:46 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 21B25280008 for ; Thu, 20 Mar 2025 14:05:46 -0400 (EDT) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 227F01A123D for ; Thu, 20 Mar 2025 18:05:47 +0000 (UTC) X-FDA: 83242707534.15.9C982B6 Received: from frasgout.his.huawei.com (frasgout.his.huawei.com [185.176.79.56]) by imf28.hostedemail.com (Postfix) with ESMTP id B42FAC000E for ; Thu, 20 Mar 2025 18:05:44 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=none; spf=pass (imf28.hostedemail.com: domain of shiju.jose@huawei.com designates 185.176.79.56 as permitted sender) smtp.mailfrom=shiju.jose@huawei.com; dmarc=pass (policy=quarantine) header.from=huawei.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1742493945; 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=7IGZqx0jc71bzzMXwpf7qlJUt9grYXAmtEh8cqBaXEI=; b=TooJjU6wRm2TfM/EMDD1XKcGoBdFI/rb+0Emoogx/L6IlMLAW54EMTzi8k9X2e9yyg5ntb ue9U28koKjGzRjgtKkTY4iiPCEB6qpYZx/OpxjM+k204ED2hH9sf5Hu0tF3rbvVJLvCiOU eg5j9NYHRTgeuzNpTxx+sss5lOqxLfQ= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=none; spf=pass (imf28.hostedemail.com: domain of shiju.jose@huawei.com designates 185.176.79.56 as permitted sender) smtp.mailfrom=shiju.jose@huawei.com; dmarc=pass (policy=quarantine) header.from=huawei.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1742493945; a=rsa-sha256; cv=none; b=kZimhu4ONumHwtLFIelW7zTtLGy6Hcqionb088OH/T57yZ4cD/ywV7WyZY3G/bs6Pz825n UPcFmATNcP85x+XQEaX5g7EmNL9F36BIIaXLCI8zxA90DGiDFv3HNFJc+Y/bacUwkWbwmv 64BOmxrpdcenbAbm7iCBgTWvXK9rTHM= Received: from mail.maildlp.com (unknown [172.18.186.216]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4ZJYMR6rbcz6K9Lg; Fri, 21 Mar 2025 02:02:43 +0800 (CST) Received: from frapeml500007.china.huawei.com (unknown [7.182.85.172]) by mail.maildlp.com (Postfix) with ESMTPS id 794921405A0; Fri, 21 Mar 2025 02:05:42 +0800 (CST) Received: from P_UKIT01-A7bmah.china.huawei.com (10.48.156.145) 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, 20 Mar 2025 19:05:40 +0100 From: To: , , , , , , , , , CC: , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , Subject: [PATCH v2 5/8] cxl/mbox: Add support for PERFORM_MAINTENANCE mailbox command Date: Thu, 20 Mar 2025 18:04:42 +0000 Message-ID: <20250320180450.539-6-shiju.jose@huawei.com> X-Mailer: git-send-email 2.43.0.windows.1 In-Reply-To: <20250320180450.539-1-shiju.jose@huawei.com> References: <20250320180450.539-1-shiju.jose@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.48.156.145] X-ClientProxiedBy: lhrpeml100003.china.huawei.com (7.191.160.210) To frapeml500007.china.huawei.com (7.182.85.172) X-Rspam-User: X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: B42FAC000E X-Stat-Signature: j6d8znxg7ds18joxit64rdu51ssago76 X-HE-Tag: 1742493944-598164 X-HE-Meta: U2FsdGVkX19YwPnqyGPR2M6Zj4arIGe+X9z1uV6b3K7EcBJmqDJCWIigYvMb5XuSMKf7DTfFiedoZvQ87wZYn1PdOZkT3N0PaJYsJYDX3jKGaDy8m7IX6l4RDOG7iiRiEOFFq0M+JfJU3CTsZhafTX8fOP1iJTpEaT0ju9G4wKv9OEfRadkLRz7hcl1V2kp7BpmG3SFiPXiG02/pICc+tqdb0q59/QjNf6ASJYTmCPstPaVnRTOpVj5dZY/sUMfwbE/f+pBSuvRSbbv+jn7CHpD9QJIzK5r+j4tCqaskbcmXF36h79xhd4J5rA20UFu752SqauXDVdIhykyzH9zob2zZW8qSc3/x4vIjSD0ncoP0WQMeHlTvIrYi0GqD+ySi/CQKRyltH4KESds0j8AA1xrD9ibw6D0VLukVbcalmgkO/8GSTxdJaa3b9PmtYjrxLzjnEQ1vkFBmIzrTK0zZbUgHVt6dvqz9cGX5v13qFSE8+MKegqIHrSR7H9kmTEkAO8QcbRdOpfEjE+9euj7Z2WibvIA0Q8E8iiZcMZ4QzJaewK31xcOBIc0GIwd/afiLkns4KP1VxrfXvprGJ5wYnrCvCX9TdAxm6XFMkJWWWD9b/fJwIYGPi5VgI9y9RKLvY0KFQ7bKIWVdk+kIlzP6CPtm59njx9KQKz8AQwv2I8i6A5VnoR+y+iNXFvfcJJ95kc5ZaENtrU77m9d3f41uMm7KpjKO9BNmDje8jALzSg7voNuHHCA1JZmeUlw4M6ynPCs2jM+LvZLwUo7miiEFzrjYtRIfp/D5LBL+IVsnVgmIzwIJwo8duwQrQpRWnvAQWg5ym+uHLkVbcf35vwqWcAWDmfgi989x4wM7sWkldb6tW+BjVnutKDp/nZdTN8jYANpxHsi8D1ukSsW/bqq3qPHZwQ8KQaCACOr5QgqY7jRdLDPk2FeV/PH8/Yemm6uwMq/qTmlsAbEHAWws/q0 Qt+rvQTC FO2rZDsnWVzf7/nFdLbZeUrZcbHAJ+vZHkEA7Mn84Hg8Agi4BMBp0btSFTPg/02QueyA6N/PuYqutzI1A0aljVlpQSZ6jd21flEpGE5TtjLfo17eLzdSz3Ow52C69PIgJrQj9xEnQVkOgdxeWaSd7CUOzR4qkD/Gb+PJCpzJLlZYRMzU4fYPUi6oxqRQ861U/AF4Kjf8AhhgaeFS61MMyuvaoRYvCMeYqroacysvOQljEGFnCj82ZDC562t/Q6H/p0VU6PN5Vc56rWPaVlOUpZQMQ7YlVtt/IQr24 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 11fa98cc4d9c..7ab257e0c85e 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__ */