1*91f16700Schasinglulu /* SPDX-License-Identifier: BSD-3-Clause */ 2*91f16700Schasinglulu /* 3*91f16700Schasinglulu * Copyright (C) 2024, Charleye <wangkart@aliyun.com> 4*91f16700Schasinglulu * All rights reserved. 5*91f16700Schasinglulu */ 6*91f16700Schasinglulu 7*91f16700Schasinglulu #ifndef PLATFORM_DEF_H 8*91f16700Schasinglulu #define PLATFORM_DEF_H 9*91f16700Schasinglulu 10*91f16700Schasinglulu #include <lib/utils_def.h> 11*91f16700Schasinglulu #include <plat/common/common_def.h> 12*91f16700Schasinglulu 13*91f16700Schasinglulu /* RAS */ 14*91f16700Schasinglulu #define PLAT_RAS_PRI U(0x10) 15*91f16700Schasinglulu #define PLAT_LUA_DSU_ERRIRQ U(33) 16*91f16700Schasinglulu #define PLAT_LUA_DSU_FAULTIRQ U(34) 17*91f16700Schasinglulu #define PLAT_LUA_CPU0_ERRIRQ U(39) 18*91f16700Schasinglulu #define PLAT_LUA_CPU0_FAULTIRQ U(43) 19*91f16700Schasinglulu #define PLAT_LUA_CPU1_ERRIRQ U(40) 20*91f16700Schasinglulu #define PLAT_LUA_CPU1_FAULTIRQ U(44) 21*91f16700Schasinglulu #define PLAT_LUA_CPU2_ERRIRQ U(41) 22*91f16700Schasinglulu #define PLAT_LUA_CPU2_FAULTIRQ U(45) 23*91f16700Schasinglulu #define PLAT_LUA_CPU3_ERRIRQ U(42) 24*91f16700Schasinglulu #define PLAT_LUA_CPU3_FAULTIRQ U(46) 25*91f16700Schasinglulu 26*91f16700Schasinglulu /* SDEI */ 27*91f16700Schasinglulu #define PLAT_SDEI_CRITICAL_PRI U(0x20) 28*91f16700Schasinglulu #define PLAT_SDEI_NORMAL_PRI U(0x30) 29*91f16700Schasinglulu 30*91f16700Schasinglulu /* CPU topology */ 31*91f16700Schasinglulu #define PLAT_MAX_CORES_PER_CLUSTER U(4) 32*91f16700Schasinglulu #define PLAT_CLUSTER_COUNT U(1) 33*91f16700Schasinglulu #define PLATFORM_CORE_COUNT (PLAT_CLUSTER_COUNT * PLAT_MAX_CORES_PER_CLUSTER) 34*91f16700Schasinglulu 35*91f16700Schasinglulu #define PLAT_MAX_PWR_LVL U(1) 36*91f16700Schasinglulu #define PLAT_MAX_RET_STATE U(1) 37*91f16700Schasinglulu #define PLAT_MAX_OFF_STATE U(2) 38*91f16700Schasinglulu 39*91f16700Schasinglulu #define PLAT_LUA_FAB_PERIPH_PRIO U(0x50) 40*91f16700Schasinglulu #define PLAT_LUA_FAB_PERIPH_IRQ U(179 + 32) 41*91f16700Schasinglulu 42*91f16700Schasinglulu #define PLATFORM_FAB_PERIPH_G0_PROPS(grp) \ 43*91f16700Schasinglulu INTR_PROP_DESC(PLAT_LUA_FAB_PERIPH_IRQ, PLAT_LUA_FAB_PERIPH_PRIO, \ 44*91f16700Schasinglulu grp, GIC_INTR_CFG_LEVEL) 45*91f16700Schasinglulu 46*91f16700Schasinglulu /* Local power state for power domains in Run state. */ 47*91f16700Schasinglulu #define LUA_LOCAL_STATE_RUN U(0) 48*91f16700Schasinglulu /* Local power state for retention. Valid only for CPU power domains */ 49*91f16700Schasinglulu #define LUA_LOCAL_STATE_RET U(1) 50*91f16700Schasinglulu /* 51*91f16700Schasinglulu * Local power state for OFF/power-down. Valid for CPU and cluster power 52*91f16700Schasinglulu * domains. 53*91f16700Schasinglulu */ 54*91f16700Schasinglulu #define LUA_LOCAL_STATE_OFF U(2) 55*91f16700Schasinglulu 56*91f16700Schasinglulu /* 57*91f16700Schasinglulu * Macros used to parse state information from State-ID if it is using the 58*91f16700Schasinglulu * recommended encoding for State-ID. 59*91f16700Schasinglulu */ 60*91f16700Schasinglulu #define LUA_LOCAL_PSTATE_WIDTH U(4) 61*91f16700Schasinglulu #define LUA_LOCAL_PSTATE_MASK ((1 << LUA_LOCAL_PSTATE_WIDTH) - 1) 62*91f16700Schasinglulu 63*91f16700Schasinglulu #define CACHE_WRITEBACK_SHIFT U(6) 64*91f16700Schasinglulu #define CACHE_WRITEBACK_GRANULE (1 << CACHE_WRITEBACK_SHIFT) 65*91f16700Schasinglulu 66*91f16700Schasinglulu /* xlat table v2 related to contants */ 67*91f16700Schasinglulu #define PLAT_PHY_ADDR_SPACE_SIZE (1ULL << 40) 68*91f16700Schasinglulu #define PLAT_VIRT_ADDR_SPACE_SIZE (1ULL << 40) 69*91f16700Schasinglulu #define MAX_XLAT_TABLES U(8) 70*91f16700Schasinglulu #define MAX_MMAP_REGIONS U(16) 71*91f16700Schasinglulu 72*91f16700Schasinglulu #define PLATFORM_STACK_SIZE (1UL << 12) 73*91f16700Schasinglulu 74*91f16700Schasinglulu /* physical memory related constants */ 75*91f16700Schasinglulu #define LUA_DRAM_BASE ULL(0x100000000) 76*91f16700Schasinglulu #define LUA_NS_DDR_SIZE (ULL(0x10) * SZ_1G) 77*91f16700Schasinglulu #define LUA_BL31_IMG_OFFSET 0x00104000 78*91f16700Schasinglulu #define LUA_BL32_IMG_OFFSET 0x04000000 79*91f16700Schasinglulu #define LUA_BL33_IMG_OFFSET 0x00200000 80*91f16700Schasinglulu 81*91f16700Schasinglulu #define LUA_IRAM_BASE 0x00400000 82*91f16700Schasinglulu #define LUA_IRAM_SIZE SZ_64K 83*91f16700Schasinglulu 84*91f16700Schasinglulu #define SHARED_RAM_BASE (LUA_DRAM_BASE + SZ_1M) 85*91f16700Schasinglulu #define SHARED_RAM_SIZE SZ_4K 86*91f16700Schasinglulu 87*91f16700Schasinglulu #define PLAT_LUA_TRUSTED_MAILBOX_BASE SHARED_RAM_BASE 88*91f16700Schasinglulu #define PLAT_LUA_TRUSTED_MAILBOX_SIZE (8 + PLAT_LUA_HOLD_SIZE) 89*91f16700Schasinglulu #define PLAT_LUA_HOLD_BASE (SHARED_RAM_BASE + 8) 90*91f16700Schasinglulu #define PLAT_LUA_HOLD_SIZE (PLATFORM_CORE_COUNT * PLAT_LUA_HOLD_ENTRY_SIZE) 91*91f16700Schasinglulu #define PLAT_LUA_HOLD_ENTRY_SHIFT U(3) 92*91f16700Schasinglulu #define PLAT_LUA_HOLD_ENTRY_SIZE (1 << PLAT_LUA_HOLD_ENTRY_SHIFT) 93*91f16700Schasinglulu #define PLAT_LUA_HOLD_STATE_WAIT U(0) 94*91f16700Schasinglulu #define PLAT_LUA_HOLD_STATE_GO U(1) 95*91f16700Schasinglulu 96*91f16700Schasinglulu /* 97*91f16700Schasinglulu * BL3-1 specific defines. 98*91f16700Schasinglulu * 99*91f16700Schasinglulu * Put BL3-1 at the top of the Trusted SRAM. BL31_BASE is calculated using the 100*91f16700Schasinglulu * current BL3-1 debug size plus a little space for growth. 101*91f16700Schasinglulu */ 102*91f16700Schasinglulu #define BL31_BASE (LUA_DRAM_BASE + LUA_BL31_IMG_OFFSET) 103*91f16700Schasinglulu #define BL31_SIZE SZ_256K 104*91f16700Schasinglulu #define BL31_LIMIT (BL31_BASE + BL31_SIZE) 105*91f16700Schasinglulu 106*91f16700Schasinglulu #define BL32_BASE (LUA_DRAM_BASE + LUA_BL32_IMG_OFFSET) 107*91f16700Schasinglulu #define BL32_SIZE SZ_32M 108*91f16700Schasinglulu #define BL32_LIMIT (BL32_BASE + BL32_SIZE) 109*91f16700Schasinglulu 110*91f16700Schasinglulu /******************************************************************************* 111*91f16700Schasinglulu * BL33 specific defines. 112*91f16700Schasinglulu ******************************************************************************/ 113*91f16700Schasinglulu #ifndef PRELOADED_BL33_BASE 114*91f16700Schasinglulu # define PLAT_ARM_NS_IMAGE_BASE U(LUA_DRAM_BASE + LUA_BL33_IMG_OFFSET) 115*91f16700Schasinglulu #else 116*91f16700Schasinglulu # define PLAT_ARM_NS_IMAGE_BASE U(PRELOADED_BL33_BASE) 117*91f16700Schasinglulu #endif 118*91f16700Schasinglulu 119*91f16700Schasinglulu /* Clock configuration */ 120*91f16700Schasinglulu #ifdef LUA_FPGA 121*91f16700Schasinglulu #define LUA_OSC24M_CLK_IN_HZ 10000000 122*91f16700Schasinglulu #else 123*91f16700Schasinglulu #define LUA_OSC24M_CLK_IN_HZ 24000000 124*91f16700Schasinglulu #endif 125*91f16700Schasinglulu 126*91f16700Schasinglulu /* UART configuration */ 127*91f16700Schasinglulu #define LUA_UART_BAUDRATE 921600 128*91f16700Schasinglulu #ifdef LUA_UART0_CONSOLE 129*91f16700Schasinglulu #define LUA_UART_CLK_IN_HZ U(200000000) 130*91f16700Schasinglulu #else 131*91f16700Schasinglulu #define LUA_UART_CLK_IN_HZ LUA_OSC24M_CLK_IN_HZ 132*91f16700Schasinglulu #endif 133*91f16700Schasinglulu 134*91f16700Schasinglulu /* 135*91f16700Schasinglulu * UART related constants 136*91f16700Schasinglulu */ 137*91f16700Schasinglulu #define PLAT_PRI_BITS U(3) 138*91f16700Schasinglulu 139*91f16700Schasinglulu #define PLAT_LUA_UART0_BASE 0x00602000 140*91f16700Schasinglulu #define PLAT_LUA_UART0_SIZE ULL(0x1000) 141*91f16700Schasinglulu #define PLAT_LUA_UART0_MMAP MAP_REGION_FLAT(PLAT_LUA_UART0_BASE, \ 142*91f16700Schasinglulu PLAT_LUA_UART0_SIZE, \ 143*91f16700Schasinglulu MT_DEVICE | MT_RW | \ 144*91f16700Schasinglulu MT_NS | MT_PRIVILEGED) 145*91f16700Schasinglulu 146*91f16700Schasinglulu #define PLAT_LUA_UART1_PRIO U(0x40) 147*91f16700Schasinglulu #define PLAT_LUA_UART1_IRQ U(196) 148*91f16700Schasinglulu #define PLAT_LUA_UART1_BASE 0x0E403000 149*91f16700Schasinglulu #define PLAT_LUA_UART1_SIZE ULL(0x1000) 150*91f16700Schasinglulu #define PLAT_LUA_UART1_MMAP MAP_REGION_FLAT(PLAT_LUA_UART1_BASE, \ 151*91f16700Schasinglulu PLAT_LUA_UART1_SIZE, \ 152*91f16700Schasinglulu MT_DEVICE | MT_RW | \ 153*91f16700Schasinglulu MT_NS | MT_PRIVILEGED) 154*91f16700Schasinglulu 155*91f16700Schasinglulu #ifdef LUA_UART0_CONSOLE 156*91f16700Schasinglulu #define PLAT_LUA_BOOT_UART_BASE PLAT_LUA_UART0_BASE 157*91f16700Schasinglulu #define PLAT_LUA_BOOT_MMAP PLAT_LUA_UART0_MMAP 158*91f16700Schasinglulu #else 159*91f16700Schasinglulu #define PLAT_LUA_BOOT_UART_BASE PLAT_LUA_UART1_BASE 160*91f16700Schasinglulu #define PLAT_LUA_BOOT_MMAP PLAT_LUA_UART1_MMAP 161*91f16700Schasinglulu #endif 162*91f16700Schasinglulu #define PLAT_LUA_BOOT_UART_CLK_IN_HZ LUA_UART_CLK_IN_HZ 163*91f16700Schasinglulu #define PLAT_LUA_CONSOLE_BAUDRATE LUA_UART_BAUDRATE 164*91f16700Schasinglulu 165*91f16700Schasinglulu #define DEVICE_BASE 0x04000000 166*91f16700Schasinglulu #define DEVICE_SIZE SZ_512M 167*91f16700Schasinglulu 168*91f16700Schasinglulu #define CPU_SYSCTL_BASE 0x08010000 169*91f16700Schasinglulu #define CPU_SYSCTL_SIZE 0x1000 170*91f16700Schasinglulu #define CA55_CORE_SW_RST_OFFSET 0xE0 171*91f16700Schasinglulu 172*91f16700Schasinglulu /* 173*91f16700Schasinglulu * GIC related constants 174*91f16700Schasinglulu */ 175*91f16700Schasinglulu #define GICD_BASE 0x08001000 176*91f16700Schasinglulu #define GICD_SIZE 0x8000 177*91f16700Schasinglulu #define GICC_BASE 0x08002000 178*91f16700Schasinglulu 179*91f16700Schasinglulu #define LUA_SDEI_SGI_PRIVATE LUA_IRQ_SEC_SGI_0 180*91f16700Schasinglulu 181*91f16700Schasinglulu #define LUA_IRQ_SEC_SGI_0 U(8) 182*91f16700Schasinglulu #define LUA_IRQ_SEC_SGI_1 U(9) 183*91f16700Schasinglulu #define LUA_IRQ_SEC_SGI_2 U(10) 184*91f16700Schasinglulu #define LUA_IRQ_SEC_SGI_3 U(11) 185*91f16700Schasinglulu #define LUA_IRQ_SEC_SGI_4 U(12) 186*91f16700Schasinglulu #define LUA_IRQ_SEC_SGI_5 U(13) 187*91f16700Schasinglulu #define LUA_IRQ_SEC_SGI_6 U(14) 188*91f16700Schasinglulu #define LUA_IRQ_SEC_SGI_7 U(15) 189*91f16700Schasinglulu 190*91f16700Schasinglulu #define PLATFORM_G1S_PROPS(grp) \ 191*91f16700Schasinglulu INTR_PROP_DESC(LUA_IRQ_SEC_SGI_0, GIC_HIGHEST_SEC_PRIORITY, \ 192*91f16700Schasinglulu grp, GIC_INTR_CFG_EDGE), \ 193*91f16700Schasinglulu INTR_PROP_DESC(LUA_IRQ_SEC_SGI_1, GIC_HIGHEST_SEC_PRIORITY, \ 194*91f16700Schasinglulu grp, GIC_INTR_CFG_EDGE), \ 195*91f16700Schasinglulu INTR_PROP_DESC(LUA_IRQ_SEC_SGI_2, GIC_HIGHEST_SEC_PRIORITY, \ 196*91f16700Schasinglulu grp, GIC_INTR_CFG_EDGE), \ 197*91f16700Schasinglulu INTR_PROP_DESC(LUA_IRQ_SEC_SGI_3, GIC_HIGHEST_SEC_PRIORITY, \ 198*91f16700Schasinglulu grp, GIC_INTR_CFG_EDGE), \ 199*91f16700Schasinglulu INTR_PROP_DESC(LUA_IRQ_SEC_SGI_4, GIC_HIGHEST_SEC_PRIORITY, \ 200*91f16700Schasinglulu grp, GIC_INTR_CFG_EDGE), \ 201*91f16700Schasinglulu INTR_PROP_DESC(LUA_IRQ_SEC_SGI_5, GIC_HIGHEST_SEC_PRIORITY, \ 202*91f16700Schasinglulu grp, GIC_INTR_CFG_EDGE), \ 203*91f16700Schasinglulu INTR_PROP_DESC(LUA_IRQ_SEC_SGI_6, GIC_HIGHEST_SEC_PRIORITY, \ 204*91f16700Schasinglulu grp, GIC_INTR_CFG_EDGE), \ 205*91f16700Schasinglulu INTR_PROP_DESC(LUA_IRQ_SEC_SGI_7, GIC_HIGHEST_SEC_PRIORITY, \ 206*91f16700Schasinglulu grp, GIC_INTR_CFG_EDGE) 207*91f16700Schasinglulu 208*91f16700Schasinglulu #define PLATFORM_UART1_G0_PROPS(grp) \ 209*91f16700Schasinglulu INTR_PROP_DESC(PLAT_LUA_UART1_IRQ, PLAT_LUA_UART1_PRIO, \ 210*91f16700Schasinglulu grp, GIC_INTR_CFG_LEVEL) 211*91f16700Schasinglulu 212*91f16700Schasinglulu #define PLATFORM_RAS_G0_PROPS(grp) \ 213*91f16700Schasinglulu INTR_PROP_DESC(PLAT_LUA_DSU_ERRIRQ, PLAT_RAS_PRI, \ 214*91f16700Schasinglulu grp, GIC_INTR_CFG_EDGE), \ 215*91f16700Schasinglulu INTR_PROP_DESC(PLAT_LUA_DSU_FAULTIRQ, PLAT_RAS_PRI, \ 216*91f16700Schasinglulu grp, GIC_INTR_CFG_EDGE), \ 217*91f16700Schasinglulu INTR_PROP_DESC(PLAT_LUA_CPU0_ERRIRQ, PLAT_RAS_PRI, \ 218*91f16700Schasinglulu grp, GIC_INTR_CFG_EDGE), \ 219*91f16700Schasinglulu INTR_PROP_DESC(PLAT_LUA_CPU0_FAULTIRQ, PLAT_RAS_PRI, \ 220*91f16700Schasinglulu grp, GIC_INTR_CFG_EDGE), \ 221*91f16700Schasinglulu INTR_PROP_DESC(PLAT_LUA_CPU1_ERRIRQ, PLAT_RAS_PRI, \ 222*91f16700Schasinglulu grp, GIC_INTR_CFG_EDGE), \ 223*91f16700Schasinglulu INTR_PROP_DESC(PLAT_LUA_CPU1_FAULTIRQ, PLAT_RAS_PRI, \ 224*91f16700Schasinglulu grp, GIC_INTR_CFG_EDGE), \ 225*91f16700Schasinglulu INTR_PROP_DESC(PLAT_LUA_CPU2_ERRIRQ, PLAT_RAS_PRI, \ 226*91f16700Schasinglulu grp, GIC_INTR_CFG_EDGE), \ 227*91f16700Schasinglulu INTR_PROP_DESC(PLAT_LUA_CPU2_FAULTIRQ, PLAT_RAS_PRI, \ 228*91f16700Schasinglulu grp, GIC_INTR_CFG_EDGE), \ 229*91f16700Schasinglulu INTR_PROP_DESC(PLAT_LUA_CPU3_ERRIRQ, PLAT_RAS_PRI, \ 230*91f16700Schasinglulu grp, GIC_INTR_CFG_EDGE), \ 231*91f16700Schasinglulu INTR_PROP_DESC(PLAT_LUA_CPU3_FAULTIRQ, PLAT_RAS_PRI, \ 232*91f16700Schasinglulu grp, GIC_INTR_CFG_EDGE) 233*91f16700Schasinglulu 234*91f16700Schasinglulu #define PLAT_LUA_PRIMARY_CPU 0x0 235*91f16700Schasinglulu #define PLAT_LUA_PRIMARY_CPU_SHIFT 8 236*91f16700Schasinglulu #define PLAT_LUA_PRIMARY_CPU_BIT_WIDTH 6 237*91f16700Schasinglulu 238*91f16700Schasinglulu #endif /* PLATFORM_DEF_H */ 239