1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (c) 2015-2019, ARM Limited and Contributors. All rights reserved. 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu */ 6*91f16700Schasinglulu 7*91f16700Schasinglulu #ifndef PLATFORM_DEF_H 8*91f16700Schasinglulu #define PLATFORM_DEF_H 9*91f16700Schasinglulu 10*91f16700Schasinglulu #include <arch.h> 11*91f16700Schasinglulu #include <common/tbbr/tbbr_img_def.h> 12*91f16700Schasinglulu #include <lib/utils_def.h> 13*91f16700Schasinglulu #include <plat/common/common_def.h> 14*91f16700Schasinglulu 15*91f16700Schasinglulu #include "rpi_hw.h" 16*91f16700Schasinglulu 17*91f16700Schasinglulu /* Special value used to verify platform parameters from BL2 to BL31 */ 18*91f16700Schasinglulu #define RPI3_BL31_PLAT_PARAM_VAL ULL(0x0F1E2D3C4B5A6978) 19*91f16700Schasinglulu 20*91f16700Schasinglulu #define PLATFORM_STACK_SIZE ULL(0x1000) 21*91f16700Schasinglulu 22*91f16700Schasinglulu #define PLATFORM_MAX_CPUS_PER_CLUSTER U(4) 23*91f16700Schasinglulu #define PLATFORM_CLUSTER_COUNT U(1) 24*91f16700Schasinglulu #define PLATFORM_CLUSTER0_CORE_COUNT PLATFORM_MAX_CPUS_PER_CLUSTER 25*91f16700Schasinglulu #define PLATFORM_CORE_COUNT PLATFORM_CLUSTER0_CORE_COUNT 26*91f16700Schasinglulu 27*91f16700Schasinglulu #define RPI_PRIMARY_CPU U(0) 28*91f16700Schasinglulu 29*91f16700Schasinglulu #define PLAT_MAX_PWR_LVL MPIDR_AFFLVL1 30*91f16700Schasinglulu #define PLAT_NUM_PWR_DOMAINS (PLATFORM_CLUSTER_COUNT + \ 31*91f16700Schasinglulu PLATFORM_CORE_COUNT) 32*91f16700Schasinglulu 33*91f16700Schasinglulu #define PLAT_MAX_RET_STATE U(1) 34*91f16700Schasinglulu #define PLAT_MAX_OFF_STATE U(2) 35*91f16700Schasinglulu 36*91f16700Schasinglulu /* Local power state for power domains in Run state. */ 37*91f16700Schasinglulu #define PLAT_LOCAL_STATE_RUN U(0) 38*91f16700Schasinglulu /* Local power state for retention. Valid only for CPU power domains */ 39*91f16700Schasinglulu #define PLAT_LOCAL_STATE_RET U(1) 40*91f16700Schasinglulu /* 41*91f16700Schasinglulu * Local power state for OFF/power-down. Valid for CPU and cluster power 42*91f16700Schasinglulu * domains. 43*91f16700Schasinglulu */ 44*91f16700Schasinglulu #define PLAT_LOCAL_STATE_OFF U(2) 45*91f16700Schasinglulu 46*91f16700Schasinglulu /* 47*91f16700Schasinglulu * Macros used to parse state information from State-ID if it is using the 48*91f16700Schasinglulu * recommended encoding for State-ID. 49*91f16700Schasinglulu */ 50*91f16700Schasinglulu #define PLAT_LOCAL_PSTATE_WIDTH U(4) 51*91f16700Schasinglulu #define PLAT_LOCAL_PSTATE_MASK ((U(1) << PLAT_LOCAL_PSTATE_WIDTH) - 1) 52*91f16700Schasinglulu 53*91f16700Schasinglulu /* 54*91f16700Schasinglulu * Some data must be aligned on the biggest cache line size in the platform. 55*91f16700Schasinglulu * This is known only to the platform as it might have a combination of 56*91f16700Schasinglulu * integrated and external caches. 57*91f16700Schasinglulu */ 58*91f16700Schasinglulu #define CACHE_WRITEBACK_SHIFT U(6) 59*91f16700Schasinglulu #define CACHE_WRITEBACK_GRANULE (U(1) << CACHE_WRITEBACK_SHIFT) 60*91f16700Schasinglulu 61*91f16700Schasinglulu /* 62*91f16700Schasinglulu * I/O registers. 63*91f16700Schasinglulu */ 64*91f16700Schasinglulu #define DEVICE0_BASE RPI_IO_BASE 65*91f16700Schasinglulu #define DEVICE0_SIZE RPI_IO_SIZE 66*91f16700Schasinglulu 67*91f16700Schasinglulu /* 68*91f16700Schasinglulu * Mailbox to control the secondary cores. All secondary cores are held in a 69*91f16700Schasinglulu * wait loop in cold boot. To release them perform the following steps (plus 70*91f16700Schasinglulu * any additional barriers that may be needed): 71*91f16700Schasinglulu * 72*91f16700Schasinglulu * uint64_t *entrypoint = (uint64_t *)PLAT_RPI3_TM_ENTRYPOINT; 73*91f16700Schasinglulu * *entrypoint = ADDRESS_TO_JUMP_TO; 74*91f16700Schasinglulu * 75*91f16700Schasinglulu * uint64_t *mbox_entry = (uint64_t *)PLAT_RPI3_TM_HOLD_BASE; 76*91f16700Schasinglulu * mbox_entry[cpu_id] = PLAT_RPI3_TM_HOLD_STATE_GO; 77*91f16700Schasinglulu * 78*91f16700Schasinglulu * sev(); 79*91f16700Schasinglulu */ 80*91f16700Schasinglulu /* The secure entry point to be used on warm reset by all CPUs. */ 81*91f16700Schasinglulu #define PLAT_RPI3_TM_ENTRYPOINT 0x100 82*91f16700Schasinglulu #define PLAT_RPI3_TM_ENTRYPOINT_SIZE ULL(8) 83*91f16700Schasinglulu 84*91f16700Schasinglulu /* Hold entries for each CPU. */ 85*91f16700Schasinglulu #define PLAT_RPI3_TM_HOLD_BASE (PLAT_RPI3_TM_ENTRYPOINT + \ 86*91f16700Schasinglulu PLAT_RPI3_TM_ENTRYPOINT_SIZE) 87*91f16700Schasinglulu #define PLAT_RPI3_TM_HOLD_ENTRY_SIZE ULL(8) 88*91f16700Schasinglulu #define PLAT_RPI3_TM_HOLD_SIZE (PLAT_RPI3_TM_HOLD_ENTRY_SIZE * \ 89*91f16700Schasinglulu PLATFORM_CORE_COUNT) 90*91f16700Schasinglulu 91*91f16700Schasinglulu #define PLAT_RPI3_TRUSTED_MAILBOX_SIZE (PLAT_RPI3_TM_ENTRYPOINT_SIZE + \ 92*91f16700Schasinglulu PLAT_RPI3_TM_HOLD_SIZE) 93*91f16700Schasinglulu 94*91f16700Schasinglulu #define PLAT_RPI3_TM_HOLD_STATE_WAIT ULL(0) 95*91f16700Schasinglulu #define PLAT_RPI3_TM_HOLD_STATE_GO ULL(1) 96*91f16700Schasinglulu #define PLAT_RPI3_TM_HOLD_STATE_BSP_OFF ULL(2) 97*91f16700Schasinglulu 98*91f16700Schasinglulu /* 99*91f16700Schasinglulu * BL31 specific defines. 100*91f16700Schasinglulu * 101*91f16700Schasinglulu * Put BL31 at the top of the Trusted SRAM. BL31_BASE is calculated using the 102*91f16700Schasinglulu * current BL31 debug size plus a little space for growth. 103*91f16700Schasinglulu */ 104*91f16700Schasinglulu #define PLAT_MAX_BL31_SIZE ULL(0x80000) 105*91f16700Schasinglulu 106*91f16700Schasinglulu #define BL31_BASE ULL(0x1000) 107*91f16700Schasinglulu #define BL31_LIMIT ULL(0x80000) 108*91f16700Schasinglulu #define BL31_PROGBITS_LIMIT ULL(0x80000) 109*91f16700Schasinglulu 110*91f16700Schasinglulu #define SEC_SRAM_ID 0 111*91f16700Schasinglulu #define SEC_DRAM_ID 1 112*91f16700Schasinglulu 113*91f16700Schasinglulu /* 114*91f16700Schasinglulu * Other memory-related defines. 115*91f16700Schasinglulu */ 116*91f16700Schasinglulu #define PLAT_PHY_ADDR_SPACE_SIZE (ULL(1) << 32) 117*91f16700Schasinglulu #define PLAT_VIRT_ADDR_SPACE_SIZE (ULL(1) << 32) 118*91f16700Schasinglulu 119*91f16700Schasinglulu #define MAX_MMAP_REGIONS 8 120*91f16700Schasinglulu #define MAX_XLAT_TABLES 4 121*91f16700Schasinglulu 122*91f16700Schasinglulu #define MAX_IO_DEVICES U(3) 123*91f16700Schasinglulu #define MAX_IO_HANDLES U(4) 124*91f16700Schasinglulu 125*91f16700Schasinglulu #define MAX_IO_BLOCK_DEVICES U(1) 126*91f16700Schasinglulu 127*91f16700Schasinglulu /* 128*91f16700Schasinglulu * Serial-related constants. 129*91f16700Schasinglulu */ 130*91f16700Schasinglulu #define PLAT_RPI_MINI_UART_BASE RPI4_MINI_UART_BASE 131*91f16700Schasinglulu #define PLAT_RPI_PL011_UART_BASE RPI4_PL011_UART_BASE 132*91f16700Schasinglulu #define PLAT_RPI_PL011_UART_CLOCK RPI4_PL011_UART_CLOCK 133*91f16700Schasinglulu #define PLAT_RPI_UART_BAUDRATE ULL(115200) 134*91f16700Schasinglulu 135*91f16700Schasinglulu /* 136*91f16700Schasinglulu * System counter 137*91f16700Schasinglulu */ 138*91f16700Schasinglulu #define SYS_COUNTER_FREQ_IN_TICKS ULL(54000000) 139*91f16700Schasinglulu 140*91f16700Schasinglulu #endif /* PLATFORM_DEF_H */ 141