1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (C) 2018 Marvell International Ltd. 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu * https://spdx.org/licenses 6*91f16700Schasinglulu */ 7*91f16700Schasinglulu 8*91f16700Schasinglulu #ifndef A8K_PLAT_DEF_H 9*91f16700Schasinglulu #define A8K_PLAT_DEF_H 10*91f16700Schasinglulu 11*91f16700Schasinglulu #include <marvell_def.h> 12*91f16700Schasinglulu 13*91f16700Schasinglulu #define MVEBU_PRIMARY_CPU 0x0 14*91f16700Schasinglulu #define MVEBU_AP0 0x0 15*91f16700Schasinglulu 16*91f16700Schasinglulu /* APN806 revision ID */ 17*91f16700Schasinglulu #define MVEBU_CSS_GWD_CTRL_IIDR2_REG (MVEBU_REGS_BASE + 0x610FCC) 18*91f16700Schasinglulu #define GWD_IIDR2_REV_ID_OFFSET 12 19*91f16700Schasinglulu #define GWD_IIDR2_REV_ID_MASK 0xF 20*91f16700Schasinglulu #define GWD_IIDR2_CHIP_ID_OFFSET 20 21*91f16700Schasinglulu #define GWD_IIDR2_CHIP_ID_MASK (0xFFFu << GWD_IIDR2_CHIP_ID_OFFSET) 22*91f16700Schasinglulu 23*91f16700Schasinglulu #define CHIP_ID_AP806 0x806 24*91f16700Schasinglulu #define CHIP_ID_AP807 0x807 25*91f16700Schasinglulu 26*91f16700Schasinglulu #define COUNTER_FREQUENCY 25000000 27*91f16700Schasinglulu 28*91f16700Schasinglulu #define MVEBU_REGS_BASE 0xF0000000 29*91f16700Schasinglulu #define MVEBU_REGS_BASE_MASK 0xF0000000 30*91f16700Schasinglulu #define MVEBU_REGS_BASE_AP(ap) MVEBU_REGS_BASE 31*91f16700Schasinglulu #define MVEBU_AP_IO_BASE(ap) 0xF2000000 32*91f16700Schasinglulu #define MVEBU_CP_OFFSET 0x2000000 33*91f16700Schasinglulu #define MVEBU_CP_REGS_BASE(cp_index) (MVEBU_AP_IO_BASE(0) + \ 34*91f16700Schasinglulu (cp_index) * MVEBU_CP_OFFSET) 35*91f16700Schasinglulu #define MVEBU_RFU_BASE (MVEBU_REGS_BASE + 0x6F0000) 36*91f16700Schasinglulu #define MVEBU_IO_WIN_BASE(ap_index) (MVEBU_RFU_BASE) 37*91f16700Schasinglulu #define MVEBU_IO_WIN_GCR_OFFSET (0x70) 38*91f16700Schasinglulu #define MVEBU_IO_WIN_MAX_WINS (7) 39*91f16700Schasinglulu 40*91f16700Schasinglulu /* Misc SoC configurations Base */ 41*91f16700Schasinglulu #define MVEBU_MISC_SOC_BASE (MVEBU_REGS_BASE + 0x6F4300) 42*91f16700Schasinglulu 43*91f16700Schasinglulu #define MVEBU_CCU_BASE(ap_index) (MVEBU_REGS_BASE + 0x4000) 44*91f16700Schasinglulu #define MVEBU_CCU_MAX_WINS (8) 45*91f16700Schasinglulu 46*91f16700Schasinglulu #define MVEBU_LLC_BASE(ap_index) (MVEBU_REGS_BASE + 0x8000) 47*91f16700Schasinglulu #define MVEBU_DRAM_MAC_BASE (MVEBU_REGS_BASE + 0x20000) 48*91f16700Schasinglulu #define MVEBU_DRAM_PHY_BASE (MVEBU_REGS_BASE + 0x20000) 49*91f16700Schasinglulu #define MVEBU_SMMU_BASE (MVEBU_REGS_BASE + 0x100000) 50*91f16700Schasinglulu #define MVEBU_CP_MPP_REGS(cp_index, n) (MVEBU_CP_REGS_BASE(cp_index) + \ 51*91f16700Schasinglulu 0x440000 + ((n) << 2)) 52*91f16700Schasinglulu #define MVEBU_PM_MPP_REGS(cp_index, n) (MVEBU_CP_REGS_BASE(cp_index) + \ 53*91f16700Schasinglulu 0x440000 + ((n / 8) << 2)) 54*91f16700Schasinglulu #define MVEBU_CP_GPIO_DATA_OUT(cp_index, n) \ 55*91f16700Schasinglulu (MVEBU_CP_REGS_BASE(cp_index) + \ 56*91f16700Schasinglulu 0x440100 + ((n > 31) ? 0x40 : 0x00)) 57*91f16700Schasinglulu #define MVEBU_CP_GPIO_DATA_OUT_EN(cp_index, n) \ 58*91f16700Schasinglulu (MVEBU_CP_REGS_BASE(cp_index) + \ 59*91f16700Schasinglulu 0x440104 + ((n > 31) ? 0x40 : 0x00)) 60*91f16700Schasinglulu #define MVEBU_CP_GPIO_DATA_IN(cp_index, n) (MVEBU_CP_REGS_BASE(cp_index) + \ 61*91f16700Schasinglulu 0x440110 + ((n > 31) ? 0x40 : 0x00)) 62*91f16700Schasinglulu #define MVEBU_AP_MPP_REGS(n) (MVEBU_RFU_BASE + 0x4000 + ((n) << 2)) 63*91f16700Schasinglulu #define MVEBU_AP_GPIO_REGS (MVEBU_RFU_BASE + 0x5040) 64*91f16700Schasinglulu #define MVEBU_AP_GPIO_DATA_IN (MVEBU_AP_GPIO_REGS + 0x10) 65*91f16700Schasinglulu #define MVEBU_AP_I2C_BASE (MVEBU_REGS_BASE + 0x511000) 66*91f16700Schasinglulu #define MVEBU_CP0_I2C_BASE (MVEBU_CP_REGS_BASE(0) + 0x701000) 67*91f16700Schasinglulu #define MVEBU_AP_GEN_MGMT_BASE (MVEBU_RFU_BASE + 0x8000) 68*91f16700Schasinglulu #define MVEBU_AP_EXT_TSEN_BASE (MVEBU_AP_GEN_MGMT_BASE + 0x84) 69*91f16700Schasinglulu 70*91f16700Schasinglulu #define MVEBU_AP_MC_TRUSTZONE_REG_LOW(ap, win) (MVEBU_REGS_BASE_AP(ap) + \ 71*91f16700Schasinglulu 0x20080 + ((win) * 0x8)) 72*91f16700Schasinglulu #define MVEBU_AP_MC_TRUSTZONE_REG_HIGH(ap, win) (MVEBU_REGS_BASE_AP(ap) + \ 73*91f16700Schasinglulu 0x20084 + ((win) * 0x8)) 74*91f16700Schasinglulu 75*91f16700Schasinglulu /* MCI indirect access definitions */ 76*91f16700Schasinglulu #define MCI_MAX_UNIT_ID 2 77*91f16700Schasinglulu /* SoC RFU / IHBx4 Control */ 78*91f16700Schasinglulu #define MCIX4_REG_START_ADDRESS_REG(unit_id) (MVEBU_RFU_BASE + \ 79*91f16700Schasinglulu 0x4218 + (unit_id * 0x20)) 80*91f16700Schasinglulu #define MCI_REMAP_OFF_SHIFT 8 81*91f16700Schasinglulu 82*91f16700Schasinglulu #define MVEBU_MCI_REG_BASE_REMAP(index) (0xFD000000 + \ 83*91f16700Schasinglulu ((index) * 0x1000000)) 84*91f16700Schasinglulu 85*91f16700Schasinglulu #define MVEBU_PCIE_X4_MAC_BASE(x) (MVEBU_CP_REGS_BASE(x) + 0x600000) 86*91f16700Schasinglulu #define MVEBU_COMPHY_BASE(x) (MVEBU_CP_REGS_BASE(x) + 0x441000) 87*91f16700Schasinglulu #define MVEBU_HPIPE_BASE(x) (MVEBU_CP_REGS_BASE(x) + 0x120000) 88*91f16700Schasinglulu #define MVEBU_CP_DFX_OFFSET (0x400200) 89*91f16700Schasinglulu 90*91f16700Schasinglulu /***************************************************************************** 91*91f16700Schasinglulu * MVEBU memory map related constants 92*91f16700Schasinglulu ***************************************************************************** 93*91f16700Schasinglulu */ 94*91f16700Schasinglulu /* Aggregate of all devices in the first GB */ 95*91f16700Schasinglulu #define DEVICE0_BASE MVEBU_REGS_BASE 96*91f16700Schasinglulu #define DEVICE0_SIZE 0x10000000 97*91f16700Schasinglulu 98*91f16700Schasinglulu /***************************************************************************** 99*91f16700Schasinglulu * GIC-400 & interrupt handling related constants 100*91f16700Schasinglulu ***************************************************************************** 101*91f16700Schasinglulu */ 102*91f16700Schasinglulu /* Base MVEBU compatible GIC memory map */ 103*91f16700Schasinglulu #define MVEBU_GICD_BASE 0x210000 104*91f16700Schasinglulu #define MVEBU_GICC_BASE 0x220000 105*91f16700Schasinglulu 106*91f16700Schasinglulu 107*91f16700Schasinglulu /***************************************************************************** 108*91f16700Schasinglulu * AXI Configuration 109*91f16700Schasinglulu ***************************************************************************** 110*91f16700Schasinglulu */ 111*91f16700Schasinglulu #define MVEBU_AXI_ATTR_ARCACHE_OFFSET 4 112*91f16700Schasinglulu #define MVEBU_AXI_ATTR_ARCACHE_MASK (0xF << \ 113*91f16700Schasinglulu MVEBU_AXI_ATTR_ARCACHE_OFFSET) 114*91f16700Schasinglulu #define MVEBU_AXI_ATTR_ARDOMAIN_OFFSET 12 115*91f16700Schasinglulu #define MVEBU_AXI_ATTR_ARDOMAIN_MASK (0x3 << \ 116*91f16700Schasinglulu MVEBU_AXI_ATTR_ARDOMAIN_OFFSET) 117*91f16700Schasinglulu #define MVEBU_AXI_ATTR_AWCACHE_OFFSET 20 118*91f16700Schasinglulu #define MVEBU_AXI_ATTR_AWCACHE_MASK (0xF << \ 119*91f16700Schasinglulu MVEBU_AXI_ATTR_AWCACHE_OFFSET) 120*91f16700Schasinglulu #define MVEBU_AXI_ATTR_AWDOMAIN_OFFSET 28 121*91f16700Schasinglulu #define MVEBU_AXI_ATTR_AWDOMAIN_MASK (0x3 << \ 122*91f16700Schasinglulu MVEBU_AXI_ATTR_AWDOMAIN_OFFSET) 123*91f16700Schasinglulu 124*91f16700Schasinglulu /* SATA MBUS to AXI configuration */ 125*91f16700Schasinglulu #define MVEBU_SATA_M2A_AXI_ARCACHE_OFFSET 1 126*91f16700Schasinglulu #define MVEBU_SATA_M2A_AXI_ARCACHE_MASK (0xF << \ 127*91f16700Schasinglulu MVEBU_SATA_M2A_AXI_ARCACHE_OFFSET) 128*91f16700Schasinglulu #define MVEBU_SATA_M2A_AXI_AWCACHE_OFFSET 5 129*91f16700Schasinglulu #define MVEBU_SATA_M2A_AXI_AWCACHE_MASK (0xF << \ 130*91f16700Schasinglulu MVEBU_SATA_M2A_AXI_AWCACHE_OFFSET) 131*91f16700Schasinglulu 132*91f16700Schasinglulu /* ARM cache attributes */ 133*91f16700Schasinglulu #define CACHE_ATTR_BUFFERABLE 0x1 134*91f16700Schasinglulu #define CACHE_ATTR_CACHEABLE 0x2 135*91f16700Schasinglulu #define CACHE_ATTR_READ_ALLOC 0x4 136*91f16700Schasinglulu #define CACHE_ATTR_WRITE_ALLOC 0x8 137*91f16700Schasinglulu /* Domain */ 138*91f16700Schasinglulu #define DOMAIN_NON_SHAREABLE 0x0 139*91f16700Schasinglulu #define DOMAIN_INNER_SHAREABLE 0x1 140*91f16700Schasinglulu #define DOMAIN_OUTER_SHAREABLE 0x2 141*91f16700Schasinglulu #define DOMAIN_SYSTEM_SHAREABLE 0x3 142*91f16700Schasinglulu 143*91f16700Schasinglulu /************************************************************************ 144*91f16700Schasinglulu * Required platform porting definitions common to all 145*91f16700Schasinglulu * Management Compute SubSystems (MSS) 146*91f16700Schasinglulu ************************************************************************ 147*91f16700Schasinglulu */ 148*91f16700Schasinglulu /* 149*91f16700Schasinglulu * Load address of SCP_BL2 150*91f16700Schasinglulu * SCP_BL2 is loaded to the same place as BL31. 151*91f16700Schasinglulu * Once SCP_BL2 is transferred to the SCP, 152*91f16700Schasinglulu * it is discarded and BL31 is loaded over the top. 153*91f16700Schasinglulu */ 154*91f16700Schasinglulu #ifdef SCP_IMAGE 155*91f16700Schasinglulu #define SCP_BL2_BASE BL31_BASE 156*91f16700Schasinglulu #define SCP_BL2_SIZE BL31_LIMIT 157*91f16700Schasinglulu #endif 158*91f16700Schasinglulu 159*91f16700Schasinglulu #ifndef __ASSEMBLER__ 160*91f16700Schasinglulu enum ap806_sar_target_dev { 161*91f16700Schasinglulu SAR_PIDI_MCIX2 = 0x0, 162*91f16700Schasinglulu SAR_MCIX4 = 0x1, 163*91f16700Schasinglulu SAR_SPI = 0x2, 164*91f16700Schasinglulu SAR_SD = 0x3, 165*91f16700Schasinglulu SAR_PIDI_MCIX2_BD = 0x4, /* BootRom disabled */ 166*91f16700Schasinglulu SAR_MCIX4_DB = 0x5, /* BootRom disabled */ 167*91f16700Schasinglulu SAR_SPI_DB = 0x6, /* BootRom disabled */ 168*91f16700Schasinglulu SAR_EMMC = 0x7 169*91f16700Schasinglulu }; 170*91f16700Schasinglulu 171*91f16700Schasinglulu enum io_win_target_ids { 172*91f16700Schasinglulu MCI_0_TID = 0x0, 173*91f16700Schasinglulu MCI_1_TID = 0x1, 174*91f16700Schasinglulu MCI_2_TID = 0x2, 175*91f16700Schasinglulu PIDI_TID = 0x3, 176*91f16700Schasinglulu SPI_TID = 0x4, 177*91f16700Schasinglulu STM_TID = 0x5, 178*91f16700Schasinglulu BOOTROM_TID = 0x6, 179*91f16700Schasinglulu IO_WIN_MAX_TID 180*91f16700Schasinglulu }; 181*91f16700Schasinglulu 182*91f16700Schasinglulu enum ccu_target_ids { 183*91f16700Schasinglulu IO_0_TID = 0x00, 184*91f16700Schasinglulu DRAM_0_TID = 0x03, 185*91f16700Schasinglulu IO_1_TID = 0x0F, 186*91f16700Schasinglulu CFG_REG_TID = 0x10, 187*91f16700Schasinglulu RAR_TID = 0x20, 188*91f16700Schasinglulu SRAM_TID = 0x40, 189*91f16700Schasinglulu DRAM_1_TID = 0xC0, 190*91f16700Schasinglulu CCU_MAX_TID, 191*91f16700Schasinglulu INVALID_TID = 0xFF 192*91f16700Schasinglulu }; 193*91f16700Schasinglulu #endif /* __ASSEMBLER__ */ 194*91f16700Schasinglulu 195*91f16700Schasinglulu #endif /* A8K_PLAT_DEF_H */ 196