blob: 68666a535b9cb93afbfef2dec6c6ddc9fcda2ff4 [file] [log] [blame]
Tom Rini10e47792018-05-06 17:58:06 -04001/* SPDX-License-Identifier: GPL-2.0+ */
Peng Fanb11a7342018-01-10 13:20:20 +08002/*
3 * Copyright 2017 NXP
Peng Fanb11a7342018-01-10 13:20:20 +08004 */
5
Peng Fan39945c12018-11-20 10:19:25 +00006#ifndef __ASM_ARCH_IMX8M_REGS_H__
7#define __ASM_ARCH_IMX8M_REGS_H__
Peng Fanb11a7342018-01-10 13:20:20 +08008
Peng Fan00565bf2019-05-09 08:33:55 +00009#define ARCH_MXC
10
Peng Fanb11a7342018-01-10 13:20:20 +080011#include <asm/mach-imx/regs-lcdif.h>
12
13#define ROM_VERSION_A0 0x800
14#define ROM_VERSION_B0 0x83C
15
16#define M4_BOOTROM_BASE_ADDR 0x007E0000
17
18#define SAI1_BASE_ADDR 0x30010000
19#define SAI6_BASE_ADDR 0x30030000
20#define SAI5_BASE_ADDR 0x30040000
21#define SAI4_BASE_ADDR 0x30050000
22#define SPBA2_BASE_ADDR 0x300F0000
23#define AIPS1_BASE_ADDR 0x301F0000
24#define GPIO1_BASE_ADDR 0X30200000
25#define GPIO2_BASE_ADDR 0x30210000
26#define GPIO3_BASE_ADDR 0x30220000
27#define GPIO4_BASE_ADDR 0x30230000
28#define GPIO5_BASE_ADDR 0x30240000
29#define ANA_TSENSOR_BASE_ADDR 0x30260000
30#define ANA_OSC_BASE_ADDR 0x30270000
31#define WDOG1_BASE_ADDR 0x30280000
32#define WDOG2_BASE_ADDR 0x30290000
33#define WDOG3_BASE_ADDR 0x302A0000
34#define SDMA2_BASE_ADDR 0x302C0000
35#define GPT1_BASE_ADDR 0x302D0000
36#define GPT2_BASE_ADDR 0x302E0000
37#define GPT3_BASE_ADDR 0x302F0000
38#define ROMCP_BASE_ADDR 0x30310000
39#define LCDIF_BASE_ADDR 0x30320000
40#define IOMUXC_BASE_ADDR 0x30330000
41#define IOMUXC_GPR_BASE_ADDR 0x30340000
42#define OCOTP_BASE_ADDR 0x30350000
43#define ANATOP_BASE_ADDR 0x30360000
44#define SNVS_HP_BASE_ADDR 0x30370000
45#define CCM_BASE_ADDR 0x30380000
46#define SRC_BASE_ADDR 0x30390000
47#define GPC_BASE_ADDR 0x303A0000
48#define SEMAPHORE1_BASE_ADDR 0x303B0000
49#define SEMAPHORE2_BASE_ADDR 0x303C0000
50#define RDC_BASE_ADDR 0x303D0000
51#define CSU_BASE_ADDR 0x303E0000
52
53#define AIPS2_BASE_ADDR 0x305F0000
54#define PWM1_BASE_ADDR 0x30660000
55#define PWM2_BASE_ADDR 0x30670000
56#define PWM3_BASE_ADDR 0x30680000
57#define PWM4_BASE_ADDR 0x30690000
58#define SYSCNT_RD_BASE_ADDR 0x306A0000
59#define SYSCNT_CMP_BASE_ADDR 0x306B0000
60#define SYSCNT_CTRL_BASE_ADDR 0x306C0000
61#define GPT6_BASE_ADDR 0x306E0000
62#define GPT5_BASE_ADDR 0x306F0000
63#define GPT4_BASE_ADDR 0x30700000
64#define PERFMON1_BASE_ADDR 0x307C0000
65#define PERFMON2_BASE_ADDR 0x307D0000
66#define QOSC_BASE_ADDR 0x307F0000
67
68#define SPDIF1_BASE_ADDR 0x30810000
69#define ECSPI1_BASE_ADDR 0x30820000
70#define ECSPI2_BASE_ADDR 0x30830000
71#define ECSPI3_BASE_ADDR 0x30840000
72#define UART1_BASE_ADDR 0x30860000
73#define UART3_BASE_ADDR 0x30880000
74#define UART2_BASE_ADDR 0x30890000
75#define SPDIF2_BASE_ADDR 0x308A0000
76#define SAI2_BASE_ADDR 0x308B0000
77#define SAI3_BASE_ADDR 0x308C0000
78#define SPBA1_BASE_ADDR 0x308F0000
79#define CAAM_BASE_ADDR 0x30900000
80#define AIPS3_BASE_ADDR 0x309F0000
81#define MIPI_PHY_BASE_ADDR 0x30A00000
82#define MIPI_DSI_BASE_ADDR 0x30A10000
83#define I2C1_BASE_ADDR 0x30A20000
84#define I2C2_BASE_ADDR 0x30A30000
85#define I2C3_BASE_ADDR 0x30A40000
86#define I2C4_BASE_ADDR 0x30A50000
87#define UART4_BASE_ADDR 0x30A60000
88#define MIPI_CSI_BASE_ADDR 0x30A70000
89#define MIPI_CSI_PHY1_BASE_ADDR 0x30A80000
90#define CSI1_BASE_ADDR 0x30A90000
91#define MU_A_BASE_ADDR 0x30AA0000
92#define MU_B_BASE_ADDR 0x30AB0000
93#define SEMAPHOR_HS_BASE_ADDR 0x30AC0000
94#define USDHC1_BASE_ADDR 0x30B40000
95#define USDHC2_BASE_ADDR 0x30B50000
96#define MIPI_CS2_BASE_ADDR 0x30B60000
97#define MIPI_CSI_PHY2_BASE_ADDR 0x30B70000
98#define CSI2_BASE_ADDR 0x30B80000
99#define QSPI0_BASE_ADDR 0x30BB0000
100#define QSPI0_AMBA_BASE 0x08000000
101#define SDMA1_BASE_ADDR 0x30BD0000
102#define ENET1_BASE_ADDR 0x30BE0000
103
104#define HDMI_CTRL_BASE_ADDR 0x32C00000
105#define AIPS4_BASE_ADDR 0x32DF0000
106#define DC1_BASE_ADDR 0x32E00000
107#define DC2_BASE_ADDR 0x32E10000
108#define DC3_BASE_ADDR 0x32E20000
109#define HDMI_SEC_BASE_ADDR 0x32E40000
110#define TZASC_BASE_ADDR 0x32F80000
111#define MTR_BASE_ADDR 0x32FB0000
112#define PLATFORM_CTRL_BASE_ADDR 0x32FE0000
113
114#define MXS_APBH_BASE 0x33000000
115#define MXS_GPMI_BASE 0x33002000
116#define MXS_BCH_BASE 0x33004000
117
118#define USB1_BASE_ADDR 0x38100000
119#define USB2_BASE_ADDR 0x38200000
120#define USB1_PHY_BASE_ADDR 0x381F0000
121#define USB2_PHY_BASE_ADDR 0x382F0000
122
123#define MXS_LCDIF_BASE LCDIF_BASE_ADDR
124
125#define SRC_IPS_BASE_ADDR 0x30390000
126#define SRC_DDRC_RCR_ADDR 0x30391000
127#define SRC_DDRC2_RCR_ADDR 0x30391004
128
129#define DDRC_DDR_SS_GPR0 0x3d000000
130#define DDRC_IPS_BASE_ADDR(X) (0x3d400000 + ((X) * 0x2000000))
131#define DDR_CSD1_BASE_ADDR 0x40000000
132
133#if !defined(__ASSEMBLY__)
134#include <asm/types.h>
135#include <linux/bitops.h>
136#include <stdbool.h>
137
138#define GPR_TZASC_EN BIT(0)
139#define GPR_TZASC_EN_LOCK BIT(16)
140
141#define SRC_SCR_M4_ENABLE_OFFSET 3
142#define SRC_SCR_M4_ENABLE_MASK BIT(3)
143#define SRC_SCR_M4C_NON_SCLR_RST_OFFSET 0
144#define SRC_SCR_M4C_NON_SCLR_RST_MASK BIT(0)
145#define SRC_DDR1_ENABLE_MASK 0x8F000000UL
146#define SRC_DDR2_ENABLE_MASK 0x8F000000UL
147#define SRC_DDR1_RCR_PHY_PWROKIN_N_MASK BIT(3)
148#define SRC_DDR1_RCR_PHY_RESET_MASK BIT(2)
149#define SRC_DDR1_RCR_CORE_RESET_N_MASK BIT(1)
150#define SRC_DDR1_RCR_PRESET_N_MASK BIT(0)
151
152struct iomuxc_gpr_base_regs {
153 u32 gpr[47];
154};
155
156struct ocotp_regs {
157 u32 ctrl;
158 u32 ctrl_set;
159 u32 ctrl_clr;
160 u32 ctrl_tog;
161 u32 timing;
162 u32 rsvd0[3];
163 u32 data;
164 u32 rsvd1[3];
165 u32 read_ctrl;
166 u32 rsvd2[3];
167 u32 read_fuse_data;
168 u32 rsvd3[3];
169 u32 sw_sticky;
170 u32 rsvd4[3];
171 u32 scs;
172 u32 scs_set;
173 u32 scs_clr;
174 u32 scs_tog;
175 u32 crc_addr;
176 u32 rsvd5[3];
177 u32 crc_value;
178 u32 rsvd6[3];
179 u32 version;
180 u32 rsvd7[0xdb];
181
182 /* fuse banks */
183 struct fuse_bank {
184 u32 fuse_regs[0x10];
185 } bank[0];
186};
187
188struct fuse_bank0_regs {
189 u32 lock;
190 u32 rsvd0[3];
191 u32 uid_low;
192 u32 rsvd1[3];
193 u32 uid_high;
194 u32 rsvd2[7];
195};
196
197struct fuse_bank1_regs {
198 u32 tester3;
199 u32 rsvd0[3];
200 u32 tester4;
201 u32 rsvd1[3];
202 u32 tester5;
203 u32 rsvd2[3];
204 u32 cfg0;
205 u32 rsvd3[3];
206};
207
208struct anamix_pll {
209 u32 audio_pll1_cfg0;
210 u32 audio_pll1_cfg1;
211 u32 audio_pll2_cfg0;
212 u32 audio_pll2_cfg1;
213 u32 video_pll_cfg0;
214 u32 video_pll_cfg1;
215 u32 gpu_pll_cfg0;
216 u32 gpu_pll_cfg1;
217 u32 vpu_pll_cfg0;
218 u32 vpu_pll_cfg1;
219 u32 arm_pll_cfg0;
220 u32 arm_pll_cfg1;
221 u32 sys_pll1_cfg0;
222 u32 sys_pll1_cfg1;
223 u32 sys_pll1_cfg2;
224 u32 sys_pll2_cfg0;
225 u32 sys_pll2_cfg1;
226 u32 sys_pll2_cfg2;
227 u32 sys_pll3_cfg0;
228 u32 sys_pll3_cfg1;
229 u32 sys_pll3_cfg2;
230 u32 video_pll2_cfg0;
231 u32 video_pll2_cfg1;
232 u32 video_pll2_cfg2;
233 u32 dram_pll_cfg0;
234 u32 dram_pll_cfg1;
235 u32 dram_pll_cfg2;
236 u32 digprog;
237 u32 osc_misc_cfg;
238 u32 pllout_monitor_cfg;
239 u32 frac_pllout_div_cfg;
240 u32 sscg_pllout_div_cfg;
241};
242
243struct fuse_bank9_regs {
244 u32 mac_addr0;
245 u32 rsvd0[3];
246 u32 mac_addr1;
247 u32 rsvd1[11];
248};
249
250/* System Reset Controller (SRC) */
251struct src {
252 u32 scr;
253 u32 a53rcr;
254 u32 a53rcr1;
255 u32 m4rcr;
256 u32 reserved1[4];
257 u32 usbophy1_rcr;
258 u32 usbophy2_rcr;
259 u32 mipiphy_rcr;
260 u32 pciephy_rcr;
261 u32 hdmi_rcr;
262 u32 disp_rcr;
263 u32 reserved2[2];
264 u32 gpu_rcr;
265 u32 vpu_rcr;
266 u32 pcie2_rcr;
267 u32 mipiphy1_rcr;
268 u32 mipiphy2_rcr;
269 u32 reserved3;
270 u32 sbmr1;
271 u32 srsr;
272 u32 reserved4[2];
273 u32 sisr;
274 u32 simr;
275 u32 sbmr2;
276 u32 gpr1;
277 u32 gpr2;
278 u32 gpr3;
279 u32 gpr4;
280 u32 gpr5;
281 u32 gpr6;
282 u32 gpr7;
283 u32 gpr8;
284 u32 gpr9;
285 u32 gpr10;
286 u32 reserved5[985];
287 u32 ddr1_rcr;
288 u32 ddr2_rcr;
289};
290
291struct gpc_reg {
292 u32 lpcr_bsc;
293 u32 lpcr_ad;
294 u32 lpcr_cpu1;
295 u32 lpcr_cpu2;
296 u32 lpcr_cpu3;
297 u32 slpcr;
298 u32 mst_cpu_mapping;
299 u32 mmdc_cpu_mapping;
300 u32 mlpcr;
301 u32 pgc_ack_sel;
302 u32 pgc_ack_sel_m4;
303 u32 gpc_misc;
304 u32 imr1_core0;
305 u32 imr2_core0;
306 u32 imr3_core0;
307 u32 imr4_core0;
308 u32 imr1_core1;
309 u32 imr2_core1;
310 u32 imr3_core1;
311 u32 imr4_core1;
312 u32 imr1_cpu1;
313 u32 imr2_cpu1;
314 u32 imr3_cpu1;
315 u32 imr4_cpu1;
316 u32 imr1_cpu3;
317 u32 imr2_cpu3;
318 u32 imr3_cpu3;
319 u32 imr4_cpu3;
320 u32 isr1_cpu0;
321 u32 isr2_cpu0;
322 u32 isr3_cpu0;
323 u32 isr4_cpu0;
324 u32 isr1_cpu1;
325 u32 isr2_cpu1;
326 u32 isr3_cpu1;
327 u32 isr4_cpu1;
328 u32 isr1_cpu2;
329 u32 isr2_cpu2;
330 u32 isr3_cpu2;
331 u32 isr4_cpu2;
332 u32 isr1_cpu3;
333 u32 isr2_cpu3;
334 u32 isr3_cpu3;
335 u32 isr4_cpu3;
336 u32 slt0_cfg;
337 u32 slt1_cfg;
338 u32 slt2_cfg;
339 u32 slt3_cfg;
340 u32 slt4_cfg;
341 u32 slt5_cfg;
342 u32 slt6_cfg;
343 u32 slt7_cfg;
344 u32 slt8_cfg;
345 u32 slt9_cfg;
346 u32 slt10_cfg;
347 u32 slt11_cfg;
348 u32 slt12_cfg;
349 u32 slt13_cfg;
350 u32 slt14_cfg;
351 u32 pgc_cpu_0_1_mapping;
352 u32 cpu_pgc_up_trg;
353 u32 mix_pgc_up_trg;
354 u32 pu_pgc_up_trg;
355 u32 cpu_pgc_dn_trg;
356 u32 mix_pgc_dn_trg;
357 u32 pu_pgc_dn_trg;
358 u32 lpcr_bsc2;
359 u32 pgc_cpu_2_3_mapping;
360 u32 lps_cpu0;
361 u32 lps_cpu1;
362 u32 lps_cpu2;
363 u32 lps_cpu3;
364 u32 gpc_gpr;
365 u32 gtor;
366 u32 debug_addr1;
367 u32 debug_addr2;
368 u32 cpu_pgc_up_status1;
369 u32 mix_pgc_up_status0;
370 u32 mix_pgc_up_status1;
371 u32 mix_pgc_up_status2;
372 u32 m4_mix_pgc_up_status0;
373 u32 m4_mix_pgc_up_status1;
374 u32 m4_mix_pgc_up_status2;
375 u32 pu_pgc_up_status0;
376 u32 pu_pgc_up_status1;
377 u32 pu_pgc_up_status2;
378 u32 m4_pu_pgc_up_status0;
379 u32 m4_pu_pgc_up_status1;
380 u32 m4_pu_pgc_up_status2;
381 u32 a53_lp_io_0;
382 u32 a53_lp_io_1;
383 u32 a53_lp_io_2;
384 u32 cpu_pgc_dn_status1;
385 u32 mix_pgc_dn_status0;
386 u32 mix_pgc_dn_status1;
387 u32 mix_pgc_dn_status2;
388 u32 m4_mix_pgc_dn_status0;
389 u32 m4_mix_pgc_dn_status1;
390 u32 m4_mix_pgc_dn_status2;
391 u32 pu_pgc_dn_status0;
392 u32 pu_pgc_dn_status1;
393 u32 pu_pgc_dn_status2;
394 u32 m4_pu_pgc_dn_status0;
395 u32 m4_pu_pgc_dn_status1;
396 u32 m4_pu_pgc_dn_status2;
397 u32 res[3];
398 u32 mix_pdn_flg;
399 u32 pu_pdn_flg;
400 u32 m4_mix_pdn_flg;
401 u32 m4_pu_pdn_flg;
402 u32 imr1_core2;
403 u32 imr2_core2;
404 u32 imr3_core2;
405 u32 imr4_core2;
406 u32 imr1_core3;
407 u32 imr2_core3;
408 u32 imr3_core3;
409 u32 imr4_core3;
410 u32 pgc_ack_sel_pu;
411 u32 pgc_ack_sel_m4_pu;
412 u32 slt15_cfg;
413 u32 slt16_cfg;
414 u32 slt17_cfg;
415 u32 slt18_cfg;
416 u32 slt19_cfg;
417 u32 gpc_pu_pwrhsk;
418 u32 slt0_cfg_pu;
419 u32 slt1_cfg_pu;
420 u32 slt2_cfg_pu;
421 u32 slt3_cfg_pu;
422 u32 slt4_cfg_pu;
423 u32 slt5_cfg_pu;
424 u32 slt6_cfg_pu;
425 u32 slt7_cfg_pu;
426 u32 slt8_cfg_pu;
427 u32 slt9_cfg_pu;
428 u32 slt10_cfg_pu;
429 u32 slt11_cfg_pu;
430 u32 slt12_cfg_pu;
431 u32 slt13_cfg_pu;
432 u32 slt14_cfg_pu;
433 u32 slt15_cfg_pu;
434 u32 slt16_cfg_pu;
435 u32 slt17_cfg_pu;
436 u32 slt18_cfg_pu;
437 u32 slt19_cfg_pu;
438};
439
440#define WDOG_WDT_MASK BIT(3)
441#define WDOG_WDZST_MASK BIT(0)
442struct wdog_regs {
443 u16 wcr; /* Control */
444 u16 wsr; /* Service */
445 u16 wrsr; /* Reset Status */
446 u16 wicr; /* Interrupt Control */
447 u16 wmcr; /* Miscellaneous Control */
448};
449
450struct bootrom_sw_info {
451 u8 reserved_1;
452 u8 boot_dev_instance;
453 u8 boot_dev_type;
454 u8 reserved_2;
455 u32 core_freq;
456 u32 axi_freq;
457 u32 ddr_freq;
458 u32 tick_freq;
459 u32 reserved_3[3];
460};
461
462#define ROM_SW_INFO_ADDR_B0 0x00000968
463#define ROM_SW_INFO_ADDR_A0 0x000009e8
464
465#define ROM_SW_INFO_ADDR is_soc_rev(CHIP_REV_1_0) ? \
466 (struct bootrom_sw_info **)ROM_SW_INFO_ADDR_A0 : \
467 (struct bootrom_sw_info **)ROM_SW_INFO_ADDR_B0
468#endif
469#endif