1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (c) 2018-2023, Arm Limited. All rights reserved. 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu */ 6*91f16700Schasinglulu 7*91f16700Schasinglulu #ifndef PLATFORM_DEF_H 8*91f16700Schasinglulu #define PLATFORM_DEF_H 9*91f16700Schasinglulu 10*91f16700Schasinglulu #include <plat/arm/board/common/v2m_def.h> 11*91f16700Schasinglulu #include <plat/arm/common/arm_def.h> 12*91f16700Schasinglulu #include <plat/arm/css/common/css_def.h> 13*91f16700Schasinglulu 14*91f16700Schasinglulu /* UART related constants */ 15*91f16700Schasinglulu #define PLAT_ARM_BOOT_UART_BASE 0x2A400000 16*91f16700Schasinglulu #define PLAT_ARM_BOOT_UART_CLK_IN_HZ 50000000 17*91f16700Schasinglulu 18*91f16700Schasinglulu /* IOFPGA UART0 */ 19*91f16700Schasinglulu #define PLAT_ARM_RUN_UART_BASE 0x1C090000 20*91f16700Schasinglulu #define PLAT_ARM_RUN_UART_CLK_IN_HZ 24000000 21*91f16700Schasinglulu 22*91f16700Schasinglulu #define PLAT_ARM_SP_MIN_RUN_UART_BASE 0x2A410000 23*91f16700Schasinglulu #define PLAT_ARM_SP_MIN_RUN_UART_CLK_IN_HZ 50000000 24*91f16700Schasinglulu 25*91f16700Schasinglulu #define PLAT_ARM_CRASH_UART_BASE PLAT_ARM_RUN_UART_BASE 26*91f16700Schasinglulu #define PLAT_ARM_CRASH_UART_CLK_IN_HZ PLAT_ARM_RUN_UART_CLK_IN_HZ 27*91f16700Schasinglulu 28*91f16700Schasinglulu #define PLAT_ARM_DRAM2_BASE ULL(0x8080000000) 29*91f16700Schasinglulu #define PLAT_ARM_DRAM2_SIZE ULL(0xF80000000) 30*91f16700Schasinglulu 31*91f16700Schasinglulu #define MAX_IO_DEVICES U(3) 32*91f16700Schasinglulu #define MAX_IO_HANDLES U(4) 33*91f16700Schasinglulu 34*91f16700Schasinglulu #define PLAT_ARM_FLASH_IMAGE_BASE 0x18200000 35*91f16700Schasinglulu #define PLAT_ARM_FLASH_IMAGE_MAX_SIZE 0x00800000 36*91f16700Schasinglulu 37*91f16700Schasinglulu #define PLAT_ARM_NVM_BASE 0x18200000 38*91f16700Schasinglulu #define PLAT_ARM_NVM_SIZE 0x00800000 39*91f16700Schasinglulu 40*91f16700Schasinglulu #if defined NS_BL1U_BASE 41*91f16700Schasinglulu # undef NS_BL1U_BASE 42*91f16700Schasinglulu # define NS_BL1U_BASE (PLAT_ARM_NVM_BASE + UL(0x00800000)) 43*91f16700Schasinglulu #endif 44*91f16700Schasinglulu 45*91f16700Schasinglulu /* Non-volatile counters */ 46*91f16700Schasinglulu #define SOC_TRUSTED_NVCTR_BASE 0x7fe70000 47*91f16700Schasinglulu #define TFW_NVCTR_BASE (SOC_TRUSTED_NVCTR_BASE) 48*91f16700Schasinglulu #define TFW_NVCTR_SIZE U(4) 49*91f16700Schasinglulu #define NTFW_CTR_BASE (SOC_TRUSTED_NVCTR_BASE + 0x0004) 50*91f16700Schasinglulu #define NTFW_CTR_SIZE U(4) 51*91f16700Schasinglulu 52*91f16700Schasinglulu /* N1SDP remote chip at 4 TB offset */ 53*91f16700Schasinglulu #define PLAT_ARM_REMOTE_CHIP_OFFSET (ULL(1) << 42) 54*91f16700Schasinglulu 55*91f16700Schasinglulu #define N1SDP_REMOTE_DRAM1_BASE ARM_DRAM1_BASE + \ 56*91f16700Schasinglulu PLAT_ARM_REMOTE_CHIP_OFFSET 57*91f16700Schasinglulu #define N1SDP_REMOTE_DRAM1_SIZE ARM_DRAM1_SIZE 58*91f16700Schasinglulu 59*91f16700Schasinglulu #define N1SDP_REMOTE_DRAM2_BASE PLAT_ARM_DRAM2_BASE + \ 60*91f16700Schasinglulu PLAT_ARM_REMOTE_CHIP_OFFSET 61*91f16700Schasinglulu #define N1SDP_REMOTE_DRAM2_SIZE PLAT_ARM_DRAM2_SIZE 62*91f16700Schasinglulu 63*91f16700Schasinglulu /* 64*91f16700Schasinglulu * N1SDP platform supports RDIMMs with ECC capability. To use the ECC 65*91f16700Schasinglulu * capability, the entire DDR memory space has to be zeroed out before 66*91f16700Schasinglulu * enabling the ECC bits in DMC620. To access the complete DDR memory 67*91f16700Schasinglulu * along with remote chip's DDR memory, which is at 4 TB offset, physical 68*91f16700Schasinglulu * and virtual address space limits are extended to 43-bits. 69*91f16700Schasinglulu */ 70*91f16700Schasinglulu #ifdef __aarch64__ 71*91f16700Schasinglulu #define PLAT_PHY_ADDR_SPACE_SIZE (1ULL << 43) 72*91f16700Schasinglulu #define PLAT_VIRT_ADDR_SPACE_SIZE (1ULL << 43) 73*91f16700Schasinglulu #else 74*91f16700Schasinglulu #define PLAT_PHY_ADDR_SPACE_SIZE (1ULL << 32) 75*91f16700Schasinglulu #define PLAT_VIRT_ADDR_SPACE_SIZE (1ULL << 32) 76*91f16700Schasinglulu #endif 77*91f16700Schasinglulu 78*91f16700Schasinglulu #if CSS_USE_SCMI_SDS_DRIVER 79*91f16700Schasinglulu #define N1SDP_SCMI_PAYLOAD_BASE 0x45400000 80*91f16700Schasinglulu #else 81*91f16700Schasinglulu #define PLAT_CSS_SCP_COM_SHARED_MEM_BASE 0x45400000 82*91f16700Schasinglulu #endif 83*91f16700Schasinglulu 84*91f16700Schasinglulu /* 85*91f16700Schasinglulu * Trusted SRAM in N1SDP is 512 KB but only the bottom 384 KB 86*91f16700Schasinglulu * is used for trusted board boot flow. The top 128 KB is used 87*91f16700Schasinglulu * to load AP-BL1 image. 88*91f16700Schasinglulu */ 89*91f16700Schasinglulu #define PLAT_ARM_TRUSTED_SRAM_SIZE 0x00060000 /* 384 KB */ 90*91f16700Schasinglulu 91*91f16700Schasinglulu /* 92*91f16700Schasinglulu * PLAT_ARM_MAX_BL1_RW_SIZE is calculated using the current BL1 RW debug size 93*91f16700Schasinglulu * plus a little space for growth. 94*91f16700Schasinglulu */ 95*91f16700Schasinglulu #define PLAT_ARM_MAX_BL1_RW_SIZE 0xC000 96*91f16700Schasinglulu 97*91f16700Schasinglulu /* 98*91f16700Schasinglulu * PLAT_ARM_MAX_ROMLIB_RW_SIZE is define to use a full page 99*91f16700Schasinglulu */ 100*91f16700Schasinglulu 101*91f16700Schasinglulu #if USE_ROMLIB 102*91f16700Schasinglulu # define PLAT_ARM_MAX_ROMLIB_RW_SIZE 0x1000 103*91f16700Schasinglulu # define PLAT_ARM_MAX_ROMLIB_RO_SIZE 0xe000 104*91f16700Schasinglulu #else 105*91f16700Schasinglulu # define PLAT_ARM_MAX_ROMLIB_RW_SIZE U(0) 106*91f16700Schasinglulu # define PLAT_ARM_MAX_ROMLIB_RO_SIZE U(0) 107*91f16700Schasinglulu #endif 108*91f16700Schasinglulu 109*91f16700Schasinglulu /* 110*91f16700Schasinglulu * PLAT_ARM_MAX_BL2_SIZE is calculated using the current BL2 debug size plus a 111*91f16700Schasinglulu * little space for growth. 112*91f16700Schasinglulu */ 113*91f16700Schasinglulu #if TRUSTED_BOARD_BOOT 114*91f16700Schasinglulu # define PLAT_ARM_MAX_BL2_SIZE 0x22000 115*91f16700Schasinglulu #else 116*91f16700Schasinglulu # define PLAT_ARM_MAX_BL2_SIZE 0x14000 117*91f16700Schasinglulu #endif 118*91f16700Schasinglulu 119*91f16700Schasinglulu #define PLAT_ARM_MAX_BL31_SIZE UL(0x40000) 120*91f16700Schasinglulu 121*91f16700Schasinglulu #define PLAT_ARM_SPMC_BASE U(0x08000000) 122*91f16700Schasinglulu #define PLAT_ARM_SPMC_SIZE UL(0x02000000) /* 32 MB */ 123*91f16700Schasinglulu 124*91f16700Schasinglulu 125*91f16700Schasinglulu /******************************************************************************* 126*91f16700Schasinglulu * N1SDP topology related constants 127*91f16700Schasinglulu ******************************************************************************/ 128*91f16700Schasinglulu #define N1SDP_MAX_CPUS_PER_CLUSTER U(2) 129*91f16700Schasinglulu #define PLAT_ARM_CLUSTER_COUNT U(2) 130*91f16700Schasinglulu #define PLAT_N1SDP_CHIP_COUNT U(2) 131*91f16700Schasinglulu #define N1SDP_MAX_CLUSTERS_PER_CHIP U(2) 132*91f16700Schasinglulu #define N1SDP_MAX_PE_PER_CPU U(1) 133*91f16700Schasinglulu 134*91f16700Schasinglulu #define PLATFORM_CORE_COUNT (PLAT_N1SDP_CHIP_COUNT * \ 135*91f16700Schasinglulu PLAT_ARM_CLUSTER_COUNT * \ 136*91f16700Schasinglulu N1SDP_MAX_CPUS_PER_CLUSTER * \ 137*91f16700Schasinglulu N1SDP_MAX_PE_PER_CPU) 138*91f16700Schasinglulu 139*91f16700Schasinglulu /* System power domain level */ 140*91f16700Schasinglulu #define CSS_SYSTEM_PWR_DMN_LVL ARM_PWR_LVL3 141*91f16700Schasinglulu 142*91f16700Schasinglulu /* 143*91f16700Schasinglulu * PLAT_ARM_MMAP_ENTRIES depends on the number of entries in the 144*91f16700Schasinglulu * plat_arm_mmap array defined for each BL stage. 145*91f16700Schasinglulu */ 146*91f16700Schasinglulu 147*91f16700Schasinglulu #ifdef IMAGE_BL1 148*91f16700Schasinglulu # define PLAT_ARM_MMAP_ENTRIES U(6) 149*91f16700Schasinglulu # define MAX_XLAT_TABLES U(5) 150*91f16700Schasinglulu #endif 151*91f16700Schasinglulu 152*91f16700Schasinglulu #ifdef IMAGE_BL2 153*91f16700Schasinglulu # define PLAT_ARM_MMAP_ENTRIES U(11) 154*91f16700Schasinglulu # define MAX_XLAT_TABLES U(10) 155*91f16700Schasinglulu #endif 156*91f16700Schasinglulu 157*91f16700Schasinglulu #ifdef IMAGE_BL31 158*91f16700Schasinglulu # define PLAT_ARM_MMAP_ENTRIES U(12) 159*91f16700Schasinglulu # define MAX_XLAT_TABLES U(12) 160*91f16700Schasinglulu #endif 161*91f16700Schasinglulu 162*91f16700Schasinglulu /* 163*91f16700Schasinglulu * Size of cacheable stacks 164*91f16700Schasinglulu */ 165*91f16700Schasinglulu #if defined(IMAGE_BL1) 166*91f16700Schasinglulu # if TRUSTED_BOARD_BOOT 167*91f16700Schasinglulu # define PLATFORM_STACK_SIZE 0x1000 168*91f16700Schasinglulu # else 169*91f16700Schasinglulu # define PLATFORM_STACK_SIZE 0x440 170*91f16700Schasinglulu # endif 171*91f16700Schasinglulu #elif defined(IMAGE_BL2) 172*91f16700Schasinglulu # if TRUSTED_BOARD_BOOT 173*91f16700Schasinglulu # define PLATFORM_STACK_SIZE 0x1000 174*91f16700Schasinglulu # else 175*91f16700Schasinglulu # define PLATFORM_STACK_SIZE 0x400 176*91f16700Schasinglulu # endif 177*91f16700Schasinglulu #elif defined(IMAGE_BL2U) 178*91f16700Schasinglulu # define PLATFORM_STACK_SIZE 0x400 179*91f16700Schasinglulu #elif defined(IMAGE_BL31) 180*91f16700Schasinglulu # if SPM_MM 181*91f16700Schasinglulu # define PLATFORM_STACK_SIZE 0x500 182*91f16700Schasinglulu # else 183*91f16700Schasinglulu # define PLATFORM_STACK_SIZE 0x400 184*91f16700Schasinglulu # endif 185*91f16700Schasinglulu #elif defined(IMAGE_BL32) 186*91f16700Schasinglulu # define PLATFORM_STACK_SIZE 0x440 187*91f16700Schasinglulu #endif 188*91f16700Schasinglulu 189*91f16700Schasinglulu #define PLAT_ARM_NSTIMER_FRAME_ID 0 190*91f16700Schasinglulu #define PLAT_CSS_MHU_BASE 0x45000000 191*91f16700Schasinglulu #define PLAT_MAX_PWR_LVL 2 192*91f16700Schasinglulu 193*91f16700Schasinglulu /* Interrupt handling constants */ 194*91f16700Schasinglulu #define N1SDP_IRQ_MMU_TCU1_EVENT_Q_SEC U(257) 195*91f16700Schasinglulu #define N1SDP_IRQ_MMU_TCU1_CMD_SYNC_SEC U(258) 196*91f16700Schasinglulu #define N1SDP_IRQ_MMU_TCU1_GLOBAL U(259) 197*91f16700Schasinglulu #define N1SDP_IRQ_MMU_TCU2_EVENT_Q_SEC U(264) 198*91f16700Schasinglulu #define N1SDP_IRQ_MMU_TCU2_CMD_SYNC_SEC U(265) 199*91f16700Schasinglulu #define N1SDP_IRQ_MMU_TCU2_GLOBAL U(266) 200*91f16700Schasinglulu #define N1SDP_IRQ_CLUSTER0_MHU U(349) 201*91f16700Schasinglulu #define N1SDP_IRQ_CLUSTER1_MHU U(351) 202*91f16700Schasinglulu #define N1SDP_IRQ_P0_REFCLK U(412) 203*91f16700Schasinglulu #define N1SDP_IRQ_P1_REFCLK U(413) 204*91f16700Schasinglulu 205*91f16700Schasinglulu #define PLAT_ARM_G1S_IRQ_PROPS(grp) \ 206*91f16700Schasinglulu ARM_G1S_IRQ_PROPS(grp), \ 207*91f16700Schasinglulu INTR_PROP_DESC(CSS_IRQ_MHU, \ 208*91f16700Schasinglulu GIC_HIGHEST_SEC_PRIORITY, grp, GIC_INTR_CFG_LEVEL), \ 209*91f16700Schasinglulu INTR_PROP_DESC(CSS_IRQ_TZ_WDOG, \ 210*91f16700Schasinglulu GIC_HIGHEST_SEC_PRIORITY, grp, GIC_INTR_CFG_LEVEL), \ 211*91f16700Schasinglulu INTR_PROP_DESC(CSS_IRQ_SEC_SYS_TIMER, \ 212*91f16700Schasinglulu GIC_HIGHEST_SEC_PRIORITY, grp, GIC_INTR_CFG_LEVEL), \ 213*91f16700Schasinglulu INTR_PROP_DESC(N1SDP_IRQ_MMU_TCU1_EVENT_Q_SEC, \ 214*91f16700Schasinglulu GIC_HIGHEST_SEC_PRIORITY, grp, GIC_INTR_CFG_LEVEL), \ 215*91f16700Schasinglulu INTR_PROP_DESC(N1SDP_IRQ_MMU_TCU1_CMD_SYNC_SEC, \ 216*91f16700Schasinglulu GIC_HIGHEST_SEC_PRIORITY, grp, GIC_INTR_CFG_LEVEL), \ 217*91f16700Schasinglulu INTR_PROP_DESC(N1SDP_IRQ_MMU_TCU1_GLOBAL, \ 218*91f16700Schasinglulu GIC_HIGHEST_SEC_PRIORITY, grp, GIC_INTR_CFG_LEVEL), \ 219*91f16700Schasinglulu INTR_PROP_DESC(N1SDP_IRQ_MMU_TCU2_EVENT_Q_SEC, \ 220*91f16700Schasinglulu GIC_HIGHEST_SEC_PRIORITY, grp, GIC_INTR_CFG_LEVEL), \ 221*91f16700Schasinglulu INTR_PROP_DESC(N1SDP_IRQ_MMU_TCU2_CMD_SYNC_SEC, \ 222*91f16700Schasinglulu GIC_HIGHEST_SEC_PRIORITY, grp, GIC_INTR_CFG_LEVEL), \ 223*91f16700Schasinglulu INTR_PROP_DESC(N1SDP_IRQ_MMU_TCU2_GLOBAL, \ 224*91f16700Schasinglulu GIC_HIGHEST_SEC_PRIORITY, grp, GIC_INTR_CFG_LEVEL), \ 225*91f16700Schasinglulu INTR_PROP_DESC(N1SDP_IRQ_CLUSTER0_MHU, \ 226*91f16700Schasinglulu GIC_HIGHEST_SEC_PRIORITY, grp, GIC_INTR_CFG_LEVEL), \ 227*91f16700Schasinglulu INTR_PROP_DESC(N1SDP_IRQ_CLUSTER1_MHU, \ 228*91f16700Schasinglulu GIC_HIGHEST_SEC_PRIORITY, grp, GIC_INTR_CFG_LEVEL), \ 229*91f16700Schasinglulu INTR_PROP_DESC(N1SDP_IRQ_P0_REFCLK, \ 230*91f16700Schasinglulu GIC_HIGHEST_SEC_PRIORITY, grp, GIC_INTR_CFG_LEVEL), \ 231*91f16700Schasinglulu INTR_PROP_DESC(N1SDP_IRQ_P1_REFCLK, \ 232*91f16700Schasinglulu GIC_HIGHEST_SEC_PRIORITY, grp, GIC_INTR_CFG_LEVEL) 233*91f16700Schasinglulu 234*91f16700Schasinglulu #define PLAT_ARM_G0_IRQ_PROPS(grp) ARM_G0_IRQ_PROPS(grp) 235*91f16700Schasinglulu 236*91f16700Schasinglulu 237*91f16700Schasinglulu #define N1SDP_DEVICE_BASE ULL(0x08000000) 238*91f16700Schasinglulu #define N1SDP_DEVICE_SIZE ULL(0x48000000) 239*91f16700Schasinglulu #define N1SDP_REMOTE_DEVICE_BASE N1SDP_DEVICE_BASE + \ 240*91f16700Schasinglulu PLAT_ARM_REMOTE_CHIP_OFFSET 241*91f16700Schasinglulu #define N1SDP_REMOTE_DEVICE_SIZE N1SDP_DEVICE_SIZE 242*91f16700Schasinglulu 243*91f16700Schasinglulu /* Real base is 0x0. Changed to load BL1 at this address */ 244*91f16700Schasinglulu # define PLAT_ARM_TRUSTED_ROM_BASE 0x04060000 245*91f16700Schasinglulu # define PLAT_ARM_TRUSTED_ROM_SIZE 0x00020000 /* 128KB */ 246*91f16700Schasinglulu 247*91f16700Schasinglulu #define N1SDP_MAP_DEVICE MAP_REGION_FLAT( \ 248*91f16700Schasinglulu N1SDP_DEVICE_BASE, \ 249*91f16700Schasinglulu N1SDP_DEVICE_SIZE, \ 250*91f16700Schasinglulu MT_DEVICE | MT_RW | MT_SECURE) 251*91f16700Schasinglulu 252*91f16700Schasinglulu #define ARM_MAP_DRAM1 MAP_REGION_FLAT( \ 253*91f16700Schasinglulu ARM_DRAM1_BASE, \ 254*91f16700Schasinglulu ARM_DRAM1_SIZE, \ 255*91f16700Schasinglulu MT_MEMORY | MT_RW | MT_NS) 256*91f16700Schasinglulu 257*91f16700Schasinglulu #define N1SDP_MAP_REMOTE_DEVICE MAP_REGION_FLAT( \ 258*91f16700Schasinglulu N1SDP_REMOTE_DEVICE_BASE, \ 259*91f16700Schasinglulu N1SDP_REMOTE_DEVICE_SIZE, \ 260*91f16700Schasinglulu MT_DEVICE | MT_RW | MT_SECURE) 261*91f16700Schasinglulu 262*91f16700Schasinglulu #define N1SDP_MAP_REMOTE_DRAM1 MAP_REGION_FLAT( \ 263*91f16700Schasinglulu N1SDP_REMOTE_DRAM1_BASE, \ 264*91f16700Schasinglulu N1SDP_REMOTE_DRAM1_SIZE, \ 265*91f16700Schasinglulu MT_MEMORY | MT_RW | MT_NS) 266*91f16700Schasinglulu 267*91f16700Schasinglulu #define N1SDP_MAP_REMOTE_DRAM2 MAP_REGION_FLAT( \ 268*91f16700Schasinglulu N1SDP_REMOTE_DRAM2_BASE, \ 269*91f16700Schasinglulu N1SDP_REMOTE_DRAM2_SIZE, \ 270*91f16700Schasinglulu MT_MEMORY | MT_RW | MT_NS) 271*91f16700Schasinglulu 272*91f16700Schasinglulu /* GIC related constants */ 273*91f16700Schasinglulu #define PLAT_ARM_GICD_BASE 0x30000000 274*91f16700Schasinglulu #define PLAT_ARM_GICC_BASE 0x2C000000 275*91f16700Schasinglulu #define PLAT_ARM_GICR_BASE 0x300C0000 276*91f16700Schasinglulu 277*91f16700Schasinglulu /* Platform ID address */ 278*91f16700Schasinglulu #define SSC_VERSION (SSC_REG_BASE + SSC_VERSION_OFFSET) 279*91f16700Schasinglulu 280*91f16700Schasinglulu /* Secure Watchdog Constants */ 281*91f16700Schasinglulu #define SBSA_SECURE_WDOG_BASE UL(0x2A480000) 282*91f16700Schasinglulu #define SBSA_SECURE_WDOG_TIMEOUT UL(100) 283*91f16700Schasinglulu 284*91f16700Schasinglulu /* Number of SCMI channels on the platform */ 285*91f16700Schasinglulu #define PLAT_ARM_SCMI_CHANNEL_COUNT U(1) 286*91f16700Schasinglulu 287*91f16700Schasinglulu #endif /* PLATFORM_DEF_H */ 288