1 /* 2 * Copyright (c) 2016, ARM Limited and Contributors. All rights reserved. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7 #ifndef __PLATFORM_DEF_H__ 8 #define __PLATFORM_DEF_H__ 9 10 #define PLAT_PRIMARY_CPU 0x0 11 12 /* Special value used to verify platform parameters from BL2 to BL3-1 */ 13 #define MT_BL31_PLAT_PARAM_VAL 0x0f1e2d3c4b5a6978ULL 14 15 #define IO_PHYS (0x10000000) 16 #define INFRACFG_AO_BASE (IO_PHYS + 0x1000) 17 #define MCUCFG_BASE (IO_PHYS + 0x200000) 18 #define PERI_BASE (IO_PHYS + 0x1000000) 19 20 21 #define GPIO_BASE (IO_PHYS + 0x370000) 22 #define SPM_BASE (IO_PHYS + 0x6000) 23 #define RGU_BASE (MCUCFG_BASE + 0x11000) 24 #define PMIC_WRAP_BASE (IO_PHYS + 0x10000) 25 26 #define TRNG_base (MCUCFG_BASE + 0x230000) 27 #define MT_GIC_BASE (0x10220000) 28 #define MCU_SYS_SIZE (0x700000) 29 #define PLAT_MT_CCI_BASE (IO_PHYS + 0x390000) 30 31 /* Aggregate of all devices in the first GB */ 32 #define MTK_DEV_RNG0_BASE IO_PHYS 33 #define MTK_DEV_RNG0_SIZE 0x400000 34 #define MTK_DEV_RNG1_BASE (PERI_BASE) 35 #define MTK_DEV_RNG1_SIZE 0x4000000 36 37 /******************************************************************************* 38 * UART related constants 39 ******************************************************************************/ 40 #define UART0_BASE (PERI_BASE + 0x2000) 41 42 #define UART_BAUDRATE (921600) 43 #define UART_CLOCK (26000000) 44 45 /******************************************************************************* 46 * System counter frequency related constants 47 ******************************************************************************/ 48 #define SYS_COUNTER_FREQ_IN_TICKS 13000000 49 #define SYS_COUNTER_FREQ_IN_MHZ (SYS_COUNTER_FREQ_IN_TICKS/1000000) 50 51 /******************************************************************************* 52 * GIC-400 & interrupt handling related constants 53 ******************************************************************************/ 54 55 /* Base MTK_platform compatible GIC memory map */ 56 #define BASE_GICD_BASE (MT_GIC_BASE+0x1000) 57 #define BASE_GICC_BASE (MT_GIC_BASE + 0x2000) 58 #define BASE_GICR_BASE (MT_GIC_BASE + 0x200000) 59 #define BASE_GICH_BASE (MT_GIC_BASE + 0x4000) 60 #define BASE_GICV_BASE (MT_GIC_BASE + 0x6000) 61 62 #define INT_POL_CTL0 0x10200620 63 #define GIC_PRIVATE_SIGNALS (32) 64 65 /******************************************************************************* 66 * CCI-400 related constants 67 ******************************************************************************/ 68 #define PLAT_MT_CCI_CLUSTER0_SL_IFACE_IX 4 69 #define PLAT_MT_CCI_CLUSTER1_SL_IFACE_IX 3 70 71 /******************************************************************************* 72 * WDT Registers 73 ******************************************************************************/ 74 #define MTK_WDT_BASE (RGU_BASE) 75 #define MTK_WDT_SIZE (0x1000) 76 #define MTK_WDT_MODE (MTK_WDT_BASE+0x0000) 77 #define MTK_WDT_LENGTH (MTK_WDT_BASE+0x0004) 78 #define MTK_WDT_RESTART (MTK_WDT_BASE+0x0008) 79 #define MTK_WDT_STATUS (MTK_WDT_BASE+0x000C) 80 #define MTK_WDT_INTERVAL (MTK_WDT_BASE+0x0010) 81 #define MTK_WDT_SWRST (MTK_WDT_BASE+0x0014) 82 #define MTK_WDT_SWSYSRST (MTK_WDT_BASE+0x0018) 83 #define MTK_WDT_NONRST_REG (MTK_WDT_BASE+0x0020) 84 #define MTK_WDT_NONRST_REG2 (MTK_WDT_BASE+0x0024) 85 #define MTK_WDT_REQ_MODE (MTK_WDT_BASE+0x0030) 86 #define MTK_WDT_REQ_IRQ_EN (MTK_WDT_BASE+0x0034) 87 #define MTK_WDT_DEBUG_CTL (MTK_WDT_BASE+0x0040) 88 89 /*WDT_STATUS*/ 90 #define MTK_WDT_STATUS_HWWDT_RST (0x80000000) 91 #define MTK_WDT_STATUS_SWWDT_RST (0x40000000) 92 #define MTK_WDT_STATUS_IRQWDT_RST (0x20000000) 93 #define MTK_WDT_STATUS_DEBUGWDT_RST (0x00080000) 94 #define MTK_WDT_STATUS_SPMWDT_RST (0x0002) 95 #define MTK_WDT_STATUS_SPM_THERMAL_RST (0x0001) 96 #define MTK_WDT_STATUS_THERMAL_DIRECT_RST (1<<18) 97 #define MTK_WDT_STATUS_SECURITY_RST (1<<28) 98 99 #define MTK_WDT_MODE_DUAL_MODE 0x0040 100 #define MTK_WDT_MODE_IRQ 0x0008 101 #define MTK_WDT_MODE_KEY 0x22000000 102 #define MTK_WDT_MODE_EXTEN 0x0004 103 #define MTK_WDT_SWRST_KEY 0x1209 104 #define MTK_WDT_RESTART_KEY (0x1971) 105 106 /* FIQ platform related define */ 107 #define MT_IRQ_SEC_SGI_0 8 108 #define MT_IRQ_SEC_SGI_1 9 109 #define MT_IRQ_SEC_SGI_2 10 110 #define MT_IRQ_SEC_SGI_3 11 111 #define MT_IRQ_SEC_SGI_4 12 112 #define MT_IRQ_SEC_SGI_5 13 113 #define MT_IRQ_SEC_SGI_6 14 114 #define MT_IRQ_SEC_SGI_7 15 115 116 #define FIQ_SMP_CALL_SGI MT_IRQ_SEC_SGI_5 117 118 #define PLAT_ARM_G0_IRQS FIQ_SMP_CALL_SGI 119 120 #define DEBUG_XLAT_TABLE 0 121 122 /******************************************************************************* 123 * Platform binary types for linking 124 ******************************************************************************/ 125 #define PLATFORM_LINKER_FORMAT "elf64-littleaarch64" 126 #define PLATFORM_LINKER_ARCH aarch64 127 128 /******************************************************************************* 129 * Generic platform constants 130 ******************************************************************************/ 131 132 /* Size of cacheable stacks */ 133 #if DEBUG_XLAT_TABLE 134 #define PLATFORM_STACK_SIZE 0x800 135 #elif defined(IMAGE_BL1) 136 #define PLATFORM_STACK_SIZE 0x440 137 #elif defined(IMAGE_BL2) 138 #define PLATFORM_STACK_SIZE 0x400 139 #elif defined(IMAGE_BL31) 140 #define PLATFORM_STACK_SIZE 0x800 141 #elif defined(IMAGE_BL32) 142 #define PLATFORM_STACK_SIZE 0x440 143 #endif 144 145 #define FIRMWARE_WELCOME_STR "Booting Trusted Firmware\n" 146 #if ENABLE_PLAT_COMPAT 147 #define PLATFORM_MAX_AFFLVL MPIDR_AFFLVL2 148 #else 149 #define PLAT_MAX_PWR_LVL 2 /* MPIDR_AFFLVL2 */ 150 #endif 151 152 #define PLATFORM_CACHE_LINE_SIZE 64 153 #define PLATFORM_SYSTEM_COUNT 1 154 #define PLATFORM_CLUSTER_COUNT 2 155 #define PLATFORM_CLUSTER0_CORE_COUNT 4 156 #define PLATFORM_CLUSTER1_CORE_COUNT 4 157 #define PLATFORM_CORE_COUNT (PLATFORM_CLUSTER1_CORE_COUNT + \ 158 PLATFORM_CLUSTER0_CORE_COUNT) 159 #define PLATFORM_MAX_CPUS_PER_CLUSTER 4 160 #define PLATFORM_NUM_AFFS (PLATFORM_SYSTEM_COUNT + \ 161 PLATFORM_CLUSTER_COUNT + \ 162 PLATFORM_CORE_COUNT) 163 164 /******************************************************************************* 165 * Platform memory map related constants 166 ******************************************************************************/ 167 /* ATF Argument */ 168 #define ATF_ARG_SIZE (0x800) 169 170 /* TF txet, ro, rw, internal SRAM, Size: release: 80KB, debug: 92KB */ 171 #define TZRAM_BASE (0x110000) 172 #if DEBUG 173 #define TZRAM_SIZE (0x1C400) 174 #else 175 #define TZRAM_SIZE (0x1C400) 176 #endif 177 #define TZRAM2_BASE 0x00100000 178 #define TZRAM2_SIZE 0xDC00 179 #define TZRAM2_LIMIT (TZRAM2_BASE + TZRAM2_SIZE) 180 181 #define RAM_CONSOLE_BASE 0x0012D000 182 #define RAM_CONSOLE_SIZE 0x00001000 183 /******************************************************************************* 184 * BL31 specific defines. 185 ******************************************************************************/ 186 /* 187 * Put BL3-1 at the top of the Trusted SRAM (just below the shared memory, if 188 * present). BL31_BASE is calculated using the current BL3-1 debug size plus a 189 * little space for growth. 190 */ 191 #define BL31_BASE (TZRAM_BASE + 0x1000) 192 #define BL31_LIMIT (TZRAM_BASE + TZRAM_SIZE) 193 #define BSS1_STACK_LIMIT (TZRAM_BASE + TZRAM_SIZE) 194 #define BL31_TZRAM_SIZE (TZRAM_SIZE - ATF_ARG_SIZE) 195 196 /******************************************************************************* 197 * Platform specific page table and MMU setup constants 198 ******************************************************************************/ 199 #define ADDR_SPACE_SIZE (1ull << 32) 200 #define MAX_XLAT_TABLES 7 201 #define MAX_MMAP_REGIONS 16 202 203 204 /******************************************************************************* 205 * CCI-400 related constants 206 ******************************************************************************/ 207 #define CCI400_BASE 0x10390000 208 #define CCI400_SL_IFACE_CLUSTER0 4 209 #define CCI400_SL_IFACE_CLUSTER1 3 210 #define CCI400_SL_IFACE_INDEX(mpidr) (mpidr & MPIDR_CLUSTER_MASK ? \ 211 CCI400_SL_IFACE_CLUSTER1 : \ 212 CCI400_SL_IFACE_CLUSTER0) 213 #define CCI_SEC_ACCESS_OFFSET (0x8) 214 215 216 /******************************************************************************* 217 * Declarations and constants to access the mailboxes safely. Each mailbox is 218 * aligned on the biggest cache line size in the platform. This is known only 219 * to the platform as it might have a combination of integrated and external 220 * caches. Such alignment ensures that two maiboxes do not sit on the same cache 221 * line at any cache level. They could belong to different cpus/clusters & 222 * get written while being protected by different locks causing corruption of 223 * a valid mailbox address. 224 ******************************************************************************/ 225 #define CACHE_WRITEBACK_SHIFT 6 226 #define CACHE_WRITEBACK_GRANULE (1 << CACHE_WRITEBACK_SHIFT) 227 228 #define BL32_BASE (0x0) 229 230 /* 231 * Load address of BL3-3 for this platform port 232 */ 233 #define LK_SIZE_LIMIT (0x100000) 234 #define PLAT_MTK_NS_IMAGE_OFFSET (0x41E00000) 235 /* 16KB */ 236 #define ATF_AEE_BUFFER_SIZE (0x4000) 237 #define PAGE_SIZE_2MB_MASK (PAGE_SIZE_2MB - 1) 238 #define IS_PAGE_2MB_ALIGNED(addr) (((addr) & PAGE_SIZE_2MB_MASK) == 0) 239 #define PAGE_SIZE_2MB (1 << PAGE_SIZE_2MB_SHIFT) 240 #define PAGE_SIZE_2MB_SHIFT TWO_MB_SHIFT 241 242 #endif /* __PLATFORM_DEF_H__ */ 243