135527fb4SYann Gautier /* 2db77f8bfSYann Gautier * Copyright (c) 2023-2024, 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 3603020b66SYann Gautier #define PLAT_MAX_PWR_LVL U(3) 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 ******************************************************************************/ 76db77f8bfSYann Gautier #define BL31_BASE 0 77*64e5a6dfSMaxime Méré #define BL31_LIMIT (STM32MP_SEC_SYSRAM_SIZE / 2) 78db77f8bfSYann Gautier 7935527fb4SYann Gautier /******************************************************************************* 8035527fb4SYann Gautier * BL33 specific defines. 8135527fb4SYann Gautier ******************************************************************************/ 8235527fb4SYann Gautier #define BL33_BASE STM32MP_BL33_BASE 8335527fb4SYann Gautier 8435527fb4SYann Gautier /******************************************************************************* 8535527fb4SYann Gautier * Platform specific page table and MMU setup constants 8635527fb4SYann Gautier ******************************************************************************/ 8735527fb4SYann Gautier #define PLAT_PHY_ADDR_SPACE_SIZE (ULL(1) << 33) 8835527fb4SYann Gautier #define PLAT_VIRT_ADDR_SPACE_SIZE (ULL(1) << 33) 8935527fb4SYann Gautier 9035527fb4SYann Gautier /******************************************************************************* 9135527fb4SYann Gautier * Declarations and constants to access the mailboxes safely. Each mailbox is 9235527fb4SYann Gautier * aligned on the biggest cache line size in the platform. This is known only 9335527fb4SYann Gautier * to the platform as it might have a combination of integrated and external 9435527fb4SYann Gautier * caches. Such alignment ensures that two maiboxes do not sit on the same cache 9535527fb4SYann Gautier * line at any cache level. They could belong to different cpus/clusters & 9635527fb4SYann Gautier * get written while being protected by different locks causing corruption of 9735527fb4SYann Gautier * a valid mailbox address. 9835527fb4SYann Gautier ******************************************************************************/ 9935527fb4SYann Gautier #define CACHE_WRITEBACK_SHIFT 6 10035527fb4SYann Gautier #define CACHE_WRITEBACK_GRANULE (U(1) << CACHE_WRITEBACK_SHIFT) 10135527fb4SYann Gautier 10203020b66SYann Gautier /* 10303020b66SYann Gautier * Secure Interrupt: based on the standard ARM mapping 10403020b66SYann Gautier */ 10503020b66SYann Gautier #define ARM_IRQ_SEC_PHY_TIMER U(29) 10603020b66SYann Gautier 10703020b66SYann Gautier #define ARM_IRQ_NON_SEC_SGI_0 U(0) 10803020b66SYann Gautier 10903020b66SYann Gautier #define ARM_IRQ_SEC_SGI_0 U(8) 11003020b66SYann Gautier #define ARM_IRQ_SEC_SGI_1 U(9) 11103020b66SYann Gautier #define ARM_IRQ_SEC_SGI_2 U(10) 11203020b66SYann Gautier #define ARM_IRQ_SEC_SGI_3 U(11) 11303020b66SYann Gautier #define ARM_IRQ_SEC_SGI_4 U(12) 11403020b66SYann Gautier #define ARM_IRQ_SEC_SGI_5 U(13) 11503020b66SYann Gautier #define ARM_IRQ_SEC_SGI_6 U(14) 11603020b66SYann Gautier #define ARM_IRQ_SEC_SGI_7 U(15) 11703020b66SYann Gautier 11803020b66SYann Gautier /* Platform IRQ Priority */ 11903020b66SYann Gautier #define STM32MP_IRQ_SEC_SPI_PRIO U(0x10) 12003020b66SYann Gautier 12103020b66SYann Gautier /* 12203020b66SYann Gautier * Define a list of Group 1 Secure and Group 0 interrupts as per GICv3 12303020b66SYann Gautier * terminology. On a GICv2 system or mode, the lists will be merged and treated 12403020b66SYann Gautier * as Group 0 interrupts. 12503020b66SYann Gautier */ 12603020b66SYann Gautier #define PLATFORM_G1S_PROPS(grp) \ 12703020b66SYann Gautier INTR_PROP_DESC(ARM_IRQ_SEC_PHY_TIMER, \ 12803020b66SYann Gautier GIC_HIGHEST_SEC_PRIORITY, \ 12903020b66SYann Gautier (grp), GIC_INTR_CFG_LEVEL), \ 13003020b66SYann Gautier INTR_PROP_DESC(ARM_IRQ_SEC_SGI_1, \ 13103020b66SYann Gautier GIC_HIGHEST_SEC_PRIORITY, \ 13203020b66SYann Gautier (grp), GIC_INTR_CFG_EDGE), \ 13303020b66SYann Gautier INTR_PROP_DESC(ARM_IRQ_SEC_SGI_2, \ 13403020b66SYann Gautier GIC_HIGHEST_SEC_PRIORITY, \ 13503020b66SYann Gautier (grp), GIC_INTR_CFG_EDGE), \ 13603020b66SYann Gautier INTR_PROP_DESC(ARM_IRQ_SEC_SGI_3, \ 13703020b66SYann Gautier GIC_HIGHEST_SEC_PRIORITY, \ 13803020b66SYann Gautier (grp), GIC_INTR_CFG_EDGE), \ 13903020b66SYann Gautier INTR_PROP_DESC(ARM_IRQ_SEC_SGI_4, \ 14003020b66SYann Gautier GIC_HIGHEST_SEC_PRIORITY, \ 14103020b66SYann Gautier (grp), GIC_INTR_CFG_EDGE), \ 14203020b66SYann Gautier INTR_PROP_DESC(ARM_IRQ_SEC_SGI_5, \ 14303020b66SYann Gautier GIC_HIGHEST_SEC_PRIORITY, \ 14403020b66SYann Gautier (grp), GIC_INTR_CFG_EDGE), \ 14503020b66SYann Gautier INTR_PROP_DESC(ARM_IRQ_SEC_SGI_7, \ 14603020b66SYann Gautier GIC_HIGHEST_SEC_PRIORITY, \ 14703020b66SYann Gautier (grp), GIC_INTR_CFG_EDGE) 14803020b66SYann Gautier 14903020b66SYann Gautier #define PLATFORM_G0_PROPS(grp) \ 15003020b66SYann Gautier INTR_PROP_DESC(ARM_IRQ_SEC_SGI_0, \ 15103020b66SYann Gautier GIC_HIGHEST_SEC_PRIORITY, \ 15203020b66SYann Gautier (grp), GIC_INTR_CFG_EDGE), \ 15303020b66SYann Gautier INTR_PROP_DESC(ARM_IRQ_SEC_SGI_6, \ 15403020b66SYann Gautier GIC_HIGHEST_SEC_PRIORITY, \ 15503020b66SYann Gautier (grp), GIC_INTR_CFG_EDGE) 15603020b66SYann Gautier 15735527fb4SYann Gautier #endif /* PLATFORM_DEF_H */ 158