1819833afSPeter Tyser /* 2819833afSPeter Tyser * Copyright (C) 2009, DENX Software Engineering 3819833afSPeter Tyser * Author: John Rigby <jcrigby@gmail.com 4819833afSPeter Tyser * 55676f598SBenoît Thébaudeau * Based on arch-mx31/imx-regs.h 6819833afSPeter Tyser * Copyright (C) 2009 Ilya Yanok, 7819833afSPeter Tyser * Emcraft Systems <yanok@emcraft.com> 8819833afSPeter Tyser * and arch-mx27/imx-regs.h 9819833afSPeter Tyser * Copyright (C) 2007 Pengutronix, 10819833afSPeter Tyser * Sascha Hauer <s.hauer@pengutronix.de> 11819833afSPeter Tyser * Copyright (C) 2009 Ilya Yanok, 12819833afSPeter Tyser * Emcraft Systems <yanok@emcraft.com> 13819833afSPeter Tyser * 141a459660SWolfgang Denk * SPDX-License-Identifier: GPL-2.0+ 15819833afSPeter Tyser */ 16819833afSPeter Tyser 17819833afSPeter Tyser #ifndef _IMX_REGS_H 18819833afSPeter Tyser #define _IMX_REGS_H 19819833afSPeter Tyser 205676f598SBenoît Thébaudeau #if !(defined(__KERNEL_STRICT_NAMES) || defined(__ASSEMBLY__)) 218f385e95STimo Ketola #include <asm/types.h> 228f385e95STimo Ketola 23819833afSPeter Tyser /* Clock Control Module (CCM) registers */ 24819833afSPeter Tyser struct ccm_regs { 25819833afSPeter Tyser u32 mpctl; /* Core PLL Control */ 26819833afSPeter Tyser u32 upctl; /* USB PLL Control */ 27819833afSPeter Tyser u32 cctl; /* Clock Control */ 28819833afSPeter Tyser u32 cgr0; /* Clock Gating Control 0 */ 29819833afSPeter Tyser u32 cgr1; /* Clock Gating Control 1 */ 30819833afSPeter Tyser u32 cgr2; /* Clock Gating Control 2 */ 31819833afSPeter Tyser u32 pcdr[4]; /* PER Clock Dividers */ 32819833afSPeter Tyser u32 rcsr; /* CCM Status */ 33819833afSPeter Tyser u32 crdr; /* CCM Reset and Debug */ 34819833afSPeter Tyser u32 dcvr0; /* DPTC Comparator Value 0 */ 35819833afSPeter Tyser u32 dcvr1; /* DPTC Comparator Value 1 */ 36819833afSPeter Tyser u32 dcvr2; /* DPTC Comparator Value 2 */ 37819833afSPeter Tyser u32 dcvr3; /* DPTC Comparator Value 3 */ 38819833afSPeter Tyser u32 ltr0; /* Load Tracking 0 */ 39819833afSPeter Tyser u32 ltr1; /* Load Tracking 1 */ 40819833afSPeter Tyser u32 ltr2; /* Load Tracking 2 */ 41819833afSPeter Tyser u32 ltr3; /* Load Tracking 3 */ 42819833afSPeter Tyser u32 ltbr0; /* Load Tracking Buffer 0 */ 43819833afSPeter Tyser u32 ltbr1; /* Load Tracking Buffer 1 */ 44819833afSPeter Tyser u32 pcmr0; /* Power Management Control 0 */ 45819833afSPeter Tyser u32 pcmr1; /* Power Management Control 1 */ 46819833afSPeter Tyser u32 pcmr2; /* Power Management Control 2 */ 47819833afSPeter Tyser u32 mcr; /* Miscellaneous Control */ 48819833afSPeter Tyser u32 lpimr0; /* Low Power Interrupt Mask 0 */ 49819833afSPeter Tyser u32 lpimr1; /* Low Power Interrupt Mask 1 */ 50819833afSPeter Tyser }; 51819833afSPeter Tyser 52819833afSPeter Tyser /* Enhanced SDRAM Controller (ESDRAMC) registers */ 53819833afSPeter Tyser struct esdramc_regs { 54819833afSPeter Tyser u32 ctl0; /* control 0 */ 55819833afSPeter Tyser u32 cfg0; /* configuration 0 */ 56819833afSPeter Tyser u32 ctl1; /* control 1 */ 57819833afSPeter Tyser u32 cfg1; /* configuration 1 */ 58819833afSPeter Tyser u32 misc; /* miscellaneous */ 59819833afSPeter Tyser u32 pad[3]; 60819833afSPeter Tyser u32 cdly1; /* Delay Line 1 configuration debug */ 61819833afSPeter Tyser u32 cdly2; /* delay line 2 configuration debug */ 62819833afSPeter Tyser u32 cdly3; /* delay line 3 configuration debug */ 63819833afSPeter Tyser u32 cdly4; /* delay line 4 configuration debug */ 64819833afSPeter Tyser u32 cdly5; /* delay line 5 configuration debug */ 65819833afSPeter Tyser u32 cdlyl; /* delay line cycle length debug */ 66819833afSPeter Tyser }; 67819833afSPeter Tyser 68819833afSPeter Tyser /* General Purpose Timer (GPT) registers */ 69819833afSPeter Tyser struct gpt_regs { 70819833afSPeter Tyser u32 ctrl; /* control */ 71819833afSPeter Tyser u32 pre; /* prescaler */ 72819833afSPeter Tyser u32 stat; /* status */ 73819833afSPeter Tyser u32 intr; /* interrupt */ 74819833afSPeter Tyser u32 cmp[3]; /* output compare 1-3 */ 75819833afSPeter Tyser u32 capt[2]; /* input capture 1-2 */ 76819833afSPeter Tyser u32 counter; /* counter */ 77819833afSPeter Tyser }; 78819833afSPeter Tyser 79819833afSPeter Tyser /* Watchdog Timer (WDOG) registers */ 80819833afSPeter Tyser struct wdog_regs { 8181129d07SMatthias Weisser u16 wcr; /* Control */ 8281129d07SMatthias Weisser u16 wsr; /* Service */ 8381129d07SMatthias Weisser u16 wrsr; /* Reset Status */ 8481129d07SMatthias Weisser u16 wicr; /* Interrupt Control */ 8581129d07SMatthias Weisser u16 wmcr; /* Misc Control */ 86819833afSPeter Tyser }; 87819833afSPeter Tyser 88819833afSPeter Tyser /* IIM control registers */ 89819833afSPeter Tyser struct iim_regs { 90819833afSPeter Tyser u32 iim_stat; 91819833afSPeter Tyser u32 iim_statm; 92819833afSPeter Tyser u32 iim_err; 93819833afSPeter Tyser u32 iim_emask; 94819833afSPeter Tyser u32 iim_fctl; 95819833afSPeter Tyser u32 iim_ua; 96819833afSPeter Tyser u32 iim_la; 97819833afSPeter Tyser u32 iim_sdat; 98819833afSPeter Tyser u32 iim_prev; 99819833afSPeter Tyser u32 iim_srev; 1008f3ff11cSBenoît Thébaudeau u32 iim_prg_p; 1018f3ff11cSBenoît Thébaudeau u32 iim_scs0; 1028f3ff11cSBenoît Thébaudeau u32 iim_scs1; 1038f3ff11cSBenoît Thébaudeau u32 iim_scs2; 1048f3ff11cSBenoît Thébaudeau u32 iim_scs3; 1058f3ff11cSBenoît Thébaudeau u32 res1[0x1f1]; 106565e39c5SLiu Hui-R64343 struct fuse_bank { 107565e39c5SLiu Hui-R64343 u32 fuse_regs[0x20]; 108565e39c5SLiu Hui-R64343 u32 fuse_rsvd[0xe0]; 109565e39c5SLiu Hui-R64343 } bank[3]; 110819833afSPeter Tyser }; 111565e39c5SLiu Hui-R64343 112565e39c5SLiu Hui-R64343 struct fuse_bank0_regs { 1136adbd302SBenoît Thébaudeau u32 fuse0_7[8]; 1146adbd302SBenoît Thébaudeau u32 uid[8]; 1156adbd302SBenoît Thébaudeau u32 fuse16_25[0xa]; 116565e39c5SLiu Hui-R64343 u32 mac_addr[6]; 117565e39c5SLiu Hui-R64343 }; 118565e39c5SLiu Hui-R64343 1196adbd302SBenoît Thébaudeau struct fuse_bank1_regs { 1206adbd302SBenoît Thébaudeau u32 fuse0_21[0x16]; 1216adbd302SBenoît Thébaudeau u32 usr5; 1226adbd302SBenoît Thébaudeau u32 fuse23_29[7]; 1236adbd302SBenoît Thébaudeau u32 usr6[2]; 1246adbd302SBenoît Thébaudeau }; 1256adbd302SBenoît Thébaudeau 12623210d8eSMatthias Weisser /* Multi-Layer AHB Crossbar Switch (MAX) registers */ 12723210d8eSMatthias Weisser struct max_regs { 12823210d8eSMatthias Weisser u32 mpr0; 12923210d8eSMatthias Weisser u32 pad00[3]; 13023210d8eSMatthias Weisser u32 sgpcr0; 13123210d8eSMatthias Weisser u32 pad01[59]; 13223210d8eSMatthias Weisser u32 mpr1; 13323210d8eSMatthias Weisser u32 pad02[3]; 13423210d8eSMatthias Weisser u32 sgpcr1; 13523210d8eSMatthias Weisser u32 pad03[59]; 13623210d8eSMatthias Weisser u32 mpr2; 13723210d8eSMatthias Weisser u32 pad04[3]; 13823210d8eSMatthias Weisser u32 sgpcr2; 13923210d8eSMatthias Weisser u32 pad05[59]; 14023210d8eSMatthias Weisser u32 mpr3; 14123210d8eSMatthias Weisser u32 pad06[3]; 14223210d8eSMatthias Weisser u32 sgpcr3; 14323210d8eSMatthias Weisser u32 pad07[59]; 14423210d8eSMatthias Weisser u32 mpr4; 14523210d8eSMatthias Weisser u32 pad08[3]; 14623210d8eSMatthias Weisser u32 sgpcr4; 14723210d8eSMatthias Weisser u32 pad09[251]; 14823210d8eSMatthias Weisser u32 mgpcr0; 14923210d8eSMatthias Weisser u32 pad10[63]; 15023210d8eSMatthias Weisser u32 mgpcr1; 15123210d8eSMatthias Weisser u32 pad11[63]; 15223210d8eSMatthias Weisser u32 mgpcr2; 15323210d8eSMatthias Weisser u32 pad12[63]; 15423210d8eSMatthias Weisser u32 mgpcr3; 15523210d8eSMatthias Weisser u32 pad13[63]; 15623210d8eSMatthias Weisser u32 mgpcr4; 15723210d8eSMatthias Weisser }; 15823210d8eSMatthias Weisser 15923210d8eSMatthias Weisser /* AHB <-> IP-Bus Interface (AIPS) */ 16023210d8eSMatthias Weisser struct aips_regs { 16123210d8eSMatthias Weisser u32 mpr_0_7; 16223210d8eSMatthias Weisser u32 mpr_8_15; 16323210d8eSMatthias Weisser }; 164bf0adb86SThomas Diener /* LCD controller registers */ 165bf0adb86SThomas Diener struct lcdc_regs { 166bf0adb86SThomas Diener u32 lssar; /* Screen Start Address */ 167bf0adb86SThomas Diener u32 lsr; /* Size */ 168bf0adb86SThomas Diener u32 lvpwr; /* Virtual Page Width */ 169bf0adb86SThomas Diener u32 lcpr; /* Cursor Position */ 170bf0adb86SThomas Diener u32 lcwhb; /* Cursor Width Height and Blink */ 171bf0adb86SThomas Diener u32 lccmr; /* Color Cursor Mapping */ 172bf0adb86SThomas Diener u32 lpcr; /* Panel Configuration */ 173bf0adb86SThomas Diener u32 lhcr; /* Horizontal Configuration */ 174bf0adb86SThomas Diener u32 lvcr; /* Vertical Configuration */ 175bf0adb86SThomas Diener u32 lpor; /* Panning Offset */ 176bf0adb86SThomas Diener u32 lscr; /* Sharp Configuration */ 177bf0adb86SThomas Diener u32 lpccr; /* PWM Contrast Control */ 178bf0adb86SThomas Diener u32 ldcr; /* DMA Control */ 179bf0adb86SThomas Diener u32 lrmcr; /* Refresh Mode Control */ 180bf0adb86SThomas Diener u32 licr; /* Interrupt Configuration */ 181bf0adb86SThomas Diener u32 lier; /* Interrupt Enable */ 182bf0adb86SThomas Diener u32 lisr; /* Interrupt Status */ 183bf0adb86SThomas Diener u32 res0[3]; 184bf0adb86SThomas Diener u32 lgwsar; /* Graphic Window Start Address */ 185bf0adb86SThomas Diener u32 lgwsr; /* Graphic Window Size */ 186bf0adb86SThomas Diener u32 lgwvpwr; /* Graphic Window Virtual Page Width Regist */ 187bf0adb86SThomas Diener u32 lgwpor; /* Graphic Window Panning Offset */ 188bf0adb86SThomas Diener u32 lgwpr; /* Graphic Window Position */ 189bf0adb86SThomas Diener u32 lgwcr; /* Graphic Window Control */ 190bf0adb86SThomas Diener u32 lgwdcr; /* Graphic Window DMA Control */ 191bf0adb86SThomas Diener u32 res1[5]; 192bf0adb86SThomas Diener u32 lauscr; /* AUS Mode Control */ 193bf0adb86SThomas Diener u32 lausccr; /* AUS mode Cursor Control */ 194bf0adb86SThomas Diener u32 res2[31 + 64*7]; 195bf0adb86SThomas Diener u32 bglut; /* Background Lookup Table */ 196bf0adb86SThomas Diener u32 gwlut; /* Graphic Window Lookup Table */ 197bf0adb86SThomas Diener }; 198bf0adb86SThomas Diener 199bf0adb86SThomas Diener /* Wireless External Interface Module Registers */ 200bf0adb86SThomas Diener struct weim_regs { 201bf0adb86SThomas Diener u32 cscr0u; /* Chip Select 0 Upper Register */ 202bf0adb86SThomas Diener u32 cscr0l; /* Chip Select 0 Lower Register */ 203bf0adb86SThomas Diener u32 cscr0a; /* Chip Select 0 Addition Register */ 204bf0adb86SThomas Diener u32 pad0; 205bf0adb86SThomas Diener u32 cscr1u; /* Chip Select 1 Upper Register */ 206bf0adb86SThomas Diener u32 cscr1l; /* Chip Select 1 Lower Register */ 207bf0adb86SThomas Diener u32 cscr1a; /* Chip Select 1 Addition Register */ 208bf0adb86SThomas Diener u32 pad1; 209bf0adb86SThomas Diener u32 cscr2u; /* Chip Select 2 Upper Register */ 210bf0adb86SThomas Diener u32 cscr2l; /* Chip Select 2 Lower Register */ 211bf0adb86SThomas Diener u32 cscr2a; /* Chip Select 2 Addition Register */ 212bf0adb86SThomas Diener u32 pad2; 213bf0adb86SThomas Diener u32 cscr3u; /* Chip Select 3 Upper Register */ 214bf0adb86SThomas Diener u32 cscr3l; /* Chip Select 3 Lower Register */ 215bf0adb86SThomas Diener u32 cscr3a; /* Chip Select 3 Addition Register */ 216bf0adb86SThomas Diener u32 pad3; 217bf0adb86SThomas Diener u32 cscr4u; /* Chip Select 4 Upper Register */ 218bf0adb86SThomas Diener u32 cscr4l; /* Chip Select 4 Lower Register */ 219bf0adb86SThomas Diener u32 cscr4a; /* Chip Select 4 Addition Register */ 220bf0adb86SThomas Diener u32 pad4; 221bf0adb86SThomas Diener u32 cscr5u; /* Chip Select 5 Upper Register */ 222bf0adb86SThomas Diener u32 cscr5l; /* Chip Select 5 Lower Register */ 223bf0adb86SThomas Diener u32 cscr5a; /* Chip Select 5 Addition Register */ 224bf0adb86SThomas Diener u32 pad5; 225bf0adb86SThomas Diener u32 wcr; /* WEIM Configuration Register */ 226bf0adb86SThomas Diener }; 227bf0adb86SThomas Diener 228bf0adb86SThomas Diener /* Multi-Master Memory Interface */ 229bf0adb86SThomas Diener struct m3if_regs { 230bf0adb86SThomas Diener u32 ctl; /* Control Register */ 231bf0adb86SThomas Diener u32 wcfg0; /* Watermark Configuration Register 0 */ 232bf0adb86SThomas Diener u32 wcfg1; /* Watermark Configuration Register1 */ 233bf0adb86SThomas Diener u32 wcfg2; /* Watermark Configuration Register2 */ 234bf0adb86SThomas Diener u32 wcfg3; /* Watermark Configuration Register 3 */ 235bf0adb86SThomas Diener u32 wcfg4; /* Watermark Configuration Register 4 */ 236bf0adb86SThomas Diener u32 wcfg5; /* Watermark Configuration Register 5 */ 237bf0adb86SThomas Diener u32 wcfg6; /* Watermark Configuration Register 6 */ 238bf0adb86SThomas Diener u32 wcfg7; /* Watermark Configuration Register 7 */ 239bf0adb86SThomas Diener u32 wcsr; /* Watermark Control and Status Register */ 240bf0adb86SThomas Diener u32 scfg0; /* Snooping Configuration Register 0 */ 241bf0adb86SThomas Diener u32 scfg1; /* Snooping Configuration Register 1 */ 242bf0adb86SThomas Diener u32 scfg2; /* Snooping Configuration Register 2 */ 243bf0adb86SThomas Diener u32 ssr0; /* Snooping Status Register 0 */ 244bf0adb86SThomas Diener u32 ssr1; /* Snooping Status Register 1 */ 245bf0adb86SThomas Diener u32 res0; 246bf0adb86SThomas Diener u32 mlwe0; /* Master Lock WEIM CS0 Register */ 247bf0adb86SThomas Diener u32 mlwe1; /* Master Lock WEIM CS1 Register */ 248bf0adb86SThomas Diener u32 mlwe2; /* Master Lock WEIM CS2 Register */ 249bf0adb86SThomas Diener u32 mlwe3; /* Master Lock WEIM CS3 Register */ 250bf0adb86SThomas Diener u32 mlwe4; /* Master Lock WEIM CS4 Register */ 251bf0adb86SThomas Diener u32 mlwe5; /* Master Lock WEIM CS5 Register */ 252bf0adb86SThomas Diener }; 253bf0adb86SThomas Diener 254bf0adb86SThomas Diener /* Pulse width modulation */ 255bf0adb86SThomas Diener struct pwm_regs { 256bf0adb86SThomas Diener u32 cr; /* Control Register */ 257bf0adb86SThomas Diener u32 sr; /* Status Register */ 258bf0adb86SThomas Diener u32 ir; /* Interrupt Register */ 259bf0adb86SThomas Diener u32 sar; /* Sample Register */ 260bf0adb86SThomas Diener u32 pr; /* Period Register */ 261bf0adb86SThomas Diener u32 cnr; /* Counter Register */ 262bf0adb86SThomas Diener }; 263bf0adb86SThomas Diener 264bf0adb86SThomas Diener /* Enhanced Periodic Interrupt Timer */ 265bf0adb86SThomas Diener struct epit_regs { 266bf0adb86SThomas Diener u32 cr; /* Control register */ 267bf0adb86SThomas Diener u32 sr; /* Status register */ 268bf0adb86SThomas Diener u32 lr; /* Load register */ 269bf0adb86SThomas Diener u32 cmpr; /* Compare register */ 270bf0adb86SThomas Diener u32 cnr; /* Counter register */ 271bf0adb86SThomas Diener }; 272bf0adb86SThomas Diener 273bf0adb86SThomas Diener /* CSPI registers */ 274bf0adb86SThomas Diener struct cspi_regs { 275bf0adb86SThomas Diener u32 rxdata; 276bf0adb86SThomas Diener u32 txdata; 277bf0adb86SThomas Diener u32 ctrl; 278bf0adb86SThomas Diener u32 intr; 279bf0adb86SThomas Diener u32 dma; 280bf0adb86SThomas Diener u32 stat; 281bf0adb86SThomas Diener u32 period; 282bf0adb86SThomas Diener u32 test; 283bf0adb86SThomas Diener }; 28423210d8eSMatthias Weisser 285819833afSPeter Tyser #endif 286819833afSPeter Tyser 2878e99ecd7SBenoît Thébaudeau #define ARCH_MXC 2888e99ecd7SBenoît Thébaudeau 289819833afSPeter Tyser /* AIPS 1 */ 290819833afSPeter Tyser #define IMX_AIPS1_BASE (0x43F00000) 291819833afSPeter Tyser #define IMX_MAX_BASE (0x43F04000) 292819833afSPeter Tyser #define IMX_CLKCTL_BASE (0x43F08000) 293819833afSPeter Tyser #define IMX_ETB_SLOT4_BASE (0x43F0C000) 294819833afSPeter Tyser #define IMX_ETB_SLOT5_BASE (0x43F10000) 295819833afSPeter Tyser #define IMX_ECT_CTIO_BASE (0x43F18000) 296*e6c8b716SHeiko Schocher #define I2C1_BASE_ADDR (0x43F80000) 297*e6c8b716SHeiko Schocher #define I2C3_BASE_ADDR (0x43F84000) 298819833afSPeter Tyser #define IMX_CAN1_BASE (0x43F88000) 299819833afSPeter Tyser #define IMX_CAN2_BASE (0x43F8C000) 30040f6fffeSStefano Babic #define UART1_BASE (0x43F90000) 30140f6fffeSStefano Babic #define UART2_BASE (0x43F94000) 302*e6c8b716SHeiko Schocher #define I2C2_BASE_ADDR (0x43F98000) 303819833afSPeter Tyser #define IMX_OWIRE_BASE (0x43F9C000) 304819833afSPeter Tyser #define IMX_CSPI1_BASE (0x43FA4000) 305819833afSPeter Tyser #define IMX_KPP_BASE (0x43FA8000) 306819833afSPeter Tyser #define IMX_IOPADMUX_BASE (0x43FAC000) 307ab3a990bSBenoît Thébaudeau #define IOMUXC_BASE_ADDR IMX_IOPADMUX_BASE 308819833afSPeter Tyser #define IMX_IOPADCTL_BASE (0x43FAC22C) 309819833afSPeter Tyser #define IMX_IOPADGRPCTL_BASE (0x43FAC418) 310819833afSPeter Tyser #define IMX_IOPADINPUTSEL_BASE (0x43FAC460) 311819833afSPeter Tyser #define IMX_AUDMUX_BASE (0x43FB0000) 312819833afSPeter Tyser #define IMX_ECT_IP1_BASE (0x43FB8000) 313819833afSPeter Tyser #define IMX_ECT_IP2_BASE (0x43FBC000) 314819833afSPeter Tyser 315819833afSPeter Tyser /* SPBA */ 316819833afSPeter Tyser #define IMX_SPBA_BASE (0x50000000) 317819833afSPeter Tyser #define IMX_CSPI3_BASE (0x50004000) 31840f6fffeSStefano Babic #define UART4_BASE (0x50008000) 31940f6fffeSStefano Babic #define UART3_BASE (0x5000C000) 320819833afSPeter Tyser #define IMX_CSPI2_BASE (0x50010000) 321819833afSPeter Tyser #define IMX_SSI2_BASE (0x50014000) 322819833afSPeter Tyser #define IMX_ESAI_BASE (0x50018000) 323819833afSPeter Tyser #define IMX_ATA_DMA_BASE (0x50020000) 324819833afSPeter Tyser #define IMX_SIM1_BASE (0x50024000) 325819833afSPeter Tyser #define IMX_SIM2_BASE (0x50028000) 32640f6fffeSStefano Babic #define UART5_BASE (0x5002C000) 327819833afSPeter Tyser #define IMX_TSC_BASE (0x50030000) 328819833afSPeter Tyser #define IMX_SSI1_BASE (0x50034000) 329819833afSPeter Tyser #define IMX_FEC_BASE (0x50038000) 330819833afSPeter Tyser #define IMX_SPBA_CTRL_BASE (0x5003C000) 331819833afSPeter Tyser 332819833afSPeter Tyser /* AIPS 2 */ 333819833afSPeter Tyser #define IMX_AIPS2_BASE (0x53F00000) 334819833afSPeter Tyser #define IMX_CCM_BASE (0x53F80000) 335819833afSPeter Tyser #define IMX_GPT4_BASE (0x53F84000) 336819833afSPeter Tyser #define IMX_GPT3_BASE (0x53F88000) 337819833afSPeter Tyser #define IMX_GPT2_BASE (0x53F8C000) 338819833afSPeter Tyser #define IMX_GPT1_BASE (0x53F90000) 339819833afSPeter Tyser #define IMX_EPIT1_BASE (0x53F94000) 340819833afSPeter Tyser #define IMX_EPIT2_BASE (0x53F98000) 341819833afSPeter Tyser #define IMX_GPIO4_BASE (0x53F9C000) 342819833afSPeter Tyser #define IMX_PWM2_BASE (0x53FA0000) 343819833afSPeter Tyser #define IMX_GPIO3_BASE (0x53FA4000) 344819833afSPeter Tyser #define IMX_PWM3_BASE (0x53FA8000) 345819833afSPeter Tyser #define IMX_SCC_BASE (0x53FAC000) 346819833afSPeter Tyser #define IMX_SCM_BASE (0x53FAE000) 347819833afSPeter Tyser #define IMX_SMN_BASE (0x53FAF000) 348819833afSPeter Tyser #define IMX_RNGD_BASE (0x53FB0000) 349819833afSPeter Tyser #define IMX_MMC_SDHC1_BASE (0x53FB4000) 350819833afSPeter Tyser #define IMX_MMC_SDHC2_BASE (0x53FB8000) 351819833afSPeter Tyser #define IMX_LCDC_BASE (0x53FBC000) 352819833afSPeter Tyser #define IMX_SLCDC_BASE (0x53FC0000) 353819833afSPeter Tyser #define IMX_PWM4_BASE (0x53FC8000) 354819833afSPeter Tyser #define IMX_GPIO1_BASE (0x53FCC000) 355819833afSPeter Tyser #define IMX_GPIO2_BASE (0x53FD0000) 356819833afSPeter Tyser #define IMX_SDMA_BASE (0x53FD4000) 357819833afSPeter Tyser #define IMX_WDT_BASE (0x53FDC000) 358819833afSPeter Tyser #define IMX_PWM1_BASE (0x53FE0000) 359819833afSPeter Tyser #define IMX_RTIC_BASE (0x53FEC000) 360819833afSPeter Tyser #define IMX_IIM_BASE (0x53FF0000) 3610f67e09eSBenoît Thébaudeau #define IIM_BASE_ADDR IMX_IIM_BASE 362819833afSPeter Tyser #define IMX_USB_BASE (0x53FF4000) 36334d33b67SBenoît Thébaudeau #define IMX_USB_PORT_OFFSET 0x200 364819833afSPeter Tyser #define IMX_CSI_BASE (0x53FF8000) 365819833afSPeter Tyser #define IMX_DRYICE_BASE (0x53FFC000) 366819833afSPeter Tyser 367819833afSPeter Tyser #define IMX_ARM926_ROMPATCH (0x60000000) 368819833afSPeter Tyser #define IMX_ARM926_ASIC (0x68000000) 369819833afSPeter Tyser 370819833afSPeter Tyser /* 128K Internal Static RAM */ 371819833afSPeter Tyser #define IMX_RAM_BASE (0x78000000) 3725676f598SBenoît Thébaudeau #define IMX_RAM_SIZE (128 * 1024) 373819833afSPeter Tyser 374819833afSPeter Tyser /* SDRAM BANKS */ 375819833afSPeter Tyser #define IMX_SDRAM_BANK0_BASE (0x80000000) 376819833afSPeter Tyser #define IMX_SDRAM_BANK1_BASE (0x90000000) 377819833afSPeter Tyser 378819833afSPeter Tyser #define IMX_WEIM_CS0 (0xA0000000) 379819833afSPeter Tyser #define IMX_WEIM_CS1 (0xA8000000) 380819833afSPeter Tyser #define IMX_WEIM_CS2 (0xB0000000) 381819833afSPeter Tyser #define IMX_WEIM_CS3 (0xB2000000) 382819833afSPeter Tyser #define IMX_WEIM_CS4 (0xB4000000) 383819833afSPeter Tyser #define IMX_ESDRAMC_BASE (0xB8001000) 384819833afSPeter Tyser #define IMX_WEIM_CTRL_BASE (0xB8002000) 385819833afSPeter Tyser #define IMX_M3IF_CTRL_BASE (0xB8003000) 386819833afSPeter Tyser #define IMX_EMI_CTRL_BASE (0xB8004000) 387819833afSPeter Tyser 388819833afSPeter Tyser /* NAND Flash Controller */ 389819833afSPeter Tyser #define IMX_NFC_BASE (0xBB000000) 390819833afSPeter Tyser #define NFC_BASE_ADDR IMX_NFC_BASE 391819833afSPeter Tyser 392819833afSPeter Tyser /* CCM bitfields */ 393819833afSPeter Tyser #define CCM_PLL_MFI_SHIFT 10 394819833afSPeter Tyser #define CCM_PLL_MFI_MASK 0xf 395819833afSPeter Tyser #define CCM_PLL_MFN_SHIFT 0 396819833afSPeter Tyser #define CCM_PLL_MFN_MASK 0x3ff 397819833afSPeter Tyser #define CCM_PLL_MFD_SHIFT 16 398819833afSPeter Tyser #define CCM_PLL_MFD_MASK 0x3ff 399819833afSPeter Tyser #define CCM_PLL_PD_SHIFT 26 400819833afSPeter Tyser #define CCM_PLL_PD_MASK 0xf 401819833afSPeter Tyser #define CCM_CCTL_ARM_DIV_SHIFT 30 402819833afSPeter Tyser #define CCM_CCTL_ARM_DIV_MASK 3 403819833afSPeter Tyser #define CCM_CCTL_AHB_DIV_SHIFT 28 404819833afSPeter Tyser #define CCM_CCTL_AHB_DIV_MASK 3 405819833afSPeter Tyser #define CCM_CCTL_ARM_SRC (1 << 14) 406819833afSPeter Tyser #define CCM_CGR1_GPT1 (1 << 19) 407819833afSPeter Tyser #define CCM_PERCLK_REG(clk) (clk / 4) 408819833afSPeter Tyser #define CCM_PERCLK_SHIFT(clk) (8 * (clk % 4)) 409819833afSPeter Tyser #define CCM_PERCLK_MASK 0x3f 410819833afSPeter Tyser #define CCM_RCSR_NF_16BIT_SEL (1 << 14) 411819833afSPeter Tyser #define CCM_RCSR_NF_PS(v) ((v >> 26) & 3) 412bf0adb86SThomas Diener #define CCM_CRDR_BT_UART_SRC_SHIFT 29 413bf0adb86SThomas Diener #define CCM_CRDR_BT_UART_SRC_MASK 7 414819833afSPeter Tyser 415819833afSPeter Tyser /* ESDRAM Controller register bitfields */ 416819833afSPeter Tyser #define ESDCTL_PRCT(x) (((x) & 0x3f) << 0) 417819833afSPeter Tyser #define ESDCTL_BL (1 << 7) 418819833afSPeter Tyser #define ESDCTL_FP (1 << 8) 419819833afSPeter Tyser #define ESDCTL_PWDT(x) (((x) & 3) << 10) 420819833afSPeter Tyser #define ESDCTL_SREFR(x) (((x) & 7) << 13) 421819833afSPeter Tyser #define ESDCTL_DSIZ_16_UPPER (0 << 16) 422819833afSPeter Tyser #define ESDCTL_DSIZ_16_LOWER (1 << 16) 423819833afSPeter Tyser #define ESDCTL_DSIZ_32 (2 << 16) 424819833afSPeter Tyser #define ESDCTL_COL8 (0 << 20) 425819833afSPeter Tyser #define ESDCTL_COL9 (1 << 20) 426819833afSPeter Tyser #define ESDCTL_COL10 (2 << 20) 427819833afSPeter Tyser #define ESDCTL_ROW11 (0 << 24) 428819833afSPeter Tyser #define ESDCTL_ROW12 (1 << 24) 429819833afSPeter Tyser #define ESDCTL_ROW13 (2 << 24) 430819833afSPeter Tyser #define ESDCTL_ROW14 (3 << 24) 431819833afSPeter Tyser #define ESDCTL_ROW15 (4 << 24) 432819833afSPeter Tyser #define ESDCTL_SP (1 << 27) 433819833afSPeter Tyser #define ESDCTL_SMODE_NORMAL (0 << 28) 434819833afSPeter Tyser #define ESDCTL_SMODE_PRECHARGE (1 << 28) 435819833afSPeter Tyser #define ESDCTL_SMODE_AUTO_REF (2 << 28) 436819833afSPeter Tyser #define ESDCTL_SMODE_LOAD_MODE (3 << 28) 437819833afSPeter Tyser #define ESDCTL_SMODE_MAN_REF (4 << 28) 438819833afSPeter Tyser #define ESDCTL_SDE (1 << 31) 439819833afSPeter Tyser 440819833afSPeter Tyser #define ESDCFG_TRC(x) (((x) & 0xf) << 0) 441819833afSPeter Tyser #define ESDCFG_TRCD(x) (((x) & 0x7) << 4) 442819833afSPeter Tyser #define ESDCFG_TCAS(x) (((x) & 0x3) << 8) 443819833afSPeter Tyser #define ESDCFG_TRRD(x) (((x) & 0x3) << 10) 444819833afSPeter Tyser #define ESDCFG_TRAS(x) (((x) & 0x7) << 12) 445819833afSPeter Tyser #define ESDCFG_TWR (1 << 15) 446819833afSPeter Tyser #define ESDCFG_TMRD(x) (((x) & 0x3) << 16) 447819833afSPeter Tyser #define ESDCFG_TRP(x) (((x) & 0x3) << 18) 448819833afSPeter Tyser #define ESDCFG_TWTR (1 << 20) 449819833afSPeter Tyser #define ESDCFG_TXP(x) (((x) & 0x3) << 21) 450819833afSPeter Tyser 451819833afSPeter Tyser #define ESDMISC_RST (1 << 1) 452819833afSPeter Tyser #define ESDMISC_MDDREN (1 << 2) 453819833afSPeter Tyser #define ESDMISC_MDDR_DL_RST (1 << 3) 454819833afSPeter Tyser #define ESDMISC_MDDR_MDIS (1 << 4) 455819833afSPeter Tyser #define ESDMISC_LHD (1 << 5) 456819833afSPeter Tyser #define ESDMISC_MA10_SHARE (1 << 6) 457819833afSPeter Tyser #define ESDMISC_SDRAM_RDY (1 << 31) 458819833afSPeter Tyser 459819833afSPeter Tyser /* GPT bits */ 460819833afSPeter Tyser #define GPT_CTRL_SWR (1 << 15) /* Software reset */ 461819833afSPeter Tyser #define GPT_CTRL_FRR (1 << 9) /* Freerun / restart */ 462819833afSPeter Tyser #define GPT_CTRL_CLKSOURCE_32 (4 << 6) /* Clock source */ 463819833afSPeter Tyser #define GPT_CTRL_TEN 1 /* Timer enable */ 464819833afSPeter Tyser 465819833afSPeter Tyser /* WDOG enable */ 466819833afSPeter Tyser #define WCR_WDE 0x04 46781129d07SMatthias Weisser #define WSR_UNLOCK1 0x5555 46881129d07SMatthias Weisser #define WSR_UNLOCK2 0xAAAA 469819833afSPeter Tyser 470bf0adb86SThomas Diener /* MAX bits */ 471bf0adb86SThomas Diener #define MAX_MGPCR_AULB(x) (((x) & 0x7) << 0) 472bf0adb86SThomas Diener 473bf0adb86SThomas Diener /* M3IF bits */ 474bf0adb86SThomas Diener #define M3IF_CTL_MRRP(x) (((x) & 0xff) << 0) 475bf0adb86SThomas Diener 476bf0adb86SThomas Diener /* WEIM bits */ 477bf0adb86SThomas Diener /* 13 fields of the upper CS control register */ 478bf0adb86SThomas Diener #define WEIM_CSCR_U(sp, wp, bcd, bcs, psz, pme, sync, dol, \ 479bf0adb86SThomas Diener cnc, wsc, ew, wws, edc) \ 480bf0adb86SThomas Diener ((sp) << 31 | (wp) << 30 | (bcd) << 28 | (bcs) << 24 | \ 481bf0adb86SThomas Diener (psz) << 22 | (pme) << 21 | (sync) << 20 | (dol) << 16 | \ 482bf0adb86SThomas Diener (cnc) << 14 | (wsc) << 8 | (ew) << 7 | (wws) << 4 | (edc) << 0) 483bf0adb86SThomas Diener /* 12 fields of the lower CS control register */ 484bf0adb86SThomas Diener #define WEIM_CSCR_L(oea, oen, ebwa, ebwn, \ 485bf0adb86SThomas Diener csa, ebc, dsz, csn, psr, cre, wrap, csen) \ 486bf0adb86SThomas Diener ((oea) << 28 | (oen) << 24 | (ebwa) << 20 | (ebwn) << 16 |\ 487bf0adb86SThomas Diener (csa) << 12 | (ebc) << 11 | (dsz) << 8 | (csn) << 4 |\ 488bf0adb86SThomas Diener (psr) << 3 | (cre) << 2 | (wrap) << 1 | (csen) << 0) 489bf0adb86SThomas Diener /* 14 fields of the additional CS control register */ 490bf0adb86SThomas Diener #define WEIM_CSCR_A(ebra, ebrn, rwa, rwn, mum, lah, lbn, lba, dww, dct, \ 491bf0adb86SThomas Diener wwu, age, cnc2, fce) \ 492bf0adb86SThomas Diener ((ebra) << 28 | (ebrn) << 24 | (rwa) << 20 | (rwn) << 16 |\ 493bf0adb86SThomas Diener (mum) << 15 | (lah) << 13 | (lbn) << 10 | (lba) << 8 |\ 494bf0adb86SThomas Diener (dww) << 6 | (dct) << 4 | (wwu) << 3 |\ 495bf0adb86SThomas Diener (age) << 2 | (cnc2) << 1 | (fce) << 0) 496bf0adb86SThomas Diener 49795d18589SMatthias Weisser /* Names used in GPIO driver */ 49895d18589SMatthias Weisser #define GPIO1_BASE_ADDR IMX_GPIO1_BASE 49995d18589SMatthias Weisser #define GPIO2_BASE_ADDR IMX_GPIO2_BASE 50095d18589SMatthias Weisser #define GPIO3_BASE_ADDR IMX_GPIO3_BASE 50195d18589SMatthias Weisser #define GPIO4_BASE_ADDR IMX_GPIO4_BASE 50295d18589SMatthias Weisser 503bf0adb86SThomas Diener /* 504bf0adb86SThomas Diener * CSPI register definitions 505bf0adb86SThomas Diener */ 506bf0adb86SThomas Diener #define MXC_CSPI 507bf0adb86SThomas Diener #define MXC_CSPICTRL_EN (1 << 0) 508bf0adb86SThomas Diener #define MXC_CSPICTRL_MODE (1 << 1) 509bf0adb86SThomas Diener #define MXC_CSPICTRL_XCH (1 << 2) 510bf0adb86SThomas Diener #define MXC_CSPICTRL_SMC (1 << 3) 511bf0adb86SThomas Diener #define MXC_CSPICTRL_POL (1 << 4) 512bf0adb86SThomas Diener #define MXC_CSPICTRL_PHA (1 << 5) 513bf0adb86SThomas Diener #define MXC_CSPICTRL_SSCTL (1 << 6) 514bf0adb86SThomas Diener #define MXC_CSPICTRL_SSPOL (1 << 7) 515bf0adb86SThomas Diener #define MXC_CSPICTRL_CHIPSELECT(x) (((x) & 0x3) << 12) 516bf0adb86SThomas Diener #define MXC_CSPICTRL_BITCOUNT(x) (((x) & 0xfff) << 20) 517bf0adb86SThomas Diener #define MXC_CSPICTRL_DATARATE(x) (((x) & 0x7) << 16) 518bf0adb86SThomas Diener #define MXC_CSPICTRL_TC (1 << 7) 519bf0adb86SThomas Diener #define MXC_CSPICTRL_RXOVF (1 << 6) 520bf0adb86SThomas Diener #define MXC_CSPICTRL_MAXBITS 0xfff 521bf0adb86SThomas Diener #define MXC_CSPIPERIOD_32KHZ (1 << 15) 522bf0adb86SThomas Diener #define MAX_SPI_BYTES 4 523bf0adb86SThomas Diener 524bf0adb86SThomas Diener #define MXC_SPI_BASE_ADDRESSES \ 525bf0adb86SThomas Diener IMX_CSPI1_BASE, \ 526bf0adb86SThomas Diener IMX_CSPI2_BASE, \ 527bf0adb86SThomas Diener IMX_CSPI3_BASE 528bf0adb86SThomas Diener 529819833afSPeter Tyser #endif /* _IMX_REGS_H */ 530