1*f180a3b7SHieu Nguyen /* 2*f180a3b7SHieu Nguyen * Copyright (c) 2025, Renesas Electronics Corporation. All rights reserved. 3*f180a3b7SHieu Nguyen * 4*f180a3b7SHieu Nguyen * SPDX-License-Identifier: BSD-3-Clause 5*f180a3b7SHieu Nguyen */ 6*f180a3b7SHieu Nguyen 7*f180a3b7SHieu Nguyen #ifndef PLATFORM_DEF_H 8*f180a3b7SHieu Nguyen #define PLATFORM_DEF_H 9*f180a3b7SHieu Nguyen 10*f180a3b7SHieu Nguyen #ifndef __ASSEMBLER__ 11*f180a3b7SHieu Nguyen #include <stdlib.h> 12*f180a3b7SHieu Nguyen #endif 13*f180a3b7SHieu Nguyen 14*f180a3b7SHieu Nguyen #include <arch.h> 15*f180a3b7SHieu Nguyen 16*f180a3b7SHieu Nguyen #include "rcar_def.h" 17*f180a3b7SHieu Nguyen 18*f180a3b7SHieu Nguyen /******************************************************************************* 19*f180a3b7SHieu Nguyen * Platform binary types for linking 20*f180a3b7SHieu Nguyen ******************************************************************************/ 21*f180a3b7SHieu Nguyen #define PLATFORM_LINKER_FORMAT "elf64-littleaarch64" 22*f180a3b7SHieu Nguyen #define PLATFORM_LINKER_ARCH aarch64 23*f180a3b7SHieu Nguyen 24*f180a3b7SHieu Nguyen /******************************************************************************* 25*f180a3b7SHieu Nguyen * Generic platform constants 26*f180a3b7SHieu Nguyen ******************************************************************************/ 27*f180a3b7SHieu Nguyen 28*f180a3b7SHieu Nguyen /* Size of cacheable stacks */ 29*f180a3b7SHieu Nguyen #define PLATFORM_STACK_SIZE 0x800U 30*f180a3b7SHieu Nguyen 31*f180a3b7SHieu Nguyen /* 32*f180a3b7SHieu Nguyen * R-Car X5H Cortex-A720AE 33*f180a3b7SHieu Nguyen * L1:I/64KB per core, D/64KB per core, L2:512KB L3:4MB per cluster 34*f180a3b7SHieu Nguyen */ 35*f180a3b7SHieu Nguyen 36*f180a3b7SHieu Nguyen /* Hardware environment: 8 clusters, 4 cores each */ 37*f180a3b7SHieu Nguyen #define PLATFORM_CLUSTER_COUNT 8 38*f180a3b7SHieu Nguyen #define PLATFORM_CLUSTER0_CORE_COUNT 4 39*f180a3b7SHieu Nguyen #define PLATFORM_CLUSTER1_CORE_COUNT 4 40*f180a3b7SHieu Nguyen #define PLATFORM_CLUSTER2_CORE_COUNT 4 41*f180a3b7SHieu Nguyen #define PLATFORM_CLUSTER3_CORE_COUNT 4 42*f180a3b7SHieu Nguyen #define PLATFORM_CLUSTER4_CORE_COUNT 4 43*f180a3b7SHieu Nguyen #define PLATFORM_CLUSTER5_CORE_COUNT 4 44*f180a3b7SHieu Nguyen #define PLATFORM_CLUSTER6_CORE_COUNT 4 45*f180a3b7SHieu Nguyen #define PLATFORM_CLUSTER7_CORE_COUNT 4 46*f180a3b7SHieu Nguyen #define PLATFORM_CORE_COUNT (PLATFORM_CLUSTER7_CORE_COUNT + \ 47*f180a3b7SHieu Nguyen PLATFORM_CLUSTER6_CORE_COUNT + \ 48*f180a3b7SHieu Nguyen PLATFORM_CLUSTER5_CORE_COUNT + \ 49*f180a3b7SHieu Nguyen PLATFORM_CLUSTER4_CORE_COUNT + \ 50*f180a3b7SHieu Nguyen PLATFORM_CLUSTER3_CORE_COUNT + \ 51*f180a3b7SHieu Nguyen PLATFORM_CLUSTER2_CORE_COUNT + \ 52*f180a3b7SHieu Nguyen PLATFORM_CLUSTER1_CORE_COUNT + \ 53*f180a3b7SHieu Nguyen PLATFORM_CLUSTER0_CORE_COUNT) 54*f180a3b7SHieu Nguyen #define PLATFORM_MAX_CPUS_PER_CLUSTER 4 55*f180a3b7SHieu Nguyen 56*f180a3b7SHieu Nguyen #define PLAT_MAX_PWR_LVL MPIDR_AFFLVL2 57*f180a3b7SHieu Nguyen #define PLAT_NUM_PWR_DOMAINS (PLATFORM_CORE_COUNT + \ 58*f180a3b7SHieu Nguyen PLATFORM_CLUSTER_COUNT + 1) 59*f180a3b7SHieu Nguyen 60*f180a3b7SHieu Nguyen #define PLAT_MAX_RET_STATE 1 61*f180a3b7SHieu Nguyen #define PLAT_MAX_OFF_STATE 2 62*f180a3b7SHieu Nguyen 63*f180a3b7SHieu Nguyen /* 64*f180a3b7SHieu Nguyen * Macros for local power states in ARM platforms encoded by State-ID field 65*f180a3b7SHieu Nguyen * within the power-state parameter. 66*f180a3b7SHieu Nguyen */ 67*f180a3b7SHieu Nguyen /* Local power state for power domains in Run state. */ 68*f180a3b7SHieu Nguyen #define ARM_LOCAL_STATE_RUN 0 69*f180a3b7SHieu Nguyen /* Local power state for retention. Valid only for CPU power domains */ 70*f180a3b7SHieu Nguyen #define ARM_LOCAL_STATE_RET 1 71*f180a3b7SHieu Nguyen /* Local power state for OFF/power-down. Valid for CPU and cluster power domains */ 72*f180a3b7SHieu Nguyen #define ARM_LOCAL_STATE_OFF 2 73*f180a3b7SHieu Nguyen 74*f180a3b7SHieu Nguyen /* 75*f180a3b7SHieu Nguyen ****************************************************************************** 76*f180a3b7SHieu Nguyen * BL31 specific defines. 77*f180a3b7SHieu Nguyen ****************************************************************************** 78*f180a3b7SHieu Nguyen * Put BL3-1 at the top of the Trusted SRAM. BL31_BASE is calculated using the 79*f180a3b7SHieu Nguyen * current BL3-1 debug size plus a little space for growth. 80*f180a3b7SHieu Nguyen */ 81*f180a3b7SHieu Nguyen #define BL31_BASE RCAR_TRUSTED_SRAM_BASE 82*f180a3b7SHieu Nguyen #define BL31_LIMIT (RCAR_TRUSTED_SRAM_BASE + RCAR_TRUSTED_SRAM_SIZE) 83*f180a3b7SHieu Nguyen 84*f180a3b7SHieu Nguyen /******************************************************************************* 85*f180a3b7SHieu Nguyen * Platform specific page table and MMU setup constants 86*f180a3b7SHieu Nguyen ******************************************************************************/ 87*f180a3b7SHieu Nguyen #define MAX_XLAT_TABLES 8 88*f180a3b7SHieu Nguyen 89*f180a3b7SHieu Nguyen #define PLAT_PHY_ADDR_SPACE_SIZE BIT_64(33) 90*f180a3b7SHieu Nguyen #define PLAT_VIRT_ADDR_SPACE_SIZE BIT_64(33) 91*f180a3b7SHieu Nguyen 92*f180a3b7SHieu Nguyen #define MAX_MMAP_REGIONS (RCAR_MMAP_ENTRIES + RCAR_BL_REGIONS) 93*f180a3b7SHieu Nguyen 94*f180a3b7SHieu Nguyen /******************************************************************************* 95*f180a3b7SHieu Nguyen * Declarations and constants to access the mailboxes safely. Each mailbox is 96*f180a3b7SHieu Nguyen * aligned on the biggest cache line size in the platform. This is known only 97*f180a3b7SHieu Nguyen * to the platform as it might have a combination of integrated and external 98*f180a3b7SHieu Nguyen * caches. Such alignment ensures that two mailboxes do not sit on the same cache 99*f180a3b7SHieu Nguyen * line at any cache level. They could belong to different cpus/clusters & 100*f180a3b7SHieu Nguyen * get written while being protected by different locks causing corruption of 101*f180a3b7SHieu Nguyen * a valid mailbox address. 102*f180a3b7SHieu Nguyen ******************************************************************************/ 103*f180a3b7SHieu Nguyen #define CACHE_WRITEBACK_SHIFT 6 104*f180a3b7SHieu Nguyen #define CACHE_WRITEBACK_GRANULE BIT(CACHE_WRITEBACK_SHIFT) 105*f180a3b7SHieu Nguyen 106*f180a3b7SHieu Nguyen /* 107*f180a3b7SHieu Nguyen * Define a list of Group 1 Secure and Group 0 interrupt properties as per GICv3 108*f180a3b7SHieu Nguyen * terminology. On a GICv2 system or mode, the lists will be merged and treated 109*f180a3b7SHieu Nguyen * as Group 0 interrupts. 110*f180a3b7SHieu Nguyen * 111*f180a3b7SHieu Nguyen * PLAT_ARM_G0_IRQ_PROPS(grp) is not defined, because there are no Group 0 IRQs. 112*f180a3b7SHieu Nguyen */ 113*f180a3b7SHieu Nguyen #define PLAT_ARM_G1S_IRQ_PROPS(grp) \ 114*f180a3b7SHieu Nguyen INTR_PROP_DESC(ARM_IRQ_SEC_PHY_TIMER, GIC_HIGHEST_SEC_PRIORITY, (grp), \ 115*f180a3b7SHieu Nguyen GIC_INTR_CFG_LEVEL), \ 116*f180a3b7SHieu Nguyen INTR_PROP_DESC(ARM_IRQ_SEC_SGI_0, GIC_HIGHEST_SEC_PRIORITY, (grp), \ 117*f180a3b7SHieu Nguyen GIC_INTR_CFG_EDGE), \ 118*f180a3b7SHieu Nguyen INTR_PROP_DESC(ARM_IRQ_SEC_SGI_1, GIC_HIGHEST_SEC_PRIORITY, (grp), \ 119*f180a3b7SHieu Nguyen GIC_INTR_CFG_EDGE), \ 120*f180a3b7SHieu Nguyen INTR_PROP_DESC(ARM_IRQ_SEC_SGI_2, GIC_HIGHEST_SEC_PRIORITY, (grp), \ 121*f180a3b7SHieu Nguyen GIC_INTR_CFG_EDGE), \ 122*f180a3b7SHieu Nguyen INTR_PROP_DESC(ARM_IRQ_SEC_SGI_3, GIC_HIGHEST_SEC_PRIORITY, (grp), \ 123*f180a3b7SHieu Nguyen GIC_INTR_CFG_EDGE), \ 124*f180a3b7SHieu Nguyen INTR_PROP_DESC(ARM_IRQ_SEC_SGI_4, GIC_HIGHEST_SEC_PRIORITY, (grp), \ 125*f180a3b7SHieu Nguyen GIC_INTR_CFG_EDGE), \ 126*f180a3b7SHieu Nguyen INTR_PROP_DESC(ARM_IRQ_SEC_SGI_5, GIC_HIGHEST_SEC_PRIORITY, (grp), \ 127*f180a3b7SHieu Nguyen GIC_INTR_CFG_EDGE), \ 128*f180a3b7SHieu Nguyen INTR_PROP_DESC(ARM_IRQ_SEC_SGI_6, GIC_HIGHEST_SEC_PRIORITY, (grp), \ 129*f180a3b7SHieu Nguyen GIC_INTR_CFG_EDGE), \ 130*f180a3b7SHieu Nguyen INTR_PROP_DESC(ARM_IRQ_SEC_SGI_7, GIC_HIGHEST_SEC_PRIORITY, (grp), \ 131*f180a3b7SHieu Nguyen GIC_INTR_CFG_EDGE) 132*f180a3b7SHieu Nguyen 133*f180a3b7SHieu Nguyen #endif /* PLATFORM_DEF_H */ 134