Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /*
0003  * arch/arm/mach-ep93xx/soc.h
0004  *
0005  * Copyright (C) 2012 Open Kernel Labs <www.ok-labs.com>
0006  * Copyright (C) 2012 Ryan Mallon <rmallon@gmail.com>
0007  */
0008 
0009 #ifndef _EP93XX_SOC_H
0010 #define _EP93XX_SOC_H
0011 
0012 #include "ep93xx-regs.h"
0013 #include "irqs.h"
0014 
0015 /*
0016  * EP93xx Physical Memory Map:
0017  *
0018  * The ASDO pin is sampled at system reset to select a synchronous or
0019  * asynchronous boot configuration.  When ASDO is "1" (i.e. pulled-up)
0020  * the synchronous boot mode is selected.  When ASDO is "0" (i.e
0021  * pulled-down) the asynchronous boot mode is selected.
0022  *
0023  * In synchronous boot mode nSDCE3 is decoded starting at physical address
0024  * 0x00000000 and nCS0 is decoded starting at 0xf0000000.  For asynchronous
0025  * boot mode they are swapped with nCS0 decoded at 0x00000000 ann nSDCE3
0026  * decoded at 0xf0000000.
0027  *
0028  * There is known errata for the EP93xx dealing with External Memory
0029  * Configurations.  Please refer to "AN273: EP93xx Silicon Rev E Design
0030  * Guidelines" for more information.  This document can be found at:
0031  *
0032  *  http://www.cirrus.com/en/pubs/appNote/AN273REV4.pdf
0033  */
0034 
0035 #define EP93XX_CS0_PHYS_BASE_ASYNC  0x00000000  /* ASDO Pin = 0 */
0036 #define EP93XX_SDCE3_PHYS_BASE_SYNC 0x00000000  /* ASDO Pin = 1 */
0037 #define EP93XX_CS1_PHYS_BASE        0x10000000
0038 #define EP93XX_CS2_PHYS_BASE        0x20000000
0039 #define EP93XX_CS3_PHYS_BASE        0x30000000
0040 #define EP93XX_PCMCIA_PHYS_BASE     0x40000000
0041 #define EP93XX_CS6_PHYS_BASE        0x60000000
0042 #define EP93XX_CS7_PHYS_BASE        0x70000000
0043 #define EP93XX_SDCE0_PHYS_BASE      0xc0000000
0044 #define EP93XX_SDCE1_PHYS_BASE      0xd0000000
0045 #define EP93XX_SDCE2_PHYS_BASE      0xe0000000
0046 #define EP93XX_SDCE3_PHYS_BASE_ASYNC    0xf0000000  /* ASDO Pin = 0 */
0047 #define EP93XX_CS0_PHYS_BASE_SYNC   0xf0000000  /* ASDO Pin = 1 */
0048 
0049 /* AHB peripherals */
0050 #define EP93XX_DMA_BASE         EP93XX_AHB_IOMEM(0x00000000)
0051 
0052 #define EP93XX_ETHERNET_PHYS_BASE   EP93XX_AHB_PHYS(0x00010000)
0053 #define EP93XX_ETHERNET_BASE        EP93XX_AHB_IOMEM(0x00010000)
0054 
0055 #define EP93XX_USB_PHYS_BASE        EP93XX_AHB_PHYS(0x00020000)
0056 #define EP93XX_USB_BASE         EP93XX_AHB_IOMEM(0x00020000)
0057 
0058 #define EP93XX_RASTER_PHYS_BASE     EP93XX_AHB_PHYS(0x00030000)
0059 #define EP93XX_RASTER_BASE      EP93XX_AHB_IOMEM(0x00030000)
0060 
0061 #define EP93XX_GRAPHICS_ACCEL_BASE  EP93XX_AHB_IOMEM(0x00040000)
0062 
0063 #define EP93XX_SDRAM_CONTROLLER_BASE    EP93XX_AHB_IOMEM(0x00060000)
0064 
0065 #define EP93XX_PCMCIA_CONTROLLER_BASE   EP93XX_AHB_IOMEM(0x00080000)
0066 
0067 #define EP93XX_BOOT_ROM_BASE        EP93XX_AHB_IOMEM(0x00090000)
0068 
0069 #define EP93XX_IDE_PHYS_BASE        EP93XX_AHB_PHYS(0x000a0000)
0070 #define EP93XX_IDE_BASE         EP93XX_AHB_IOMEM(0x000a0000)
0071 
0072 #define EP93XX_VIC1_BASE        EP93XX_AHB_IOMEM(0x000b0000)
0073 
0074 #define EP93XX_VIC2_BASE        EP93XX_AHB_IOMEM(0x000c0000)
0075 
0076 /* APB peripherals */
0077 #define EP93XX_TIMER_BASE       EP93XX_APB_IOMEM(0x00010000)
0078 
0079 #define EP93XX_I2S_PHYS_BASE        EP93XX_APB_PHYS(0x00020000)
0080 #define EP93XX_I2S_BASE         EP93XX_APB_IOMEM(0x00020000)
0081 
0082 #define EP93XX_SECURITY_BASE        EP93XX_APB_IOMEM(0x00030000)
0083 
0084 #define EP93XX_AAC_PHYS_BASE        EP93XX_APB_PHYS(0x00080000)
0085 #define EP93XX_AAC_BASE         EP93XX_APB_IOMEM(0x00080000)
0086 
0087 #define EP93XX_SPI_PHYS_BASE        EP93XX_APB_PHYS(0x000a0000)
0088 #define EP93XX_SPI_BASE         EP93XX_APB_IOMEM(0x000a0000)
0089 
0090 #define EP93XX_IRDA_BASE        EP93XX_APB_IOMEM(0x000b0000)
0091 
0092 #define EP93XX_KEY_MATRIX_PHYS_BASE EP93XX_APB_PHYS(0x000f0000)
0093 #define EP93XX_KEY_MATRIX_BASE      EP93XX_APB_IOMEM(0x000f0000)
0094 
0095 #define EP93XX_ADC_PHYS_BASE        EP93XX_APB_PHYS(0x00100000)
0096 #define EP93XX_ADC_BASE         EP93XX_APB_IOMEM(0x00100000)
0097 #define EP93XX_TOUCHSCREEN_BASE     EP93XX_APB_IOMEM(0x00100000)
0098 
0099 #define EP93XX_PWM_PHYS_BASE        EP93XX_APB_PHYS(0x00110000)
0100 #define EP93XX_PWM_BASE         EP93XX_APB_IOMEM(0x00110000)
0101 
0102 #define EP93XX_RTC_PHYS_BASE        EP93XX_APB_PHYS(0x00120000)
0103 #define EP93XX_RTC_BASE         EP93XX_APB_IOMEM(0x00120000)
0104 
0105 #define EP93XX_WATCHDOG_PHYS_BASE   EP93XX_APB_PHYS(0x00140000)
0106 #define EP93XX_WATCHDOG_BASE        EP93XX_APB_IOMEM(0x00140000)
0107 
0108 /* System controller */
0109 #define EP93XX_SYSCON_BASE      EP93XX_APB_IOMEM(0x00130000)
0110 #define EP93XX_SYSCON_REG(x)        (EP93XX_SYSCON_BASE + (x))
0111 #define EP93XX_SYSCON_POWER_STATE   EP93XX_SYSCON_REG(0x00)
0112 #define EP93XX_SYSCON_PWRCNT        EP93XX_SYSCON_REG(0x04)
0113 #define EP93XX_SYSCON_PWRCNT_FIR_EN (1<<31)
0114 #define EP93XX_SYSCON_PWRCNT_UARTBAUD   (1<<29)
0115 #define EP93XX_SYSCON_PWRCNT_USH_EN 28
0116 #define EP93XX_SYSCON_PWRCNT_DMA_M2M1   27
0117 #define EP93XX_SYSCON_PWRCNT_DMA_M2M0   26
0118 #define EP93XX_SYSCON_PWRCNT_DMA_M2P8   25
0119 #define EP93XX_SYSCON_PWRCNT_DMA_M2P9   24
0120 #define EP93XX_SYSCON_PWRCNT_DMA_M2P6   23
0121 #define EP93XX_SYSCON_PWRCNT_DMA_M2P7   22
0122 #define EP93XX_SYSCON_PWRCNT_DMA_M2P4   21
0123 #define EP93XX_SYSCON_PWRCNT_DMA_M2P5   20
0124 #define EP93XX_SYSCON_PWRCNT_DMA_M2P2   19
0125 #define EP93XX_SYSCON_PWRCNT_DMA_M2P3   18
0126 #define EP93XX_SYSCON_PWRCNT_DMA_M2P0   17
0127 #define EP93XX_SYSCON_PWRCNT_DMA_M2P1   16
0128 #define EP93XX_SYSCON_HALT      EP93XX_SYSCON_REG(0x08)
0129 #define EP93XX_SYSCON_STANDBY       EP93XX_SYSCON_REG(0x0c)
0130 #define EP93XX_SYSCON_CLKSET1       EP93XX_SYSCON_REG(0x20)
0131 #define EP93XX_SYSCON_CLKSET1_NBYP1 (1<<23)
0132 #define EP93XX_SYSCON_CLKSET2       EP93XX_SYSCON_REG(0x24)
0133 #define EP93XX_SYSCON_CLKSET2_NBYP2 (1<<19)
0134 #define EP93XX_SYSCON_CLKSET2_PLL2_EN   (1<<18)
0135 #define EP93XX_SYSCON_DEVCFG        EP93XX_SYSCON_REG(0x80)
0136 #define EP93XX_SYSCON_DEVCFG_SWRST  (1<<31)
0137 #define EP93XX_SYSCON_DEVCFG_D1ONG  (1<<30)
0138 #define EP93XX_SYSCON_DEVCFG_D0ONG  (1<<29)
0139 #define EP93XX_SYSCON_DEVCFG_IONU2  (1<<28)
0140 #define EP93XX_SYSCON_DEVCFG_GONK   (1<<27)
0141 #define EP93XX_SYSCON_DEVCFG_TONG   (1<<26)
0142 #define EP93XX_SYSCON_DEVCFG_MONG   (1<<25)
0143 #define EP93XX_SYSCON_DEVCFG_U3EN   24
0144 #define EP93XX_SYSCON_DEVCFG_CPENA  (1<<23)
0145 #define EP93XX_SYSCON_DEVCFG_A2ONG  (1<<22)
0146 #define EP93XX_SYSCON_DEVCFG_A1ONG  (1<<21)
0147 #define EP93XX_SYSCON_DEVCFG_U2EN   20
0148 #define EP93XX_SYSCON_DEVCFG_EXVC   (1<<19)
0149 #define EP93XX_SYSCON_DEVCFG_U1EN   18
0150 #define EP93XX_SYSCON_DEVCFG_TIN    (1<<17)
0151 #define EP93XX_SYSCON_DEVCFG_HC3IN  (1<<15)
0152 #define EP93XX_SYSCON_DEVCFG_HC3EN  (1<<14)
0153 #define EP93XX_SYSCON_DEVCFG_HC1IN  (1<<13)
0154 #define EP93XX_SYSCON_DEVCFG_HC1EN  (1<<12)
0155 #define EP93XX_SYSCON_DEVCFG_HONIDE (1<<11)
0156 #define EP93XX_SYSCON_DEVCFG_GONIDE (1<<10)
0157 #define EP93XX_SYSCON_DEVCFG_PONG   (1<<9)
0158 #define EP93XX_SYSCON_DEVCFG_EONIDE (1<<8)
0159 #define EP93XX_SYSCON_DEVCFG_I2SONSSP   (1<<7)
0160 #define EP93XX_SYSCON_DEVCFG_I2SONAC97  (1<<6)
0161 #define EP93XX_SYSCON_DEVCFG_RASONP3    (1<<4)
0162 #define EP93XX_SYSCON_DEVCFG_RAS    (1<<3)
0163 #define EP93XX_SYSCON_DEVCFG_ADCPD  (1<<2)
0164 #define EP93XX_SYSCON_DEVCFG_KEYS   (1<<1)
0165 #define EP93XX_SYSCON_DEVCFG_SHENA  (1<<0)
0166 #define EP93XX_SYSCON_VIDCLKDIV     EP93XX_SYSCON_REG(0x84)
0167 #define EP93XX_SYSCON_CLKDIV_ENABLE 15
0168 #define EP93XX_SYSCON_CLKDIV_ESEL   (1<<14)
0169 #define EP93XX_SYSCON_CLKDIV_PSEL   (1<<13)
0170 #define EP93XX_SYSCON_CLKDIV_PDIV_SHIFT 8
0171 #define EP93XX_SYSCON_I2SCLKDIV     EP93XX_SYSCON_REG(0x8c)
0172 #define EP93XX_SYSCON_I2SCLKDIV_SENA    31
0173 #define EP93XX_SYSCON_I2SCLKDIV_ORIDE   (1<<29)
0174 #define EP93XX_SYSCON_I2SCLKDIV_SPOL    (1<<19)
0175 #define EP93XX_I2SCLKDIV_SDIV       (1 << 16)
0176 #define EP93XX_I2SCLKDIV_LRDIV32    (0 << 17)
0177 #define EP93XX_I2SCLKDIV_LRDIV64    (1 << 17)
0178 #define EP93XX_I2SCLKDIV_LRDIV128   (2 << 17)
0179 #define EP93XX_I2SCLKDIV_LRDIV_MASK (3 << 17)
0180 #define EP93XX_SYSCON_KEYTCHCLKDIV  EP93XX_SYSCON_REG(0x90)
0181 #define EP93XX_SYSCON_KEYTCHCLKDIV_TSEN 31
0182 #define EP93XX_SYSCON_KEYTCHCLKDIV_ADIV 16
0183 #define EP93XX_SYSCON_KEYTCHCLKDIV_KEN  15
0184 #define EP93XX_SYSCON_KEYTCHCLKDIV_KDIV (1<<0)
0185 #define EP93XX_SYSCON_SYSCFG        EP93XX_SYSCON_REG(0x9c)
0186 #define EP93XX_SYSCON_SYSCFG_REV_MASK   (0xf0000000)
0187 #define EP93XX_SYSCON_SYSCFG_REV_SHIFT  (28)
0188 #define EP93XX_SYSCON_SYSCFG_SBOOT  (1<<8)
0189 #define EP93XX_SYSCON_SYSCFG_LCSN7  (1<<7)
0190 #define EP93XX_SYSCON_SYSCFG_LCSN6  (1<<6)
0191 #define EP93XX_SYSCON_SYSCFG_LASDO  (1<<5)
0192 #define EP93XX_SYSCON_SYSCFG_LEEDA  (1<<4)
0193 #define EP93XX_SYSCON_SYSCFG_LEECLK (1<<3)
0194 #define EP93XX_SYSCON_SYSCFG_LCSN2  (1<<1)
0195 #define EP93XX_SYSCON_SYSCFG_LCSN1  (1<<0)
0196 #define EP93XX_SYSCON_SWLOCK        EP93XX_SYSCON_REG(0xc0)
0197 
0198 /* EP93xx System Controller software locked register write */
0199 void ep93xx_syscon_swlocked_write(unsigned int val, void __iomem *reg);
0200 void ep93xx_devcfg_set_clear(unsigned int set_bits, unsigned int clear_bits);
0201 
0202 static inline void ep93xx_devcfg_set_bits(unsigned int bits)
0203 {
0204     ep93xx_devcfg_set_clear(bits, 0x00);
0205 }
0206 
0207 static inline void ep93xx_devcfg_clear_bits(unsigned int bits)
0208 {
0209     ep93xx_devcfg_set_clear(0x00, bits);
0210 }
0211 
0212 #endif /* _EP93XX_SOC_H */