From patchwork Fri Nov 1 09:17:23 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shiju Jose X-Patchwork-Id: 13858961 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 ED55FE674BD for ; Fri, 1 Nov 2024 09:18:08 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 577376B008C; Fri, 1 Nov 2024 05:18:08 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 527376B0095; Fri, 1 Nov 2024 05:18:08 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 303FF6B0093; Fri, 1 Nov 2024 05:18:08 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id F191C6B008C for ; Fri, 1 Nov 2024 05:18:07 -0400 (EDT) Received: from smtpin05.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 7F093120ED0 for ; Fri, 1 Nov 2024 09:18:07 +0000 (UTC) X-FDA: 82736973942.05.D761B01 Received: from frasgout.his.huawei.com (frasgout.his.huawei.com [185.176.79.56]) by imf23.hostedemail.com (Postfix) with ESMTP id 472D414000A for ; Fri, 1 Nov 2024 09:17:47 +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-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1730452566; a=rsa-sha256; cv=none; b=uVppcp/eoxCYxAWocrLt+WVCX2DQ+v2gEasuk/Le/M1RSukIer6UVTgcbEX/2c+oVng6RV 28WNroLB66YXnb1OfosUlpTDMvOi6BbHHCC/dvv7Nz4J7Ms0bkU2jBgeO9peYYB3yeHcba ew+2Oqq4aVTmc2cOqS8HDnfOcq+Quco= 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-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1730452566; 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=SHSnReYGgq1REk9HyYIV5B+JDSq4P+eL3mMegWtkWyU=; b=KgPQnQCQJ8RS1eEwNu/a9uvLmY0aMMS/LFUgonG79uDzoaxO236a4xaq6SEleMxCkMlPxK dpc+vc92JX9+iJAndOG4jJHTjvQnZPkCpHgVRyAq3qkxf7U9SEicMAgYIht3KUe/F4WMM+ hYhsbuOU6YGxYDnH4WyZwUCLiJJ3kxM= Received: from mail.maildlp.com (unknown [172.18.186.231]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4XfwGc2rqvz6HJxP; Fri, 1 Nov 2024 17:16:40 +0800 (CST) Received: from frapeml500007.china.huawei.com (unknown [7.182.85.172]) by mail.maildlp.com (Postfix) with ESMTPS id C1FC1140A9C; Fri, 1 Nov 2024 17:18:03 +0800 (CST) Received: from P_UKIT01-A7bmah.china.huawei.com (10.126.171.129) 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, 1 Nov 2024 10:18:01 +0100 From: To: , , , , CC: , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , Subject: [PATCH v15 05/15] cxl/mbox: Add GET_FEATURE mailbox command Date: Fri, 1 Nov 2024 09:17:23 +0000 Message-ID: <20241101091735.1465-6-shiju.jose@huawei.com> X-Mailer: git-send-email 2.43.0.windows.1 In-Reply-To: <20241101091735.1465-1-shiju.jose@huawei.com> References: <20241101091735.1465-1-shiju.jose@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.126.171.129] X-ClientProxiedBy: lhrpeml500004.china.huawei.com (7.191.163.9) To frapeml500007.china.huawei.com (7.182.85.172) X-Rspamd-Queue-Id: 472D414000A X-Stat-Signature: ngsb3fxt69fpfs3k5rkrzsy491jrue94 X-Rspam-User: X-Rspamd-Server: rspam05 X-HE-Tag: 1730452667-41301 X-HE-Meta: U2FsdGVkX1+tcigOOYvUyFxk00PZe8g5bitpeWsrlSqCqqC0PekOogA97bsZCL5zaQmaBXR5KiFWSuYtgCirkEMyVY1t3BMSuIkotB540Jif6qipzZyIZPTSSWpDNl9ZshJg9P7zn9Nkhd5eTH9KsfZ7Z47Qi5faTmKIpAgKqoSa5x7Kpbn235NY8HYRhGxVTbcpL/rTgPdaXzC2ZdFY38GcCIYSIYMvW4FJjJ4yooY8PzldtMaPp5LLhMSnLkiDq7qd0zIPuhH0czgUCzWBxzocMritsytXxlvv9X2GE+00On9k3f408qzNRIpNB3sdVK1r8/0tifLwxGr/AZDt5KXSYmsEcSKqKkgusYn/fa5vYnjL1RO3kEo4vJM9ABiDuxMnkNYOYGByecq2jr1UK7t2PunzZaTwJzoFR594s8dI+4wfia6WTWQGWXAnzCmDMDQUdWvFwzQqWDbE1sGm3CXEZFe20aBlT+lLsuBdioF977eD0nAkt1+Pk5FpQ/a8ZHInziC918IIJX09jNPCLWJiHV9+/y3cSW2CRugcF+KKf/S7YLov/S0H2C8o1yepyi9PtHeJOG//TYc5yDKDI2yfEPL0GA/ZhJj2VK0hni2CVwbE0XbOlzbuvlDjz7piP5X0XNh9fhcEZy0AULrEUbWrSUkykClYv2qAxUra9Vfvita8BgEuwrplopjNEQhuF0RKVstI2AXuvJM9Qa+HlhnF5XUUzxBM05GtJ8+jZxVC7W79fqFWTPJFgbHncYwzcTc4856mb9/VzraRs6BVzc13J4emqhpnUkmgqPBSSIXbAGq4d+tHi+2htl7HVPnsEhBkQOXGTLrJXsIlLYjWvIZkJRdi+cc3vTuOR1Yb+Sr9emXIOFl/RVMjKM2K97keoBwgUrYKxcsTOBrM22RqusHq6xpLkHOn4Bkt71nZAs6pQxSMgmWdRXHz00sginvwrRVtSq9EgvkZbppaUHM bCxsRskV uWMx2Ntu+obk3LdcPbwtJUuhko9WyekXpbTizR23VpZDgIuCCnRPnmDvgcpsj6wbcv81l/XoSqJYxC3pN8CnN60wXiXCkXpX0G5PmPMc5pwSlq2md0HJ12JF8QpHuOi/8Oujb3EOj12hBYTlSkfwzPG5jeYuA6uOwAN595UjjoX7sSkFMhAkAUQUwZqKWalJ9sR6XettStZroWviMFnvG/QbXDfJ3JAsUEQ6xyCRZU26rremXNFv/trJ9LN08R+Rsp/AK+LCR7ETglWmezKOhKgqin6dMgo433URWircXxDsfCuTIO04/6BGdKQ== 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 GET_FEATURE mailbox command. CXL spec 3.1 section 8.2.9.6 describes optional device specific features. The settings of a feature can be retrieved using Get Feature command. CXL spec 3.1 section 8.2.9.6.2 describes Get Feature command. Reviewed-by: Fan Ni Reviewed-by: Jonathan Cameron Reviewed-by: Dave Jiang Signed-off-by: Shiju Jose --- drivers/cxl/core/mbox.c | 41 +++++++++++++++++++++++++++++++++++++++++ drivers/cxl/cxlmem.h | 26 ++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) diff --git a/drivers/cxl/core/mbox.c b/drivers/cxl/core/mbox.c index 5045960e3bfe..3cd4bce2872d 100644 --- a/drivers/cxl/core/mbox.c +++ b/drivers/cxl/core/mbox.c @@ -970,6 +970,47 @@ int cxl_get_supported_feature_entry(struct cxl_memdev_state *mds, const uuid_t * } EXPORT_SYMBOL_NS_GPL(cxl_get_supported_feature_entry, CXL); +size_t cxl_get_feature(struct cxl_memdev_state *mds, const uuid_t feat_uuid, + enum cxl_get_feat_selection selection, + void *feat_out, size_t feat_out_size) +{ + struct cxl_mailbox *cxl_mbox = &mds->cxlds.cxl_mbox; + size_t data_to_rd_size, size_out; + struct cxl_mbox_get_feat_in pi; + struct cxl_mbox_cmd mbox_cmd; + size_t data_rcvd_size = 0; + int rc; + + if (!feat_out || !feat_out_size) + return 0; + + size_out = min(feat_out_size, cxl_mbox->payload_size); + pi.uuid = feat_uuid; + pi.selection = selection; + do { + data_to_rd_size = min(feat_out_size - data_rcvd_size, + cxl_mbox->payload_size); + pi.offset = cpu_to_le16(data_rcvd_size); + pi.count = cpu_to_le16(data_to_rd_size); + + mbox_cmd = (struct cxl_mbox_cmd) { + .opcode = CXL_MBOX_OP_GET_FEATURE, + .size_in = sizeof(pi), + .payload_in = &pi, + .size_out = size_out, + .payload_out = feat_out + data_rcvd_size, + .min_out = data_to_rd_size, + }; + rc = cxl_internal_send_cmd(cxl_mbox, &mbox_cmd); + if (rc < 0 || !mbox_cmd.size_out) + return 0; + data_rcvd_size += mbox_cmd.size_out; + } while (data_rcvd_size < feat_out_size); + + return data_rcvd_size; +} +EXPORT_SYMBOL_NS_GPL(cxl_get_feature, 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 f88b10188632..0c152719669a 100644 --- a/drivers/cxl/cxlmem.h +++ b/drivers/cxl/cxlmem.h @@ -531,6 +531,7 @@ enum cxl_opcode { CXL_MBOX_OP_CLEAR_LOG = 0x0403, CXL_MBOX_OP_GET_SUP_LOG_SUBLIST = 0x0405, CXL_MBOX_OP_GET_SUPPORTED_FEATURES = 0x0500, + CXL_MBOX_OP_GET_FEATURE = 0x0501, CXL_MBOX_OP_IDENTIFY = 0x4000, CXL_MBOX_OP_GET_PARTITION_INFO = 0x4100, CXL_MBOX_OP_SET_PARTITION_INFO = 0x4101, @@ -856,6 +857,28 @@ struct cxl_mbox_get_sup_feats_out { struct cxl_feat_entry ents[] __counted_by_le(supported_feats); } __packed; +/* + * Get Feature CXL 3.1 Spec 8.2.9.6.2 + */ + +/* + * Get Feature input payload + * CXL rev 3.1 section 8.2.9.6.2 Table 8-99 + */ +enum cxl_get_feat_selection { + CXL_GET_FEAT_SEL_CURRENT_VALUE, + CXL_GET_FEAT_SEL_DEFAULT_VALUE, + CXL_GET_FEAT_SEL_SAVED_VALUE, + CXL_GET_FEAT_SEL_MAX +}; + +struct cxl_mbox_get_feat_in { + uuid_t uuid; + __le16 offset; + __le16 count; + u8 selection; +} __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); @@ -919,4 +942,7 @@ void cxl_dpa_debug(struct seq_file *file, struct cxl_dev_state *cxlds); int cxl_get_supported_features(struct cxl_memdev_state *mds); int cxl_get_supported_feature_entry(struct cxl_memdev_state *mds, const uuid_t *feat_uuid, struct cxl_feat_entry *feat_entry_out); +size_t cxl_get_feature(struct cxl_memdev_state *mds, const uuid_t feat_uuid, + enum cxl_get_feat_selection selection, + void *feat_out, size_t feat_out_size); #endif /* __CXL_MEM_H__ */