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