135527fb4SYann Gautier /* 2104ec53eSYann Gautier * Copyright (c) 2023-2025, STMicroelectronics - All Rights Reserved 335527fb4SYann Gautier * 435527fb4SYann Gautier * SPDX-License-Identifier: BSD-3-Clause 535527fb4SYann Gautier */ 635527fb4SYann Gautier 735527fb4SYann Gautier #ifndef PLATFORM_DEF_H 835527fb4SYann Gautier #define PLATFORM_DEF_H 935527fb4SYann Gautier 1035527fb4SYann Gautier #include <arch.h> 1103020b66SYann Gautier #include <drivers/arm/gic_common.h> 1235527fb4SYann Gautier #include <lib/utils_def.h> 1335527fb4SYann Gautier #include <plat/common/common_def.h> 1435527fb4SYann Gautier 1535527fb4SYann Gautier #include "../stm32mp2_def.h" 1635527fb4SYann Gautier 1735527fb4SYann Gautier /******************************************************************************* 1835527fb4SYann Gautier * Generic platform constants 1935527fb4SYann Gautier ******************************************************************************/ 2035527fb4SYann Gautier 2135527fb4SYann Gautier /* Size of cacheable stacks */ 2235527fb4SYann Gautier #define PLATFORM_STACK_SIZE 0xC00 2335527fb4SYann Gautier 2435527fb4SYann Gautier #define STM32MP_PRIMARY_CPU U(0x0) 2535527fb4SYann Gautier #define STM32MP_SECONDARY_CPU U(0x1) 2635527fb4SYann Gautier 2735527fb4SYann Gautier #define MAX_IO_DEVICES U(4) 2835527fb4SYann Gautier #define MAX_IO_HANDLES U(4) 2935527fb4SYann Gautier #define MAX_IO_BLOCK_DEVICES U(1) 3035527fb4SYann Gautier #define MAX_IO_MTD_DEVICES U(1) 3135527fb4SYann Gautier 3235527fb4SYann Gautier #define PLATFORM_CLUSTER_COUNT U(1) 3335527fb4SYann Gautier #define PLATFORM_CORE_COUNT U(2) 3435527fb4SYann Gautier #define PLATFORM_MAX_CPUS_PER_CLUSTER U(2) 3535527fb4SYann Gautier 36747d85eeSMaxime Méré #define PLAT_MAX_PWR_LVL U(1) 3703020b66SYann Gautier #define PLAT_MIN_SUSPEND_PWR_LVL U(2) 3803020b66SYann Gautier #define PLAT_NUM_PWR_DOMAINS U(6) 3935527fb4SYann Gautier 4035527fb4SYann Gautier /* Local power state for power domains in Run state. */ 4135527fb4SYann Gautier #define STM32MP_LOCAL_STATE_RUN U(0) 4235527fb4SYann Gautier /* Local power state for retention. */ 4335527fb4SYann Gautier #define STM32MP_LOCAL_STATE_RET U(1) 4435527fb4SYann Gautier #define STM32MP_LOCAL_STATE_LP U(2) 4535527fb4SYann Gautier #define PLAT_MAX_RET_STATE STM32MP_LOCAL_STATE_LP 4635527fb4SYann Gautier /* Local power state for OFF/power-down. */ 4735527fb4SYann Gautier #define STM32MP_LOCAL_STATE_OFF U(3) 4835527fb4SYann Gautier #define PLAT_MAX_OFF_STATE STM32MP_LOCAL_STATE_OFF 4935527fb4SYann Gautier 5035527fb4SYann Gautier /* Macros to parse the state information from State-ID (recommended encoding) */ 5135527fb4SYann Gautier #define PLAT_LOCAL_PSTATE_WIDTH U(4) 5235527fb4SYann Gautier #define PLAT_LOCAL_PSTATE_MASK GENMASK(PLAT_LOCAL_PSTATE_WIDTH - 1U, 0) 5335527fb4SYann Gautier 5435527fb4SYann Gautier /******************************************************************************* 5535527fb4SYann Gautier * BL2 specific defines. 5635527fb4SYann Gautier ******************************************************************************/ 5735527fb4SYann Gautier /* 5835527fb4SYann Gautier * Put BL2 just below BL3-1. BL2_BASE is calculated using the current BL2 debug 5935527fb4SYann Gautier * size plus a little space for growth. 6035527fb4SYann Gautier */ 6135527fb4SYann Gautier #define BL2_BASE STM32MP_BL2_BASE 6235527fb4SYann Gautier #define BL2_LIMIT (STM32MP_BL2_BASE + \ 6335527fb4SYann Gautier STM32MP_BL2_SIZE) 6435527fb4SYann Gautier 65db77f8bfSYann Gautier #define BL2_RO_BASE STM32MP_BL2_RO_BASE 66db77f8bfSYann Gautier #define BL2_RO_LIMIT (STM32MP_BL2_RO_BASE + \ 67db77f8bfSYann Gautier STM32MP_BL2_RO_SIZE) 68db77f8bfSYann Gautier 69db77f8bfSYann Gautier #define BL2_RW_BASE STM32MP_BL2_RW_BASE 70db77f8bfSYann Gautier #define BL2_RW_LIMIT (STM32MP_BL2_RW_BASE + \ 71db77f8bfSYann Gautier STM32MP_BL2_RW_SIZE) 72db77f8bfSYann Gautier 73db77f8bfSYann Gautier /******************************************************************************* 74db77f8bfSYann Gautier * BL31 specific defines. 75db77f8bfSYann Gautier ******************************************************************************/ 76*ac9abe7eSMaxime Méré #if ENABLE_PIE 77db77f8bfSYann Gautier #define BL31_BASE 0 78*ac9abe7eSMaxime Méré #else 79*ac9abe7eSMaxime Méré #define BL31_BASE STM32MP_SYSRAM_BASE 80*ac9abe7eSMaxime Méré #endif 81*ac9abe7eSMaxime Méré 82*ac9abe7eSMaxime Méré #define BL31_LIMIT (BL31_BASE + (STM32MP_SYSRAM_SIZE / 2)) 83*ac9abe7eSMaxime Méré 84*ac9abe7eSMaxime Méré #define BL31_PROGBITS_LIMIT (BL31_BASE + STM32MP_BL31_SIZE) 85db77f8bfSYann Gautier 8635527fb4SYann Gautier /******************************************************************************* 8735527fb4SYann Gautier * BL33 specific defines. 8835527fb4SYann Gautier ******************************************************************************/ 8935527fb4SYann Gautier #define BL33_BASE STM32MP_BL33_BASE 9035527fb4SYann Gautier 9135527fb4SYann Gautier /******************************************************************************* 9235527fb4SYann Gautier * Platform specific page table and MMU setup constants 9335527fb4SYann Gautier ******************************************************************************/ 9435527fb4SYann Gautier #define PLAT_PHY_ADDR_SPACE_SIZE (ULL(1) << 33) 9535527fb4SYann Gautier #define PLAT_VIRT_ADDR_SPACE_SIZE (ULL(1) << 33) 9635527fb4SYann Gautier 9735527fb4SYann Gautier /******************************************************************************* 9835527fb4SYann Gautier * Declarations and constants to access the mailboxes safely. Each mailbox is 9935527fb4SYann Gautier * aligned on the biggest cache line size in the platform. This is known only 10035527fb4SYann Gautier * to the platform as it might have a combination of integrated and external 10135527fb4SYann Gautier * caches. Such alignment ensures that two maiboxes do not sit on the same cache 10235527fb4SYann Gautier * line at any cache level. They could belong to different cpus/clusters & 10335527fb4SYann Gautier * get written while being protected by different locks causing corruption of 10435527fb4SYann Gautier * a valid mailbox address. 10535527fb4SYann Gautier ******************************************************************************/ 10635527fb4SYann Gautier #define CACHE_WRITEBACK_SHIFT 6 10735527fb4SYann Gautier #define CACHE_WRITEBACK_GRANULE (U(1) << CACHE_WRITEBACK_SHIFT) 10835527fb4SYann Gautier 10903020b66SYann Gautier /* 11003020b66SYann Gautier * Secure Interrupt: based on the standard ARM mapping 11103020b66SYann Gautier */ 11203020b66SYann Gautier #define ARM_IRQ_SEC_PHY_TIMER U(29) 11303020b66SYann Gautier 11403020b66SYann Gautier #define ARM_IRQ_NON_SEC_SGI_0 U(0) 11503020b66SYann Gautier 11603020b66SYann Gautier #define ARM_IRQ_SEC_SGI_0 U(8) 11703020b66SYann Gautier #define ARM_IRQ_SEC_SGI_1 U(9) 11803020b66SYann Gautier #define ARM_IRQ_SEC_SGI_2 U(10) 11903020b66SYann Gautier #define ARM_IRQ_SEC_SGI_3 U(11) 12003020b66SYann Gautier #define ARM_IRQ_SEC_SGI_4 U(12) 12103020b66SYann Gautier #define ARM_IRQ_SEC_SGI_5 U(13) 12203020b66SYann Gautier #define ARM_IRQ_SEC_SGI_6 U(14) 12303020b66SYann Gautier #define ARM_IRQ_SEC_SGI_7 U(15) 12403020b66SYann Gautier 12503020b66SYann Gautier /* Platform IRQ Priority */ 12603020b66SYann Gautier #define STM32MP_IRQ_SEC_SPI_PRIO U(0x10) 12703020b66SYann Gautier 12803020b66SYann Gautier /* 12903020b66SYann Gautier * Define a list of Group 1 Secure and Group 0 interrupts as per GICv3 13003020b66SYann Gautier * terminology. On a GICv2 system or mode, the lists will be merged and treated 13103020b66SYann Gautier * as Group 0 interrupts. 13203020b66SYann Gautier */ 13303020b66SYann Gautier #define PLATFORM_G1S_PROPS(grp) \ 13403020b66SYann Gautier INTR_PROP_DESC(ARM_IRQ_SEC_PHY_TIMER, \ 13503020b66SYann Gautier GIC_HIGHEST_SEC_PRIORITY, \ 13603020b66SYann Gautier (grp), GIC_INTR_CFG_LEVEL), \ 13703020b66SYann Gautier INTR_PROP_DESC(ARM_IRQ_SEC_SGI_1, \ 13803020b66SYann Gautier GIC_HIGHEST_SEC_PRIORITY, \ 13903020b66SYann Gautier (grp), GIC_INTR_CFG_EDGE), \ 14003020b66SYann Gautier INTR_PROP_DESC(ARM_IRQ_SEC_SGI_2, \ 14103020b66SYann Gautier GIC_HIGHEST_SEC_PRIORITY, \ 14203020b66SYann Gautier (grp), GIC_INTR_CFG_EDGE), \ 14303020b66SYann Gautier INTR_PROP_DESC(ARM_IRQ_SEC_SGI_3, \ 14403020b66SYann Gautier GIC_HIGHEST_SEC_PRIORITY, \ 14503020b66SYann Gautier (grp), GIC_INTR_CFG_EDGE), \ 14603020b66SYann Gautier INTR_PROP_DESC(ARM_IRQ_SEC_SGI_4, \ 14703020b66SYann Gautier GIC_HIGHEST_SEC_PRIORITY, \ 14803020b66SYann Gautier (grp), GIC_INTR_CFG_EDGE), \ 14903020b66SYann Gautier INTR_PROP_DESC(ARM_IRQ_SEC_SGI_5, \ 15003020b66SYann Gautier GIC_HIGHEST_SEC_PRIORITY, \ 15103020b66SYann Gautier (grp), GIC_INTR_CFG_EDGE), \ 15203020b66SYann Gautier INTR_PROP_DESC(ARM_IRQ_SEC_SGI_7, \ 15303020b66SYann Gautier GIC_HIGHEST_SEC_PRIORITY, \ 15403020b66SYann Gautier (grp), GIC_INTR_CFG_EDGE) 15503020b66SYann Gautier 15603020b66SYann Gautier #define PLATFORM_G0_PROPS(grp) \ 15703020b66SYann Gautier INTR_PROP_DESC(ARM_IRQ_SEC_SGI_0, \ 15803020b66SYann Gautier GIC_HIGHEST_SEC_PRIORITY, \ 15903020b66SYann Gautier (grp), GIC_INTR_CFG_EDGE), \ 16003020b66SYann Gautier INTR_PROP_DESC(ARM_IRQ_SEC_SGI_6, \ 16103020b66SYann Gautier GIC_HIGHEST_SEC_PRIORITY, \ 16203020b66SYann Gautier (grp), GIC_INTR_CFG_EDGE) 16303020b66SYann Gautier 16435527fb4SYann Gautier #endif /* PLATFORM_DEF_H */ 165