From: Shiju Jose <shiju.jose@huawei.com>
To: Dave Jiang <dave.jiang@intel.com>,
"linux-cxl@vger.kernel.org" <linux-cxl@vger.kernel.org>
Cc: "dan.j.williams@intel.com" <dan.j.williams@intel.com>,
"ira.weiny@intel.com" <ira.weiny@intel.com>,
"vishal.l.verma@intel.com" <vishal.l.verma@intel.com>,
"alison.schofield@intel.com" <alison.schofield@intel.com>,
Jonathan Cameron <jonathan.cameron@huawei.com>,
"dave@stgolabs.net" <dave@stgolabs.net>,
"jgg@nvidia.com" <jgg@nvidia.com>,
"saeed@kernel.org" <saeed@kernel.org>,
Li Ming <ming.li@zohomail.com>
Subject: RE: [PATCH v6 01/14] cxl: Enumerate feature commands
Date: Thu, 20 Feb 2025 15:37:17 +0000 [thread overview]
Message-ID: <a6e14cb3fb4444b394e62baf1ed8dd23@huawei.com> (raw)
In-Reply-To: <20250218225721.2682235-2-dave.jiang@intel.com>
>-----Original Message-----
>From: Dave Jiang <dave.jiang@intel.com>
>Sent: 18 February 2025 22:55
>To: linux-cxl@vger.kernel.org
>Cc: dan.j.williams@intel.com; ira.weiny@intel.com; vishal.l.verma@intel.com;
>alison.schofield@intel.com; Jonathan Cameron
><jonathan.cameron@huawei.com>; dave@stgolabs.net; jgg@nvidia.com; Shiju
>Jose <shiju.jose@huawei.com>; saeed@kernel.org; Li Ming
><ming.li@zohomail.com>
>Subject: [PATCH v6 01/14] cxl: Enumerate feature commands
>
>Add feature commands enumeration code in order to detect and enumerate the
>3 feature related commands "get supported features", "get feature", and "set
>feature". The enumeration will help determine whether the driver can issue any
>of the 3 commands to the device.
>
>Reviewed-by: Dan Williams <dan.j.williams@intel.com>
>Reviewed-by: Li Ming <ming.li@zohomail.com>
>Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
>Signed-off-by: Dave Jiang <dave.jiang@intel.com>
Tested-by: Shiju Jose <shiju.jose@huawei.com>
>---
> drivers/cxl/core/mbox.c | 36 +++++++++++++++++++++++++++++++++++-
> drivers/cxl/cxlmem.h | 3 +++
> include/cxl/features.h | 13 +++++++++++++
> include/cxl/mailbox.h | 3 +++
> 4 files changed, 54 insertions(+), 1 deletion(-) create mode 100644
>include/cxl/features.h
>
>diff --git a/drivers/cxl/core/mbox.c b/drivers/cxl/core/mbox.c index
>9c1b9e353e3e..78c5346e3e89 100644
>--- a/drivers/cxl/core/mbox.c
>+++ b/drivers/cxl/core/mbox.c
>@@ -706,6 +706,35 @@ static int cxl_xfer_log(struct cxl_memdev_state *mds,
>uuid_t *uuid,
> return 0;
> }
>
>+static int check_features_opcodes(u16 opcode, int *ro_cmds, int
>+*wr_cmds) {
>+ switch (opcode) {
>+ case CXL_MBOX_OP_GET_SUPPORTED_FEATURES:
>+ case CXL_MBOX_OP_GET_FEATURE:
>+ (*ro_cmds)++;
>+ return 1;
>+ case CXL_MBOX_OP_SET_FEATURE:
>+ (*wr_cmds)++;
>+ return 1;
>+ default:
>+ return 0;
>+ }
>+}
>+
>+/* 'Get Supported Features' and 'Get Feature' */
>+#define MAX_FEATURES_READ_CMDS 2
>+static void set_features_cap(struct cxl_mailbox *cxl_mbox,
>+ int ro_cmds, int wr_cmds)
>+{
>+ /* Setting up Features capability while walking the CEL */
>+ if (ro_cmds == MAX_FEATURES_READ_CMDS) {
>+ if (wr_cmds)
>+ cxl_mbox->feat_cap = CXL_FEATURES_RW;
>+ else
>+ cxl_mbox->feat_cap = CXL_FEATURES_RO;
>+ }
>+}
>+
> /**
> * cxl_walk_cel() - Walk through the Command Effects Log.
> * @mds: The driver data for the operation @@ -721,7 +750,7 @@ static void
>cxl_walk_cel(struct cxl_memdev_state *mds, size_t size, u8 *cel)
> struct cxl_cel_entry *cel_entry;
> const int cel_entries = size / sizeof(*cel_entry);
> struct device *dev = mds->cxlds.dev;
>- int i;
>+ int i, ro_cmds = 0, wr_cmds = 0;
>
> cel_entry = (struct cxl_cel_entry *) cel;
>
>@@ -735,6 +764,9 @@ static void cxl_walk_cel(struct cxl_memdev_state *mds,
>size_t size, u8 *cel)
> enabled++;
> }
>
>+ enabled += check_features_opcodes(opcode, &ro_cmds,
>+ &wr_cmds);
>+
> if (cxl_is_poison_command(opcode)) {
> cxl_set_poison_cmd_enabled(&mds->poison, opcode);
> enabled++;
>@@ -748,6 +780,8 @@ static void cxl_walk_cel(struct cxl_memdev_state *mds,
>size_t size, u8 *cel)
> dev_dbg(dev, "Opcode 0x%04x %s\n", opcode,
> enabled ? "enabled" : "unsupported by driver");
> }
>+
>+ set_features_cap(cxl_mbox, ro_cmds, wr_cmds);
> }
>
> static struct cxl_mbox_get_supported_logs *cxl_get_gsl(struct
>cxl_memdev_state *mds) diff --git a/drivers/cxl/cxlmem.h
>b/drivers/cxl/cxlmem.h index a0a49809cd76..55c55685cb39 100644
>--- a/drivers/cxl/cxlmem.h
>+++ b/drivers/cxl/cxlmem.h
>@@ -490,6 +490,9 @@ enum cxl_opcode {
> CXL_MBOX_OP_GET_LOG_CAPS = 0x0402,
> 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_SET_FEATURE = 0x0502,
> CXL_MBOX_OP_IDENTIFY = 0x4000,
> CXL_MBOX_OP_GET_PARTITION_INFO = 0x4100,
> CXL_MBOX_OP_SET_PARTITION_INFO = 0x4101,
>diff --git a/include/cxl/features.h b/include/cxl/features.h new file mode 100644
>index 000000000000..357d3acf8429
>--- /dev/null
>+++ b/include/cxl/features.h
>@@ -0,0 +1,13 @@
>+/* SPDX-License-Identifier: GPL-2.0-only */
>+/* Copyright(c) 2024-2025 Intel Corporation. */ #ifndef
>+__CXL_FEATURES_H__ #define __CXL_FEATURES_H__
>+
>+/* Feature commands capability supported by a device */ enum
>+cxl_features_capability {
>+ CXL_FEATURES_NONE = 0,
>+ CXL_FEATURES_RO,
>+ CXL_FEATURES_RW,
>+};
>+
>+#endif
>diff --git a/include/cxl/mailbox.h b/include/cxl/mailbox.h index
>cc894f07a435..c4e99e2e3a9d 100644
>--- a/include/cxl/mailbox.h
>+++ b/include/cxl/mailbox.h
>@@ -3,6 +3,7 @@
> #ifndef __CXL_MBOX_H__
> #define __CXL_MBOX_H__
> #include <linux/rcuwait.h>
>+#include <cxl/features.h>
> #include <uapi/linux/cxl_mem.h>
>
> /**
>@@ -51,6 +52,7 @@ struct cxl_mbox_cmd {
> * @mbox_mutex: mutex protects device mailbox and firmware
> * @mbox_wait: rcuwait for mailbox
> * @mbox_send: @dev specific transport for transmitting mailbox commands
>+ * @feat_cap: Features capability
> */
> struct cxl_mailbox {
> struct device *host;
>@@ -60,6 +62,7 @@ struct cxl_mailbox {
> struct mutex mbox_mutex; /* lock to protect mailbox context */
> struct rcuwait mbox_wait;
> int (*mbox_send)(struct cxl_mailbox *cxl_mbox, struct cxl_mbox_cmd
>*cmd);
>+ enum cxl_features_capability feat_cap;
> };
>
> int cxl_mailbox_init(struct cxl_mailbox *cxl_mbox, struct device *host);
>--
>2.48.1
next prev parent reply other threads:[~2025-02-20 15:37 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-18 22:54 [PATCH v6 00/14] cxl: Add CXL feature commands support via fwctl Dave Jiang
2025-02-18 22:54 ` [PATCH v6 01/14] cxl: Enumerate feature commands Dave Jiang
2025-02-20 15:37 ` Shiju Jose [this message]
2025-02-18 22:54 ` [PATCH v6 02/14] cxl: Add Get Supported Features command for kernel usage Dave Jiang
2025-02-20 15:37 ` Shiju Jose
2025-02-18 22:54 ` [PATCH v6 03/14] cxl/test: Add Get Supported Features mailbox command support Dave Jiang
2025-02-18 22:54 ` [PATCH v6 04/14] cxl/mbox: Add GET_FEATURE mailbox command Dave Jiang
2025-02-18 22:54 ` [PATCH v6 05/14] cxl/mbox: Add SET_FEATURE " Dave Jiang
2025-02-18 22:54 ` [PATCH v6 06/14] cxl: Setup exclusive CXL features that are reserved for the kernel Dave Jiang
2025-02-20 15:37 ` Shiju Jose
2025-02-18 22:54 ` [PATCH v6 07/14] cxl: Add FWCTL support to CXL Dave Jiang
2025-02-19 7:25 ` Li Ming
2025-02-19 17:09 ` Jonathan Cameron
2025-02-18 22:54 ` [PATCH v6 08/14] cxl: Move cxl feature command structs to user header Dave Jiang
2025-02-19 7:26 ` Li Ming
2025-02-18 22:54 ` [PATCH v6 09/14] cxl: Add support for fwctl RPC command to enable CXL feature commands Dave Jiang
2025-02-19 7:27 ` Li Ming
2025-02-19 17:53 ` Jonathan Cameron
2025-02-19 17:56 ` Jason Gunthorpe
2025-02-19 18:00 ` Dave Jiang
2025-02-19 18:29 ` Dave Jiang
2025-02-18 22:54 ` [PATCH v6 10/14] cxl: Add support to handle user feature commands for get feature Dave Jiang
2025-02-19 17:57 ` Jonathan Cameron
2025-02-18 22:54 ` [PATCH v6 11/14] cxl: Add support to handle user feature commands for set feature Dave Jiang
2025-02-19 18:12 ` Jonathan Cameron
2025-02-19 18:31 ` Dave Jiang
2025-02-18 22:54 ` [PATCH v6 12/14] cxl/test: Add Get Feature support to cxl_test Dave Jiang
2025-02-18 22:54 ` [PATCH v6 13/14] cxl/test: Add Set " Dave Jiang
2025-02-18 22:54 ` [PATCH v6 14/14] fwctl/cxl: Add documentation to FWCTL CXL Dave Jiang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=a6e14cb3fb4444b394e62baf1ed8dd23@huawei.com \
--to=shiju.jose@huawei.com \
--cc=alison.schofield@intel.com \
--cc=dan.j.williams@intel.com \
--cc=dave.jiang@intel.com \
--cc=dave@stgolabs.net \
--cc=ira.weiny@intel.com \
--cc=jgg@nvidia.com \
--cc=jonathan.cameron@huawei.com \
--cc=linux-cxl@vger.kernel.org \
--cc=ming.li@zohomail.com \
--cc=saeed@kernel.org \
--cc=vishal.l.verma@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox