From patchwork Wed Feb 12 14:36:48 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shiju Jose X-Patchwork-Id: 13971484 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 8885AC021AD for ; Wed, 12 Feb 2025 14:37:48 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 4E288280009; Wed, 12 Feb 2025 09:37:46 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 46B00280001; Wed, 12 Feb 2025 09:37:46 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 2E4D9280009; Wed, 12 Feb 2025 09:37:46 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 0849F280001 for ; Wed, 12 Feb 2025 09:37:46 -0500 (EST) Received: from smtpin10.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id AE009A1E9E for ; Wed, 12 Feb 2025 14:37:45 +0000 (UTC) X-FDA: 83111546490.10.870736C Received: from frasgout.his.huawei.com (frasgout.his.huawei.com [185.176.79.56]) by imf21.hostedemail.com (Postfix) with ESMTP id ADC301C0015 for ; Wed, 12 Feb 2025 14:37:43 +0000 (UTC) Authentication-Results: imf21.hostedemail.com; dkim=none; spf=pass (imf21.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=1739371064; 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=yc5Un25ORIjWSmuaoisAeECK/F5eQGOylqMvhSzPvvw=; b=UTSKGzrymv2bhxoOh8/ZiAIf8cs9bX58XqK6338nYlqMBH5kRy8ktyLn1WpgZEWl22SqzO VS/IuyFV2mC100lE+jh8odPzUCqtCJNChtjOxa+5BgDTXpj0vxfSRfssnioNbQO73hAH22 VXhlc/OPq0hvQT2vGZOIFZGcktwO9M0= ARC-Authentication-Results: i=1; imf21.hostedemail.com; dkim=none; spf=pass (imf21.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=1739371064; a=rsa-sha256; cv=none; b=z1XDXytXwQgrlnoWOwqn/qOgo9dzskW0RO9OUZHlvC6/ale8ZqRTivDdzKQu82awMl91Kh Pv++YwWt5h6vyZlOfGPfX+NkEQcTSIg5ZkLVjQhJMgyKjVBLWqAHtWT4iHKF1Z3Mi04DY9 9bWzQlfelX36jXcvgHdgZ44qsu675c4= Received: from mail.maildlp.com (unknown [172.18.186.216]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4YtLSh484wz6J7fw; Wed, 12 Feb 2025 22:35:16 +0800 (CST) Received: from frapeml500007.china.huawei.com (unknown [7.182.85.172]) by mail.maildlp.com (Postfix) with ESMTPS id EAE50140B2A; Wed, 12 Feb 2025 22:37:41 +0800 (CST) Received: from P_UKIT01-A7bmah.china.huawei.com (10.126.169.206) 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; Wed, 12 Feb 2025 15:37:39 +0100 From: To: , , , , CC: , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , Subject: [PATCH v20 10/15] cxl/mbox: Add support for PERFORM_MAINTENANCE mailbox command Date: Wed, 12 Feb 2025 14:36:48 +0000 Message-ID: <20250212143654.1893-11-shiju.jose@huawei.com> X-Mailer: git-send-email 2.43.0.windows.1 In-Reply-To: <20250212143654.1893-1-shiju.jose@huawei.com> References: <20250212143654.1893-1-shiju.jose@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.126.169.206] X-ClientProxiedBy: lhrpeml100003.china.huawei.com (7.191.160.210) To frapeml500007.china.huawei.com (7.182.85.172) X-Rspam-User: X-Rspamd-Queue-Id: ADC301C0015 X-Stat-Signature: rgmwtsfdyjajyinr1b15zjgcs85dkzq5 X-Rspamd-Server: rspam03 X-HE-Tag: 1739371063-622158 X-HE-Meta: U2FsdGVkX19ONMZZwMyPnrYlcZw2VRUSuCd1Sj6ier+QyRCHOyMY4uC5lic9X1duyBRXiLN1+wfXTC5ifETrweU9uUqsMlnxhzOKICkYRywEiJP92OnZvGKemwttkQ0vVnCTx8henfG9sYv94sRCLNm32i1bYq9dOdiM8c7wloNks0LE5uuOS4OPItaU/4AASi2z0KOXuz4lI2QSXpRYN9IrLxU1k0nX9ahBHlT0GrGERFfzUBhHxpShcIlwhNRTbfykPMWdUJxaXk6Fy485TO3eimtZWaEdJtcpS7CsXg5Ielh5ZyyrrUCsv6StksNN6J13Q2WNGF0nVWw21gv6ASjlYITpzGPDicqOOivMBWLemKd7FK/SRgHYyRt5r3OoG8MYzlKE/vBxtl8KnQwyl+5n6mTUx10nfMvnx0rOm/AsiRB+1j4P87+6uaILIGOgS3wozYu5VO+W0TV2VqaVw8YgpImST4aHdTsOb5XDecQI9/SPdpsHUFZhB6EDpNIuhkQ+/7Lahcx+LUiVUvkWiqvawMBa/v8+Hmf51c0NF3B4ufjWuap8I46i8yGttwGTQ2eU2iOXvNb6UnugOw1K6a+rgdxefbGH0h/Ui8/r/aYnvNHMfP0sb7rRZFZbdx/To9yo6PAc39SN4ZTmEZL4lGwkGZmxbiwqim3giE+FpGKr/FjZuoaRYuslsHNuPp9NmveyHb2kHX0gpZPMU66nyOakMFCmb2sqgITx9gUW8vUYIymsElviuoWuv6JQYXEURivxFdf9pJRrN4pkvXJISuczHvpskRlu3BYlQFqTUELLDTbV0uDPKKij+CkH05qvuBKn4kz711owOYtsH3iHfj5A1rUgZIgzSfGOPnERW5TfOxnF4Q3VmR5UCKaCnx65MIB/6sW2aIXqIxONEHK/mbM9ldv0gKvnLsWY+JOgte/n2ziYPR0kAFNjRMEJuLLTvWVVz8uzXzYr+GL8c+I ryaGrTgq 1yfWaYl8rYP6rlR5Z5zLDYLb2gv4XhUQSOURVAG5YOs+Z9oYaLr5u/otQsxea1sssfbLbo6WTRY3qxqMRYqPa8cYRpP1eUVQ92dMZ4LQieWoBUxtwlggRVxPt3+uAL7jvPwppUSWX4zQmmBUlZoPDvZqy/SG2OgxA9lQQql4fuEEtBDWEsSA1qKE4rAB02gNqNvO3opOa88oc+Ff/XUGgLTxSRVHSMmpWvrL2HGoje713ZgMRaCuhqvmBxGoo58RxUFdqr+7noFDF/q126RBotAimD+iazR+9EUEo 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.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 | 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 78c5346e3e89..9984a0c8b531 100644 --- a/drivers/cxl/core/mbox.c +++ b/drivers/cxl/core/mbox.c @@ -823,6 +823,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 1aa48fc7bbc2..657dc203d2fb 100644 --- a/drivers/cxl/cxlmem.h +++ b/drivers/cxl/cxlmem.h @@ -497,6 +497,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, @@ -780,6 +781,19 @@ enum { CXL_PMEM_SEC_PASS_USER, }; +/* + * 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); @@ -849,4 +863,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__ */