1*011a4c2fSBiju Das /* 2*011a4c2fSBiju Das * Copyright (c) 2015-2020, Renesas Electronics Corporation. All rights reserved. 3*011a4c2fSBiju Das * 4*011a4c2fSBiju Das * SPDX-License-Identifier: BSD-3-Clause 5*011a4c2fSBiju Das */ 6*011a4c2fSBiju Das 7*011a4c2fSBiju Das #ifndef PLATFORM_DEF_H 8*011a4c2fSBiju Das #define PLATFORM_DEF_H 9*011a4c2fSBiju Das 10*011a4c2fSBiju Das #ifndef __ASSEMBLER__ 11*011a4c2fSBiju Das #include <stdlib.h> 12*011a4c2fSBiju Das #endif 13*011a4c2fSBiju Das 14*011a4c2fSBiju Das #include <arch.h> 15*011a4c2fSBiju Das 16*011a4c2fSBiju Das #include "rcar_def.h" 17*011a4c2fSBiju Das 18*011a4c2fSBiju Das /******************************************************************************* 19*011a4c2fSBiju Das * Platform binary types for linking 20*011a4c2fSBiju Das ******************************************************************************/ 21*011a4c2fSBiju Das #define PLATFORM_LINKER_FORMAT "elf64-littleaarch64" 22*011a4c2fSBiju Das #define PLATFORM_LINKER_ARCH aarch64 23*011a4c2fSBiju Das 24*011a4c2fSBiju Das /******************************************************************************* 25*011a4c2fSBiju Das * Generic platform constants 26*011a4c2fSBiju Das ******************************************************************************/ 27*011a4c2fSBiju Das #define FIRMWARE_WELCOME_STR "Booting Rcar-gen3 Trusted Firmware\n" 28*011a4c2fSBiju Das 29*011a4c2fSBiju Das /* Size of cacheable stacks */ 30*011a4c2fSBiju Das #if IMAGE_BL1 31*011a4c2fSBiju Das #if TRUSTED_BOARD_BOOT 32*011a4c2fSBiju Das #define PLATFORM_STACK_SIZE U(0x1000) 33*011a4c2fSBiju Das #else 34*011a4c2fSBiju Das #define PLATFORM_STACK_SIZE U(0x440) 35*011a4c2fSBiju Das #endif 36*011a4c2fSBiju Das #elif IMAGE_BL2 37*011a4c2fSBiju Das #if TRUSTED_BOARD_BOOT 38*011a4c2fSBiju Das #define PLATFORM_STACK_SIZE U(0x1000) 39*011a4c2fSBiju Das #else 40*011a4c2fSBiju Das #define PLATFORM_STACK_SIZE U(0x400) 41*011a4c2fSBiju Das #endif 42*011a4c2fSBiju Das #elif IMAGE_BL31 43*011a4c2fSBiju Das #define PLATFORM_STACK_SIZE U(0x400) 44*011a4c2fSBiju Das #elif IMAGE_BL32 45*011a4c2fSBiju Das #define PLATFORM_STACK_SIZE U(0x440) 46*011a4c2fSBiju Das #endif 47*011a4c2fSBiju Das 48*011a4c2fSBiju Das #define BL332_IMAGE_ID (NS_BL2U_IMAGE_ID + 1) 49*011a4c2fSBiju Das #define BL333_IMAGE_ID (NS_BL2U_IMAGE_ID + 2) 50*011a4c2fSBiju Das #define BL334_IMAGE_ID (NS_BL2U_IMAGE_ID + 3) 51*011a4c2fSBiju Das #define BL335_IMAGE_ID (NS_BL2U_IMAGE_ID + 4) 52*011a4c2fSBiju Das #define BL336_IMAGE_ID (NS_BL2U_IMAGE_ID + 5) 53*011a4c2fSBiju Das #define BL337_IMAGE_ID (NS_BL2U_IMAGE_ID + 6) 54*011a4c2fSBiju Das #define BL338_IMAGE_ID (NS_BL2U_IMAGE_ID + 7) 55*011a4c2fSBiju Das 56*011a4c2fSBiju Das #define BL332_KEY_CERT_ID (NS_BL2U_IMAGE_ID + 8) 57*011a4c2fSBiju Das #define BL333_KEY_CERT_ID (NS_BL2U_IMAGE_ID + 9) 58*011a4c2fSBiju Das #define BL334_KEY_CERT_ID (NS_BL2U_IMAGE_ID + 10) 59*011a4c2fSBiju Das #define BL335_KEY_CERT_ID (NS_BL2U_IMAGE_ID + 11) 60*011a4c2fSBiju Das #define BL336_KEY_CERT_ID (NS_BL2U_IMAGE_ID + 12) 61*011a4c2fSBiju Das #define BL337_KEY_CERT_ID (NS_BL2U_IMAGE_ID + 13) 62*011a4c2fSBiju Das #define BL338_KEY_CERT_ID (NS_BL2U_IMAGE_ID + 14) 63*011a4c2fSBiju Das 64*011a4c2fSBiju Das #define BL332_CERT_ID (NS_BL2U_IMAGE_ID + 15) 65*011a4c2fSBiju Das #define BL333_CERT_ID (NS_BL2U_IMAGE_ID + 16) 66*011a4c2fSBiju Das #define BL334_CERT_ID (NS_BL2U_IMAGE_ID + 17) 67*011a4c2fSBiju Das #define BL335_CERT_ID (NS_BL2U_IMAGE_ID + 18) 68*011a4c2fSBiju Das #define BL336_CERT_ID (NS_BL2U_IMAGE_ID + 19) 69*011a4c2fSBiju Das #define BL337_CERT_ID (NS_BL2U_IMAGE_ID + 20) 70*011a4c2fSBiju Das #define BL338_CERT_ID (NS_BL2U_IMAGE_ID + 21) 71*011a4c2fSBiju Das 72*011a4c2fSBiju Das /* io drivers id */ 73*011a4c2fSBiju Das #define FLASH_DEV_ID U(0) 74*011a4c2fSBiju Das #define EMMC_DEV_ID U(1) 75*011a4c2fSBiju Das 76*011a4c2fSBiju Das /* 77*011a4c2fSBiju Das * R-Car H3 Cortex-A57 78*011a4c2fSBiju Das * L1:I/48KB(16KBx3way) D/32KB(16KBx2way) L2:2MB(128KBx16way) 79*011a4c2fSBiju Das * Cortex-A53 80*011a4c2fSBiju Das * L1:I/32KB(16KBx2way) D/32KB(8KBx4way) L2:512KB(32KBx16way) 81*011a4c2fSBiju Das */ 82*011a4c2fSBiju Das #define PLATFORM_CACHE_LINE_SIZE 64 83*011a4c2fSBiju Das #define PLATFORM_CLUSTER_COUNT U(2) 84*011a4c2fSBiju Das #define PLATFORM_CLUSTER0_CORE_COUNT U(4) 85*011a4c2fSBiju Das #define PLATFORM_CLUSTER1_CORE_COUNT U(4) 86*011a4c2fSBiju Das #define PLATFORM_CORE_COUNT (PLATFORM_CLUSTER1_CORE_COUNT + \ 87*011a4c2fSBiju Das PLATFORM_CLUSTER0_CORE_COUNT) 88*011a4c2fSBiju Das #define PLATFORM_MAX_CPUS_PER_CLUSTER U(4) 89*011a4c2fSBiju Das 90*011a4c2fSBiju Das #define PLAT_MAX_PWR_LVL MPIDR_AFFLVL2 91*011a4c2fSBiju Das #define PLAT_NUM_PWR_DOMAINS (PLATFORM_CORE_COUNT + \ 92*011a4c2fSBiju Das PLATFORM_CLUSTER_COUNT + 1) 93*011a4c2fSBiju Das 94*011a4c2fSBiju Das #define PLAT_MAX_RET_STATE U(1) 95*011a4c2fSBiju Das #define PLAT_MAX_OFF_STATE U(2) 96*011a4c2fSBiju Das 97*011a4c2fSBiju Das #define MAX_IO_DEVICES U(3) 98*011a4c2fSBiju Das #define MAX_IO_HANDLES U(4) 99*011a4c2fSBiju Das 100*011a4c2fSBiju Das /* 101*011a4c2fSBiju Das ****************************************************************************** 102*011a4c2fSBiju Das * BL2 specific defines. 103*011a4c2fSBiju Das ****************************************************************************** 104*011a4c2fSBiju Das * Put BL2 just below BL3-1. BL2_BASE is calculated using the current BL2 debug 105*011a4c2fSBiju Das * size plus a little space for growth. 106*011a4c2fSBiju Das */ 107*011a4c2fSBiju Das #define RCAR_SYSRAM_BASE U(0xE6300000) 108*011a4c2fSBiju Das #if (RCAR_LSI == RCAR_E3) || (RCAR_LSI == RCAR_D3) 109*011a4c2fSBiju Das #define BL2_LIMIT U(0xE6320000) 110*011a4c2fSBiju Das #else 111*011a4c2fSBiju Das #define BL2_LIMIT U(0xE6360000) 112*011a4c2fSBiju Das #endif 113*011a4c2fSBiju Das 114*011a4c2fSBiju Das #if (RCAR_LSI == RCAR_E3) || (RCAR_LSI == RCAR_D3) 115*011a4c2fSBiju Das #define BL2_BASE U(0xE6304000) 116*011a4c2fSBiju Das #define BL2_IMAGE_LIMIT U(0xE6318000) 117*011a4c2fSBiju Das #elif (RCAR_LSI == RCAR_V3M) 118*011a4c2fSBiju Das #define BL2_BASE U(0xE6344000) 119*011a4c2fSBiju Das #define BL2_IMAGE_LIMIT U(0xE636E800) 120*011a4c2fSBiju Das #else 121*011a4c2fSBiju Das #define BL2_BASE U(0xE6304000) 122*011a4c2fSBiju Das #define BL2_IMAGE_LIMIT U(0xE632E800) 123*011a4c2fSBiju Das #endif 124*011a4c2fSBiju Das #define RCAR_SYSRAM_SIZE (BL2_BASE - RCAR_SYSRAM_BASE) 125*011a4c2fSBiju Das 126*011a4c2fSBiju Das /* 127*011a4c2fSBiju Das ****************************************************************************** 128*011a4c2fSBiju Das * BL31 specific defines. 129*011a4c2fSBiju Das ****************************************************************************** 130*011a4c2fSBiju Das * Put BL3-1 at the top of the Trusted SRAM. BL31_BASE is calculated using the 131*011a4c2fSBiju Das * current BL3-1 debug size plus a little space for growth. 132*011a4c2fSBiju Das */ 133*011a4c2fSBiju Das #define BL31_BASE (RCAR_TRUSTED_SRAM_BASE) 134*011a4c2fSBiju Das #define BL31_LIMIT (RCAR_TRUSTED_SRAM_BASE + \ 135*011a4c2fSBiju Das RCAR_TRUSTED_SRAM_SIZE) 136*011a4c2fSBiju Das #define RCAR_BL31_LOG_BASE (0x44040000) 137*011a4c2fSBiju Das #define RCAR_BL31_SDRAM_BTM (RCAR_BL31_LOG_BASE + 0x14000) 138*011a4c2fSBiju Das #define RCAR_BL31_LOG_SIZE (RCAR_BL31_SDRAM_BTM - RCAR_BL31_LOG_BASE) 139*011a4c2fSBiju Das #define BL31_SRAM_BASE (DEVICE_SRAM_BASE) 140*011a4c2fSBiju Das #define BL31_SRAM_LIMIT (DEVICE_SRAM_BASE + DEVICE_SRAM_SIZE) 141*011a4c2fSBiju Das 142*011a4c2fSBiju Das /******************************************************************************* 143*011a4c2fSBiju Das * BL32 specific defines. 144*011a4c2fSBiju Das ******************************************************************************/ 145*011a4c2fSBiju Das #ifndef SPD_NONE 146*011a4c2fSBiju Das #define BL32_BASE U(0x44100000) 147*011a4c2fSBiju Das #define BL32_LIMIT (BL32_BASE + U(0x100000)) 148*011a4c2fSBiju Das #endif 149*011a4c2fSBiju Das 150*011a4c2fSBiju Das /******************************************************************************* 151*011a4c2fSBiju Das * BL33 152*011a4c2fSBiju Das ******************************************************************************/ 153*011a4c2fSBiju Das #define BL33_BASE DRAM1_NS_BASE 154*011a4c2fSBiju Das 155*011a4c2fSBiju Das 156*011a4c2fSBiju Das /******************************************************************************* 157*011a4c2fSBiju Das * Platform specific page table and MMU setup constants 158*011a4c2fSBiju Das ******************************************************************************/ 159*011a4c2fSBiju Das #if IMAGE_BL1 160*011a4c2fSBiju Das #define MAX_XLAT_TABLES U(2) 161*011a4c2fSBiju Das #elif IMAGE_BL2 162*011a4c2fSBiju Das #define MAX_XLAT_TABLES U(5) 163*011a4c2fSBiju Das #elif IMAGE_BL31 164*011a4c2fSBiju Das #define MAX_XLAT_TABLES U(4) 165*011a4c2fSBiju Das #elif IMAGE_BL32 166*011a4c2fSBiju Das #define MAX_XLAT_TABLES U(3) 167*011a4c2fSBiju Das #endif 168*011a4c2fSBiju Das 169*011a4c2fSBiju Das #if IMAGE_BL2 170*011a4c2fSBiju Das #define PLAT_PHY_ADDR_SPACE_SIZE (ULL(1) << 40) 171*011a4c2fSBiju Das #define PLAT_VIRT_ADDR_SPACE_SIZE (ULL(1) << 40) 172*011a4c2fSBiju Das #else 173*011a4c2fSBiju Das #define PLAT_PHY_ADDR_SPACE_SIZE (ULL(1) << 32) 174*011a4c2fSBiju Das #define PLAT_VIRT_ADDR_SPACE_SIZE (ULL(1) << 32) 175*011a4c2fSBiju Das #endif 176*011a4c2fSBiju Das 177*011a4c2fSBiju Das #define MAX_MMAP_REGIONS (RCAR_MMAP_ENTRIES + RCAR_BL_REGIONS) 178*011a4c2fSBiju Das 179*011a4c2fSBiju Das /******************************************************************************* 180*011a4c2fSBiju Das * Declarations and constants to access the mailboxes safely. Each mailbox is 181*011a4c2fSBiju Das * aligned on the biggest cache line size in the platform. This is known only 182*011a4c2fSBiju Das * to the platform as it might have a combination of integrated and external 183*011a4c2fSBiju Das * caches. Such alignment ensures that two mailboxes do not sit on the same cache 184*011a4c2fSBiju Das * line at any cache level. They could belong to different cpus/clusters & 185*011a4c2fSBiju Das * get written while being protected by different locks causing corruption of 186*011a4c2fSBiju Das * a valid mailbox address. 187*011a4c2fSBiju Das ******************************************************************************/ 188*011a4c2fSBiju Das #define CACHE_WRITEBACK_SHIFT (6) 189*011a4c2fSBiju Das #define CACHE_WRITEBACK_GRANULE (1 << CACHE_WRITEBACK_SHIFT) 190*011a4c2fSBiju Das 191*011a4c2fSBiju Das /******************************************************************************* 192*011a4c2fSBiju Das * Size of the per-cpu data in bytes that should be reserved in the generic 193*011a4c2fSBiju Das * per-cpu data structure for the RCAR port. 194*011a4c2fSBiju Das ******************************************************************************/ 195*011a4c2fSBiju Das #if !USE_COHERENT_MEM 196*011a4c2fSBiju Das #define PLAT_PCPU_DATA_SIZE (2) 197*011a4c2fSBiju Das #endif 198*011a4c2fSBiju Das 199*011a4c2fSBiju Das #endif /* PLATFORM_DEF_H */ 200