xref: /openbmc/linux/drivers/net/ipa/reg/gsi_reg-v4.0.c (revision 4a4270cf)
1*4a4270cfSAlex Elder // SPDX-License-Identifier: GPL-2.0
2*4a4270cfSAlex Elder 
3*4a4270cfSAlex Elder /* Copyright (C) 2023 Linaro Ltd. */
4*4a4270cfSAlex Elder 
5*4a4270cfSAlex Elder #include <linux/types.h>
6*4a4270cfSAlex Elder 
7*4a4270cfSAlex Elder #include "../gsi.h"
8*4a4270cfSAlex Elder #include "../reg.h"
9*4a4270cfSAlex Elder #include "../gsi_reg.h"
10*4a4270cfSAlex Elder 
11*4a4270cfSAlex Elder /* The inter-EE IRQ registers are relative to gsi->virt_raw (IPA v3.5+) */
12*4a4270cfSAlex Elder 
13*4a4270cfSAlex Elder REG(INTER_EE_SRC_CH_IRQ_MSK, inter_ee_src_ch_irq_msk,
14*4a4270cfSAlex Elder     0x0000c020 + 0x1000 * GSI_EE_AP);
15*4a4270cfSAlex Elder 
16*4a4270cfSAlex Elder REG(INTER_EE_SRC_EV_CH_IRQ_MSK, inter_ee_src_ev_ch_irq_msk,
17*4a4270cfSAlex Elder     0x0000c024 + 0x1000 * GSI_EE_AP);
18*4a4270cfSAlex Elder 
19*4a4270cfSAlex Elder /* All other register offsets are relative to gsi->virt */
20*4a4270cfSAlex Elder 
21*4a4270cfSAlex Elder REG_STRIDE(CH_C_CNTXT_0, ch_c_cntxt_0, 0x0001c000 + 0x4000 * GSI_EE_AP, 0x80);
22*4a4270cfSAlex Elder 
23*4a4270cfSAlex Elder REG_STRIDE(CH_C_CNTXT_1, ch_c_cntxt_1, 0x0001c004 + 0x4000 * GSI_EE_AP, 0x80);
24*4a4270cfSAlex Elder 
25*4a4270cfSAlex Elder REG_STRIDE(CH_C_CNTXT_2, ch_c_cntxt_2, 0x0001c008 + 0x4000 * GSI_EE_AP, 0x80);
26*4a4270cfSAlex Elder 
27*4a4270cfSAlex Elder REG_STRIDE(CH_C_CNTXT_3, ch_c_cntxt_3, 0x0001c00c + 0x4000 * GSI_EE_AP, 0x80);
28*4a4270cfSAlex Elder 
29*4a4270cfSAlex Elder REG_STRIDE(CH_C_QOS, ch_c_qos, 0x0001c05c + 0x4000 * GSI_EE_AP, 0x80);
30*4a4270cfSAlex Elder 
31*4a4270cfSAlex Elder REG(ERROR_LOG, error_log, 0x0001f200 + 0x4000 * GSI_EE_AP);
32*4a4270cfSAlex Elder 
33*4a4270cfSAlex Elder REG(ERROR_LOG_CLR, error_log_clr, 0x0001f210 + 0x4000 * GSI_EE_AP);
34*4a4270cfSAlex Elder 
35*4a4270cfSAlex Elder REG_STRIDE(CH_C_SCRATCH_0, ch_c_scratch_0,
36*4a4270cfSAlex Elder 	   0x0001c060 + 0x4000 * GSI_EE_AP, 0x80);
37*4a4270cfSAlex Elder 
38*4a4270cfSAlex Elder REG_STRIDE(CH_C_SCRATCH_1, ch_c_scratch_1,
39*4a4270cfSAlex Elder 	   0x0001c064 + 0x4000 * GSI_EE_AP, 0x80);
40*4a4270cfSAlex Elder 
41*4a4270cfSAlex Elder REG_STRIDE(CH_C_SCRATCH_2, ch_c_scratch_2,
42*4a4270cfSAlex Elder 	   0x0001c068 + 0x4000 * GSI_EE_AP, 0x80);
43*4a4270cfSAlex Elder 
44*4a4270cfSAlex Elder REG_STRIDE(CH_C_SCRATCH_3, ch_c_scratch_3,
45*4a4270cfSAlex Elder 	   0x0001c06c + 0x4000 * GSI_EE_AP, 0x80);
46*4a4270cfSAlex Elder 
47*4a4270cfSAlex Elder REG_STRIDE(EV_CH_E_CNTXT_0, ev_ch_e_cntxt_0,
48*4a4270cfSAlex Elder 	   0x0001d000 + 0x4000 * GSI_EE_AP, 0x80);
49*4a4270cfSAlex Elder 
50*4a4270cfSAlex Elder REG_STRIDE(EV_CH_E_CNTXT_1, ev_ch_e_cntxt_1,
51*4a4270cfSAlex Elder 	   0x0001d004 + 0x4000 * GSI_EE_AP, 0x80);
52*4a4270cfSAlex Elder 
53*4a4270cfSAlex Elder REG_STRIDE(EV_CH_E_CNTXT_2, ev_ch_e_cntxt_2,
54*4a4270cfSAlex Elder 	   0x0001d008 + 0x4000 * GSI_EE_AP, 0x80);
55*4a4270cfSAlex Elder 
56*4a4270cfSAlex Elder REG_STRIDE(EV_CH_E_CNTXT_3, ev_ch_e_cntxt_3,
57*4a4270cfSAlex Elder 	   0x0001d00c + 0x4000 * GSI_EE_AP, 0x80);
58*4a4270cfSAlex Elder 
59*4a4270cfSAlex Elder REG_STRIDE(EV_CH_E_CNTXT_4, ev_ch_e_cntxt_4,
60*4a4270cfSAlex Elder 	   0x0001d010 + 0x4000 * GSI_EE_AP, 0x80);
61*4a4270cfSAlex Elder 
62*4a4270cfSAlex Elder REG_STRIDE(EV_CH_E_CNTXT_8, ev_ch_e_cntxt_8,
63*4a4270cfSAlex Elder 	   0x0001d020 + 0x4000 * GSI_EE_AP, 0x80);
64*4a4270cfSAlex Elder 
65*4a4270cfSAlex Elder REG_STRIDE(EV_CH_E_CNTXT_9, ev_ch_e_cntxt_9,
66*4a4270cfSAlex Elder 	   0x0001d024 + 0x4000 * GSI_EE_AP, 0x80);
67*4a4270cfSAlex Elder 
68*4a4270cfSAlex Elder REG_STRIDE(EV_CH_E_CNTXT_10, ev_ch_e_cntxt_10,
69*4a4270cfSAlex Elder 	   0x0001d028 + 0x4000 * GSI_EE_AP, 0x80);
70*4a4270cfSAlex Elder 
71*4a4270cfSAlex Elder REG_STRIDE(EV_CH_E_CNTXT_11, ev_ch_e_cntxt_11,
72*4a4270cfSAlex Elder 	   0x0001d02c + 0x4000 * GSI_EE_AP, 0x80);
73*4a4270cfSAlex Elder 
74*4a4270cfSAlex Elder REG_STRIDE(EV_CH_E_CNTXT_12, ev_ch_e_cntxt_12,
75*4a4270cfSAlex Elder 	   0x0001d030 + 0x4000 * GSI_EE_AP, 0x80);
76*4a4270cfSAlex Elder 
77*4a4270cfSAlex Elder REG_STRIDE(EV_CH_E_CNTXT_13, ev_ch_e_cntxt_13,
78*4a4270cfSAlex Elder 	   0x0001d034 + 0x4000 * GSI_EE_AP, 0x80);
79*4a4270cfSAlex Elder 
80*4a4270cfSAlex Elder REG_STRIDE(EV_CH_E_SCRATCH_0, ev_ch_e_scratch_0,
81*4a4270cfSAlex Elder 	   0x0001d048 + 0x4000 * GSI_EE_AP, 0x80);
82*4a4270cfSAlex Elder 
83*4a4270cfSAlex Elder REG_STRIDE(EV_CH_E_SCRATCH_1, ev_ch_e_scratch_1,
84*4a4270cfSAlex Elder 	   0x0001d04c + 0x4000 * GSI_EE_AP, 0x80);
85*4a4270cfSAlex Elder 
86*4a4270cfSAlex Elder REG_STRIDE(CH_C_DOORBELL_0, ch_c_doorbell_0,
87*4a4270cfSAlex Elder 	   0x0001e000 + 0x4000 * GSI_EE_AP, 0x08);
88*4a4270cfSAlex Elder 
89*4a4270cfSAlex Elder REG_STRIDE(EV_CH_E_DOORBELL_0, ev_ch_e_doorbell_0,
90*4a4270cfSAlex Elder 	   0x0001e100 + 0x4000 * GSI_EE_AP, 0x08);
91*4a4270cfSAlex Elder 
92*4a4270cfSAlex Elder REG(GSI_STATUS, gsi_status, 0x0001f000 + 0x4000 * GSI_EE_AP);
93*4a4270cfSAlex Elder 
94*4a4270cfSAlex Elder REG(CH_CMD, ch_cmd, 0x0001f008 + 0x4000 * GSI_EE_AP);
95*4a4270cfSAlex Elder 
96*4a4270cfSAlex Elder REG(EV_CH_CMD, ev_ch_cmd, 0x0001f010 + 0x4000 * GSI_EE_AP);
97*4a4270cfSAlex Elder 
98*4a4270cfSAlex Elder REG(GENERIC_CMD, generic_cmd, 0x0001f018 + 0x4000 * GSI_EE_AP);
99*4a4270cfSAlex Elder 
100*4a4270cfSAlex Elder REG(HW_PARAM_2, hw_param_2, 0x0001f040 + 0x4000 * GSI_EE_AP);
101*4a4270cfSAlex Elder 
102*4a4270cfSAlex Elder REG(CNTXT_TYPE_IRQ, cntxt_type_irq, 0x0001f080 + 0x4000 * GSI_EE_AP);
103*4a4270cfSAlex Elder 
104*4a4270cfSAlex Elder REG(CNTXT_TYPE_IRQ_MSK, cntxt_type_irq_msk, 0x0001f088 + 0x4000 * GSI_EE_AP);
105*4a4270cfSAlex Elder 
106*4a4270cfSAlex Elder REG(CNTXT_SRC_CH_IRQ, cntxt_src_ch_irq, 0x0001f090 + 0x4000 * GSI_EE_AP);
107*4a4270cfSAlex Elder 
108*4a4270cfSAlex Elder REG(CNTXT_SRC_EV_CH_IRQ, cntxt_src_ev_ch_irq, 0x0001f094 + 0x4000 * GSI_EE_AP);
109*4a4270cfSAlex Elder 
110*4a4270cfSAlex Elder REG(CNTXT_SRC_CH_IRQ_MSK, cntxt_src_ch_irq_msk,
111*4a4270cfSAlex Elder     0x0001f098 + 0x4000 * GSI_EE_AP);
112*4a4270cfSAlex Elder 
113*4a4270cfSAlex Elder REG(CNTXT_SRC_EV_CH_IRQ_MSK, cntxt_src_ev_ch_irq_msk,
114*4a4270cfSAlex Elder     0x0001f09c + 0x4000 * GSI_EE_AP);
115*4a4270cfSAlex Elder 
116*4a4270cfSAlex Elder REG(CNTXT_SRC_CH_IRQ_CLR, cntxt_src_ch_irq_clr,
117*4a4270cfSAlex Elder     0x0001f0a0 + 0x4000 * GSI_EE_AP);
118*4a4270cfSAlex Elder 
119*4a4270cfSAlex Elder REG(CNTXT_SRC_EV_CH_IRQ_CLR, cntxt_src_ev_ch_irq_clr,
120*4a4270cfSAlex Elder     0x0001f0a4 + 0x4000 * GSI_EE_AP);
121*4a4270cfSAlex Elder 
122*4a4270cfSAlex Elder REG(CNTXT_SRC_IEOB_IRQ, cntxt_src_ieob_irq, 0x0001f0b0 + 0x4000 * GSI_EE_AP);
123*4a4270cfSAlex Elder 
124*4a4270cfSAlex Elder REG(CNTXT_SRC_IEOB_IRQ_MSK, cntxt_src_ieob_irq_msk,
125*4a4270cfSAlex Elder     0x0001f0b8 + 0x4000 * GSI_EE_AP);
126*4a4270cfSAlex Elder 
127*4a4270cfSAlex Elder REG(CNTXT_SRC_IEOB_IRQ_CLR, cntxt_src_ieob_irq_clr,
128*4a4270cfSAlex Elder     0x0001f0c0 + 0x4000 * GSI_EE_AP);
129*4a4270cfSAlex Elder 
130*4a4270cfSAlex Elder REG(CNTXT_GLOB_IRQ_STTS, cntxt_glob_irq_stts, 0x0001f100 + 0x4000 * GSI_EE_AP);
131*4a4270cfSAlex Elder 
132*4a4270cfSAlex Elder REG(CNTXT_GLOB_IRQ_EN, cntxt_glob_irq_en, 0x0001f108 + 0x4000 * GSI_EE_AP);
133*4a4270cfSAlex Elder 
134*4a4270cfSAlex Elder REG(CNTXT_GLOB_IRQ_CLR, cntxt_glob_irq_clr, 0x0001f110 + 0x4000 * GSI_EE_AP);
135*4a4270cfSAlex Elder 
136*4a4270cfSAlex Elder REG(CNTXT_GSI_IRQ_STTS, cntxt_gsi_irq_stts, 0x0001f118 + 0x4000 * GSI_EE_AP);
137*4a4270cfSAlex Elder 
138*4a4270cfSAlex Elder REG(CNTXT_GSI_IRQ_EN, cntxt_gsi_irq_en, 0x0001f120 + 0x4000 * GSI_EE_AP);
139*4a4270cfSAlex Elder 
140*4a4270cfSAlex Elder REG(CNTXT_GSI_IRQ_CLR, cntxt_gsi_irq_clr, 0x0001f128 + 0x4000 * GSI_EE_AP);
141*4a4270cfSAlex Elder 
142*4a4270cfSAlex Elder REG(CNTXT_INTSET, cntxt_intset, 0x0001f180 + 0x4000 * GSI_EE_AP);
143*4a4270cfSAlex Elder 
144*4a4270cfSAlex Elder REG(CNTXT_SCRATCH_0, cntxt_scratch_0, 0x0001f400 + 0x4000 * GSI_EE_AP);
145*4a4270cfSAlex Elder 
146*4a4270cfSAlex Elder static const struct reg *reg_array[] = {
147*4a4270cfSAlex Elder 	[INTER_EE_SRC_CH_IRQ_MSK]	= &reg_inter_ee_src_ch_irq_msk,
148*4a4270cfSAlex Elder 	[INTER_EE_SRC_EV_CH_IRQ_MSK]	= &reg_inter_ee_src_ev_ch_irq_msk,
149*4a4270cfSAlex Elder 	[CH_C_CNTXT_0]			= &reg_ch_c_cntxt_0,
150*4a4270cfSAlex Elder 	[CH_C_CNTXT_1]			= &reg_ch_c_cntxt_1,
151*4a4270cfSAlex Elder 	[CH_C_CNTXT_2]			= &reg_ch_c_cntxt_2,
152*4a4270cfSAlex Elder 	[CH_C_CNTXT_3]			= &reg_ch_c_cntxt_3,
153*4a4270cfSAlex Elder 	[CH_C_QOS]			= &reg_ch_c_qos,
154*4a4270cfSAlex Elder 	[CH_C_SCRATCH_0]		= &reg_ch_c_scratch_0,
155*4a4270cfSAlex Elder 	[CH_C_SCRATCH_1]		= &reg_ch_c_scratch_1,
156*4a4270cfSAlex Elder 	[CH_C_SCRATCH_2]		= &reg_ch_c_scratch_2,
157*4a4270cfSAlex Elder 	[CH_C_SCRATCH_3]		= &reg_ch_c_scratch_3,
158*4a4270cfSAlex Elder 	[EV_CH_E_CNTXT_0]		= &reg_ev_ch_e_cntxt_0,
159*4a4270cfSAlex Elder 	[EV_CH_E_CNTXT_1]		= &reg_ev_ch_e_cntxt_1,
160*4a4270cfSAlex Elder 	[EV_CH_E_CNTXT_2]		= &reg_ev_ch_e_cntxt_2,
161*4a4270cfSAlex Elder 	[EV_CH_E_CNTXT_3]		= &reg_ev_ch_e_cntxt_3,
162*4a4270cfSAlex Elder 	[EV_CH_E_CNTXT_4]		= &reg_ev_ch_e_cntxt_4,
163*4a4270cfSAlex Elder 	[EV_CH_E_CNTXT_8]		= &reg_ev_ch_e_cntxt_8,
164*4a4270cfSAlex Elder 	[EV_CH_E_CNTXT_9]		= &reg_ev_ch_e_cntxt_9,
165*4a4270cfSAlex Elder 	[EV_CH_E_CNTXT_10]		= &reg_ev_ch_e_cntxt_10,
166*4a4270cfSAlex Elder 	[EV_CH_E_CNTXT_11]		= &reg_ev_ch_e_cntxt_11,
167*4a4270cfSAlex Elder 	[EV_CH_E_CNTXT_12]		= &reg_ev_ch_e_cntxt_12,
168*4a4270cfSAlex Elder 	[EV_CH_E_CNTXT_13]		= &reg_ev_ch_e_cntxt_13,
169*4a4270cfSAlex Elder 	[EV_CH_E_SCRATCH_0]		= &reg_ev_ch_e_scratch_0,
170*4a4270cfSAlex Elder 	[EV_CH_E_SCRATCH_1]		= &reg_ev_ch_e_scratch_1,
171*4a4270cfSAlex Elder 	[CH_C_DOORBELL_0]		= &reg_ch_c_doorbell_0,
172*4a4270cfSAlex Elder 	[EV_CH_E_DOORBELL_0]		= &reg_ev_ch_e_doorbell_0,
173*4a4270cfSAlex Elder 	[GSI_STATUS]			= &reg_gsi_status,
174*4a4270cfSAlex Elder 	[CH_CMD]			= &reg_ch_cmd,
175*4a4270cfSAlex Elder 	[EV_CH_CMD]			= &reg_ev_ch_cmd,
176*4a4270cfSAlex Elder 	[GENERIC_CMD]			= &reg_generic_cmd,
177*4a4270cfSAlex Elder 	[HW_PARAM_2]			= &reg_hw_param_2,
178*4a4270cfSAlex Elder 	[CNTXT_TYPE_IRQ]		= &reg_cntxt_type_irq,
179*4a4270cfSAlex Elder 	[CNTXT_TYPE_IRQ_MSK]		= &reg_cntxt_type_irq_msk,
180*4a4270cfSAlex Elder 	[CNTXT_SRC_CH_IRQ]		= &reg_cntxt_src_ch_irq,
181*4a4270cfSAlex Elder 	[CNTXT_SRC_EV_CH_IRQ]		= &reg_cntxt_src_ev_ch_irq,
182*4a4270cfSAlex Elder 	[CNTXT_SRC_CH_IRQ_MSK]		= &reg_cntxt_src_ch_irq_msk,
183*4a4270cfSAlex Elder 	[CNTXT_SRC_EV_CH_IRQ_MSK]	= &reg_cntxt_src_ev_ch_irq_msk,
184*4a4270cfSAlex Elder 	[CNTXT_SRC_CH_IRQ_CLR]		= &reg_cntxt_src_ch_irq_clr,
185*4a4270cfSAlex Elder 	[CNTXT_SRC_EV_CH_IRQ_CLR]	= &reg_cntxt_src_ev_ch_irq_clr,
186*4a4270cfSAlex Elder 	[CNTXT_SRC_IEOB_IRQ]		= &reg_cntxt_src_ieob_irq,
187*4a4270cfSAlex Elder 	[CNTXT_SRC_IEOB_IRQ_MSK]	= &reg_cntxt_src_ieob_irq_msk,
188*4a4270cfSAlex Elder 	[CNTXT_SRC_IEOB_IRQ_CLR]	= &reg_cntxt_src_ieob_irq_clr,
189*4a4270cfSAlex Elder 	[CNTXT_GLOB_IRQ_STTS]		= &reg_cntxt_glob_irq_stts,
190*4a4270cfSAlex Elder 	[CNTXT_GLOB_IRQ_EN]		= &reg_cntxt_glob_irq_en,
191*4a4270cfSAlex Elder 	[CNTXT_GLOB_IRQ_CLR]		= &reg_cntxt_glob_irq_clr,
192*4a4270cfSAlex Elder 	[CNTXT_GSI_IRQ_STTS]		= &reg_cntxt_gsi_irq_stts,
193*4a4270cfSAlex Elder 	[CNTXT_GSI_IRQ_EN]		= &reg_cntxt_gsi_irq_en,
194*4a4270cfSAlex Elder 	[CNTXT_GSI_IRQ_CLR]		= &reg_cntxt_gsi_irq_clr,
195*4a4270cfSAlex Elder 	[CNTXT_INTSET]			= &reg_cntxt_intset,
196*4a4270cfSAlex Elder 	[ERROR_LOG]			= &reg_error_log,
197*4a4270cfSAlex Elder 	[ERROR_LOG_CLR]			= &reg_error_log_clr,
198*4a4270cfSAlex Elder 	[CNTXT_SCRATCH_0]		= &reg_cntxt_scratch_0,
199*4a4270cfSAlex Elder };
200*4a4270cfSAlex Elder 
201*4a4270cfSAlex Elder const struct regs gsi_regs_v4_0 = {
202*4a4270cfSAlex Elder 	.reg_count	= ARRAY_SIZE(reg_array),
203*4a4270cfSAlex Elder 	.reg		= reg_array,
204*4a4270cfSAlex Elder };
205