#ifndef _ARM_IMX_IMX51REG_H_
#define _ARM_IMX_IMX51REG_H_
#ifdef IMX50
#define TZIC_BASE 0x0fffc000
#define APB_BASE 0x40000000
#define AIPSTZ1_BASE 0x50000000
#define AIPSTZ2_BASE 0x60000000
#define CSD0DDR_BASE 0x70000000
#else
#define TZIC_BASE 0xe0000000
#define AIPSTZ1_BASE 0x70000000
#define AIPSTZ2_BASE 0x80000000
#define CSD0DDR_BASE 0x90000000
#define CSD1DDR_BASE 0xa0000000
#define CSDDDR_SIZE 0x10000000
#define CS0_BASE 0xb0000000
#define CS0_SIZE 0x08000000
#define CS1_BASE 0xb8000000
#define CS1_SIZE 0x08000000
#define CS2_BASE 0xc0000000
#define CS2_SIZE 0x08000000
#define CS3_BASE 0xc8000000
#define CS3_SIZE 0x04000000
#define CS4_BASE 0xcc000000
#define CS4_SIZE 0x02000000
#define CS5_BASE 0xcefe0000
#define CS5_SIZE 0x00010000
#define NAND_FLASH_BASE 0xcfff0000
#define NAND_FLASH_SIZE 0x00010000
#define GPU2D_BASE 0xd0000000
#define GPU2D_SIZE 0x10000000
#endif
#define BOOTROM_BASE 0x00000000
#define BOOTROM_SIZE 0x9000
#define SCCRAM_BASE 0x1ffe0000
#define SCCRAM_SIZE 0x20000
#define GPUMEM_BASE 0x20000000
#define GPUMEM_SIZE 0x20000
#define GPU_BASE 0x30000000
#define GPU_SIZE 0x10000000
#ifdef IMX50
#define EPDC_BASE (APB_BASE + 0x01010000)
#define EPDC_SIZE 0x2000
#endif
#define IPU_BASE 0x40000000
#define IPU_CM_BASE (IPU_BASE + 0x1e000000)
#define IPU_CM_SIZE 0x8000
#define IPU_IDMAC_BASE (IPU_BASE + 0x1e008000)
#define IPU_IDMAC_SIZE 0x8000
#define IPU_DP_BASE (IPU_BASE + 0x1e018000)
#define IPU_DP_SIZE 0x8000
#define IPU_IC_BASE (IPU_BASE + 0x1e020000)
#define IPU_IC_SIZE 0x8000
#define IPU_IRT_BASE (IPU_BASE + 0x1e028000)
#define IPU_IRT_SIZE 0x8000
#define IPU_CSI0_BASE (IPU_BASE + 0x1e030000)
#define IPU_CSI0_SIZE 0x8000
#define IPU_CSI1_BASE (IPU_BASE + 0x1e038000)
#define IPU_CSI1_SIZE 0x8000
#define IPU_DI0_BASE (IPU_BASE + 0x1e040000)
#define IPU_DI0_SIZE 0x8000
#define IPU_DI1_BASE (IPU_BASE + 0x1e048000)
#define IPU_DI1_SIZE 0x8000
#define IPU_SMFC_BASE (IPU_BASE + 0x1e050000)
#define IPU_SMFC_SIZE 0x8000
#define IPU_DC_BASE (IPU_BASE + 0x1e058000)
#define IPU_DC_SIZE 0x8000
#define IPU_DMFC_BASE (IPU_BASE + 0x1e060000)
#define IPU_DMFC_SIZE 0x8000
#define IPU_VDI_BASE (IPU_BASE + 0x1e068000)
#define IPU_VDI_SIZE 0x8000
#define IPU_CPMEM_BASE (IPU_BASE + 0x1f000000)
#define IPU_CPMEM_SIZE 0x20000
#define IPU_LUT_BASE (IPU_BASE + 0x1f020000)
#define IPU_LUT_SIZE 0x20000
#define IPU_SRM_BASE (IPU_BASE + 0x1f040000)
#define IPU_SRM_SIZE 0x20000
#define IPU_TPM_BASE (IPU_BASE + 0x1f060000)
#define IPU_TPM_SIZE 0x20000
#define IPU_DCTMPL_BASE (IPU_BASE + 0x1f080000)
#define IPU_DCTMPL_SIZE 0x20000
#define DEBUGROM_BASE 0x60000000
#define DEBUGROM_SIZE 0x1000
#define ESDHC1_BASE (AIPSTZ1_BASE + 0x00004000)
#define ESDHC2_BASE (AIPSTZ1_BASE + 0x00008000)
#define ESDHC3_BASE (AIPSTZ1_BASE + 0x00020000)
#define ESDHC4_BASE (AIPSTZ1_BASE + 0x00024000)
#define ESDHC_SIZE 0x4000
#define PWM1_BASE (AIPSTZ1_BASE + 0x03fb4000)
#define PWM2_BASE (AIPSTZ1_BASE + 0x03fb8000)
#define UART1_BASE (AIPSTZ1_BASE + 0x03fbc000)
#define UART2_BASE (AIPSTZ1_BASE + 0x03fc0000)
#define UART3_BASE (AIPSTZ1_BASE + 0x0000c000)
#define CCMC_BASE (AIPSTZ1_BASE + 0x03fd4000)
#define ECSPI1_BASE (AIPSTZ1_BASE + 0x00010000)
#define ECSPI2_BASE (AIPSTZ2_BASE + 0x03fac000)
#define SSI1_BASE (AIPSTZ2_BASE + 0x03fcc000)
#define SSI2_BASE (AIPSTZ1_BASE + 0x00014000)
#define SSI3_BASE (AIPSTZ2_BASE + 0x03fe8000)
#define SPDIF_BASE (AIPSTZ1_BASE + 0x00028000)
#define SPDIF_SIZE 0x4000
#define PATA_UDMA_BASE (AIPSTZ1_BASE + 0x00030000)
#define PATA_UDMA_SIZE 0x4000
#define PATA_PIO_BASE (AIPSTZ2_BASE + 0x03fe0000)
#define PATA_PIO_SIZE 0x4000
#define SLM_BASE (AIPSTZ1_BASE + 0x00034000)
#define SLM_SIZE 0x4000
#ifdef IMX50
#define I2C3_BASE (AIPSTZ1_BASE + 0x00038000)
#define I2C3_SIZE 0x4000
#else
#define HSI2C_BASE (AIPSTZ1_BASE + 0x00038000)
#define HSI2C_SIZE 0x4000
#endif
#define SPBA_BASE (AIPSTZ1_BASE + 0x0003c000)
#define SPBA_SIZE 0x4000
#define USBOH3_BASE (AIPSTZ1_BASE + 0x03f80000)
#define USBOH3_PL301_BASE (AIPSTZ1_BASE + 0x03fc4000)
#define USBOH3_EHCI_SIZE 0x200
#define USBOH3_OTG 0x000
#define USBOH3_EHCI(n) (USBOH3_EHCI_SIZE*(n))
#define USBOH3_USBCTRL 0x800
#define USBCTRL_OWIR __BIT(31)
#define USBCTRL_OSIC __BITS(29,30)
#define USBCTRL_OUIE __BIT(28)
#define USBCTRL_OBPAL __BITS(25,26)
#define USBCTRL_OPM __BIT(24)
#define USBCTRL_ICVOL __BIT(23)
#define USBCTRL_ICTPIE __BIT(19)
#define USBCTRL_UBPCKE __BIT(18)
#define USBCTRL_H1TCKOEN __BIT(17)
#define USBCTRL_ICTPC __BIT(16)
#define USBCTRL_H1WIR __BIT(15)
#define USBCTRL_H1SIC __BITS(13,14)
#define USBCTRL_H1UIE __BIT(12)
#define USBCTRL_H1WIE __BIT(11)
#define USBCTRL_H1BPVAL __BITS(9,10)
#define USBCTRL_H1PM __BIT(8)
#define USBCTRL_OHSTLL __BIT(7)
#define USBCTRL_H1HSTLL __BIT(6)
#define USBCTRL_H1DISFSTTL __BIT(4)
#define USBCTRL_OTCKOEN __BIT(1)
#define USBCTRL_BPE __BIT(0)
#define USBOH3_OTGMIRROR 0x804
#define USBOH3_PHYCTRL0 0x808
#define PHYCTRL0_VLOAD __BIT(31)
#define PHYCTRL0_VCONTROL __BITS(27,30)
#define PHYCTRL0_CONF2 __BIT(26)
#define PHYCTRL0_CONF3 __BIT(25)
#define PHYCTRL0_CHGRDETEN __BIT(24)
#define PHYCTRL0_CHGRDETON __BIT(23)
#define PHYCTRL0_VSTATUS __BITS(15,22)
#define PHYCTRL0_SUSPENDM __BIT(12)
#define PHYCTRL0_RESET __BIT(11)
#define PHYCTRL0_UTMI_ON_CLOCK __BIT(10)
#define PHYCTRL0_OTG_OVER_CUR_POL __BIT(9)
#define PHYCTRL0_OTG_OVER_CUR_DIS __BIT(8)
#define PHYCTRL0_OTG_XCVR_CLK_SEL __BIT(7)
#define PHYCTRL0_H1_OVER_CUR_POL __BIT(6)
#define PHYCTRL0_H1_OVER_CUR_DIS __BIT(5)
#define PHYCTRL0_H1_XCVR_CLK_SEL __BIT(4)
#define PHYCTRL0_PWR_POL __BIT(3)
#define PHYCTRL0_CHRGDET __BIT(2)
#define PHYCTRL0_CHRGDET_INT_EN __BIT(1)
#define PHYCTRL0_CHRGDET_INT_FLG __BIT(0)
#define USBOH3_PHYCTRL1 0x80c
#define PHYCTRL1_PLLDIVVALUE_MASK __BITS(0,1)
#define PHYCTRL1_PLLDIVVALUE_19MHZ 0
#define PHYCTRL1_PLLDIVVALUE_24MHZ 1
#define PHYCTRL1_PLLDIVVALUE_26MHZ 2
#define PHYCTRL1_PLLDIVVALUE_27MHZ 3
#define USBOH3_USBCTRL1 0x810
#define USBCTRL1_UH3_EXT_CLK_EN __BIT(27)
#define USBCTRL1_UH2_EXT_CLK_EN __BIT(26)
#define USBCTRL1_UH1_EXT_CLK_EN __BIT(25)
#define USBCTRL1_OTG_EXT_CLK_EN __BIT(24)
#define USBOH3_USBCTRL2 0x814
#define USBOH3_USBCTRL3 0x818
#define USBOH3_UH1_PHY_CTRL_0 0x81c
#define USBOH3_UH1_PHY_CTRL_1 0x820
#define USBOH3_USB_CLKONOFF_CTRL 0x824
#define USB_CLKONOFF_CTRL_H1_AHBCLK_OFF __BIT(18)
#define USB_CLKONOFF_CTRL_OTG_AHBCLK_OFF __BIT(17)
#define USBOH3_SIZE 0x4000
#define GPIO_BASE(n) \
(AIPSTZ1_BASE + (((n) <= 4) ? \
0x03f84000 + 0x4000 * ((n) - 1) : \
0x03fdc000 + 0x4000 * ((n) - 5)))
#define GPIO1_BASE GPIO_BASE(1)
#define GPIO2_BASE GPIO_BASE(2)
#define GPIO3_BASE GPIO_BASE(3)
#define GPIO4_BASE GPIO_BASE(4)
#define GPIO5_BASE GPIO_BASE(5)
#define GPIO6_BASE GPIO_BASE(6)
#ifdef IMX50
#define GPIO_NGROUPS 6
#else
#define GPIO_NGROUPS 4
#endif
#define KPP_BASE (AIPSTZ1_BASE + 0x03f94000)
#define WDOG1_BASE (AIPSTZ1_BASE + 0x03f98000)
#define WDOG2_BASE (AIPSTZ1_BASE + 0x03f9c000)
#define WDOG_SIZE 0x4000
#define GPT_BASE (AIPSTZ1_BASE + 0x03fa0000)
#define GPT_SIZE 0x4000
#define SRTC_BASE (AIPSTZ1_BASE + 0x03fa4000)
#define SRTC_SIZE 0x4000
#define IOMUXC_BASE (AIPSTZ1_BASE + 0x03fa8000)
#define IOMUXC_SIZE 0x4000
#define IOMUXC_MUX_CTL 0x001c
#define IOMUX_CONFIG_SION __BIT(4)
#define IOMUX_CONFIG_ALT0 (0)
#define IOMUX_CONFIG_ALT1 (1)
#define IOMUX_CONFIG_ALT2 (2)
#define IOMUX_CONFIG_ALT3 (3)
#define IOMUX_CONFIG_ALT4 (4)
#define IOMUX_CONFIG_ALT5 (5)
#define IOMUX_CONFIG_ALT6 (6)
#define IOMUX_CONFIG_ALT7 (7)
#define IOMUXC_PAD_CTL 0x03f0
#define PAD_CTL_HVE __BIT(13)
#define PAD_CTL_DDR_INPUT __BIT(9)
#define PAD_CTL_HYS __BIT(8)
#define PAD_CTL_PKE __BIT(7)
#define PAD_CTL_PUE __BIT(6)
#define PAD_CTL_PULL (PAD_CTL_PKE|PAD_CTL_PUE)
#define PAD_CTL_KEEPER (PAD_CTL_PKE|0)
#define PAD_CTL_PUS_MASK __BITS(5, 4)
#define PAD_CTL_PUS_100K_PD __SHIFTIN(0x0, PAD_CTL_PUS_MASK)
#define PAD_CTL_PUS_47K_PU __SHIFTIN(0x1, PAD_CTL_PUS_MASK)
#define PAD_CTL_PUS_100K_PU __SHIFTIN(0x2, PAD_CTL_PUS_MASK)
#define PAD_CTL_PUS_22K_PU __SHIFTIN(0x3, PAD_CTL_PUS_MASK)
#define PAD_CTL_ODE __BIT(3)
#define PAD_CTL_DSE_MASK __BITS(2, 1)
#define PAD_CTL_DSE_LOW __SHIFTIN(0x0, PAD_CTL_DSE_MASK)
#define PAD_CTL_DSE_MID __SHIFTIN(0x1, PAD_CTL_DSE_MASK)
#define PAD_CTL_DSE_HIGH __SHIFTIN(0x2, PAD_CTL_DSE_MASK)
#define PAD_CTL_DSE_MAX __SHIFTIN(0x3, PAD_CTL_DSE_MASK)
#define PAD_CTL_SRE __BIT(0)
#define IOMUXC_INPUT_CTL 0x08c4
#define INPUT_DAISY_0 0
#define INPUT_DAISY_1 1
#define INPUT_DAISY_2 2
#define INPUT_DAISY_3 3
#define INPUT_DAISY_4 4
#define INPUT_DAISY_5 5
#define INPUT_DAISY_6 6
#define INPUT_DAISY_7 7
#define IOMUX_PIN_TO_MUX_ADDRESS(pin) (((pin) >> 16) & 0xffff)
#define IOMUX_PIN_TO_PAD_ADDRESS(pin) (((pin) >> 0) & 0xffff)
#define IOMUX_PIN(mux_adr, pad_adr) \
(((mux_adr) << 16) | (((pad_adr) << 0)))
#define IOMUX_MUX_NONE 0xffff
#define IOMUX_PAD_NONE 0xffff
#define EPIT1_BASE (AIPSTZ1_BASE + 0x03FAC000)
#define EPIT2_BASE (AIPSTZ1_BASE + 0x03FB0000)
#define PWM1_BASE (AIPSTZ1_BASE + 0x03fb4000)
#define PWM2_BASE (AIPSTZ1_BASE + 0x03fb8000)
#define PWM_SIZE 0x4000
#define SRC_BASE (AIPSTZ1_BASE + 0x03fd0000)
#define SRC_SIZE 0x4000
#define CCM_BASE (AIPSTZ1_BASE + 0x03fd4000)
#define CCM_SIZE 0x4000
#define GPC_BASE (AIPSTZ1_BASE + 0x03fd8000)
#define GPC_SIZE 0x4000
#define AHBMAX_BASE (AIPSTZ2_BASE + 0x03f94000)
#define AHBMAX_SIZE 0x4000
#define IIM_BASE (AIPSTZ2_BASE + 0x03f98000)
#define IIM_SIZE 0x4000
#define CSU_BASE (AIPSTZ2_BASE + 0x03f9c000)
#define CSU_SIZE 0x4000
#define OWIRE_BASE (AIPSTZ2_BASE + 0x03fa4000)
#define OWIRE_SIZE 0x4000
#define FIRI_BASE (AIPSTZ2_BASE + 0x03fa8000)
#define FIRI_SIZE 0x4000
#define SDMA_BASE (AIPSTZ2_BASE + 0x03fb0000)
#define SDMA_SIZE 0x4000
#define SCC_BASE (AIPSTZ2_BASE + 0x03fb4000)
#define SCC_SIZE 0x4000
#define ROMCP_BASE (AIPSTZ2_BASE + 0x03fb8000)
#define ROMCP_SIZE 0x4000
#define RTIC_BASE (AIPSTZ2_BASE + 0x03fbc000)
#define RTIC_SIZE 0x4000
#define CSPI_BASE (AIPSTZ2_BASE + 0x03fc0000)
#define CSPI_SIZE 0x4000
#define I2C1_BASE (AIPSTZ2_BASE + 0x03fc8000)
#define I2C2_BASE (AIPSTZ2_BASE + 0x03fc4000)
#define I2C_SIZE 0x4000
#define AUDMUX_BASE (AIPSTZ2_BASE + 0x03fd0000)
#define AUDMUX_SIZE 0x4000
#define AUDMUX_PTCR(n) ((n - 1) * 0x8)
#define PTCR_TFSDIR (1 << 31)
#define PTCR_TFSEL(x) (((x) & 0x7) << 27)
#define PTCR_TCLKDIR (1 << 26)
#define PTCR_TCSEL(x) (((x) & 0x7) << 22)
#define PTCR_RFSDIR (1 << 21)
#define PTCR_RFSEL(x) (((x) & 0x7) << 17)
#define PTCR_RCLKDIR (1 << 16)
#define PTCR_RCSEL(x) (((x) & 0x7) << 12)
#define PTCR_SYN (1 << 11)
#define AUDMUX_PDCR(n) ((n - 1) * 0x8 + 0x4)
#define PDCR_RXDSEL(x) (((x) & 0x7) << 13)
#define PDCR_TXRXEN (1 << 12)
#define PDCR_MODE(x) (((x) & 0x3) << 8)
#define PDCR_INMMASK(x) (((x) & 0xff) << 0)
#define AUDMUX_CNMCR 0x38
#define EMI_BASE (AIPSTZ2_BASE + 0x03fd8000)
#define EMI_SIZE 0x4000
#define SIM_BASE (AIPSTZ2_BASE + 0x03fe4000)
#define SIM_SIZE 0x4000
#define FEC_BASE (AIPSTZ2_BASE + 0x03fec000)
#define FEC_SIZE 0x4000
#define TVE_BASE (AIPSTZ2_BASE + 0x03ff0000)
#define TVE_SIZE 0x4000
#define VPU_BASE (AIPSTZ2_BASE + 0x03ff4000)
#define VPU_SIZE 0x4000
#define SAHARA_BASE (AIPSTZ2_BASE + 0x03ff8000)
#define SAHARA_SIZE 0x4000
#define DPLL_BASE(n) ((AIPSTZ2_BASE + 0x03F80000 + (0x4000 * ((n)-1))))
#define DPLL_SIZE 0x4000
#endif