1c8284409SSoren Brinkmann /* 2619bc13eSMichal Simek * Copyright (c) 2014-2022, Arm Limited and Contributors. All rights reserved. 3c52a142bSAkshay Belsare * Copyright (c) 2018-2022, Xilinx, Inc. All rights reserved. 44c5cf47fSMaheedhar Bollapalli * Copyright (c) 2022-2025, Advanced Micro Devices, Inc. All rights reserved. 5c8284409SSoren Brinkmann * 682cb2c1aSdp-arm * SPDX-License-Identifier: BSD-3-Clause 7c8284409SSoren Brinkmann */ 8c8284409SSoren Brinkmann 91083b2b3SAntonio Nino Diaz #ifndef PLATFORM_DEF_H 101083b2b3SAntonio Nino Diaz #define PLATFORM_DEF_H 11c8284409SSoren Brinkmann 12c8284409SSoren Brinkmann #include <arch.h> 1309d40e0eSAntonio Nino Diaz #include <common/interrupt_props.h> 1409d40e0eSAntonio Nino Diaz #include <drivers/arm/gic_common.h> 1509d40e0eSAntonio Nino Diaz #include <lib/utils_def.h> 1609d40e0eSAntonio Nino Diaz 1799564393SJolly Shah #include "zynqmp_def.h" 18c8284409SSoren Brinkmann 19c8284409SSoren Brinkmann /******************************************************************************* 20c8284409SSoren Brinkmann * Generic platform constants 21c8284409SSoren Brinkmann ******************************************************************************/ 22c8284409SSoren Brinkmann 23c8284409SSoren Brinkmann /* Size of cacheable stacks */ 2457536653SAkshay Belsare #ifndef PLATFORM_STACK_SIZE 25c8284409SSoren Brinkmann #define PLATFORM_STACK_SIZE 0x440 2657536653SAkshay Belsare #endif 27c8284409SSoren Brinkmann 286cdef9baSDeepika Bhavnani #define PLATFORM_CORE_COUNT U(4) 291083b2b3SAntonio Nino Diaz #define PLAT_MAX_PWR_LVL U(1) 301083b2b3SAntonio Nino Diaz #define PLAT_MAX_RET_STATE U(1) 311083b2b3SAntonio Nino Diaz #define PLAT_MAX_OFF_STATE U(2) 32c8284409SSoren Brinkmann 33c8284409SSoren Brinkmann /******************************************************************************* 34c8284409SSoren Brinkmann * BL31 specific defines. 35c8284409SSoren Brinkmann ******************************************************************************/ 36c8284409SSoren Brinkmann /* 37c8284409SSoren Brinkmann * Put BL31 at the top of the Trusted SRAM (just below the shared memory, if 38c8284409SSoren Brinkmann * present). BL31_BASE is calculated using the current BL31 debug size plus a 39c8284409SSoren Brinkmann * little space for growth. 40c8284409SSoren Brinkmann */ 4101555332SSoren Brinkmann #ifndef ZYNQMP_ATF_MEM_BASE 424143268aSJan Kiszka #if !DEBUG && defined(SPD_none) && !SDEI_SUPPORT 435bcbd2deSVenkatesh Yadav Abbarapu # define BL31_BASE U(0xfffea000) 445bcbd2deSVenkatesh Yadav Abbarapu # define BL31_LIMIT U(0x100000000) 45c8284409SSoren Brinkmann #else 462537f072SAkshay Belsare # define BL31_BASE U(0x1000) 478ce2fbffSIlias Apalodimas # define BL31_LIMIT U(0x80000) 483077f8d9SJolly Shah #endif 493077f8d9SJolly Shah #else 5091291633SAkshay Belsare # define BL31_BASE U(ZYNQMP_ATF_MEM_BASE) 5191291633SAkshay Belsare # define BL31_LIMIT (UL(ZYNQMP_ATF_MEM_BASE) + U(ZYNQMP_ATF_MEM_SIZE)) 5201555332SSoren Brinkmann # ifdef ZYNQMP_ATF_MEM_PROGBITS_SIZE 5391291633SAkshay Belsare # define BL31_PROGBITS_LIMIT (UL(ZYNQMP_ATF_MEM_BASE) + U(ZYNQMP_ATF_MEM_PROGBITS_SIZE)) 5401555332SSoren Brinkmann # endif 55c8284409SSoren Brinkmann #endif 56c8284409SSoren Brinkmann 57c8284409SSoren Brinkmann /******************************************************************************* 58c8284409SSoren Brinkmann * BL32 specific defines. 59c8284409SSoren Brinkmann ******************************************************************************/ 6001555332SSoren Brinkmann #ifndef ZYNQMP_BL32_MEM_BASE 615bcbd2deSVenkatesh Yadav Abbarapu # define BL32_BASE U(0x60000000) 628ce2fbffSIlias Apalodimas # define BL32_LIMIT U(0x80000000) 63c8284409SSoren Brinkmann #else 6491291633SAkshay Belsare # define BL32_BASE U(ZYNQMP_BL32_MEM_BASE) 6591291633SAkshay Belsare # define BL32_LIMIT (UL(ZYNQMP_BL32_MEM_BASE) + U(ZYNQMP_BL32_MEM_SIZE)) 66c8284409SSoren Brinkmann #endif 67c8284409SSoren Brinkmann 6801555332SSoren Brinkmann /******************************************************************************* 6901555332SSoren Brinkmann * BL33 specific defines. 7001555332SSoren Brinkmann ******************************************************************************/ 7101555332SSoren Brinkmann #ifndef PRELOADED_BL33_BASE 725bcbd2deSVenkatesh Yadav Abbarapu # define PLAT_ARM_NS_IMAGE_BASE U(0x8000000) 7301555332SSoren Brinkmann #else 7491291633SAkshay Belsare # define PLAT_ARM_NS_IMAGE_BASE U(PRELOADED_BL33_BASE) 7501555332SSoren Brinkmann #endif 7601555332SSoren Brinkmann 7701555332SSoren Brinkmann /******************************************************************************* 78*df44616aSMaheedhar Bollapalli * HIGH and LOW DDR MAX definitions. 79*df44616aSMaheedhar Bollapalli ******************************************************************************/ 80*df44616aSMaheedhar Bollapalli #define PLAT_DDR_LOWMEM_MAX U(0x80000000) 81*df44616aSMaheedhar Bollapalli #define PLAT_DDR_HIGHMEM_MAX U(0x100000000) 82*df44616aSMaheedhar Bollapalli 83*df44616aSMaheedhar Bollapalli /******************************************************************************* 8401555332SSoren Brinkmann * TSP specific defines. 8501555332SSoren Brinkmann ******************************************************************************/ 8601555332SSoren Brinkmann #define TSP_SEC_MEM_BASE BL32_BASE 878ce2fbffSIlias Apalodimas #define TSP_SEC_MEM_SIZE (BL32_LIMIT - BL32_BASE) 8801555332SSoren Brinkmann 8901555332SSoren Brinkmann /* ID of the secure physical generic timer interrupt used by the TSP */ 90c8284409SSoren Brinkmann #define TSP_IRQ_SEC_PHY_TIMER ARM_IRQ_SEC_PHY_TIMER 91c8284409SSoren Brinkmann 92c8284409SSoren Brinkmann /******************************************************************************* 93c8284409SSoren Brinkmann * Platform specific page table and MMU setup constants 94c8284409SSoren Brinkmann ******************************************************************************/ 955bcbd2deSVenkatesh Yadav Abbarapu #define XILINX_OF_BOARD_DTB_MAX_SIZE U(0x200000) 96c52a142bSAkshay Belsare #define PLAT_OCM_BASE U(0xFFFC0000) 97c52a142bSAkshay Belsare #define PLAT_OCM_LIMIT U(0xFFFFFFFF) 98c52a142bSAkshay Belsare 99c52a142bSAkshay Belsare #define IS_TFA_IN_OCM(x) ((x >= PLAT_OCM_BASE) && (x < PLAT_OCM_LIMIT)) 1000a8143ddSMichal Simek 1015724481fSDavid Cunado #define PLAT_PHY_ADDR_SPACE_SIZE (1ULL << 32) 1025724481fSDavid Cunado #define PLAT_VIRT_ADDR_SPACE_SIZE (1ULL << 32) 10370134000SAmit Nagal 10470134000SAmit Nagal #ifndef MAX_MMAP_REGIONS 105c52a142bSAkshay Belsare #if (defined(XILINX_OF_BOARD_DTB_ADDR) && !IS_TFA_IN_OCM(BL31_BASE)) 1060a8143ddSMichal Simek #define MAX_MMAP_REGIONS 8 1070a8143ddSMichal Simek #else 10847395a23SSoren Brinkmann #define MAX_MMAP_REGIONS 7 10970134000SAmit Nagal #endif 11070134000SAmit Nagal #endif 11170134000SAmit Nagal 11270134000SAmit Nagal #ifndef MAX_XLAT_TABLES 113c52a142bSAkshay Belsare #if !IS_TFA_IN_OCM(BL31_BASE) 11470134000SAmit Nagal #define MAX_XLAT_TABLES 8 11570134000SAmit Nagal #else 116c8284409SSoren Brinkmann #define MAX_XLAT_TABLES 5 1174c4b9615SVenkatesh Yadav Abbarapu #endif 11870134000SAmit Nagal #endif 119c8284409SSoren Brinkmann 120c8284409SSoren Brinkmann #define CACHE_WRITEBACK_SHIFT 6 121c8284409SSoren Brinkmann #define CACHE_WRITEBACK_GRANULE (1 << CACHE_WRITEBACK_SHIFT) 122c8284409SSoren Brinkmann 1234143268aSJan Kiszka #define ZYNQMP_SDEI_SGI_PRIVATE U(8) 1244143268aSJan Kiszka 1254143268aSJan Kiszka /* Platform macros to support exception handling framework */ 1264143268aSJan Kiszka #define PLAT_PRI_BITS U(3) 1274143268aSJan Kiszka #define PLAT_SDEI_CRITICAL_PRI 0x10 1284143268aSJan Kiszka #define PLAT_SDEI_NORMAL_PRI 0x20 1294143268aSJan Kiszka 130c8284409SSoren Brinkmann #define PLAT_ARM_GICD_BASE BASE_GICD_BASE 131c8284409SSoren Brinkmann #define PLAT_ARM_GICC_BASE BASE_GICC_BASE 132c8284409SSoren Brinkmann /* 13395ad62b2SJeenu Viswambharan * Define properties of Group 1 Secure and Group 0 interrupts as per GICv3 134c8284409SSoren Brinkmann * terminology. On a GICv2 system or mode, the lists will be merged and treated 135c8284409SSoren Brinkmann * as Group 0 interrupts. 136c8284409SSoren Brinkmann */ 13729657d0dSSiva Durga Prasad Paladugu #if !ZYNQMP_WDT_RESTART 13895ad62b2SJeenu Viswambharan #define PLAT_ARM_G1S_IRQ_PROPS(grp) \ 13995ad62b2SJeenu Viswambharan INTR_PROP_DESC(ARM_IRQ_SEC_PHY_TIMER, GIC_HIGHEST_SEC_PRIORITY, grp, \ 14095ad62b2SJeenu Viswambharan GIC_INTR_CFG_LEVEL), \ 14195ad62b2SJeenu Viswambharan INTR_PROP_DESC(ARM_IRQ_SEC_SGI_1, GIC_HIGHEST_SEC_PRIORITY, grp, \ 14295ad62b2SJeenu Viswambharan GIC_INTR_CFG_EDGE), \ 14395ad62b2SJeenu Viswambharan INTR_PROP_DESC(ARM_IRQ_SEC_SGI_2, GIC_HIGHEST_SEC_PRIORITY, grp, \ 14495ad62b2SJeenu Viswambharan GIC_INTR_CFG_EDGE), \ 14595ad62b2SJeenu Viswambharan INTR_PROP_DESC(ARM_IRQ_SEC_SGI_3, GIC_HIGHEST_SEC_PRIORITY, grp, \ 14695ad62b2SJeenu Viswambharan GIC_INTR_CFG_EDGE), \ 14795ad62b2SJeenu Viswambharan INTR_PROP_DESC(ARM_IRQ_SEC_SGI_4, GIC_HIGHEST_SEC_PRIORITY, grp, \ 14895ad62b2SJeenu Viswambharan GIC_INTR_CFG_EDGE), \ 14995ad62b2SJeenu Viswambharan INTR_PROP_DESC(ARM_IRQ_SEC_SGI_5, GIC_HIGHEST_SEC_PRIORITY, grp, \ 15095ad62b2SJeenu Viswambharan GIC_INTR_CFG_EDGE), \ 15195ad62b2SJeenu Viswambharan INTR_PROP_DESC(ARM_IRQ_SEC_SGI_6, GIC_HIGHEST_SEC_PRIORITY, grp, \ 15295ad62b2SJeenu Viswambharan GIC_INTR_CFG_EDGE), \ 15395ad62b2SJeenu Viswambharan INTR_PROP_DESC(ARM_IRQ_SEC_SGI_7, GIC_HIGHEST_SEC_PRIORITY, grp, \ 15495ad62b2SJeenu Viswambharan GIC_INTR_CFG_EDGE) 15529657d0dSSiva Durga Prasad Paladugu #else 15629657d0dSSiva Durga Prasad Paladugu #define PLAT_ARM_G1S_IRQ_PROPS(grp) \ 15729657d0dSSiva Durga Prasad Paladugu INTR_PROP_DESC(ARM_IRQ_SEC_PHY_TIMER, GIC_HIGHEST_SEC_PRIORITY, grp, \ 15829657d0dSSiva Durga Prasad Paladugu GIC_INTR_CFG_LEVEL), \ 15929657d0dSSiva Durga Prasad Paladugu INTR_PROP_DESC(IRQ_TTC3_1, GIC_HIGHEST_SEC_PRIORITY, grp, \ 16029657d0dSSiva Durga Prasad Paladugu GIC_INTR_CFG_EDGE), \ 16129657d0dSSiva Durga Prasad Paladugu INTR_PROP_DESC(ARM_IRQ_SEC_SGI_1, GIC_HIGHEST_SEC_PRIORITY, grp, \ 16229657d0dSSiva Durga Prasad Paladugu GIC_INTR_CFG_EDGE), \ 16329657d0dSSiva Durga Prasad Paladugu INTR_PROP_DESC(ARM_IRQ_SEC_SGI_2, GIC_HIGHEST_SEC_PRIORITY, grp, \ 16429657d0dSSiva Durga Prasad Paladugu GIC_INTR_CFG_EDGE), \ 16529657d0dSSiva Durga Prasad Paladugu INTR_PROP_DESC(ARM_IRQ_SEC_SGI_3, GIC_HIGHEST_SEC_PRIORITY, grp, \ 16629657d0dSSiva Durga Prasad Paladugu GIC_INTR_CFG_EDGE), \ 16729657d0dSSiva Durga Prasad Paladugu INTR_PROP_DESC(ARM_IRQ_SEC_SGI_4, GIC_HIGHEST_SEC_PRIORITY, grp, \ 16829657d0dSSiva Durga Prasad Paladugu GIC_INTR_CFG_EDGE), \ 16929657d0dSSiva Durga Prasad Paladugu INTR_PROP_DESC(ARM_IRQ_SEC_SGI_5, GIC_HIGHEST_SEC_PRIORITY, grp, \ 17029657d0dSSiva Durga Prasad Paladugu GIC_INTR_CFG_EDGE), \ 17129657d0dSSiva Durga Prasad Paladugu INTR_PROP_DESC(ARM_IRQ_SEC_SGI_6, GIC_HIGHEST_SEC_PRIORITY, grp, \ 17229657d0dSSiva Durga Prasad Paladugu GIC_INTR_CFG_EDGE), \ 17329657d0dSSiva Durga Prasad Paladugu INTR_PROP_DESC(ARM_IRQ_SEC_SGI_7, GIC_HIGHEST_SEC_PRIORITY, grp, \ 17429657d0dSSiva Durga Prasad Paladugu GIC_INTR_CFG_EDGE) 17529657d0dSSiva Durga Prasad Paladugu #endif 176c8284409SSoren Brinkmann 1774143268aSJan Kiszka #define PLAT_ARM_G0_IRQ_PROPS(grp) \ 1784143268aSJan Kiszka INTR_PROP_DESC(ARM_IRQ_SEC_SGI_0, PLAT_SDEI_NORMAL_PRI, grp, \ 1794143268aSJan Kiszka GIC_INTR_CFG_EDGE) 180c8284409SSoren Brinkmann 1814c5cf47fSMaheedhar Bollapalli #if (defined(XILINX_OF_BOARD_DTB_ADDR) && !IS_TFA_IN_OCM(BL31_BASE)) 1824c5cf47fSMaheedhar Bollapalli #define XLNX_DT_CFG 1 1834c5cf47fSMaheedhar Bollapalli #else 1844c5cf47fSMaheedhar Bollapalli #define XLNX_DT_CFG 0 1854c5cf47fSMaheedhar Bollapalli #endif 1864c5cf47fSMaheedhar Bollapalli 1871083b2b3SAntonio Nino Diaz #endif /* PLATFORM_DEF_H */ 188