xref: /rk3399_rockchip-uboot/arch/arm/include/asm/arch-rockchip/ioc_rk3506.h (revision 85e5c21076b78fe71b961926fac1aa66a345c2bf)
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