Loading...
Note: File does not exist in v3.1.
1/* SPDX-License-Identifier: GPL-2.0 */
2#undef TRACE_SYSTEM
3#define TRACE_SYSTEM cxl
4
5#if !defined(_CXL_EVENTS_H) || defined(TRACE_HEADER_MULTI_READ)
6#define _CXL_EVENTS_H
7
8#include <linux/tracepoint.h>
9
10#define CXL_HEADERLOG_SIZE SZ_512
11#define CXL_HEADERLOG_SIZE_U32 SZ_512 / sizeof(u32)
12
13#define CXL_RAS_UC_CACHE_DATA_PARITY BIT(0)
14#define CXL_RAS_UC_CACHE_ADDR_PARITY BIT(1)
15#define CXL_RAS_UC_CACHE_BE_PARITY BIT(2)
16#define CXL_RAS_UC_CACHE_DATA_ECC BIT(3)
17#define CXL_RAS_UC_MEM_DATA_PARITY BIT(4)
18#define CXL_RAS_UC_MEM_ADDR_PARITY BIT(5)
19#define CXL_RAS_UC_MEM_BE_PARITY BIT(6)
20#define CXL_RAS_UC_MEM_DATA_ECC BIT(7)
21#define CXL_RAS_UC_REINIT_THRESH BIT(8)
22#define CXL_RAS_UC_RSVD_ENCODE BIT(9)
23#define CXL_RAS_UC_POISON BIT(10)
24#define CXL_RAS_UC_RECV_OVERFLOW BIT(11)
25#define CXL_RAS_UC_INTERNAL_ERR BIT(14)
26#define CXL_RAS_UC_IDE_TX_ERR BIT(15)
27#define CXL_RAS_UC_IDE_RX_ERR BIT(16)
28
29#define show_uc_errs(status) __print_flags(status, " | ", \
30 { CXL_RAS_UC_CACHE_DATA_PARITY, "Cache Data Parity Error" }, \
31 { CXL_RAS_UC_CACHE_ADDR_PARITY, "Cache Address Parity Error" }, \
32 { CXL_RAS_UC_CACHE_BE_PARITY, "Cache Byte Enable Parity Error" }, \
33 { CXL_RAS_UC_CACHE_DATA_ECC, "Cache Data ECC Error" }, \
34 { CXL_RAS_UC_MEM_DATA_PARITY, "Memory Data Parity Error" }, \
35 { CXL_RAS_UC_MEM_ADDR_PARITY, "Memory Address Parity Error" }, \
36 { CXL_RAS_UC_MEM_BE_PARITY, "Memory Byte Enable Parity Error" }, \
37 { CXL_RAS_UC_MEM_DATA_ECC, "Memory Data ECC Error" }, \
38 { CXL_RAS_UC_REINIT_THRESH, "REINIT Threshold Hit" }, \
39 { CXL_RAS_UC_RSVD_ENCODE, "Received Unrecognized Encoding" }, \
40 { CXL_RAS_UC_POISON, "Received Poison From Peer" }, \
41 { CXL_RAS_UC_RECV_OVERFLOW, "Receiver Overflow" }, \
42 { CXL_RAS_UC_INTERNAL_ERR, "Component Specific Error" }, \
43 { CXL_RAS_UC_IDE_TX_ERR, "IDE Tx Error" }, \
44 { CXL_RAS_UC_IDE_RX_ERR, "IDE Rx Error" } \
45)
46
47TRACE_EVENT(cxl_aer_uncorrectable_error,
48 TP_PROTO(const struct device *dev, u32 status, u32 fe, u32 *hl),
49 TP_ARGS(dev, status, fe, hl),
50 TP_STRUCT__entry(
51 __string(dev_name, dev_name(dev))
52 __field(u32, status)
53 __field(u32, first_error)
54 __array(u32, header_log, CXL_HEADERLOG_SIZE_U32)
55 ),
56 TP_fast_assign(
57 __assign_str(dev_name, dev_name(dev));
58 __entry->status = status;
59 __entry->first_error = fe;
60 /*
61 * Embed the 512B headerlog data for user app retrieval and
62 * parsing, but no need to print this in the trace buffer.
63 */
64 memcpy(__entry->header_log, hl, CXL_HEADERLOG_SIZE);
65 ),
66 TP_printk("%s: status: '%s' first_error: '%s'",
67 __get_str(dev_name),
68 show_uc_errs(__entry->status),
69 show_uc_errs(__entry->first_error)
70 )
71);
72
73#define CXL_RAS_CE_CACHE_DATA_ECC BIT(0)
74#define CXL_RAS_CE_MEM_DATA_ECC BIT(1)
75#define CXL_RAS_CE_CRC_THRESH BIT(2)
76#define CLX_RAS_CE_RETRY_THRESH BIT(3)
77#define CXL_RAS_CE_CACHE_POISON BIT(4)
78#define CXL_RAS_CE_MEM_POISON BIT(5)
79#define CXL_RAS_CE_PHYS_LAYER_ERR BIT(6)
80
81#define show_ce_errs(status) __print_flags(status, " | ", \
82 { CXL_RAS_CE_CACHE_DATA_ECC, "Cache Data ECC Error" }, \
83 { CXL_RAS_CE_MEM_DATA_ECC, "Memory Data ECC Error" }, \
84 { CXL_RAS_CE_CRC_THRESH, "CRC Threshold Hit" }, \
85 { CLX_RAS_CE_RETRY_THRESH, "Retry Threshold" }, \
86 { CXL_RAS_CE_CACHE_POISON, "Received Cache Poison From Peer" }, \
87 { CXL_RAS_CE_MEM_POISON, "Received Memory Poison From Peer" }, \
88 { CXL_RAS_CE_PHYS_LAYER_ERR, "Received Error From Physical Layer" } \
89)
90
91TRACE_EVENT(cxl_aer_correctable_error,
92 TP_PROTO(const struct device *dev, u32 status),
93 TP_ARGS(dev, status),
94 TP_STRUCT__entry(
95 __string(dev_name, dev_name(dev))
96 __field(u32, status)
97 ),
98 TP_fast_assign(
99 __assign_str(dev_name, dev_name(dev));
100 __entry->status = status;
101 ),
102 TP_printk("%s: status: '%s'",
103 __get_str(dev_name), show_ce_errs(__entry->status)
104 )
105);
106
107#endif /* _CXL_EVENTS_H */
108
109/* This part must be outside protection */
110#undef TRACE_INCLUDE_FILE
111#define TRACE_INCLUDE_FILE cxl
112#include <trace/define_trace.h>