From patchwork Wed Nov 13 18:27:03 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shiju Jose X-Patchwork-Id: 13874100 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 697F7D637A3 for ; Wed, 13 Nov 2024 18:27:55 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E19736B00BB; Wed, 13 Nov 2024 13:27:54 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id DA21B6B00BC; Wed, 13 Nov 2024 13:27:54 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BCE706B00BD; Wed, 13 Nov 2024 13:27:54 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 970E16B00BB for ; Wed, 13 Nov 2024 13:27:54 -0500 (EST) Received: from smtpin04.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 4FD8A80723 for ; Wed, 13 Nov 2024 18:27:54 +0000 (UTC) X-FDA: 82781904828.04.0C2658C Received: from frasgout.his.huawei.com (frasgout.his.huawei.com [185.176.79.56]) by imf23.hostedemail.com (Postfix) with ESMTP id EE1B3140023 for ; Wed, 13 Nov 2024 18:27:23 +0000 (UTC) Authentication-Results: imf23.hostedemail.com; dkim=none; dmarc=pass (policy=quarantine) header.from=huawei.com; spf=pass (imf23.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=1731522295; 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=aoCKybD3iuDPJ8IvfBLev3im3qCPZXoQU/V3Bdmpoj0=; b=rPz0s909VKt121ravFAB0lxUHOgBc3hxFRp6y0CWE+giEBW5SQoMGFwjjsyIVPhzeJCiy2 +cAU8fg+TkgGN+Ke8zR7a822JwGveyBJDd3zZBroSk6AeULyfhOAnEo4JoSp+vDtaL1Oqv ErDQjO0DsjtLk3b6i01fTqvTLCFBi3g= ARC-Authentication-Results: i=1; imf23.hostedemail.com; dkim=none; dmarc=pass (policy=quarantine) header.from=huawei.com; spf=pass (imf23.hostedemail.com: domain of shiju.jose@huawei.com designates 185.176.79.56 as permitted sender) smtp.mailfrom=shiju.jose@huawei.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1731522295; a=rsa-sha256; cv=none; b=2ZOiQBhTAWm4RZxOs39Jq27txs880MAlmGHekHB9Og4+vCuOfril+t/6A9f8kMEIKZgeEq 9k4A45ahv3GrtNEGNlErBOPvAMb48pSYXx8yxL7UlOy86WkbjtkfFTu647NtNoLyppHzh+ nfT/xzrur0HbhjgP136k49YKHvpyZYo= Received: from mail.maildlp.com (unknown [172.18.186.216]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4XpWsN3kjtz6K6vq; Thu, 14 Nov 2024 02:24:40 +0800 (CST) Received: from frapeml500007.china.huawei.com (unknown [7.182.85.172]) by mail.maildlp.com (Postfix) with ESMTPS id 9EC4F140C72; Thu, 14 Nov 2024 02:27:50 +0800 (CST) Received: from P_UKIT01-A7bmah.china.huawei.com (10.126.168.134) 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, 13 Nov 2024 19:27:48 +0100 From: To: , , , , CC: , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , Subject: [PATCH v16 12/14] cxl/mbox: Add support for PERFORM_MAINTENANCE mailbox command Date: Wed, 13 Nov 2024 18:27:03 +0000 Message-ID: <20241113182707.656-13-shiju.jose@huawei.com> X-Mailer: git-send-email 2.43.0.windows.1 In-Reply-To: <20241113182707.656-1-shiju.jose@huawei.com> References: <20241113182707.656-1-shiju.jose@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.126.168.134] X-ClientProxiedBy: lhrpeml100011.china.huawei.com (7.191.174.247) To frapeml500007.china.huawei.com (7.182.85.172) X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: EE1B3140023 X-Stat-Signature: qhk35hydozkkw6hjyw9kdxn5mfh5jxdz X-Rspam-User: X-HE-Tag: 1731522443-129078 X-HE-Meta: U2FsdGVkX1++1YyiIcsKi4oTK+N2LBF1oLDX4AEEZmDECNRKrTiodgQNTpUPk8cr5616nc0+QG6hsaWF7PhFcTLnXsYm955Tdh9AspSCvWHLh36VuPu6J+iTqBotgsYW4jhk+hqPwofaW/0u7M5PSb06v2KYwZGTCCH1+9bHal98ey1vZLmqjGK8ezOUzDm5/vzLGCawEadUBAVVa2Ay3Clx5KhrDrEPLptmVBBiWRH9JYunP06Hk5YxvOB9ESKlr6Wms9U1ns9wO5f3fUn5tH11zFTxyC02W4QhMvjsnPrEP+jboNARhdK+bD8NEtjxuVzhT0oPvn8u+Ll1pYu0MSbIH7utxSGOfJPnxdp4HpjnmKts8V6rN6Ds4xhz7T7CGimlnZ+BuSaoXrMi+GvInzgFQI7W9fSUkUA9OCQ0Aq99wbY4ui3Ay7COtpdJCOhqQDlsC3S83yw3IIzDOWFVhqGASwIdHL0ZcGM3pd7iaJQCSm84SX2daeK1Va/WP0DP1c468so+kCRU/PTMnsWPEpiGUXAr0sVpOy3fgtJ11zrbR1H6kbHaXrVcCKPfVRYAs95XY+QdaFQtUofGFTE617vzgme+Lx30Gf+Dm6kdklcnt5NukGpWidYHMXAOMHoBUPNmmJaUl1sjJC+/fi7i426xjHW1jlqfqVCzItHRDK+6o+T0LdLBMWOYLCJZJ8v6f9NFLJCPGvBD4ZqzMuH6S/zJHr3XfcJ/JPkOwnFsbTg0S5a24ztOXcfGZCTEdbyo3K2lNj2wRB33OPj7yt9HOXS1TnBLL/EhLoQ89MkRYFDQDs8bZ90HaHMbwoTKmM6wXjd7IqMFldtZXpKLNN+YUvlvfQntvn/2vP2dNAnoxic5/oWT6hunRHpLBkSAJT5sCPBPt7vKtmtgCRenTZkzlVpfhzGEhdyd3LPpqPOmBWEviNgOjdj5gzO0m8nSz4T69BgXGkU0u9t6EyA4xim v8OvFYoO segjVutTVjIDlVCtcXX6NJDLyIA0fK/9RD9LpOtTpvYJyXbOAyJfDfLSI8NAhrIBxdnUbv4Dqddy+JrJXscEjEB5LNHUs9lN75pj90kKp8zTHb4a49SpN/G50eXXU8YnQpqGSxB560WvykaTc0rgZWCTuF9Iz4g3FPGf/bh3Q7x/qJprNsiI0yIt9ijqStxRm1mKj0ZwlradJM7BL5SYzLvCqymOQTbqm1zZIKVLOvTi4Uo62kX2kI+8hK5r7e6Z15lOYjslO32QNIDlJqaiUBVPYQLYHA7W/CMu+ 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 | 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 15089ac035ab..7afacddaff41 100644 --- a/drivers/cxl/core/mbox.c +++ b/drivers/cxl/core/mbox.c @@ -1086,6 +1086,41 @@ int cxl_set_feature(struct cxl_memdev_state *mds, } EXPORT_SYMBOL_NS_GPL(cxl_set_feature, CXL); +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 = &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) = + 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 9259c5d70a65..28290f7c89f7 100644 --- a/drivers/cxl/cxlmem.h +++ b/drivers/cxl/cxlmem.h @@ -533,6 +533,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, @@ -909,6 +910,19 @@ struct cxl_mbox_set_feat_hdr { u8 rsvd[9]; } __packed; +/* + * 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); @@ -986,4 +1000,7 @@ int cxl_set_feature(struct cxl_memdev_state *mds, 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__ */