summaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-at91/include/mach/sama5d2.h
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-at91/include/mach/sama5d2.h')
-rw-r--r--arch/arm/mach-at91/include/mach/sama5d2.h225
1 files changed, 142 insertions, 83 deletions
diff --git a/arch/arm/mach-at91/include/mach/sama5d2.h b/arch/arm/mach-at91/include/mach/sama5d2.h
index 3dad7d9c9c..90b566ffc4 100644
--- a/arch/arm/mach-at91/include/mach/sama5d2.h
+++ b/arch/arm/mach-at91/include/mach/sama5d2.h
@@ -14,6 +14,11 @@
#ifndef SAMA5D2_H
#define SAMA5D2_H
+#include <asm/io.h>
+#include <linux/sizes.h>
+#include <linux/bitops.h>
+#include <linux/bitfield.h>
+
/*
* Peripheral identifiers/interrupts. (Table 18-9)
*/
@@ -101,100 +106,100 @@
* User Peripheral physical base addresses.
*/
-#define SAMA5D2_BASE_LCDC 0xf0000000
-#define SAMA5D2_BASE_XDMAC1 0xf0004000
-#define SAMA5D2_BASE_HXISI 0xf0008000
-#define SAMA5D2_BASE_MPDDRC 0xf000c000
-#define SAMA5D2_BASE_XDMAC0 0xf0010000
-#define SAMA5D2_BASE_PMC 0xf0014000
-#define SAMA5D2_BASE_MATRIX64 0xf0018000 /* MATRIX0 */
-#define SAMA5D2_BASE_AESB 0xf001c000
-#define SAMA5D2_BASE_QSPI0 0xf0020000
-#define SAMA5D2_BASE_QSPI1 0xf0024000
-#define SAMA5D2_BASE_SHA 0xf0028000
-#define SAMA5D2_BASE_AES 0xf002c000
+#define SAMA5D2_BASE_LCDC IOMEM(0xf0000000)
+#define SAMA5D2_BASE_XDMAC1 IOMEM(0xf0004000)
+#define SAMA5D2_BASE_HXISI IOMEM(0xf0008000)
+#define SAMA5D2_BASE_MPDDRC IOMEM(0xf000c000)
+#define SAMA5D2_BASE_XDMAC0 IOMEM(0xf0010000)
+#define SAMA5D2_BASE_PMC IOMEM(0xf0014000)
+#define SAMA5D2_BASE_MATRIX64 IOMEM(0xf0018000) /* MATRIX0 */
+#define SAMA5D2_BASE_AESB IOMEM(0xf001c000)
+#define SAMA5D2_BASE_QSPI0 IOMEM(0xf0020000)
+#define SAMA5D2_BASE_QSPI1 IOMEM(0xf0024000)
+#define SAMA5D2_BASE_SHA IOMEM(0xf0028000)
+#define SAMA5D2_BASE_AES IOMEM(0xf002c000)
-#define SAMA5D2_BASE_SPI0 0xf8000000
-#define SAMA5D2_BASE_SSC0 0xf8004000
-#define SAMA5D2_BASE_GMAC 0xf8008000
-#define SAMA5D2_BASE_TC0 0xf800c000
-#define SAMA5D2_BASE_TC1 0xf8010000
-#define SAMA5D2_BASE_HSMC 0xf8014000
-#define SAMA5D2_BASE_PDMIC 0xf8018000
-#define SAMA5D2_BASE_UART0 0xf801c000
-#define SAMA5D2_BASE_UART1 0xf8020000
-#define SAMA5D2_BASE_UART2 0xf8024000
-#define SAMA5D2_BASE_TWI0 0xf8028000
-#define SAMA5D2_BASE_PWMC 0xf802c000
-#define SAMA5D2_BASE_SFR 0xf8030000
-#define SAMA5D2_BASE_FLEXCOM0 0xf8034000
-#define SAMA5D2_BASE_FLEXCOM1 0xf8038000
-#define SAMA5D2_BASE_SAIC 0xf803c000
-#define SAMA5D2_BASE_ICM 0xf8040000
-#define SAMA5D2_BASE_SECURAM 0xf8044000
-#define SAMA5D2_BASE_SYSC 0xf8048000
-#define SAMA5D2_BASE_ACC 0xf804a000
-#define SAMA5D2_BASE_SFC 0xf804c000
-#define SAMA5D2_BASE_I2SC0 0xf8050000
-#define SAMA5D2_BASE_CAN0 0xf8054000
+#define SAMA5D2_BASE_SPI0 IOMEM(0xf8000000)
+#define SAMA5D2_BASE_SSC0 IOMEM(0xf8004000)
+#define SAMA5D2_BASE_GMAC IOMEM(0xf8008000)
+#define SAMA5D2_BASE_TC0 IOMEM(0xf800c000)
+#define SAMA5D2_BASE_TC1 IOMEM(0xf8010000)
+#define SAMA5D2_BASE_HSMC IOMEM(0xf8014000)
+#define SAMA5D2_BASE_PDMIC IOMEM(0xf8018000)
+#define SAMA5D2_BASE_UART0 IOMEM(0xf801c000)
+#define SAMA5D2_BASE_UART1 IOMEM(0xf8020000)
+#define SAMA5D2_BASE_UART2 IOMEM(0xf8024000)
+#define SAMA5D2_BASE_TWI0 IOMEM(0xf8028000)
+#define SAMA5D2_BASE_PWMC IOMEM(0xf802c000)
+#define SAMA5D2_BASE_SFR IOMEM(0xf8030000)
+#define SAMA5D2_BASE_FLEXCOM0 IOMEM(0xf8034000)
+#define SAMA5D2_BASE_FLEXCOM1 IOMEM(0xf8038000)
+#define SAMA5D2_BASE_SAIC IOMEM(0xf803c000)
+#define SAMA5D2_BASE_ICM IOMEM(0xf8040000)
+#define SAMA5D2_BASE_SECURAM IOMEM(0xf8044000)
+#define SAMA5D2_BASE_SYSC IOMEM(0xf8048000)
+#define SAMA5D2_BASE_ACC IOMEM(0xf804a000)
+#define SAMA5D2_BASE_SFC IOMEM(0xf804c000)
+#define SAMA5D2_BASE_I2SC0 IOMEM(0xf8050000)
+#define SAMA5D2_BASE_CAN0 IOMEM(0xf8054000)
-#define SAMA5D2_BASE_SPI1 0xfc000000
-#define SAMA5D2_BASE_SSC1 0xfc004000
-#define SAMA5D2_BASE_UART3 0xfc008000
-#define SAMA5D2_BASE_UART4 0xfc00c000
-#define SAMA5D2_BASE_FLEXCOM2 0xfc010000
-#define SAMA5D2_BASE_FLEXCOM3 0xfc014000
-#define SAMA5D2_BASE_FLEXCOM4 0xfc018000
-#define SAMA5D2_BASE_TRNG 0xfc01c000
-#define SAMA5D2_BASE_AIC 0xfc020000
-#define SAMA5D2_BASE_TWI1 0xfc028000
-#define SAMA5D2_BASE_UDPHS 0xfc02c000
-#define SAMA5D2_BASE_ADC 0xfc030000
+#define SAMA5D2_BASE_SPI1 IOMEM(0xfc000000)
+#define SAMA5D2_BASE_SSC1 IOMEM(0xfc004000)
+#define SAMA5D2_BASE_UART3 IOMEM(0xfc008000)
+#define SAMA5D2_BASE_UART4 IOMEM(0xfc00c000)
+#define SAMA5D2_BASE_FLEXCOM2 IOMEM(0xfc010000)
+#define SAMA5D2_BASE_FLEXCOM3 IOMEM(0xfc014000)
+#define SAMA5D2_BASE_FLEXCOM4 IOMEM(0xfc018000)
+#define SAMA5D2_BASE_TRNG IOMEM(0xfc01c000)
+#define SAMA5D2_BASE_AIC IOMEM(0xfc020000)
+#define SAMA5D2_BASE_TWI1 IOMEM(0xfc028000)
+#define SAMA5D2_BASE_UDPHS IOMEM(0xfc02c000)
+#define SAMA5D2_BASE_ADC IOMEM(0xfc030000)
-#define SAMA5D2_BASE_PIOA 0xfc038000
-#define SAMA5D2_BASE_MATRIX32 0xfc03c000 /* MATRIX1 */
-#define SAMA5D2_BASE_SECUMOD 0xfc040000
-#define SAMA5D2_BASE_TDES 0xfc044000
-#define SAMA5D2_BASE_CLASSD 0xfc048000
-#define SAMA5D2_BASE_I2SC1 0xfc04c000
-#define SAMA5D2_BASE_CAN1 0xfc050000
-#define SAMA5D2_BASE_SFRBU 0xfc05c000
-#define SAMA5D2_BASE_CHIPID 0xfc069000
+#define SAMA5D2_BASE_PIOA IOMEM(0xfc038000)
+#define SAMA5D2_BASE_MATRIX32 IOMEM(0xfc03c000) /* MATRIX1 */
+#define SAMA5D2_BASE_SECUMOD IOMEM(0xfc040000)
+#define SAMA5D2_BASE_TDES IOMEM(0xfc044000)
+#define SAMA5D2_BASE_CLASSD IOMEM(0xfc048000)
+#define SAMA5D2_BASE_I2SC1 IOMEM(0xfc04c000)
+#define SAMA5D2_BASE_CAN1 IOMEM(0xfc050000)
+#define SAMA5D2_BASE_SFRBU IOMEM(0xfc05c000)
+#define SAMA5D2_BASE_CHIPID IOMEM(0xfc069000)
/*
* Address Memory Space
*/
-#define SAMA5D2_BASE_INTERNAL_MEM 0x00000000
-#define SAMA5D2_BASE_CS0 0x10000000
-#define SAMA5D2_BASE_DDRCS 0x20000000
-#define SAMA5D2_BASE_DDRCS_AES 0x40000000
-#define SAMA5D2_BASE_CS1 0x60000000
-#define SAMA5D2_BASE_CS2 0x70000000
-#define SAMA5D2_BASE_CS3 0x80000000
-#define SAMA5D2_BASE_QSPI0_AES_MEM 0x90000000
-#define SAMA5D2_BASE_QSPI1_AES_MEM 0x98000000
-#define SAMA5D2_BASE_SDHC0 0xa0000000
-#define SAMA5D2_BASE_SDHC1 0xb0000000
-#define SAMA5D2_BASE_NFC_CMD_REG 0xc0000000
-#define SAMA5D2_BASE_QSPI0_MEM 0xd0000000
-#define SAMA5D2_BASE_QSPI1_MEM 0xd8000000
-#define SAMA5D2_BASE_PERIPH 0xf0000000
+#define SAMA5D2_BASE_INTERNAL_MEM IOMEM(0x00000000)
+#define SAMA5D2_BASE_CS0 IOMEM(0x10000000)
+#define SAMA5D2_BASE_DDRCS IOMEM(0x20000000)
+#define SAMA5D2_BASE_DDRCS_AES IOMEM(0x40000000)
+#define SAMA5D2_BASE_CS1 IOMEM(0x60000000)
+#define SAMA5D2_BASE_CS2 IOMEM(0x70000000)
+#define SAMA5D2_BASE_CS3 IOMEM(0x80000000)
+#define SAMA5D2_BASE_QSPI0_AES_MEM IOMEM(0x90000000)
+#define SAMA5D2_BASE_QSPI1_AES_MEM IOMEM(0x98000000)
+#define SAMA5D2_BASE_SDHC0 IOMEM(0xa0000000)
+#define SAMA5D2_BASE_SDHC1 IOMEM(0xb0000000)
+#define SAMA5D2_BASE_NFC_CMD_REG IOMEM(0xc0000000)
+#define SAMA5D2_BASE_QSPI0_MEM IOMEM(0xd0000000)
+#define SAMA5D2_BASE_QSPI1_MEM IOMEM(0xd8000000)
+#define SAMA5D2_BASE_PERIPH IOMEM(0xf0000000)
/*
* Internal Memories
*/
-#define SAMA5D2_BASE_ROM 0x00000000 /* ROM */
-#define SAMA5D2_BASE_ECC_ROM 0x00060000 /* ECC ROM */
-#define SAMA5D2_BASE_NFC_SRAM 0x00100000 /* NFC SRAM */
-#define SAMA5D2_BASE_SRAM0 0x00200000 /* SRAM0 */
-#define SAMA5D2_BASE_SRAM1 0x00220000 /* SRAM1 */
-#define SAMA5D2_BASE_UDPHS_SRAM 0x00300000 /* UDPHS RAM */
-#define SAMA5D2_BASE_UHP_OHCI 0x00400000 /* UHP OHCI */
-#define SAMA5D2_BASE_UHP_EHCI 0x00500000 /* UHP EHCI */
-#define SAMA5D2_BASE_AXI_MATRIX 0x00600000 /* AXI Maxtrix */
-#define SAMA5D2_BASE_DAP 0x00700000 /* DAP */
-#define SAMA5D2_BASE_PTC 0x00800000 /* PTC */
-#define SAMA5D2_BASE_L2CC 0x00A00000 /* L2CC */
+#define SAMA5D2_BASE_ROM IOMEM(0x00000000) /* ROM */
+#define SAMA5D2_BASE_ECC_ROM IOMEM(0x00060000) /* ECC ROM */
+#define SAMA5D2_BASE_NFC_SRAM 0x00100000 /* NFC SRAM */
+#define SAMA5D2_BASE_SRAM0 0x00200000 /* SRAM0 */
+#define SAMA5D2_BASE_SRAM1 0x00220000 /* SRAM1 */
+#define SAMA5D2_BASE_UDPHS_SRAM 0x00300000 /* UDPHS RAM */
+#define SAMA5D2_BASE_UHP_OHCI IOMEM(0x00400000) /* UHP OHCI */
+#define SAMA5D2_BASE_UHP_EHCI IOMEM(0x00500000) /* UHP EHCI */
+#define SAMA5D2_BASE_AXI_MATRIX IOMEM(0x00600000) /* AXI Maxtrix */
+#define SAMA5D2_BASE_DAP IOMEM(0x00700000) /* DAP */
+#define SAMA5D2_BASE_PTC IOMEM(0x00800000) /* PTC */
+#define SAMA5D2_BASE_L2CC IOMEM(0x00A00000) /* L2CC */
/*
* Other misc defines
@@ -258,4 +263,58 @@
#define SAMA5D2_SRAM_BASE SAMA5D2_BASE_SRAM0
#define SAMA5D2_SRAM_SIZE (128 * SZ_1K)
+static inline void __iomem *sama5d2_pio_map_bank(int bank, unsigned *id)
+{
+ switch(bank + 'A') {
+ case 'A':
+ *id = SAMA5D2_ID_PIOA;
+ return SAMA5D2_BASE_PIOA;
+ case 'B':
+ *id = SAMA5D2_ID_PIOB;
+ return SAMA5D2_BASE_PIOB;
+ case 'C':
+ *id = SAMA5D2_ID_PIOC;
+ return SAMA5D2_BASE_PIOC;
+ case 'D':
+ *id = SAMA5D2_ID_PIOD;
+ return SAMA5D2_BASE_PIOD;
+ }
+
+ return NULL;
+}
+
+#define SAMA5D2_BUREG_INDEX GENMASK(1, 0)
+#define SAMA5D2_BUREG_VALID BIT(2)
+
+#define SAMA5D2_SFC_DR(x) (SAMA5D2_BASE_SFC + 0x20 + 4 * (x))
+
+#define SAMA5D2_BOOTCFG_QSPI_0 GENMASK(1, 0)
+#define SAMA5D2_BOOTCFG_QSPI_1 GENMASK(3, 2)
+#define SAMA5D2_BOOTCFG_SPI_0 GENMASK(5, 4)
+#define SAMA5D2_BOOTCFG_SPI_1 GENMASK(7, 6)
+#define SAMA5D2_BOOTCFG_NFC GENMASK(9, 8)
+#define SAMA5D2_BOOTCFG_SDMMC_0 BIT(10)
+#define SAMA5D2_BOOTCFG_SDMMC_1 BIT(11)
+#define SAMA5D2_BOOTCFG_UART GENMASK(15, 12)
+#define SAMA5D2_BOOTCFG_JTAG GENMASK(17, 16)
+#define SAMA5D2_BOOTCFG_EXT_MEM_BOOT_EN BIT(18)
+#define SAMA5D2_BOOTCFG_QSPI_XIP BIT(21)
+#define SAMA5D2_DISABLE_BSC_CR BIT(22)
+#define SAMA5D2_DISABLE_MONITOR BIT(24)
+#define SAMA5D2_SECURE_MODE BIT(29)
+
+static inline u32 sama5d2_bootcfg(void)
+{
+ u32 __iomem *bureg = SAMA5D2_BASE_SECURAM + 0x1400;
+ u32 bsc_cr = readl(SAMA5D2_BASE_SYSC + 0x54);
+ u32 __iomem *bootcfg;
+
+ if (bsc_cr & SAMA5D2_BUREG_VALID)
+ bootcfg = &bureg[FIELD_GET(SAMA5D2_BUREG_INDEX, bsc_cr)];
+ else
+ bootcfg = SAMA5D2_SFC_DR(512 / 32);
+
+ return readl(bootcfg);
+}
+
#endif