1328718f2SHadi Asyrafi /* 2325eb35dSSieu Mun Tang * Copyright (c) 2019-2022, ARM Limited and Contributors. All rights reserved. 37931d332SJit Loon Lim * Copyright (c) 2019-2023, Intel Corporation. All rights reserved. 4*204d5e67SSieu Mun Tang * Copyright (c) 2024-2025, Altera Corporation. All rights reserved. 5328718f2SHadi Asyrafi * 6328718f2SHadi Asyrafi * SPDX-License-Identifier: BSD-3-Clause 7328718f2SHadi Asyrafi */ 8328718f2SHadi Asyrafi 9328718f2SHadi Asyrafi #ifndef PLATFORM_DEF_H 10328718f2SHadi Asyrafi #define PLATFORM_DEF_H 11328718f2SHadi Asyrafi 12328718f2SHadi Asyrafi #include <arch.h> 13328718f2SHadi Asyrafi #include <common/interrupt_props.h> 14328718f2SHadi Asyrafi #include <common/tbbr/tbbr_img_def.h> 15328718f2SHadi Asyrafi #include <plat/common/common_def.h> 166197dc98SJit Loon Lim #include "socfpga_plat_def.h" 17328718f2SHadi Asyrafi 18325eb35dSSieu Mun Tang /* Platform Type */ 19328718f2SHadi Asyrafi #define PLAT_SOCFPGA_STRATIX10 1 20328718f2SHadi Asyrafi #define PLAT_SOCFPGA_AGILEX 2 21325eb35dSSieu Mun Tang #define PLAT_SOCFPGA_N5X 3 226197dc98SJit Loon Lim #define PLAT_SOCFPGA_AGILEX5 4 236197dc98SJit Loon Lim #define SIMICS_RUN 1 246197dc98SJit Loon Lim #define MAX_IO_MTD_DEVICES U(1) 25ef8b05f5SSieu Mun Tang /* Boot Source configuration 26ef8b05f5SSieu Mun Tang * TODO: Shall consider "assert_numeric" in the future 27ef8b05f5SSieu Mun Tang */ 28ef8b05f5SSieu Mun Tang #if SOCFPGA_BOOT_SOURCE_NAND 29ef8b05f5SSieu Mun Tang #define BOOT_SOURCE BOOT_SOURCE_NAND 30ef8b05f5SSieu Mun Tang #elif SOCFPGA_BOOT_SOURCE_SDMMC 31ef8b05f5SSieu Mun Tang #define BOOT_SOURCE BOOT_SOURCE_SDMMC 32ef8b05f5SSieu Mun Tang #elif SOCFPGA_BOOT_SOURCE_QSPI 33ef8b05f5SSieu Mun Tang #define BOOT_SOURCE BOOT_SOURCE_QSPI 34ef8b05f5SSieu Mun Tang #else 35ef8b05f5SSieu Mun Tang #define BOOT_SOURCE BOOT_SOURCE_SDMMC 36ef8b05f5SSieu Mun Tang #endif 37328718f2SHadi Asyrafi 382db1e766SHadi Asyrafi /* sysmgr.boot_scratch_cold4 & 5 used for CPU release address for SPL */ 392db1e766SHadi Asyrafi #define PLAT_CPU_RELEASE_ADDR 0xffd12210 402db1e766SHadi Asyrafi 41328718f2SHadi Asyrafi /* Define next boot image name and offset */ 426197dc98SJit Loon Lim /* Get non-secure image entrypoint for BL33. Zephyr and Linux */ 431838a39aSSieu Mun Tang #ifdef PRELOADED_BL33_BASE 441838a39aSSieu Mun Tang #define PLAT_NS_IMAGE_OFFSET PRELOADED_BL33_BASE 451838a39aSSieu Mun Tang #else 466197dc98SJit Loon Lim #if PLATFORM_MODEL == PLAT_SOCFPGA_AGILEX5 476197dc98SJit Loon Lim #define PLAT_NS_IMAGE_OFFSET 0x80200000 486197dc98SJit Loon Lim #else 49389091a8STien Hock, Loh #define PLAT_NS_IMAGE_OFFSET 0x10000000 50b5c3a3fcSSieu Mun Tang #endif 511838a39aSSieu Mun Tang #endif /* #if PLATFORM_MODEL == PLAT_SOCFPGA_AGILEX5 */ 52328718f2SHadi Asyrafi 536cbe2c5dSMahesh Rao #define PLAT_QSPI_DATA_BASE (0x3C00000) 546cbe2c5dSMahesh Rao #define PLAT_NAND_DATA_BASE (0x0200000) 556cbe2c5dSMahesh Rao #define PLAT_SDMMC_DATA_BASE (0x0) 566cbe2c5dSMahesh Rao 57b5c3a3fcSSieu Mun Tang 58328718f2SHadi Asyrafi /******************************************************************************* 59328718f2SHadi Asyrafi * Platform binary types for linking 60328718f2SHadi Asyrafi ******************************************************************************/ 61328718f2SHadi Asyrafi #define PLATFORM_LINKER_FORMAT "elf64-littleaarch64" 62328718f2SHadi Asyrafi #define PLATFORM_LINKER_ARCH aarch64 63328718f2SHadi Asyrafi 64328718f2SHadi Asyrafi /* SoCFPGA supports up to 124GB RAM */ 65328718f2SHadi Asyrafi #define PLAT_PHY_ADDR_SPACE_SIZE (1ULL << 39) 66328718f2SHadi Asyrafi #define PLAT_VIRT_ADDR_SPACE_SIZE (1ULL << 39) 67328718f2SHadi Asyrafi 68328718f2SHadi Asyrafi 69328718f2SHadi Asyrafi /******************************************************************************* 70328718f2SHadi Asyrafi * Generic platform constants 71328718f2SHadi Asyrafi ******************************************************************************/ 72328718f2SHadi Asyrafi #define PLAT_SECONDARY_ENTRY_BASE 0x01f78bf0 73328718f2SHadi Asyrafi 74328718f2SHadi Asyrafi /* Size of cacheable stacks */ 75328718f2SHadi Asyrafi #define PLATFORM_STACK_SIZE 0x2000 76328718f2SHadi Asyrafi 77328718f2SHadi Asyrafi /* PSCI related constant */ 78328718f2SHadi Asyrafi #define PLAT_NUM_POWER_DOMAINS 5 79328718f2SHadi Asyrafi #define PLAT_MAX_PWR_LVL 1 80328718f2SHadi Asyrafi #define PLAT_MAX_RET_STATE 1 81328718f2SHadi Asyrafi #define PLAT_MAX_OFF_STATE 2 82dc2d366fSDeepika Bhavnani #define PLATFORM_SYSTEM_COUNT U(1) 83dc2d366fSDeepika Bhavnani #define PLATFORM_CLUSTER_COUNT U(1) 84dc2d366fSDeepika Bhavnani #define PLATFORM_CLUSTER0_CORE_COUNT U(4) 85dc2d366fSDeepika Bhavnani #define PLATFORM_CLUSTER1_CORE_COUNT U(0) 86328718f2SHadi Asyrafi #define PLATFORM_CORE_COUNT (PLATFORM_CLUSTER1_CORE_COUNT + \ 87328718f2SHadi Asyrafi PLATFORM_CLUSTER0_CORE_COUNT) 88dc2d366fSDeepika Bhavnani #define PLATFORM_MAX_CPUS_PER_CLUSTER U(4) 89328718f2SHadi Asyrafi 90328718f2SHadi Asyrafi /* Interrupt related constant */ 91328718f2SHadi Asyrafi 92328718f2SHadi Asyrafi #define INTEL_SOCFPGA_IRQ_SEC_PHY_TIMER 29 93328718f2SHadi Asyrafi 94328718f2SHadi Asyrafi #define INTEL_SOCFPGA_IRQ_SEC_SGI_0 8 95328718f2SHadi Asyrafi #define INTEL_SOCFPGA_IRQ_SEC_SGI_1 9 96328718f2SHadi Asyrafi #define INTEL_SOCFPGA_IRQ_SEC_SGI_2 10 97328718f2SHadi Asyrafi #define INTEL_SOCFPGA_IRQ_SEC_SGI_3 11 98328718f2SHadi Asyrafi #define INTEL_SOCFPGA_IRQ_SEC_SGI_4 12 99328718f2SHadi Asyrafi #define INTEL_SOCFPGA_IRQ_SEC_SGI_5 13 100328718f2SHadi Asyrafi #define INTEL_SOCFPGA_IRQ_SEC_SGI_6 14 101328718f2SHadi Asyrafi #define INTEL_SOCFPGA_IRQ_SEC_SGI_7 15 102328718f2SHadi Asyrafi 103328718f2SHadi Asyrafi #define TSP_IRQ_SEC_PHY_TIMER INTEL_SOCFPGA_IRQ_SEC_PHY_TIMER 104328718f2SHadi Asyrafi #define TSP_SEC_MEM_BASE BL32_BASE 105328718f2SHadi Asyrafi #define TSP_SEC_MEM_SIZE (BL32_LIMIT - BL32_BASE + 1) 106328718f2SHadi Asyrafi 107328718f2SHadi Asyrafi 108328718f2SHadi Asyrafi /******************************************************************************* 109328718f2SHadi Asyrafi * BL31 specific defines. 110328718f2SHadi Asyrafi ******************************************************************************/ 111328718f2SHadi Asyrafi /* 112328718f2SHadi Asyrafi * Put BL3-1 at the top of the Trusted SRAM (just below the shared memory, if 113328718f2SHadi Asyrafi * present). BL31_BASE is calculated using the current BL3-1 debug size plus a 114328718f2SHadi Asyrafi * little space for growth. 115328718f2SHadi Asyrafi */ 116328718f2SHadi Asyrafi 117328718f2SHadi Asyrafi #define FIRMWARE_WELCOME_STR "Booting Trusted Firmware\n" 118328718f2SHadi Asyrafi 119328718f2SHadi Asyrafi #define BL1_RO_BASE (0xffe00000) 120328718f2SHadi Asyrafi #define BL1_RO_LIMIT (0xffe0f000) 121328718f2SHadi Asyrafi #define BL1_RW_BASE (0xffe10000) 122328718f2SHadi Asyrafi #define BL1_RW_LIMIT (0xffe1ffff) 123328718f2SHadi Asyrafi #define BL1_RW_SIZE (0x14000) 124328718f2SHadi Asyrafi 125cf82aff0SHadi Asyrafi #define BL_DATA_LIMIT PLAT_HANDOFF_OFFSET 126cf82aff0SHadi Asyrafi 127cf82aff0SHadi Asyrafi #define PLAT_CPUID_RELEASE (BL_DATA_LIMIT - 16) 128cf82aff0SHadi Asyrafi #define PLAT_SEC_ENTRY (BL_DATA_LIMIT - 8) 129328718f2SHadi Asyrafi 1306197dc98SJit Loon Lim #define CMP_ENTRY 0xFFE3EFF8 1316197dc98SJit Loon Lim 1327f56f240SChee Hong Ang #define PLAT_SEC_WARM_ENTRY 0 1337f56f240SChee Hong Ang 134328718f2SHadi Asyrafi /******************************************************************************* 135328718f2SHadi Asyrafi * Platform specific page table and MMU setup constants 136328718f2SHadi Asyrafi ******************************************************************************/ 137328718f2SHadi Asyrafi #define MAX_XLAT_TABLES 8 138328718f2SHadi Asyrafi #define MAX_MMAP_REGIONS 16 139328718f2SHadi Asyrafi 140328718f2SHadi Asyrafi /******************************************************************************* 141328718f2SHadi Asyrafi * Declarations and constants to access the mailboxes safely. Each mailbox is 142328718f2SHadi Asyrafi * aligned on the biggest cache line size in the platform. This is known only 143328718f2SHadi Asyrafi * to the platform as it might have a combination of integrated and external 144328718f2SHadi Asyrafi * caches. Such alignment ensures that two maiboxes do not sit on the same cache 145328718f2SHadi Asyrafi * line at any cache level. They could belong to different cpus/clusters & 146328718f2SHadi Asyrafi * get written while being protected by different locks causing corruption of 147328718f2SHadi Asyrafi * a valid mailbox address. 148328718f2SHadi Asyrafi ******************************************************************************/ 149328718f2SHadi Asyrafi #define CACHE_WRITEBACK_SHIFT 6 150328718f2SHadi Asyrafi #define CACHE_WRITEBACK_GRANULE (1 << CACHE_WRITEBACK_SHIFT) 151328718f2SHadi Asyrafi 152328718f2SHadi Asyrafi /******************************************************************************* 153328718f2SHadi Asyrafi * UART related constants 154328718f2SHadi Asyrafi ******************************************************************************/ 155328718f2SHadi Asyrafi #define CRASH_CONSOLE_BASE PLAT_UART0_BASE 156447e699fSBoon Khai Ng #define PLAT_INTEL_UART_BASE PLAT_UART0_BASE 157328718f2SHadi Asyrafi 1588e53b2faSSieu Mun Tang #define PLAT_BAUDRATE (115200) 1598e53b2faSSieu Mun Tang #define PLAT_UART_CLOCK (100000000) 1601f1c0206SAbdul Halim, Muhammad Hadi Asyrafi 161328718f2SHadi Asyrafi /******************************************************************************* 162d603fd30STien Hock, Loh * PHY related constants 163d603fd30STien Hock, Loh ******************************************************************************/ 164d603fd30STien Hock, Loh 165d603fd30STien Hock, Loh #define EMAC0_PHY_MODE PHY_INTERFACE_MODE_RGMII 166d603fd30STien Hock, Loh #define EMAC1_PHY_MODE PHY_INTERFACE_MODE_RGMII 167d603fd30STien Hock, Loh #define EMAC2_PHY_MODE PHY_INTERFACE_MODE_RGMII 168d603fd30STien Hock, Loh 169d603fd30STien Hock, Loh /******************************************************************************* 1706197dc98SJit Loon Lim * GIC related constants 171328718f2SHadi Asyrafi ******************************************************************************/ 172328718f2SHadi Asyrafi #define PLAT_INTEL_SOCFPGA_GICD_BASE PLAT_GICD_BASE 173328718f2SHadi Asyrafi #define PLAT_INTEL_SOCFPGA_GICC_BASE PLAT_GICC_BASE 174328718f2SHadi Asyrafi 1756197dc98SJit Loon Lim /******************************************************************************* 1766197dc98SJit Loon Lim * System counter frequency related constants 1776197dc98SJit Loon Lim ******************************************************************************/ 1786197dc98SJit Loon Lim 179328718f2SHadi Asyrafi /* 180328718f2SHadi Asyrafi * Define a list of Group 1 Secure and Group 0 interrupts as per GICv3 181328718f2SHadi Asyrafi * terminology. On a GICv2 system or mode, the lists will be merged and treated 182328718f2SHadi Asyrafi * as Group 0 interrupts. 183328718f2SHadi Asyrafi */ 184328718f2SHadi Asyrafi #define PLAT_INTEL_SOCFPGA_G1S_IRQ_PROPS(grp) \ 185328718f2SHadi Asyrafi INTR_PROP_DESC(INTEL_SOCFPGA_IRQ_SEC_PHY_TIMER, \ 186328718f2SHadi Asyrafi GIC_HIGHEST_SEC_PRIORITY, grp, GIC_INTR_CFG_LEVEL), \ 187328718f2SHadi Asyrafi INTR_PROP_DESC(INTEL_SOCFPGA_IRQ_SEC_SGI_0, \ 188328718f2SHadi Asyrafi GIC_HIGHEST_SEC_PRIORITY, grp, GIC_INTR_CFG_EDGE), \ 189328718f2SHadi Asyrafi INTR_PROP_DESC(INTEL_SOCFPGA_IRQ_SEC_SGI_1, \ 190328718f2SHadi Asyrafi GIC_HIGHEST_SEC_PRIORITY, grp, GIC_INTR_CFG_EDGE), \ 191328718f2SHadi Asyrafi INTR_PROP_DESC(INTEL_SOCFPGA_IRQ_SEC_SGI_2, \ 192328718f2SHadi Asyrafi GIC_HIGHEST_SEC_PRIORITY, grp, GIC_INTR_CFG_EDGE), \ 193328718f2SHadi Asyrafi INTR_PROP_DESC(INTEL_SOCFPGA_IRQ_SEC_SGI_3, \ 194328718f2SHadi Asyrafi GIC_HIGHEST_SEC_PRIORITY, grp, GIC_INTR_CFG_EDGE), \ 195328718f2SHadi Asyrafi INTR_PROP_DESC(INTEL_SOCFPGA_IRQ_SEC_SGI_4, \ 196328718f2SHadi Asyrafi GIC_HIGHEST_SEC_PRIORITY, grp, GIC_INTR_CFG_EDGE), \ 197328718f2SHadi Asyrafi INTR_PROP_DESC(INTEL_SOCFPGA_IRQ_SEC_SGI_5, \ 198328718f2SHadi Asyrafi GIC_HIGHEST_SEC_PRIORITY, grp, GIC_INTR_CFG_EDGE), \ 199328718f2SHadi Asyrafi INTR_PROP_DESC(INTEL_SOCFPGA_IRQ_SEC_SGI_6, \ 200328718f2SHadi Asyrafi GIC_HIGHEST_SEC_PRIORITY, grp, GIC_INTR_CFG_EDGE), \ 201328718f2SHadi Asyrafi INTR_PROP_DESC(INTEL_SOCFPGA_IRQ_SEC_SGI_7, \ 202328718f2SHadi Asyrafi GIC_HIGHEST_SEC_PRIORITY, grp, GIC_INTR_CFG_EDGE) 203328718f2SHadi Asyrafi 204328718f2SHadi Asyrafi #define PLAT_INTEL_SOCFPGA_G0_IRQ_PROPS(grp) 205328718f2SHadi Asyrafi 206328718f2SHadi Asyrafi #define MAX_IO_HANDLES 4 207328718f2SHadi Asyrafi #define MAX_IO_DEVICES 4 208328718f2SHadi Asyrafi #define MAX_IO_BLOCK_DEVICES 2 209328718f2SHadi Asyrafi 210*204d5e67SSieu Mun Tang /* Define this, to support the SiPSVC V3 implementation. */ 211*204d5e67SSieu Mun Tang #define SIP_SVC_V3 1 212*204d5e67SSieu Mun Tang 21323f31d39SHadi Asyrafi #ifndef __ASSEMBLER__ 21423f31d39SHadi Asyrafi struct socfpga_bl31_params { 21523f31d39SHadi Asyrafi param_header_t h; 21623f31d39SHadi Asyrafi image_info_t *bl31_image_info; 21723f31d39SHadi Asyrafi entry_point_info_t *bl32_ep_info; 21823f31d39SHadi Asyrafi image_info_t *bl32_image_info; 21923f31d39SHadi Asyrafi entry_point_info_t *bl33_ep_info; 22023f31d39SHadi Asyrafi image_info_t *bl33_image_info; 22123f31d39SHadi Asyrafi }; 22223f31d39SHadi Asyrafi #endif 22323f31d39SHadi Asyrafi 224328718f2SHadi Asyrafi #endif /* PLATFORM_DEF_H */ 225