Skip to content

Commit ae83413

Browse files
shijujose4davejiang
authored andcommitted
cxl/events: Update General Media Event Record to CXL spec rev 3.1
CXL spec rev 3.1 section 8.2.9.2.1.1 Table 8-45, General Media Event Record has updated with following new fields and new types for Memory Event Type and Transaction Type fields. 1. Advanced Programmable Corrected Memory Error Threshold Event Flags 2. Corrected Memory Error Count at Event 3. Memory Event Sub-Type The format of component identifier has changed (CXL spec 3.1 section 8.2.9.2.1 Table 8-44). Update the general media event record and general media trace event for the above spec changes. The new fields are inserted in logical places. Example trace log of cxl_general_media trace event, cxl_general_media: memdev=mem0 host=0000:0f:00.0 serial=3 log=Fatal : \ time=156831237413 uuid=fbcd0a77-c260-417f-85a9-088b1621eba6 len=128 \ flags='0x1' handle=1 related_handle=0 maint_op_class=2 \ maint_op_sub_class=4 : dpa=30d40 dpa_flags='' \ descriptor='UNCORRECTABLE_EVENT|THRESHOLD_EVENT|POISON_LIST_OVERFLOW' \ type='TE State Violation' sub_type='Media Link Command Training Error' \ transaction_type='Host Inject Poison' channel=3 rank=33 device=5 \ validity_flags='CHANNEL|RANK|DEVICE|COMPONENT|COMPONENT PLDM FORMAT' \ comp_id=03 74 c5 08 9a 1a 0b fc d2 7e 2f 31 9b 3c 81 4d \ comp_id_pldm_valid_flags='PLDM Entity ID | Resource ID' \ pldm_entity_id=74 c5 08 9a 1a 0b pldm_resource_id=fc d2 7e 2f \ hpa=ffffffffffffffff region= \ region_uuid=00000000-0000-0000-0000-000000000000 \ cme_threshold_ev_flags='Corrected Memory Errors in Multiple Media \ Components|Exceeded Programmable Threshold' cme_count=120 Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Reviewed-by: Davidlohr Bueso <dave@stgolabs.net> Reviewed-by: Ira Weiny <ira.weiny@intel.com> Signed-off-by: Shiju Jose <shiju.jose@huawei.com> Link: https://patch.msgid.link/20250111091756.1682-4-shiju.jose@huawei.com Signed-off-by: Dave Jiang <dave.jiang@intel.com>
1 parent 8166675 commit ae83413

File tree

2 files changed

+83
-14
lines changed

2 files changed

+83
-14
lines changed

drivers/cxl/core/trace.h

Lines changed: 78 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,7 @@ TRACE_EVENT(cxl_generic_event,
292292

293293
/*
294294
* General Media Event Record - GMER
295-
* CXL rev 3.0 Section 8.2.9.2.1.1; Table 8-43
295+
* CXL rev 3.1 Section 8.2.9.2.1.1; Table 8-45
296296
*/
297297
#define CXL_GMER_EVT_DESC_UNCORECTABLE_EVENT BIT(0)
298298
#define CXL_GMER_EVT_DESC_THRESHOLD_EVENT BIT(1)
@@ -306,10 +306,18 @@ TRACE_EVENT(cxl_generic_event,
306306
#define CXL_GMER_MEM_EVT_TYPE_ECC_ERROR 0x00
307307
#define CXL_GMER_MEM_EVT_TYPE_INV_ADDR 0x01
308308
#define CXL_GMER_MEM_EVT_TYPE_DATA_PATH_ERROR 0x02
309-
#define show_gmer_mem_event_type(type) __print_symbolic(type, \
310-
{ CXL_GMER_MEM_EVT_TYPE_ECC_ERROR, "ECC Error" }, \
311-
{ CXL_GMER_MEM_EVT_TYPE_INV_ADDR, "Invalid Address" }, \
312-
{ CXL_GMER_MEM_EVT_TYPE_DATA_PATH_ERROR, "Data Path Error" } \
309+
#define CXL_GMER_MEM_EVT_TYPE_TE_STATE_VIOLATION 0x03
310+
#define CXL_GMER_MEM_EVT_TYPE_SCRUB_MEDIA_ECC_ERROR 0x04
311+
#define CXL_GMER_MEM_EVT_TYPE_AP_CME_COUNTER_EXPIRE 0x05
312+
#define CXL_GMER_MEM_EVT_TYPE_CKID_VIOLATION 0x06
313+
#define show_gmer_mem_event_type(type) __print_symbolic(type, \
314+
{ CXL_GMER_MEM_EVT_TYPE_ECC_ERROR, "ECC Error" }, \
315+
{ CXL_GMER_MEM_EVT_TYPE_INV_ADDR, "Invalid Address" }, \
316+
{ CXL_GMER_MEM_EVT_TYPE_DATA_PATH_ERROR, "Data Path Error" }, \
317+
{ CXL_GMER_MEM_EVT_TYPE_TE_STATE_VIOLATION, "TE State Violation" }, \
318+
{ CXL_GMER_MEM_EVT_TYPE_SCRUB_MEDIA_ECC_ERROR, "Scrub Media ECC Error" }, \
319+
{ CXL_GMER_MEM_EVT_TYPE_AP_CME_COUNTER_EXPIRE, "Adv Prog CME Counter Expiration" }, \
320+
{ CXL_GMER_MEM_EVT_TYPE_CKID_VIOLATION, "CKID Violation" } \
313321
)
314322

315323
#define CXL_GMER_TRANS_UNKNOWN 0x00
@@ -319,25 +327,66 @@ TRACE_EVENT(cxl_generic_event,
319327
#define CXL_GMER_TRANS_HOST_INJECT_POISON 0x04
320328
#define CXL_GMER_TRANS_INTERNAL_MEDIA_SCRUB 0x05
321329
#define CXL_GMER_TRANS_INTERNAL_MEDIA_MANAGEMENT 0x06
330+
#define CXL_GMER_TRANS_INTERNAL_MEDIA_ECS 0x07
331+
#define CXL_GMER_TRANS_MEDIA_INITIALIZATION 0x08
322332
#define show_trans_type(type) __print_symbolic(type, \
323333
{ CXL_GMER_TRANS_UNKNOWN, "Unknown" }, \
324334
{ CXL_GMER_TRANS_HOST_READ, "Host Read" }, \
325335
{ CXL_GMER_TRANS_HOST_WRITE, "Host Write" }, \
326336
{ CXL_GMER_TRANS_HOST_SCAN_MEDIA, "Host Scan Media" }, \
327337
{ CXL_GMER_TRANS_HOST_INJECT_POISON, "Host Inject Poison" }, \
328338
{ CXL_GMER_TRANS_INTERNAL_MEDIA_SCRUB, "Internal Media Scrub" }, \
329-
{ CXL_GMER_TRANS_INTERNAL_MEDIA_MANAGEMENT, "Internal Media Management" } \
339+
{ CXL_GMER_TRANS_INTERNAL_MEDIA_MANAGEMENT, "Internal Media Management" }, \
340+
{ CXL_GMER_TRANS_INTERNAL_MEDIA_ECS, "Internal Media Error Check Scrub" }, \
341+
{ CXL_GMER_TRANS_MEDIA_INITIALIZATION, "Media Initialization" } \
330342
)
331343

332344
#define CXL_GMER_VALID_CHANNEL BIT(0)
333345
#define CXL_GMER_VALID_RANK BIT(1)
334346
#define CXL_GMER_VALID_DEVICE BIT(2)
335347
#define CXL_GMER_VALID_COMPONENT BIT(3)
348+
#define CXL_GMER_VALID_COMPONENT_ID_FORMAT BIT(4)
336349
#define show_valid_flags(flags) __print_flags(flags, "|", \
337350
{ CXL_GMER_VALID_CHANNEL, "CHANNEL" }, \
338351
{ CXL_GMER_VALID_RANK, "RANK" }, \
339352
{ CXL_GMER_VALID_DEVICE, "DEVICE" }, \
340-
{ CXL_GMER_VALID_COMPONENT, "COMPONENT" } \
353+
{ CXL_GMER_VALID_COMPONENT, "COMPONENT" }, \
354+
{ CXL_GMER_VALID_COMPONENT_ID_FORMAT, "COMPONENT PLDM FORMAT" } \
355+
)
356+
357+
#define CXL_GMER_CME_EV_FLAG_CME_MULTIPLE_MEDIA BIT(0)
358+
#define CXL_GMER_CME_EV_FLAG_THRESHOLD_EXCEEDED BIT(1)
359+
#define show_cme_threshold_ev_flags(flags) __print_flags(flags, "|", \
360+
{ \
361+
CXL_GMER_CME_EV_FLAG_CME_MULTIPLE_MEDIA, \
362+
"Corrected Memory Errors in Multiple Media Components" \
363+
}, { \
364+
CXL_GMER_CME_EV_FLAG_THRESHOLD_EXCEEDED, \
365+
"Exceeded Programmable Threshold" \
366+
} \
367+
)
368+
369+
#define CXL_GMER_MEM_EVT_SUB_TYPE_NOT_REPORTED 0x00
370+
#define CXL_GMER_MEM_EVT_SUB_TYPE_INTERNAL_DATAPATH_ERROR 0x01
371+
#define CXL_GMER_MEM_EVT_SUB_TYPE_MEDIA_LINK_COMMAND_TRAINING_ERROR 0x02
372+
#define CXL_GMER_MEM_EVT_SUB_TYPE_MEDIA_LINK_CONTROL_TRAINING_ERROR 0x03
373+
#define CXL_GMER_MEM_EVT_SUB_TYPE_MEDIA_LINK_DATA_TRAINING_ERROR 0x04
374+
#define CXL_GMER_MEM_EVT_SUB_TYPE_MEDIA_LINK_CRC_ERROR 0x05
375+
#define show_mem_event_sub_type(sub_type) __print_symbolic(sub_type, \
376+
{ CXL_GMER_MEM_EVT_SUB_TYPE_NOT_REPORTED, "Not Reported" }, \
377+
{ CXL_GMER_MEM_EVT_SUB_TYPE_INTERNAL_DATAPATH_ERROR, "Internal Datapath Error" }, \
378+
{ \
379+
CXL_GMER_MEM_EVT_SUB_TYPE_MEDIA_LINK_COMMAND_TRAINING_ERROR, \
380+
"Media Link Command Training Error" \
381+
}, { \
382+
CXL_GMER_MEM_EVT_SUB_TYPE_MEDIA_LINK_CONTROL_TRAINING_ERROR, \
383+
"Media Link Control Training Error" \
384+
}, { \
385+
CXL_GMER_MEM_EVT_SUB_TYPE_MEDIA_LINK_DATA_TRAINING_ERROR, \
386+
"Media Link Data Training Error" \
387+
}, { \
388+
CXL_GMER_MEM_EVT_SUB_TYPE_MEDIA_LINK_CRC_ERROR, "Media Link CRC Error" \
389+
} \
341390
)
342391

343392
TRACE_EVENT(cxl_general_media,
@@ -363,6 +412,9 @@ TRACE_EVENT(cxl_general_media,
363412
__field(u16, validity_flags)
364413
__field(u8, rank)
365414
__field(u8, dpa_flags)
415+
__field(u32, cme_count)
416+
__field(u8, sub_type)
417+
__field(u8, cme_threshold_ev_flags)
366418
__string(region_name, cxlr ? dev_name(&cxlr->dev) : "")
367419
),
368420

@@ -377,6 +429,7 @@ TRACE_EVENT(cxl_general_media,
377429
__entry->dpa &= CXL_DPA_MASK;
378430
__entry->descriptor = rec->media_hdr.descriptor;
379431
__entry->type = rec->media_hdr.type;
432+
__entry->sub_type = rec->sub_type;
380433
__entry->transaction_type = rec->media_hdr.transaction_type;
381434
__entry->channel = rec->media_hdr.channel;
382435
__entry->rank = rec->media_hdr.rank;
@@ -392,20 +445,33 @@ TRACE_EVENT(cxl_general_media,
392445
__assign_str(region_name);
393446
uuid_copy(&__entry->region_uuid, &uuid_null);
394447
}
448+
__entry->cme_threshold_ev_flags = rec->cme_threshold_ev_flags;
449+
__entry->cme_count = get_unaligned_le24(rec->cme_count);
395450
),
396451

397452
CXL_EVT_TP_printk("dpa=%llx dpa_flags='%s' " \
398-
"descriptor='%s' type='%s' transaction_type='%s' channel=%u rank=%u " \
399-
"device=%x comp_id=%s validity_flags='%s' " \
400-
"hpa=%llx region=%s region_uuid=%pUb",
453+
"descriptor='%s' type='%s' sub_type='%s' " \
454+
"transaction_type='%s' channel=%u rank=%u " \
455+
"device=%x validity_flags='%s' " \
456+
"comp_id=%s comp_id_pldm_valid_flags='%s' " \
457+
"pldm_entity_id=%s pldm_resource_id=%s " \
458+
"hpa=%llx region=%s region_uuid=%pUb " \
459+
"cme_threshold_ev_flags='%s' cme_count=%u",
401460
__entry->dpa, show_dpa_flags(__entry->dpa_flags),
402461
show_event_desc_flags(__entry->descriptor),
403462
show_gmer_mem_event_type(__entry->type),
463+
show_mem_event_sub_type(__entry->sub_type),
404464
show_trans_type(__entry->transaction_type),
405465
__entry->channel, __entry->rank, __entry->device,
406-
__print_hex(__entry->comp_id, CXL_EVENT_GEN_MED_COMP_ID_SIZE),
407466
show_valid_flags(__entry->validity_flags),
408-
__entry->hpa, __get_str(region_name), &__entry->region_uuid
467+
__print_hex(__entry->comp_id, CXL_EVENT_GEN_MED_COMP_ID_SIZE),
468+
show_comp_id_pldm_flags(__entry->comp_id[0]),
469+
show_pldm_entity_id(__entry->validity_flags, CXL_GMER_VALID_COMPONENT,
470+
CXL_GMER_VALID_COMPONENT_ID_FORMAT, __entry->comp_id),
471+
show_pldm_resource_id(__entry->validity_flags, CXL_GMER_VALID_COMPONENT,
472+
CXL_GMER_VALID_COMPONENT_ID_FORMAT, __entry->comp_id),
473+
__entry->hpa, __get_str(region_name), &__entry->region_uuid,
474+
show_cme_threshold_ev_flags(__entry->cme_threshold_ev_flags), __entry->cme_count
409475
)
410476
);
411477

include/cxl/event.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,17 @@ struct cxl_event_generic {
4545

4646
/*
4747
* General Media Event Record
48-
* CXL rev 3.0 Section 8.2.9.2.1.1; Table 8-43
48+
* CXL rev 3.1 Section 8.2.9.2.1.1; Table 8-45
4949
*/
5050
#define CXL_EVENT_GEN_MED_COMP_ID_SIZE 0x10
5151
struct cxl_event_gen_media {
5252
struct cxl_event_media_hdr media_hdr;
5353
u8 device[3];
5454
u8 component_id[CXL_EVENT_GEN_MED_COMP_ID_SIZE];
55-
u8 reserved[46];
55+
u8 cme_threshold_ev_flags;
56+
u8 cme_count[3];
57+
u8 sub_type;
58+
u8 reserved[41];
5659
} __packed;
5760

5861
/*

0 commit comments

Comments
 (0)