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] = ®_inter_ee_src_ch_irq_msk, 148*4a4270cfSAlex Elder [INTER_EE_SRC_EV_CH_IRQ_MSK] = ®_inter_ee_src_ev_ch_irq_msk, 149*4a4270cfSAlex Elder [CH_C_CNTXT_0] = ®_ch_c_cntxt_0, 150*4a4270cfSAlex Elder [CH_C_CNTXT_1] = ®_ch_c_cntxt_1, 151*4a4270cfSAlex Elder [CH_C_CNTXT_2] = ®_ch_c_cntxt_2, 152*4a4270cfSAlex Elder [CH_C_CNTXT_3] = ®_ch_c_cntxt_3, 153*4a4270cfSAlex Elder [CH_C_QOS] = ®_ch_c_qos, 154*4a4270cfSAlex Elder [CH_C_SCRATCH_0] = ®_ch_c_scratch_0, 155*4a4270cfSAlex Elder [CH_C_SCRATCH_1] = ®_ch_c_scratch_1, 156*4a4270cfSAlex Elder [CH_C_SCRATCH_2] = ®_ch_c_scratch_2, 157*4a4270cfSAlex Elder [CH_C_SCRATCH_3] = ®_ch_c_scratch_3, 158*4a4270cfSAlex Elder [EV_CH_E_CNTXT_0] = ®_ev_ch_e_cntxt_0, 159*4a4270cfSAlex Elder [EV_CH_E_CNTXT_1] = ®_ev_ch_e_cntxt_1, 160*4a4270cfSAlex Elder [EV_CH_E_CNTXT_2] = ®_ev_ch_e_cntxt_2, 161*4a4270cfSAlex Elder [EV_CH_E_CNTXT_3] = ®_ev_ch_e_cntxt_3, 162*4a4270cfSAlex Elder [EV_CH_E_CNTXT_4] = ®_ev_ch_e_cntxt_4, 163*4a4270cfSAlex Elder [EV_CH_E_CNTXT_8] = ®_ev_ch_e_cntxt_8, 164*4a4270cfSAlex Elder [EV_CH_E_CNTXT_9] = ®_ev_ch_e_cntxt_9, 165*4a4270cfSAlex Elder [EV_CH_E_CNTXT_10] = ®_ev_ch_e_cntxt_10, 166*4a4270cfSAlex Elder [EV_CH_E_CNTXT_11] = ®_ev_ch_e_cntxt_11, 167*4a4270cfSAlex Elder [EV_CH_E_CNTXT_12] = ®_ev_ch_e_cntxt_12, 168*4a4270cfSAlex Elder [EV_CH_E_CNTXT_13] = ®_ev_ch_e_cntxt_13, 169*4a4270cfSAlex Elder [EV_CH_E_SCRATCH_0] = ®_ev_ch_e_scratch_0, 170*4a4270cfSAlex Elder [EV_CH_E_SCRATCH_1] = ®_ev_ch_e_scratch_1, 171*4a4270cfSAlex Elder [CH_C_DOORBELL_0] = ®_ch_c_doorbell_0, 172*4a4270cfSAlex Elder [EV_CH_E_DOORBELL_0] = ®_ev_ch_e_doorbell_0, 173*4a4270cfSAlex Elder [GSI_STATUS] = ®_gsi_status, 174*4a4270cfSAlex Elder [CH_CMD] = ®_ch_cmd, 175*4a4270cfSAlex Elder [EV_CH_CMD] = ®_ev_ch_cmd, 176*4a4270cfSAlex Elder [GENERIC_CMD] = ®_generic_cmd, 177*4a4270cfSAlex Elder [HW_PARAM_2] = ®_hw_param_2, 178*4a4270cfSAlex Elder [CNTXT_TYPE_IRQ] = ®_cntxt_type_irq, 179*4a4270cfSAlex Elder [CNTXT_TYPE_IRQ_MSK] = ®_cntxt_type_irq_msk, 180*4a4270cfSAlex Elder [CNTXT_SRC_CH_IRQ] = ®_cntxt_src_ch_irq, 181*4a4270cfSAlex Elder [CNTXT_SRC_EV_CH_IRQ] = ®_cntxt_src_ev_ch_irq, 182*4a4270cfSAlex Elder [CNTXT_SRC_CH_IRQ_MSK] = ®_cntxt_src_ch_irq_msk, 183*4a4270cfSAlex Elder [CNTXT_SRC_EV_CH_IRQ_MSK] = ®_cntxt_src_ev_ch_irq_msk, 184*4a4270cfSAlex Elder [CNTXT_SRC_CH_IRQ_CLR] = ®_cntxt_src_ch_irq_clr, 185*4a4270cfSAlex Elder [CNTXT_SRC_EV_CH_IRQ_CLR] = ®_cntxt_src_ev_ch_irq_clr, 186*4a4270cfSAlex Elder [CNTXT_SRC_IEOB_IRQ] = ®_cntxt_src_ieob_irq, 187*4a4270cfSAlex Elder [CNTXT_SRC_IEOB_IRQ_MSK] = ®_cntxt_src_ieob_irq_msk, 188*4a4270cfSAlex Elder [CNTXT_SRC_IEOB_IRQ_CLR] = ®_cntxt_src_ieob_irq_clr, 189*4a4270cfSAlex Elder [CNTXT_GLOB_IRQ_STTS] = ®_cntxt_glob_irq_stts, 190*4a4270cfSAlex Elder [CNTXT_GLOB_IRQ_EN] = ®_cntxt_glob_irq_en, 191*4a4270cfSAlex Elder [CNTXT_GLOB_IRQ_CLR] = ®_cntxt_glob_irq_clr, 192*4a4270cfSAlex Elder [CNTXT_GSI_IRQ_STTS] = ®_cntxt_gsi_irq_stts, 193*4a4270cfSAlex Elder [CNTXT_GSI_IRQ_EN] = ®_cntxt_gsi_irq_en, 194*4a4270cfSAlex Elder [CNTXT_GSI_IRQ_CLR] = ®_cntxt_gsi_irq_clr, 195*4a4270cfSAlex Elder [CNTXT_INTSET] = ®_cntxt_intset, 196*4a4270cfSAlex Elder [ERROR_LOG] = ®_error_log, 197*4a4270cfSAlex Elder [ERROR_LOG_CLR] = ®_error_log_clr, 198*4a4270cfSAlex Elder [CNTXT_SCRATCH_0] = ®_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