From: Arpit Kumar <arpit1.kumar@samsung.com>
To: qemu-devel@nongnu.org
Cc: gost.dev@samsung.com, linux-cxl@vger.kernel.org,
nifan.cxl@gmail.com, dave@stgolabs.net, vishak.g@samsung.com,
krish.reddy@samsung.com, a.manzanares@samsung.com,
alok.rathore@samsung.com, Arpit Kumar <arpit1.kumar@samsung.com>
Subject: [PATCH 1/3] hw/cxl/cxl-mailbox-utils.c: Added support for Get Log Capabilities (Opcode 0402h)
Date: Mon, 3 Feb 2025 11:29:48 +0530 [thread overview]
Message-ID: <20250203055950.2126627-2-arpit1.kumar@samsung.com> (raw)
In-Reply-To: <20250203055950.2126627-1-arpit1.kumar@samsung.com>
Signed-off-by: Arpit Kumar <arpit1.kumar@samsung.com>
Reviewed-by: Alok Rathore <alok.rathore@samsung.com>
Reviewed-by: Krishna Kanth Reddy <krish.reddy@samsung.com>
---
hw/cxl/cxl-mailbox-utils.c | 55 ++++++++++++++++++++++++++++++++++++
include/hw/cxl/cxl_device.h | 31 ++++++++++++++++++++
include/hw/cxl/cxl_mailbox.h | 5 ++++
3 files changed, 91 insertions(+)
diff --git a/hw/cxl/cxl-mailbox-utils.c b/hw/cxl/cxl-mailbox-utils.c
index 9c7ea5bc35..3d66a425a9 100644
--- a/hw/cxl/cxl-mailbox-utils.c
+++ b/hw/cxl/cxl-mailbox-utils.c
@@ -76,6 +76,7 @@ enum {
LOGS = 0x04,
#define GET_SUPPORTED 0x0
#define GET_LOG 0x1
+ #define GET_LOG_CAPABILITIES 0x2
FEATURES = 0x05,
#define GET_SUPPORTED 0x0
#define GET_FEATURE 0x1
@@ -1075,6 +1076,45 @@ static CXLRetCode cmd_logs_get_log(const struct cxl_cmd *cmd,
return CXL_MBOX_SUCCESS;
}
+static int32_t valid_log_check(QemuUUID *uuid, CXLCCI *cci)
+{
+ int32_t id = -1;
+ for (int i = CEL; i < MAX_LOG_TYPE; i++) {
+ if (qemu_uuid_is_equal(uuid,
+ &cci->supported_log_cap[i].uuid)) {
+ id = i;
+ break;
+ }
+ }
+ return id;
+}
+
+/* CXL r3.1 Section 8.2.9.5.3: Get Log Capabilities (Opcode 0402h) */
+static CXLRetCode cmd_logs_get_log_capabilities(const struct cxl_cmd *cmd,
+ uint8_t *payload_in,
+ size_t len_in,
+ uint8_t *payload_out,
+ size_t *len_out,
+ CXLCCI *cci)
+{
+ int32_t cap_id;
+ struct {
+ QemuUUID uuid;
+ } QEMU_PACKED QEMU_ALIGNED(8) * get_log_capabilities_in = (void *)payload_in;
+
+ CXLParamFlags *get_log_capabilities_out = (void *)payload_out;
+
+ cap_id = valid_log_check(&get_log_capabilities_in->uuid, cci);
+ if (cap_id == -1) {
+ return CXL_MBOX_INVALID_LOG;
+ }
+
+ memcpy(get_log_capabilities_out, &cci->supported_log_cap[cap_id].param_flags.pflags,
+ sizeof(CXLParamFlags));
+ *len_out = sizeof(*get_log_capabilities_out);
+ return CXL_MBOX_SUCCESS;
+}
+
/* CXL r3.1 section 8.2.9.6: Features */
/*
* Get Supported Features output payload
@@ -2840,6 +2880,8 @@ static const struct cxl_cmd cxl_cmd_set[256][256] = {
[LOGS][GET_SUPPORTED] = { "LOGS_GET_SUPPORTED", cmd_logs_get_supported,
0, 0 },
[LOGS][GET_LOG] = { "LOGS_GET_LOG", cmd_logs_get_log, 0x18, 0 },
+ [LOGS][GET_LOG_CAPABILITIES] = { "LOGS_GET_LOG_CAPABILITIES",
+ cmd_logs_get_log_capabilities, 0x10, 0 },
[FEATURES][GET_SUPPORTED] = { "FEATURES_GET_SUPPORTED",
cmd_features_get_supported, 0x8, 0 },
[FEATURES][GET_FEATURE] = { "FEATURES_GET_FEATURE",
@@ -3084,10 +3126,23 @@ static void cxl_rebuild_cel(CXLCCI *cci)
}
}
+static const struct CXLLogCapabilities cxl_get_log_cap[MAX_LOG_TYPE] = {
+ [CEL] = {.param_flags.pflags = CXL_LOG_CAP_CLEAR | CXL_LOG_CAP_POPULATE,
+ .uuid = cel_uuid},
+};
+
+static void cxl_init_get_log(CXLCCI *cci)
+{
+ for (int set = CEL; set < MAX_LOG_TYPE; set++) {
+ cci->supported_log_cap[set] = cxl_get_log_cap[set];
+ }
+}
+
void cxl_init_cci(CXLCCI *cci, size_t payload_max)
{
cci->payload_max = payload_max;
cxl_rebuild_cel(cci);
+ cxl_init_get_log(cci);
cci->bg.complete_pct = 0;
cci->bg.starttime = 0;
diff --git a/include/hw/cxl/cxl_device.h b/include/hw/cxl/cxl_device.h
index a64739be25..e7cb99a1d2 100644
--- a/include/hw/cxl/cxl_device.h
+++ b/include/hw/cxl/cxl_device.h
@@ -164,6 +164,18 @@ typedef enum {
CXL_MBOX_MAX = 0x20
} CXLRetCode;
+/* types of logs */
+enum Logs {
+ CEL,
+ VDL,
+ CSDL,
+ ECSL,
+ MTCL,
+ MTRSL,
+ MTRLL,
+ MAX_LOG_TYPE
+};
+
typedef struct CXLCCI CXLCCI;
typedef struct cxl_device_state CXLDeviceState;
struct cxl_cmd;
@@ -194,6 +206,22 @@ typedef struct CXLEventLog {
QSIMPLEQ_HEAD(, CXLEvent) events;
} CXLEventLog;
+typedef struct CXLParamFlags {
+ union {
+ uint32_t clear_log_supported:1;
+ uint32_t populate_log_supported:1;
+ uint32_t auto_populate_supported:1;
+ uint32_t persistent_across_cold_reset:1;
+ uint32_t reserved:28;
+ uint32_t pflags;
+ };
+} CXLParamFlags;
+
+typedef struct CXLLogCapabilities {
+ CXLParamFlags param_flags;
+ QemuUUID uuid;
+} CXLLogCapabilities;
+
typedef struct CXLCCI {
struct cxl_cmd cxl_cmd_set[256][256];
struct cel_log {
@@ -202,6 +230,9 @@ typedef struct CXLCCI {
} cel_log[1 << 16];
size_t cel_size;
+ /* get log capabilities */
+ CXLLogCapabilities supported_log_cap[MAX_LOG_TYPE];
+
/* background command handling (times in ms) */
struct {
uint16_t opcode;
diff --git a/include/hw/cxl/cxl_mailbox.h b/include/hw/cxl/cxl_mailbox.h
index 9008402d1c..f3502c3f68 100644
--- a/include/hw/cxl/cxl_mailbox.h
+++ b/include/hw/cxl/cxl_mailbox.h
@@ -16,4 +16,9 @@
#define CXL_MBOX_BACKGROUND_OPERATION (1 << 6)
#define CXL_MBOX_BACKGROUND_OPERATION_ABORT (1 << 7)
+#define CXL_LOG_CAP_CLEAR 1
+#define CXL_LOG_CAP_POPULATE (1 << 1)
+#define CXL_LOG_CAP_AUTO_POPULATE (1 << 2)
+#define CXL_LOG_CAP_PERSISTENT_COLD_RESET (1 << 3)
+
#endif
--
2.34.1
next prev parent reply other threads:[~2025-02-04 6:13 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CGME20250203060050epcas5p38f556047edbdedd98b6ac2d1d496a3dc@epcas5p3.samsung.com>
2025-02-03 5:59 ` [PATCH 0/3] CXL CCI Log Commands implementation Arpit Kumar
2025-02-03 5:59 ` Arpit Kumar [this message]
2025-02-04 10:28 ` [PATCH 1/3] hw/cxl/cxl-mailbox-utils.c: Added support for Get Log Capabilities (Opcode 0402h) Jonathan Cameron
2025-02-04 10:28 ` Jonathan Cameron via
2025-02-12 11:30 ` Arpit Kumar
2025-02-12 17:15 ` Jonathan Cameron
2025-02-12 17:15 ` Jonathan Cameron via
2025-02-03 5:59 ` [PATCH 2/3] hw/cxl/cxl-mailbox-utils.c: Added support for Clear Log (Opcode 0403h) Arpit Kumar
2025-02-04 10:53 ` Jonathan Cameron
2025-02-04 10:53 ` Jonathan Cameron via
2025-02-12 11:37 ` Arpit Kumar
2025-02-03 5:59 ` [PATCH 3/3] hw/cxl/cxl-mailbox-utils.c: Added support for Populate Log (Opcode 0404h) as background operation Arpit Kumar
2025-02-04 10:58 ` Jonathan Cameron
2025-02-04 10:58 ` Jonathan Cameron via
2025-02-12 11:45 ` Arpit Kumar
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=20250203055950.2126627-2-arpit1.kumar@samsung.com \
--to=arpit1.kumar@samsung.com \
--cc=a.manzanares@samsung.com \
--cc=alok.rathore@samsung.com \
--cc=dave@stgolabs.net \
--cc=gost.dev@samsung.com \
--cc=krish.reddy@samsung.com \
--cc=linux-cxl@vger.kernel.org \
--cc=nifan.cxl@gmail.com \
--cc=qemu-devel@nongnu.org \
--cc=vishak.g@samsung.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.