1*85e5c210SXuhui Lin /* 2*85e5c210SXuhui Lin * (C) Copyright 2024 Rockchip Electronics Co., Ltd. 3*85e5c210SXuhui Lin * 4*85e5c210SXuhui Lin * SPDX-License-Identifier: GPL-2.0+ 5*85e5c210SXuhui Lin */ 6*85e5c210SXuhui Lin #ifndef _ASM_ARCH_GRF_RK3506_H 7*85e5c210SXuhui Lin #define _ASM_ARCH_GRF_RK3506_H 8*85e5c210SXuhui Lin 9*85e5c210SXuhui Lin #include <common.h> 10*85e5c210SXuhui Lin 11*85e5c210SXuhui Lin /* gpio0_ioc register structure define */ 12*85e5c210SXuhui Lin struct rk3506_gpio0_ioc_reg { 13*85e5c210SXuhui Lin uint32_t gpio0a_iomux_sel_0; /* address offset: 0x0000 */ 14*85e5c210SXuhui Lin uint32_t gpio0a_iomux_sel_1; /* address offset: 0x0004 */ 15*85e5c210SXuhui Lin uint32_t gpio0b_iomux_sel_0; /* address offset: 0x0008 */ 16*85e5c210SXuhui Lin uint32_t gpio0b_iomux_sel_1; /* address offset: 0x000c */ 17*85e5c210SXuhui Lin uint32_t gpio0c_iomux_sel_0; /* address offset: 0x0010 */ 18*85e5c210SXuhui Lin uint32_t gpio0c_iomux_sel_1; /* address offset: 0x0014 */ 19*85e5c210SXuhui Lin uint32_t reserved0018[58]; /* address offset: 0x0018 */ 20*85e5c210SXuhui Lin uint32_t gpio0a_ds_0; /* address offset: 0x0100 */ 21*85e5c210SXuhui Lin uint32_t gpio0a_ds_1; /* address offset: 0x0104 */ 22*85e5c210SXuhui Lin uint32_t gpio0a_ds_2; /* address offset: 0x0108 */ 23*85e5c210SXuhui Lin uint32_t gpio0a_ds_3; /* address offset: 0x010c */ 24*85e5c210SXuhui Lin uint32_t gpio0b_ds_0; /* address offset: 0x0110 */ 25*85e5c210SXuhui Lin uint32_t gpio0b_ds_1; /* address offset: 0x0114 */ 26*85e5c210SXuhui Lin uint32_t gpio0b_ds_2; /* address offset: 0x0118 */ 27*85e5c210SXuhui Lin uint32_t gpio0b_ds_3; /* address offset: 0x011c */ 28*85e5c210SXuhui Lin uint32_t gpio0c_ds_0; /* address offset: 0x0120 */ 29*85e5c210SXuhui Lin uint32_t gpio0c_ds_1; /* address offset: 0x0124 */ 30*85e5c210SXuhui Lin uint32_t gpio0c_ds_2; /* address offset: 0x0128 */ 31*85e5c210SXuhui Lin uint32_t gpio0c_ds_3; /* address offset: 0x012c */ 32*85e5c210SXuhui Lin uint32_t reserved0130[52]; /* address offset: 0x0130 */ 33*85e5c210SXuhui Lin uint32_t gpio0a_pull; /* address offset: 0x0200 */ 34*85e5c210SXuhui Lin uint32_t gpio0b_pull; /* address offset: 0x0204 */ 35*85e5c210SXuhui Lin uint32_t gpio0c_pull; /* address offset: 0x0208 */ 36*85e5c210SXuhui Lin uint32_t reserved020c[61]; /* address offset: 0x020c */ 37*85e5c210SXuhui Lin uint32_t gpio0a_ie; /* address offset: 0x0300 */ 38*85e5c210SXuhui Lin uint32_t gpio0b_ie; /* address offset: 0x0304 */ 39*85e5c210SXuhui Lin uint32_t gpio0c_ie; /* address offset: 0x0308 */ 40*85e5c210SXuhui Lin uint32_t reserved030c[61]; /* address offset: 0x030c */ 41*85e5c210SXuhui Lin uint32_t gpio0a_smt; /* address offset: 0x0400 */ 42*85e5c210SXuhui Lin uint32_t gpio0b_smt; /* address offset: 0x0404 */ 43*85e5c210SXuhui Lin uint32_t gpio0c_smt; /* address offset: 0x0408 */ 44*85e5c210SXuhui Lin uint32_t reserved040c[61]; /* address offset: 0x040c */ 45*85e5c210SXuhui Lin uint32_t gpio0a_sus; /* address offset: 0x0500 */ 46*85e5c210SXuhui Lin uint32_t gpio0b_sus; /* address offset: 0x0504 */ 47*85e5c210SXuhui Lin uint32_t gpio0c_sus; /* address offset: 0x0508 */ 48*85e5c210SXuhui Lin uint32_t reserved050c[61]; /* address offset: 0x050c */ 49*85e5c210SXuhui Lin uint32_t gpio0a_sl; /* address offset: 0x0600 */ 50*85e5c210SXuhui Lin uint32_t gpio0b_sl; /* address offset: 0x0604 */ 51*85e5c210SXuhui Lin uint32_t gpio0c_sl; /* address offset: 0x0608 */ 52*85e5c210SXuhui Lin uint32_t reserved060c[61]; /* address offset: 0x060c */ 53*85e5c210SXuhui Lin uint32_t gpio0a_od; /* address offset: 0x0700 */ 54*85e5c210SXuhui Lin uint32_t gpio0b_od; /* address offset: 0x0704 */ 55*85e5c210SXuhui Lin uint32_t gpio0c_od; /* address offset: 0x0708 */ 56*85e5c210SXuhui Lin uint32_t reserved070c[61]; /* address offset: 0x070c */ 57*85e5c210SXuhui Lin uint32_t gpio0_iddq; /* address offset: 0x0800 */ 58*85e5c210SXuhui Lin uint32_t reserved0804[11]; /* address offset: 0x0804 */ 59*85e5c210SXuhui Lin uint32_t gpio0d_con; /* address offset: 0x0830 */ 60*85e5c210SXuhui Lin }; 61*85e5c210SXuhui Lin 62*85e5c210SXuhui Lin check_member(rk3506_gpio0_ioc_reg, gpio0d_con, 0x0830); 63*85e5c210SXuhui Lin 64*85e5c210SXuhui Lin /* gpio1_ioc register structure define */ 65*85e5c210SXuhui Lin struct rk3506_gpio1_ioc_reg { 66*85e5c210SXuhui Lin uint32_t reserved0000[8]; /* address offset: 0x0000 */ 67*85e5c210SXuhui Lin uint32_t gpio1a_iomux_sel_0; /* address offset: 0x0020 */ 68*85e5c210SXuhui Lin uint32_t gpio1a_iomux_sel_1; /* address offset: 0x0024 */ 69*85e5c210SXuhui Lin uint32_t gpio1b_iomux_sel_0; /* address offset: 0x0028 */ 70*85e5c210SXuhui Lin uint32_t gpio1b_iomux_sel_1; /* address offset: 0x002c */ 71*85e5c210SXuhui Lin uint32_t gpio1c_iomux_sel_0; /* address offset: 0x0030 */ 72*85e5c210SXuhui Lin uint32_t gpio1c_iomux_sel_1; /* address offset: 0x0034 */ 73*85e5c210SXuhui Lin uint32_t gpio1d_iomux_sel_0; /* address offset: 0x0038 */ 74*85e5c210SXuhui Lin uint32_t reserved003c[65]; /* address offset: 0x003c */ 75*85e5c210SXuhui Lin uint32_t gpio1a_ds_0; /* address offset: 0x0140 */ 76*85e5c210SXuhui Lin uint32_t gpio1a_ds_1; /* address offset: 0x0144 */ 77*85e5c210SXuhui Lin uint32_t gpio1a_ds_2; /* address offset: 0x0148 */ 78*85e5c210SXuhui Lin uint32_t gpio1a_ds_3; /* address offset: 0x014c */ 79*85e5c210SXuhui Lin uint32_t gpio1b_ds_0; /* address offset: 0x0150 */ 80*85e5c210SXuhui Lin uint32_t gpio1b_ds_1; /* address offset: 0x0154 */ 81*85e5c210SXuhui Lin uint32_t gpio1b_ds_2; /* address offset: 0x0158 */ 82*85e5c210SXuhui Lin uint32_t gpio1b_ds_3; /* address offset: 0x015c */ 83*85e5c210SXuhui Lin uint32_t gpio1c_ds_0; /* address offset: 0x0160 */ 84*85e5c210SXuhui Lin uint32_t gpio1c_ds_1; /* address offset: 0x0164 */ 85*85e5c210SXuhui Lin uint32_t gpio1c_ds_2; /* address offset: 0x0168 */ 86*85e5c210SXuhui Lin uint32_t gpio1c_ds_3; /* address offset: 0x016c */ 87*85e5c210SXuhui Lin uint32_t gpio1d_ds_0; /* address offset: 0x0170 */ 88*85e5c210SXuhui Lin uint32_t gpio1d_ds_1; /* address offset: 0x0174 */ 89*85e5c210SXuhui Lin uint32_t reserved0178[38]; /* address offset: 0x0178 */ 90*85e5c210SXuhui Lin uint32_t gpio1a_pull; /* address offset: 0x0210 */ 91*85e5c210SXuhui Lin uint32_t gpio1b_pull; /* address offset: 0x0214 */ 92*85e5c210SXuhui Lin uint32_t gpio1c_pull; /* address offset: 0x0218 */ 93*85e5c210SXuhui Lin uint32_t gpio1d_pull; /* address offset: 0x021c */ 94*85e5c210SXuhui Lin uint32_t reserved0220[60]; /* address offset: 0x0220 */ 95*85e5c210SXuhui Lin uint32_t gpio1a_ie; /* address offset: 0x0310 */ 96*85e5c210SXuhui Lin uint32_t gpio1b_ie; /* address offset: 0x0314 */ 97*85e5c210SXuhui Lin uint32_t gpio1c_ie; /* address offset: 0x0318 */ 98*85e5c210SXuhui Lin uint32_t gpio1d_ie; /* address offset: 0x031c */ 99*85e5c210SXuhui Lin uint32_t reserved0320[60]; /* address offset: 0x0320 */ 100*85e5c210SXuhui Lin uint32_t gpio1a_smt; /* address offset: 0x0410 */ 101*85e5c210SXuhui Lin uint32_t gpio1b_smt; /* address offset: 0x0414 */ 102*85e5c210SXuhui Lin uint32_t gpio1c_smt; /* address offset: 0x0418 */ 103*85e5c210SXuhui Lin uint32_t gpio1d_smt; /* address offset: 0x041c */ 104*85e5c210SXuhui Lin uint32_t reserved0420[60]; /* address offset: 0x0420 */ 105*85e5c210SXuhui Lin uint32_t gpio1a_sus; /* address offset: 0x0510 */ 106*85e5c210SXuhui Lin uint32_t gpio1b_sus; /* address offset: 0x0514 */ 107*85e5c210SXuhui Lin uint32_t gpio1c_sus; /* address offset: 0x0518 */ 108*85e5c210SXuhui Lin uint32_t gpio1d_sus; /* address offset: 0x051c */ 109*85e5c210SXuhui Lin uint32_t reserved0520[60]; /* address offset: 0x0520 */ 110*85e5c210SXuhui Lin uint32_t gpio1a_sl; /* address offset: 0x0610 */ 111*85e5c210SXuhui Lin uint32_t gpio1b_sl; /* address offset: 0x0614 */ 112*85e5c210SXuhui Lin uint32_t gpio1c_sl; /* address offset: 0x0618 */ 113*85e5c210SXuhui Lin uint32_t gpio1d_sl; /* address offset: 0x061c */ 114*85e5c210SXuhui Lin uint32_t reserved0620[60]; /* address offset: 0x0620 */ 115*85e5c210SXuhui Lin uint32_t gpio1a_od; /* address offset: 0x0710 */ 116*85e5c210SXuhui Lin uint32_t gpio1b_od; /* address offset: 0x0714 */ 117*85e5c210SXuhui Lin uint32_t gpio1c_od; /* address offset: 0x0718 */ 118*85e5c210SXuhui Lin uint32_t gpio1d_od; /* address offset: 0x071c */ 119*85e5c210SXuhui Lin uint32_t reserved0720[60]; /* address offset: 0x0720 */ 120*85e5c210SXuhui Lin uint32_t gpio1_iddq; /* address offset: 0x0810 */ 121*85e5c210SXuhui Lin }; 122*85e5c210SXuhui Lin 123*85e5c210SXuhui Lin check_member(rk3506_gpio1_ioc_reg, gpio1_iddq, 0x0810); 124*85e5c210SXuhui Lin 125*85e5c210SXuhui Lin /* gpio2_ioc register structure define */ 126*85e5c210SXuhui Lin struct rk3506_gpio2_ioc_reg { 127*85e5c210SXuhui Lin uint32_t reserved0000[16]; /* address offset: 0x0000 */ 128*85e5c210SXuhui Lin uint32_t gpio2a_iomux_sel_0; /* address offset: 0x0040 */ 129*85e5c210SXuhui Lin uint32_t gpio2a_iomux_sel_1; /* address offset: 0x0044 */ 130*85e5c210SXuhui Lin uint32_t gpio2b_iomux_sel_0; /* address offset: 0x0048 */ 131*85e5c210SXuhui Lin uint32_t gpio2b_iomux_sel_1; /* address offset: 0x004c */ 132*85e5c210SXuhui Lin uint32_t gpio2c_iomux_sel_0; /* address offset: 0x0050 */ 133*85e5c210SXuhui Lin uint32_t reserved0054[75]; /* address offset: 0x0054 */ 134*85e5c210SXuhui Lin uint32_t gpio2a_ds_0; /* address offset: 0x0180 */ 135*85e5c210SXuhui Lin uint32_t gpio2a_ds_1; /* address offset: 0x0184 */ 136*85e5c210SXuhui Lin uint32_t gpio2a_ds_2; /* address offset: 0x0188 */ 137*85e5c210SXuhui Lin uint32_t reserved018c; /* address offset: 0x018c */ 138*85e5c210SXuhui Lin uint32_t gpio2b_ds_0; /* address offset: 0x0190 */ 139*85e5c210SXuhui Lin uint32_t gpio2b_ds_1; /* address offset: 0x0194 */ 140*85e5c210SXuhui Lin uint32_t gpio2b_ds_2; /* address offset: 0x0198 */ 141*85e5c210SXuhui Lin uint32_t gpio2b_ds_3; /* address offset: 0x019c */ 142*85e5c210SXuhui Lin uint32_t gpio2c_ds_0; /* address offset: 0x01a0 */ 143*85e5c210SXuhui Lin uint32_t reserved01a4[31]; /* address offset: 0x01a4 */ 144*85e5c210SXuhui Lin uint32_t gpio2a_pull; /* address offset: 0x0220 */ 145*85e5c210SXuhui Lin uint32_t gpio2b_pull; /* address offset: 0x0224 */ 146*85e5c210SXuhui Lin uint32_t gpio2c_pull; /* address offset: 0x0228 */ 147*85e5c210SXuhui Lin uint32_t reserved022c[61]; /* address offset: 0x022c */ 148*85e5c210SXuhui Lin uint32_t gpio2a_ie; /* address offset: 0x0320 */ 149*85e5c210SXuhui Lin uint32_t gpio2b_ie; /* address offset: 0x0324 */ 150*85e5c210SXuhui Lin uint32_t gpio2c_ie; /* address offset: 0x0328 */ 151*85e5c210SXuhui Lin uint32_t reserved032c[61]; /* address offset: 0x032c */ 152*85e5c210SXuhui Lin uint32_t gpio2a_smt; /* address offset: 0x0420 */ 153*85e5c210SXuhui Lin uint32_t gpio2b_smt; /* address offset: 0x0424 */ 154*85e5c210SXuhui Lin uint32_t gpio2c_smt; /* address offset: 0x0428 */ 155*85e5c210SXuhui Lin uint32_t reserved042c[61]; /* address offset: 0x042c */ 156*85e5c210SXuhui Lin uint32_t gpio2a_sus; /* address offset: 0x0520 */ 157*85e5c210SXuhui Lin uint32_t gpio2b_sus; /* address offset: 0x0524 */ 158*85e5c210SXuhui Lin uint32_t gpio2c_sus; /* address offset: 0x0528 */ 159*85e5c210SXuhui Lin uint32_t reserved052c[61]; /* address offset: 0x052c */ 160*85e5c210SXuhui Lin uint32_t gpio2a_sl; /* address offset: 0x0620 */ 161*85e5c210SXuhui Lin uint32_t gpio2b_sl; /* address offset: 0x0624 */ 162*85e5c210SXuhui Lin uint32_t gpio2c_sl; /* address offset: 0x0628 */ 163*85e5c210SXuhui Lin uint32_t reserved062c[61]; /* address offset: 0x062c */ 164*85e5c210SXuhui Lin uint32_t gpio2a_od; /* address offset: 0x0720 */ 165*85e5c210SXuhui Lin uint32_t gpio2b_od; /* address offset: 0x0724 */ 166*85e5c210SXuhui Lin uint32_t gpio2c_od; /* address offset: 0x0728 */ 167*85e5c210SXuhui Lin uint32_t reserved072c[61]; /* address offset: 0x072c */ 168*85e5c210SXuhui Lin uint32_t gpio2_iddq; /* address offset: 0x0820 */ 169*85e5c210SXuhui Lin }; 170*85e5c210SXuhui Lin 171*85e5c210SXuhui Lin check_member(rk3506_gpio2_ioc_reg, gpio2_iddq, 0x0820); 172*85e5c210SXuhui Lin 173*85e5c210SXuhui Lin /* gpio3_ioc register structure define */ 174*85e5c210SXuhui Lin struct rk3506_gpio3_ioc_reg { 175*85e5c210SXuhui Lin uint32_t reserved0000[24]; /* address offset: 0x0000 */ 176*85e5c210SXuhui Lin uint32_t gpio3a_iomux_sel_0; /* address offset: 0x0060 */ 177*85e5c210SXuhui Lin uint32_t gpio3a_iomux_sel_1; /* address offset: 0x0064 */ 178*85e5c210SXuhui Lin uint32_t gpio3b_iomux_sel_0; /* address offset: 0x0068 */ 179*85e5c210SXuhui Lin uint32_t gpio3b_iomux_sel_1; /* address offset: 0x006c */ 180*85e5c210SXuhui Lin uint32_t reserved0070[84]; /* address offset: 0x0070 */ 181*85e5c210SXuhui Lin uint32_t gpio3a_ds_0; /* address offset: 0x01c0 */ 182*85e5c210SXuhui Lin uint32_t gpio3a_ds_1; /* address offset: 0x01c4 */ 183*85e5c210SXuhui Lin uint32_t gpio3a_ds_2; /* address offset: 0x01c8 */ 184*85e5c210SXuhui Lin uint32_t gpio3a_ds_3; /* address offset: 0x01cc */ 185*85e5c210SXuhui Lin uint32_t gpio3b_ds_0; /* address offset: 0x01d0 */ 186*85e5c210SXuhui Lin uint32_t gpio3b_ds_1; /* address offset: 0x01d4 */ 187*85e5c210SXuhui Lin uint32_t gpio3b_ds_2; /* address offset: 0x01d8 */ 188*85e5c210SXuhui Lin uint32_t gpio3b_ds_3; /* address offset: 0x01dc */ 189*85e5c210SXuhui Lin uint32_t reserved01e0[20]; /* address offset: 0x01e0 */ 190*85e5c210SXuhui Lin uint32_t gpio3a_pull; /* address offset: 0x0230 */ 191*85e5c210SXuhui Lin uint32_t gpio3b_pull; /* address offset: 0x0234 */ 192*85e5c210SXuhui Lin uint32_t reserved0238[62]; /* address offset: 0x0238 */ 193*85e5c210SXuhui Lin uint32_t gpio3a_ie; /* address offset: 0x0330 */ 194*85e5c210SXuhui Lin uint32_t gpio3b_ie; /* address offset: 0x0334 */ 195*85e5c210SXuhui Lin uint32_t reserved0338[62]; /* address offset: 0x0338 */ 196*85e5c210SXuhui Lin uint32_t gpio3a_smt; /* address offset: 0x0430 */ 197*85e5c210SXuhui Lin uint32_t gpio3b_smt; /* address offset: 0x0434 */ 198*85e5c210SXuhui Lin uint32_t reserved0438[62]; /* address offset: 0x0438 */ 199*85e5c210SXuhui Lin uint32_t gpio3a_sus; /* address offset: 0x0530 */ 200*85e5c210SXuhui Lin uint32_t gpio3b_sus; /* address offset: 0x0534 */ 201*85e5c210SXuhui Lin uint32_t reserved0538[62]; /* address offset: 0x0538 */ 202*85e5c210SXuhui Lin uint32_t gpio3a_sl; /* address offset: 0x0630 */ 203*85e5c210SXuhui Lin uint32_t gpio3b_sl; /* address offset: 0x0634 */ 204*85e5c210SXuhui Lin uint32_t reserved0638[62]; /* address offset: 0x0638 */ 205*85e5c210SXuhui Lin uint32_t gpio3a_od; /* address offset: 0x0730 */ 206*85e5c210SXuhui Lin uint32_t gpio3b_od; /* address offset: 0x0734 */ 207*85e5c210SXuhui Lin uint32_t reserved0738[58]; /* address offset: 0x0738 */ 208*85e5c210SXuhui Lin uint32_t gpio3_iddq; /* address offset: 0x0820 */ 209*85e5c210SXuhui Lin }; 210*85e5c210SXuhui Lin 211*85e5c210SXuhui Lin check_member(rk3506_gpio3_ioc_reg, gpio3_iddq, 0x0820); 212*85e5c210SXuhui Lin 213*85e5c210SXuhui Lin /* gpio4_ioc register structure define */ 214*85e5c210SXuhui Lin struct rk3506_gpio4_ioc_reg { 215*85e5c210SXuhui Lin uint32_t reserved0000[528]; /* address offset: 0x0000 */ 216*85e5c210SXuhui Lin uint32_t saradc_con; /* address offset: 0x0840 */ 217*85e5c210SXuhui Lin }; 218*85e5c210SXuhui Lin 219*85e5c210SXuhui Lin check_member(rk3506_gpio4_ioc_reg, saradc_con, 0x0840); 220*85e5c210SXuhui Lin 221*85e5c210SXuhui Lin #endif /* _ASM_ARCH_GRF_RK3506_H */ 222