xref: /openbmc/linux/drivers/net/ipa/reg/gsi_reg-v4.0.c (revision edc6158b)
14a4270cfSAlex Elder // SPDX-License-Identifier: GPL-2.0
24a4270cfSAlex Elder 
34a4270cfSAlex Elder /* Copyright (C) 2023 Linaro Ltd. */
44a4270cfSAlex Elder 
54a4270cfSAlex Elder #include <linux/types.h>
64a4270cfSAlex Elder 
74a4270cfSAlex Elder #include "../gsi.h"
84a4270cfSAlex Elder #include "../reg.h"
94a4270cfSAlex Elder #include "../gsi_reg.h"
104a4270cfSAlex Elder 
114a4270cfSAlex Elder /* The inter-EE IRQ registers are relative to gsi->virt_raw (IPA v3.5+) */
124a4270cfSAlex Elder 
134a4270cfSAlex Elder REG(INTER_EE_SRC_CH_IRQ_MSK, inter_ee_src_ch_irq_msk,
144a4270cfSAlex Elder     0x0000c020 + 0x1000 * GSI_EE_AP);
154a4270cfSAlex Elder 
164a4270cfSAlex Elder REG(INTER_EE_SRC_EV_CH_IRQ_MSK, inter_ee_src_ev_ch_irq_msk,
174a4270cfSAlex Elder     0x0000c024 + 0x1000 * GSI_EE_AP);
184a4270cfSAlex Elder 
194a4270cfSAlex Elder /* All other register offsets are relative to gsi->virt */
204a4270cfSAlex Elder 
21330ce9d3SAlex Elder static const u32 reg_ch_c_cntxt_0_fmask[] = {
22330ce9d3SAlex Elder 	[CHTYPE_PROTOCOL]				= GENMASK(2, 0),
23330ce9d3SAlex Elder 	[CHTYPE_DIR]					= BIT(3),
24330ce9d3SAlex Elder 	[CH_EE]						= GENMASK(7, 4),
25330ce9d3SAlex Elder 	[CHID]						= GENMASK(12, 8),
26330ce9d3SAlex Elder 						/* Bit 13 reserved */
27330ce9d3SAlex Elder 	[ERINDEX]					= GENMASK(18, 14),
28330ce9d3SAlex Elder 						/* Bit 19 reserved */
29330ce9d3SAlex Elder 	[CHSTATE]					= GENMASK(23, 20),
30330ce9d3SAlex Elder 	[ELEMENT_SIZE]					= GENMASK(31, 24),
31330ce9d3SAlex Elder };
324a4270cfSAlex Elder 
33330ce9d3SAlex Elder REG_STRIDE_FIELDS(CH_C_CNTXT_0, ch_c_cntxt_0,
34330ce9d3SAlex Elder 		  0x0001c000 + 0x4000 * GSI_EE_AP, 0x80);
35330ce9d3SAlex Elder 
36330ce9d3SAlex Elder static const u32 reg_ch_c_cntxt_1_fmask[] = {
37330ce9d3SAlex Elder 	[CH_R_LENGTH]					= GENMASK(15, 0),
38330ce9d3SAlex Elder 						/* Bits 16-31 reserved */
39330ce9d3SAlex Elder };
40330ce9d3SAlex Elder 
41330ce9d3SAlex Elder REG_STRIDE_FIELDS(CH_C_CNTXT_1, ch_c_cntxt_1,
42330ce9d3SAlex Elder 		  0x0001c004 + 0x4000 * GSI_EE_AP, 0x80);
434a4270cfSAlex Elder 
444a4270cfSAlex Elder REG_STRIDE(CH_C_CNTXT_2, ch_c_cntxt_2, 0x0001c008 + 0x4000 * GSI_EE_AP, 0x80);
454a4270cfSAlex Elder 
464a4270cfSAlex Elder REG_STRIDE(CH_C_CNTXT_3, ch_c_cntxt_3, 0x0001c00c + 0x4000 * GSI_EE_AP, 0x80);
474a4270cfSAlex Elder 
48f50ca7ceSAlex Elder static const u32 reg_ch_c_qos_fmask[] = {
49f50ca7ceSAlex Elder 	[WRR_WEIGHT]					= GENMASK(3, 0),
50f50ca7ceSAlex Elder 						/* Bits 4-7 reserved */
51f50ca7ceSAlex Elder 	[MAX_PREFETCH]					= BIT(8),
52f50ca7ceSAlex Elder 	[USE_DB_ENG]					= BIT(9),
53f50ca7ceSAlex Elder 	[USE_ESCAPE_BUF_ONLY]				= BIT(10),
54f50ca7ceSAlex Elder 						/* Bits 11-31 reserved */
55f50ca7ceSAlex Elder };
56f50ca7ceSAlex Elder 
57f50ca7ceSAlex Elder REG_STRIDE_FIELDS(CH_C_QOS, ch_c_qos, 0x0001c05c + 0x4000 * GSI_EE_AP, 0x80);
584a4270cfSAlex Elder 
594a4270cfSAlex Elder REG(ERROR_LOG, error_log, 0x0001f200 + 0x4000 * GSI_EE_AP);
604a4270cfSAlex Elder 
614a4270cfSAlex Elder REG(ERROR_LOG_CLR, error_log_clr, 0x0001f210 + 0x4000 * GSI_EE_AP);
624a4270cfSAlex Elder 
634a4270cfSAlex Elder REG_STRIDE(CH_C_SCRATCH_0, ch_c_scratch_0,
644a4270cfSAlex Elder 	   0x0001c060 + 0x4000 * GSI_EE_AP, 0x80);
654a4270cfSAlex Elder 
664a4270cfSAlex Elder REG_STRIDE(CH_C_SCRATCH_1, ch_c_scratch_1,
674a4270cfSAlex Elder 	   0x0001c064 + 0x4000 * GSI_EE_AP, 0x80);
684a4270cfSAlex Elder 
694a4270cfSAlex Elder REG_STRIDE(CH_C_SCRATCH_2, ch_c_scratch_2,
704a4270cfSAlex Elder 	   0x0001c068 + 0x4000 * GSI_EE_AP, 0x80);
714a4270cfSAlex Elder 
724a4270cfSAlex Elder REG_STRIDE(CH_C_SCRATCH_3, ch_c_scratch_3,
734a4270cfSAlex Elder 	   0x0001c06c + 0x4000 * GSI_EE_AP, 0x80);
744a4270cfSAlex Elder 
75*edc6158bSAlex Elder static const u32 reg_ev_ch_e_cntxt_0_fmask[] = {
76*edc6158bSAlex Elder 	[EV_CHTYPE]					= GENMASK(3, 0),
77*edc6158bSAlex Elder 	[EV_EE]						= GENMASK(7, 4),
78*edc6158bSAlex Elder 	[EV_EVCHID]					= GENMASK(15, 8),
79*edc6158bSAlex Elder 	[EV_INTYPE]					= BIT(16),
80*edc6158bSAlex Elder 						/* Bits 17-19 reserved */
81*edc6158bSAlex Elder 	[EV_CHSTATE]					= GENMASK(23, 20),
82*edc6158bSAlex Elder 	[EV_ELEMENT_SIZE]				= GENMASK(31, 24),
83*edc6158bSAlex Elder };
84*edc6158bSAlex Elder 
85*edc6158bSAlex Elder REG_STRIDE_FIELDS(EV_CH_E_CNTXT_0, ev_ch_e_cntxt_0,
864a4270cfSAlex Elder 		  0x0001d000 + 0x4000 * GSI_EE_AP, 0x80);
874a4270cfSAlex Elder 
884a4270cfSAlex Elder REG_STRIDE(EV_CH_E_CNTXT_1, ev_ch_e_cntxt_1,
894a4270cfSAlex Elder 	   0x0001d004 + 0x4000 * GSI_EE_AP, 0x80);
904a4270cfSAlex Elder 
914a4270cfSAlex Elder REG_STRIDE(EV_CH_E_CNTXT_2, ev_ch_e_cntxt_2,
924a4270cfSAlex Elder 	   0x0001d008 + 0x4000 * GSI_EE_AP, 0x80);
934a4270cfSAlex Elder 
944a4270cfSAlex Elder REG_STRIDE(EV_CH_E_CNTXT_3, ev_ch_e_cntxt_3,
954a4270cfSAlex Elder 	   0x0001d00c + 0x4000 * GSI_EE_AP, 0x80);
964a4270cfSAlex Elder 
974a4270cfSAlex Elder REG_STRIDE(EV_CH_E_CNTXT_4, ev_ch_e_cntxt_4,
984a4270cfSAlex Elder 	   0x0001d010 + 0x4000 * GSI_EE_AP, 0x80);
994a4270cfSAlex Elder 
100*edc6158bSAlex Elder static const u32 reg_ev_ch_e_cntxt_8_fmask[] = {
101*edc6158bSAlex Elder 	[EV_MODT]					= GENMASK(15, 0),
102*edc6158bSAlex Elder 	[EV_MODC]					= GENMASK(23, 16),
103*edc6158bSAlex Elder 	[EV_MOD_CNT]					= GENMASK(31, 24),
104*edc6158bSAlex Elder };
105*edc6158bSAlex Elder 
106*edc6158bSAlex Elder REG_STRIDE_FIELDS(EV_CH_E_CNTXT_8, ev_ch_e_cntxt_8,
1074a4270cfSAlex Elder 		  0x0001d020 + 0x4000 * GSI_EE_AP, 0x80);
1084a4270cfSAlex Elder 
1094a4270cfSAlex Elder REG_STRIDE(EV_CH_E_CNTXT_9, ev_ch_e_cntxt_9,
1104a4270cfSAlex Elder 	   0x0001d024 + 0x4000 * GSI_EE_AP, 0x80);
1114a4270cfSAlex Elder 
1124a4270cfSAlex Elder REG_STRIDE(EV_CH_E_CNTXT_10, ev_ch_e_cntxt_10,
1134a4270cfSAlex Elder 	   0x0001d028 + 0x4000 * GSI_EE_AP, 0x80);
1144a4270cfSAlex Elder 
1154a4270cfSAlex Elder REG_STRIDE(EV_CH_E_CNTXT_11, ev_ch_e_cntxt_11,
1164a4270cfSAlex Elder 	   0x0001d02c + 0x4000 * GSI_EE_AP, 0x80);
1174a4270cfSAlex Elder 
1184a4270cfSAlex Elder REG_STRIDE(EV_CH_E_CNTXT_12, ev_ch_e_cntxt_12,
1194a4270cfSAlex Elder 	   0x0001d030 + 0x4000 * GSI_EE_AP, 0x80);
1204a4270cfSAlex Elder 
1214a4270cfSAlex Elder REG_STRIDE(EV_CH_E_CNTXT_13, ev_ch_e_cntxt_13,
1224a4270cfSAlex Elder 	   0x0001d034 + 0x4000 * GSI_EE_AP, 0x80);
1234a4270cfSAlex Elder 
1244a4270cfSAlex Elder REG_STRIDE(EV_CH_E_SCRATCH_0, ev_ch_e_scratch_0,
1254a4270cfSAlex Elder 	   0x0001d048 + 0x4000 * GSI_EE_AP, 0x80);
1264a4270cfSAlex Elder 
1274a4270cfSAlex Elder REG_STRIDE(EV_CH_E_SCRATCH_1, ev_ch_e_scratch_1,
1284a4270cfSAlex Elder 	   0x0001d04c + 0x4000 * GSI_EE_AP, 0x80);
1294a4270cfSAlex Elder 
1304a4270cfSAlex Elder REG_STRIDE(CH_C_DOORBELL_0, ch_c_doorbell_0,
1314a4270cfSAlex Elder 	   0x0001e000 + 0x4000 * GSI_EE_AP, 0x08);
1324a4270cfSAlex Elder 
1334a4270cfSAlex Elder REG_STRIDE(EV_CH_E_DOORBELL_0, ev_ch_e_doorbell_0,
1344a4270cfSAlex Elder 	   0x0001e100 + 0x4000 * GSI_EE_AP, 0x08);
1354a4270cfSAlex Elder 
1364a4270cfSAlex Elder REG(GSI_STATUS, gsi_status, 0x0001f000 + 0x4000 * GSI_EE_AP);
1374a4270cfSAlex Elder 
1384a4270cfSAlex Elder REG(CH_CMD, ch_cmd, 0x0001f008 + 0x4000 * GSI_EE_AP);
1394a4270cfSAlex Elder 
1404a4270cfSAlex Elder REG(EV_CH_CMD, ev_ch_cmd, 0x0001f010 + 0x4000 * GSI_EE_AP);
1414a4270cfSAlex Elder 
1424a4270cfSAlex Elder REG(GENERIC_CMD, generic_cmd, 0x0001f018 + 0x4000 * GSI_EE_AP);
1434a4270cfSAlex Elder 
1444a4270cfSAlex Elder REG(HW_PARAM_2, hw_param_2, 0x0001f040 + 0x4000 * GSI_EE_AP);
1454a4270cfSAlex Elder 
1464a4270cfSAlex Elder REG(CNTXT_TYPE_IRQ, cntxt_type_irq, 0x0001f080 + 0x4000 * GSI_EE_AP);
1474a4270cfSAlex Elder 
1484a4270cfSAlex Elder REG(CNTXT_TYPE_IRQ_MSK, cntxt_type_irq_msk, 0x0001f088 + 0x4000 * GSI_EE_AP);
1494a4270cfSAlex Elder 
1504a4270cfSAlex Elder REG(CNTXT_SRC_CH_IRQ, cntxt_src_ch_irq, 0x0001f090 + 0x4000 * GSI_EE_AP);
1514a4270cfSAlex Elder 
1524a4270cfSAlex Elder REG(CNTXT_SRC_EV_CH_IRQ, cntxt_src_ev_ch_irq, 0x0001f094 + 0x4000 * GSI_EE_AP);
1534a4270cfSAlex Elder 
1544a4270cfSAlex Elder REG(CNTXT_SRC_CH_IRQ_MSK, cntxt_src_ch_irq_msk,
1554a4270cfSAlex Elder     0x0001f098 + 0x4000 * GSI_EE_AP);
1564a4270cfSAlex Elder 
1574a4270cfSAlex Elder REG(CNTXT_SRC_EV_CH_IRQ_MSK, cntxt_src_ev_ch_irq_msk,
1584a4270cfSAlex Elder     0x0001f09c + 0x4000 * GSI_EE_AP);
1594a4270cfSAlex Elder 
1604a4270cfSAlex Elder REG(CNTXT_SRC_CH_IRQ_CLR, cntxt_src_ch_irq_clr,
1614a4270cfSAlex Elder     0x0001f0a0 + 0x4000 * GSI_EE_AP);
1624a4270cfSAlex Elder 
1634a4270cfSAlex Elder REG(CNTXT_SRC_EV_CH_IRQ_CLR, cntxt_src_ev_ch_irq_clr,
1644a4270cfSAlex Elder     0x0001f0a4 + 0x4000 * GSI_EE_AP);
1654a4270cfSAlex Elder 
1664a4270cfSAlex Elder REG(CNTXT_SRC_IEOB_IRQ, cntxt_src_ieob_irq, 0x0001f0b0 + 0x4000 * GSI_EE_AP);
1674a4270cfSAlex Elder 
1684a4270cfSAlex Elder REG(CNTXT_SRC_IEOB_IRQ_MSK, cntxt_src_ieob_irq_msk,
1694a4270cfSAlex Elder     0x0001f0b8 + 0x4000 * GSI_EE_AP);
1704a4270cfSAlex Elder 
1714a4270cfSAlex Elder REG(CNTXT_SRC_IEOB_IRQ_CLR, cntxt_src_ieob_irq_clr,
1724a4270cfSAlex Elder     0x0001f0c0 + 0x4000 * GSI_EE_AP);
1734a4270cfSAlex Elder 
1744a4270cfSAlex Elder REG(CNTXT_GLOB_IRQ_STTS, cntxt_glob_irq_stts, 0x0001f100 + 0x4000 * GSI_EE_AP);
1754a4270cfSAlex Elder 
1764a4270cfSAlex Elder REG(CNTXT_GLOB_IRQ_EN, cntxt_glob_irq_en, 0x0001f108 + 0x4000 * GSI_EE_AP);
1774a4270cfSAlex Elder 
1784a4270cfSAlex Elder REG(CNTXT_GLOB_IRQ_CLR, cntxt_glob_irq_clr, 0x0001f110 + 0x4000 * GSI_EE_AP);
1794a4270cfSAlex Elder 
1804a4270cfSAlex Elder REG(CNTXT_GSI_IRQ_STTS, cntxt_gsi_irq_stts, 0x0001f118 + 0x4000 * GSI_EE_AP);
1814a4270cfSAlex Elder 
1824a4270cfSAlex Elder REG(CNTXT_GSI_IRQ_EN, cntxt_gsi_irq_en, 0x0001f120 + 0x4000 * GSI_EE_AP);
1834a4270cfSAlex Elder 
1844a4270cfSAlex Elder REG(CNTXT_GSI_IRQ_CLR, cntxt_gsi_irq_clr, 0x0001f128 + 0x4000 * GSI_EE_AP);
1854a4270cfSAlex Elder 
1864a4270cfSAlex Elder REG(CNTXT_INTSET, cntxt_intset, 0x0001f180 + 0x4000 * GSI_EE_AP);
1874a4270cfSAlex Elder 
1884a4270cfSAlex Elder REG(CNTXT_SCRATCH_0, cntxt_scratch_0, 0x0001f400 + 0x4000 * GSI_EE_AP);
1894a4270cfSAlex Elder 
1904a4270cfSAlex Elder static const struct reg *reg_array[] = {
1914a4270cfSAlex Elder 	[INTER_EE_SRC_CH_IRQ_MSK]	= &reg_inter_ee_src_ch_irq_msk,
1924a4270cfSAlex Elder 	[INTER_EE_SRC_EV_CH_IRQ_MSK]	= &reg_inter_ee_src_ev_ch_irq_msk,
1934a4270cfSAlex Elder 	[CH_C_CNTXT_0]			= &reg_ch_c_cntxt_0,
1944a4270cfSAlex Elder 	[CH_C_CNTXT_1]			= &reg_ch_c_cntxt_1,
1954a4270cfSAlex Elder 	[CH_C_CNTXT_2]			= &reg_ch_c_cntxt_2,
1964a4270cfSAlex Elder 	[CH_C_CNTXT_3]			= &reg_ch_c_cntxt_3,
1974a4270cfSAlex Elder 	[CH_C_QOS]			= &reg_ch_c_qos,
1984a4270cfSAlex Elder 	[CH_C_SCRATCH_0]		= &reg_ch_c_scratch_0,
1994a4270cfSAlex Elder 	[CH_C_SCRATCH_1]		= &reg_ch_c_scratch_1,
2004a4270cfSAlex Elder 	[CH_C_SCRATCH_2]		= &reg_ch_c_scratch_2,
2014a4270cfSAlex Elder 	[CH_C_SCRATCH_3]		= &reg_ch_c_scratch_3,
2024a4270cfSAlex Elder 	[EV_CH_E_CNTXT_0]		= &reg_ev_ch_e_cntxt_0,
2034a4270cfSAlex Elder 	[EV_CH_E_CNTXT_1]		= &reg_ev_ch_e_cntxt_1,
2044a4270cfSAlex Elder 	[EV_CH_E_CNTXT_2]		= &reg_ev_ch_e_cntxt_2,
2054a4270cfSAlex Elder 	[EV_CH_E_CNTXT_3]		= &reg_ev_ch_e_cntxt_3,
2064a4270cfSAlex Elder 	[EV_CH_E_CNTXT_4]		= &reg_ev_ch_e_cntxt_4,
2074a4270cfSAlex Elder 	[EV_CH_E_CNTXT_8]		= &reg_ev_ch_e_cntxt_8,
2084a4270cfSAlex Elder 	[EV_CH_E_CNTXT_9]		= &reg_ev_ch_e_cntxt_9,
2094a4270cfSAlex Elder 	[EV_CH_E_CNTXT_10]		= &reg_ev_ch_e_cntxt_10,
2104a4270cfSAlex Elder 	[EV_CH_E_CNTXT_11]		= &reg_ev_ch_e_cntxt_11,
2114a4270cfSAlex Elder 	[EV_CH_E_CNTXT_12]		= &reg_ev_ch_e_cntxt_12,
2124a4270cfSAlex Elder 	[EV_CH_E_CNTXT_13]		= &reg_ev_ch_e_cntxt_13,
2134a4270cfSAlex Elder 	[EV_CH_E_SCRATCH_0]		= &reg_ev_ch_e_scratch_0,
2144a4270cfSAlex Elder 	[EV_CH_E_SCRATCH_1]		= &reg_ev_ch_e_scratch_1,
2154a4270cfSAlex Elder 	[CH_C_DOORBELL_0]		= &reg_ch_c_doorbell_0,
2164a4270cfSAlex Elder 	[EV_CH_E_DOORBELL_0]		= &reg_ev_ch_e_doorbell_0,
2174a4270cfSAlex Elder 	[GSI_STATUS]			= &reg_gsi_status,
2184a4270cfSAlex Elder 	[CH_CMD]			= &reg_ch_cmd,
2194a4270cfSAlex Elder 	[EV_CH_CMD]			= &reg_ev_ch_cmd,
2204a4270cfSAlex Elder 	[GENERIC_CMD]			= &reg_generic_cmd,
2214a4270cfSAlex Elder 	[HW_PARAM_2]			= &reg_hw_param_2,
2224a4270cfSAlex Elder 	[CNTXT_TYPE_IRQ]		= &reg_cntxt_type_irq,
2234a4270cfSAlex Elder 	[CNTXT_TYPE_IRQ_MSK]		= &reg_cntxt_type_irq_msk,
2244a4270cfSAlex Elder 	[CNTXT_SRC_CH_IRQ]		= &reg_cntxt_src_ch_irq,
2254a4270cfSAlex Elder 	[CNTXT_SRC_EV_CH_IRQ]		= &reg_cntxt_src_ev_ch_irq,
2264a4270cfSAlex Elder 	[CNTXT_SRC_CH_IRQ_MSK]		= &reg_cntxt_src_ch_irq_msk,
2274a4270cfSAlex Elder 	[CNTXT_SRC_EV_CH_IRQ_MSK]	= &reg_cntxt_src_ev_ch_irq_msk,
2284a4270cfSAlex Elder 	[CNTXT_SRC_CH_IRQ_CLR]		= &reg_cntxt_src_ch_irq_clr,
2294a4270cfSAlex Elder 	[CNTXT_SRC_EV_CH_IRQ_CLR]	= &reg_cntxt_src_ev_ch_irq_clr,
2304a4270cfSAlex Elder 	[CNTXT_SRC_IEOB_IRQ]		= &reg_cntxt_src_ieob_irq,
2314a4270cfSAlex Elder 	[CNTXT_SRC_IEOB_IRQ_MSK]	= &reg_cntxt_src_ieob_irq_msk,
2324a4270cfSAlex Elder 	[CNTXT_SRC_IEOB_IRQ_CLR]	= &reg_cntxt_src_ieob_irq_clr,
2334a4270cfSAlex Elder 	[CNTXT_GLOB_IRQ_STTS]		= &reg_cntxt_glob_irq_stts,
2344a4270cfSAlex Elder 	[CNTXT_GLOB_IRQ_EN]		= &reg_cntxt_glob_irq_en,
2354a4270cfSAlex Elder 	[CNTXT_GLOB_IRQ_CLR]		= &reg_cntxt_glob_irq_clr,
2364a4270cfSAlex Elder 	[CNTXT_GSI_IRQ_STTS]		= &reg_cntxt_gsi_irq_stts,
2374a4270cfSAlex Elder 	[CNTXT_GSI_IRQ_EN]		= &reg_cntxt_gsi_irq_en,
2384a4270cfSAlex Elder 	[CNTXT_GSI_IRQ_CLR]		= &reg_cntxt_gsi_irq_clr,
2394a4270cfSAlex Elder 	[CNTXT_INTSET]			= &reg_cntxt_intset,
2404a4270cfSAlex Elder 	[ERROR_LOG]			= &reg_error_log,
2414a4270cfSAlex Elder 	[ERROR_LOG_CLR]			= &reg_error_log_clr,
2424a4270cfSAlex Elder 	[CNTXT_SCRATCH_0]		= &reg_cntxt_scratch_0,
2434a4270cfSAlex Elder };
2444a4270cfSAlex Elder 
2454a4270cfSAlex Elder const struct regs gsi_regs_v4_0 = {
2464a4270cfSAlex Elder 	.reg_count	= ARRAY_SIZE(reg_array),
2474a4270cfSAlex Elder 	.reg		= reg_array,
2484a4270cfSAlex Elder };
249