1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun #ifndef __ALPHA_ERR_EV7_H
3*4882a593Smuzhiyun #define __ALPHA_ERR_EV7_H 1
4*4882a593Smuzhiyun
5*4882a593Smuzhiyun /*
6*4882a593Smuzhiyun * Data for el packet class PAL (14), type LOGOUT_FRAME (1)
7*4882a593Smuzhiyun */
8*4882a593Smuzhiyun struct ev7_pal_logout_subpacket {
9*4882a593Smuzhiyun u32 mchk_code;
10*4882a593Smuzhiyun u32 subpacket_count;
11*4882a593Smuzhiyun u64 whami;
12*4882a593Smuzhiyun u64 rbox_whami;
13*4882a593Smuzhiyun u64 rbox_int;
14*4882a593Smuzhiyun u64 exc_addr;
15*4882a593Smuzhiyun union el_timestamp timestamp;
16*4882a593Smuzhiyun u64 halt_code;
17*4882a593Smuzhiyun u64 reserved;
18*4882a593Smuzhiyun };
19*4882a593Smuzhiyun
20*4882a593Smuzhiyun /*
21*4882a593Smuzhiyun * Data for el packet class PAL (14), type EV7_PROCESSOR (4)
22*4882a593Smuzhiyun */
23*4882a593Smuzhiyun struct ev7_pal_processor_subpacket {
24*4882a593Smuzhiyun u64 i_stat;
25*4882a593Smuzhiyun u64 dc_stat;
26*4882a593Smuzhiyun u64 c_addr;
27*4882a593Smuzhiyun u64 c_syndrome_1;
28*4882a593Smuzhiyun u64 c_syndrome_0;
29*4882a593Smuzhiyun u64 c_stat;
30*4882a593Smuzhiyun u64 c_sts;
31*4882a593Smuzhiyun u64 mm_stat;
32*4882a593Smuzhiyun u64 exc_addr;
33*4882a593Smuzhiyun u64 ier_cm;
34*4882a593Smuzhiyun u64 isum;
35*4882a593Smuzhiyun u64 pal_base;
36*4882a593Smuzhiyun u64 i_ctl;
37*4882a593Smuzhiyun u64 process_context;
38*4882a593Smuzhiyun u64 cbox_ctl;
39*4882a593Smuzhiyun u64 cbox_stp_ctl;
40*4882a593Smuzhiyun u64 cbox_acc_ctl;
41*4882a593Smuzhiyun u64 cbox_lcl_set;
42*4882a593Smuzhiyun u64 cbox_gbl_set;
43*4882a593Smuzhiyun u64 bbox_ctl;
44*4882a593Smuzhiyun u64 bbox_err_sts;
45*4882a593Smuzhiyun u64 bbox_err_idx;
46*4882a593Smuzhiyun u64 cbox_ddp_err_sts;
47*4882a593Smuzhiyun u64 bbox_dat_rmp;
48*4882a593Smuzhiyun u64 reserved[2];
49*4882a593Smuzhiyun };
50*4882a593Smuzhiyun
51*4882a593Smuzhiyun /*
52*4882a593Smuzhiyun * Data for el packet class PAL (14), type EV7_ZBOX (5)
53*4882a593Smuzhiyun */
54*4882a593Smuzhiyun struct ev7_pal_zbox_subpacket {
55*4882a593Smuzhiyun u32 zbox0_dram_err_status_1;
56*4882a593Smuzhiyun u32 zbox0_dram_err_status_2;
57*4882a593Smuzhiyun u32 zbox0_dram_err_status_3;
58*4882a593Smuzhiyun u32 zbox0_dram_err_ctl;
59*4882a593Smuzhiyun u32 zbox0_dram_err_adr;
60*4882a593Smuzhiyun u32 zbox0_dift_timeout;
61*4882a593Smuzhiyun u32 zbox0_dram_mapper_ctl;
62*4882a593Smuzhiyun u32 zbox0_frc_err_adr;
63*4882a593Smuzhiyun u32 zbox0_dift_err_status;
64*4882a593Smuzhiyun u32 reserved1;
65*4882a593Smuzhiyun u32 zbox1_dram_err_status_1;
66*4882a593Smuzhiyun u32 zbox1_dram_err_status_2;
67*4882a593Smuzhiyun u32 zbox1_dram_err_status_3;
68*4882a593Smuzhiyun u32 zbox1_dram_err_ctl;
69*4882a593Smuzhiyun u32 zbox1_dram_err_adr;
70*4882a593Smuzhiyun u32 zbox1_dift_timeout;
71*4882a593Smuzhiyun u32 zbox1_dram_mapper_ctl;
72*4882a593Smuzhiyun u32 zbox1_frc_err_adr;
73*4882a593Smuzhiyun u32 zbox1_dift_err_status;
74*4882a593Smuzhiyun u32 reserved2;
75*4882a593Smuzhiyun u64 cbox_ctl;
76*4882a593Smuzhiyun u64 cbox_stp_ctl;
77*4882a593Smuzhiyun u64 zbox0_error_pa;
78*4882a593Smuzhiyun u64 zbox1_error_pa;
79*4882a593Smuzhiyun u64 zbox0_ored_syndrome;
80*4882a593Smuzhiyun u64 zbox1_ored_syndrome;
81*4882a593Smuzhiyun u64 reserved3[2];
82*4882a593Smuzhiyun };
83*4882a593Smuzhiyun
84*4882a593Smuzhiyun /*
85*4882a593Smuzhiyun * Data for el packet class PAL (14), type EV7_RBOX (6)
86*4882a593Smuzhiyun */
87*4882a593Smuzhiyun struct ev7_pal_rbox_subpacket {
88*4882a593Smuzhiyun u64 rbox_cfg;
89*4882a593Smuzhiyun u64 rbox_n_cfg;
90*4882a593Smuzhiyun u64 rbox_s_cfg;
91*4882a593Smuzhiyun u64 rbox_e_cfg;
92*4882a593Smuzhiyun u64 rbox_w_cfg;
93*4882a593Smuzhiyun u64 rbox_n_err;
94*4882a593Smuzhiyun u64 rbox_s_err;
95*4882a593Smuzhiyun u64 rbox_e_err;
96*4882a593Smuzhiyun u64 rbox_w_err;
97*4882a593Smuzhiyun u64 rbox_io_cfg;
98*4882a593Smuzhiyun u64 rbox_io_err;
99*4882a593Smuzhiyun u64 rbox_l_err;
100*4882a593Smuzhiyun u64 rbox_whoami;
101*4882a593Smuzhiyun u64 rbox_imask;
102*4882a593Smuzhiyun u64 rbox_intq;
103*4882a593Smuzhiyun u64 rbox_int;
104*4882a593Smuzhiyun u64 reserved[2];
105*4882a593Smuzhiyun };
106*4882a593Smuzhiyun
107*4882a593Smuzhiyun /*
108*4882a593Smuzhiyun * Data for el packet class PAL (14), type EV7_IO (7)
109*4882a593Smuzhiyun */
110*4882a593Smuzhiyun struct ev7_pal_io_one_port {
111*4882a593Smuzhiyun u64 pox_err_sum;
112*4882a593Smuzhiyun u64 pox_tlb_err;
113*4882a593Smuzhiyun u64 pox_spl_cmplt;
114*4882a593Smuzhiyun u64 pox_trans_sum;
115*4882a593Smuzhiyun u64 pox_first_err;
116*4882a593Smuzhiyun u64 pox_mult_err;
117*4882a593Smuzhiyun u64 pox_dm_source;
118*4882a593Smuzhiyun u64 pox_dm_dest;
119*4882a593Smuzhiyun u64 pox_dm_size;
120*4882a593Smuzhiyun u64 pox_dm_ctrl;
121*4882a593Smuzhiyun u64 reserved;
122*4882a593Smuzhiyun };
123*4882a593Smuzhiyun
124*4882a593Smuzhiyun struct ev7_pal_io_subpacket {
125*4882a593Smuzhiyun u64 io_asic_rev;
126*4882a593Smuzhiyun u64 io_sys_rev;
127*4882a593Smuzhiyun u64 io7_uph;
128*4882a593Smuzhiyun u64 hpi_ctl;
129*4882a593Smuzhiyun u64 crd_ctl;
130*4882a593Smuzhiyun u64 hei_ctl;
131*4882a593Smuzhiyun u64 po7_error_sum;
132*4882a593Smuzhiyun u64 po7_uncrr_sym;
133*4882a593Smuzhiyun u64 po7_crrct_sym;
134*4882a593Smuzhiyun u64 po7_ugbge_sym;
135*4882a593Smuzhiyun u64 po7_err_pkt0;
136*4882a593Smuzhiyun u64 po7_err_pkt1;
137*4882a593Smuzhiyun u64 reserved[2];
138*4882a593Smuzhiyun struct ev7_pal_io_one_port ports[4];
139*4882a593Smuzhiyun };
140*4882a593Smuzhiyun
141*4882a593Smuzhiyun /*
142*4882a593Smuzhiyun * Environmental subpacket. Data used for el packets:
143*4882a593Smuzhiyun * class PAL (14), type AMBIENT_TEMPERATURE (10)
144*4882a593Smuzhiyun * class PAL (14), type AIRMOVER_FAN (11)
145*4882a593Smuzhiyun * class PAL (14), type VOLTAGE (12)
146*4882a593Smuzhiyun * class PAL (14), type INTRUSION (13)
147*4882a593Smuzhiyun * class PAL (14), type POWER_SUPPLY (14)
148*4882a593Smuzhiyun * class PAL (14), type LAN (15)
149*4882a593Smuzhiyun * class PAL (14), type HOT_PLUG (16)
150*4882a593Smuzhiyun */
151*4882a593Smuzhiyun struct ev7_pal_environmental_subpacket {
152*4882a593Smuzhiyun u16 cabinet;
153*4882a593Smuzhiyun u16 drawer;
154*4882a593Smuzhiyun u16 reserved1[2];
155*4882a593Smuzhiyun u8 module_type;
156*4882a593Smuzhiyun u8 unit_id; /* unit reporting condition */
157*4882a593Smuzhiyun u8 reserved2;
158*4882a593Smuzhiyun u8 condition; /* condition reported */
159*4882a593Smuzhiyun };
160*4882a593Smuzhiyun
161*4882a593Smuzhiyun /*
162*4882a593Smuzhiyun * Convert environmental type to index
163*4882a593Smuzhiyun */
ev7_lf_env_index(int type)164*4882a593Smuzhiyun static inline int ev7_lf_env_index(int type)
165*4882a593Smuzhiyun {
166*4882a593Smuzhiyun BUG_ON((type < EL_TYPE__PAL__ENV__AMBIENT_TEMPERATURE)
167*4882a593Smuzhiyun || (type > EL_TYPE__PAL__ENV__HOT_PLUG));
168*4882a593Smuzhiyun
169*4882a593Smuzhiyun return type - EL_TYPE__PAL__ENV__AMBIENT_TEMPERATURE;
170*4882a593Smuzhiyun }
171*4882a593Smuzhiyun
172*4882a593Smuzhiyun /*
173*4882a593Smuzhiyun * Data for generic el packet class PAL.
174*4882a593Smuzhiyun */
175*4882a593Smuzhiyun struct ev7_pal_subpacket {
176*4882a593Smuzhiyun union {
177*4882a593Smuzhiyun struct ev7_pal_logout_subpacket logout; /* Type 1 */
178*4882a593Smuzhiyun struct ev7_pal_processor_subpacket ev7; /* Type 4 */
179*4882a593Smuzhiyun struct ev7_pal_zbox_subpacket zbox; /* Type 5 */
180*4882a593Smuzhiyun struct ev7_pal_rbox_subpacket rbox; /* Type 6 */
181*4882a593Smuzhiyun struct ev7_pal_io_subpacket io; /* Type 7 */
182*4882a593Smuzhiyun struct ev7_pal_environmental_subpacket env; /* Type 10-16 */
183*4882a593Smuzhiyun u64 as_quad[1]; /* Raw u64 */
184*4882a593Smuzhiyun } by_type;
185*4882a593Smuzhiyun };
186*4882a593Smuzhiyun
187*4882a593Smuzhiyun /*
188*4882a593Smuzhiyun * Struct to contain collected logout from subpackets.
189*4882a593Smuzhiyun */
190*4882a593Smuzhiyun struct ev7_lf_subpackets {
191*4882a593Smuzhiyun struct ev7_pal_logout_subpacket *logout; /* Type 1 */
192*4882a593Smuzhiyun struct ev7_pal_processor_subpacket *ev7; /* Type 4 */
193*4882a593Smuzhiyun struct ev7_pal_zbox_subpacket *zbox; /* Type 5 */
194*4882a593Smuzhiyun struct ev7_pal_rbox_subpacket *rbox; /* Type 6 */
195*4882a593Smuzhiyun struct ev7_pal_io_subpacket *io; /* Type 7 */
196*4882a593Smuzhiyun struct ev7_pal_environmental_subpacket *env[7]; /* Type 10-16 */
197*4882a593Smuzhiyun
198*4882a593Smuzhiyun unsigned int io_pid;
199*4882a593Smuzhiyun };
200*4882a593Smuzhiyun
201*4882a593Smuzhiyun #endif /* __ALPHA_ERR_EV7_H */
202*4882a593Smuzhiyun
203*4882a593Smuzhiyun
204