1936072edSJun Nie /* 2936072edSJun Nie * Copyright (c) 2018-2019, ARM Limited and Contributors. All rights reserved. 3936072edSJun Nie * 4936072edSJun Nie * SPDX-License-Identifier: BSD-3-Clause 5936072edSJun Nie */ 6936072edSJun Nie 7936072edSJun Nie #ifndef PLATFORM_DEF_H 8936072edSJun Nie #define PLATFORM_DEF_H 9936072edSJun Nie 10936072edSJun Nie #include <arch.h> 11936072edSJun Nie #include <common/tbbr/tbbr_img_def.h> 12936072edSJun Nie #include <plat/common/common_def.h> 13936072edSJun Nie 14936072edSJun Nie #define PLATFORM_STACK_SIZE 0x1000 15936072edSJun Nie 167a57188bSDeepika Bhavnani #define PLATFORM_MAX_CPUS_PER_CLUSTER U(2) 177a57188bSDeepika Bhavnani #define PLATFORM_CLUSTER_COUNT U(1) 18936072edSJun Nie #define PLATFORM_CLUSTER0_CORE_COUNT PLATFORM_MAX_CPUS_PER_CLUSTER 19936072edSJun Nie 20936072edSJun Nie #define PLATFORM_CORE_COUNT PLATFORM_CLUSTER0_CORE_COUNT 21936072edSJun Nie 227a57188bSDeepika Bhavnani #define PICOPI_PRIMARY_CPU U(0) 23936072edSJun Nie 24936072edSJun Nie #define PLAT_NUM_PWR_DOMAINS (PLATFORM_CLUSTER_COUNT + \ 25936072edSJun Nie PLATFORM_CORE_COUNT) 26936072edSJun Nie #define PLAT_MAX_PWR_LVL MPIDR_AFFLVL1 27936072edSJun Nie 28936072edSJun Nie #define PLAT_MAX_RET_STATE 1 29936072edSJun Nie #define PLAT_MAX_OFF_STATE 2 30936072edSJun Nie 31936072edSJun Nie /* Local power state for power domains in Run state. */ 32936072edSJun Nie #define PLAT_LOCAL_STATE_RUN 0 33936072edSJun Nie 34936072edSJun Nie /* Local power state for retention. Valid only for CPU power domains */ 35936072edSJun Nie #define PLAT_LOCAL_STATE_RET 1 36936072edSJun Nie 37936072edSJun Nie /* 38936072edSJun Nie * Local power state for OFF/power-down. Valid for CPU and cluster power 39936072edSJun Nie * domains. 40936072edSJun Nie */ 41936072edSJun Nie #define PLAT_LOCAL_STATE_OFF 2 42936072edSJun Nie 43936072edSJun Nie /* 44936072edSJun Nie * Macros used to parse state information from State-ID if it is using the 45936072edSJun Nie * recommended encoding for State-ID. 46936072edSJun Nie */ 47936072edSJun Nie #define PLAT_LOCAL_PSTATE_WIDTH 4 48936072edSJun Nie #define PLAT_LOCAL_PSTATE_MASK ((1 << PLAT_LOCAL_PSTATE_WIDTH) - 1) 49936072edSJun Nie 50936072edSJun Nie /* 51936072edSJun Nie * Some data must be aligned on the biggest cache line size in the platform. 52936072edSJun Nie * This is known only to the platform as it might have a combination of 53936072edSJun Nie * integrated and external caches. 54936072edSJun Nie * i.MX7 has a 32 byte cacheline size 55936072edSJun Nie * i.MX 7Dual Applications Processor Reference Manual, Rev. 1, 01/2018 pg 298 56936072edSJun Nie */ 57936072edSJun Nie #define CACHE_WRITEBACK_SHIFT 4 58936072edSJun Nie #define CACHE_WRITEBACK_GRANULE (1 << CACHE_WRITEBACK_SHIFT) 59936072edSJun Nie 60936072edSJun Nie /* 61936072edSJun Nie * Partition memory into secure BootROM, OCRAM_S, non-secure DRAM, secure DRAM 62936072edSJun Nie */ 63936072edSJun Nie #define BOOT_ROM_BASE 0x00000000 64936072edSJun Nie #define BOOT_ROM_SIZE 0x00020000 65936072edSJun Nie 66936072edSJun Nie #define OCRAM_S_BASE 0x00180000 67936072edSJun Nie #define OCRAM_S_SIZE 0x00008000 68936072edSJun Nie 69936072edSJun Nie /* Controller maps 2GB, board contains 512 MB. 0x80000000 - 0xa0000000 */ 70936072edSJun Nie #define DRAM_BASE 0x80000000 71936072edSJun Nie #define DRAM_SIZE 0x20000000 72936072edSJun Nie #define DRAM_LIMIT (DRAM_BASE + DRAM_SIZE) 73936072edSJun Nie 74936072edSJun Nie /* Place OPTEE at minus 32 MB from the end of memory. 0x9e000000 - 0xa0000000 */ 75936072edSJun Nie #define IMX7_OPTEE_SIZE 0x02000000 76936072edSJun Nie #define IMX7_OPTEE_BASE (DRAM_LIMIT - IMX7_OPTEE_SIZE) 77936072edSJun Nie #define IMX7_OPTEE_LIMIT (IMX7_OPTEE_BASE + IMX7_OPTEE_SIZE) 78936072edSJun Nie 79936072edSJun Nie /* Place ATF directly beneath OPTEE. 0x9df00000 - 0x9e000000 */ 80936072edSJun Nie #define BL2_RAM_SIZE 0x00100000 81936072edSJun Nie #define BL2_RAM_BASE (IMX7_OPTEE_BASE - BL2_RAM_SIZE) 82936072edSJun Nie #define BL2_RAM_LIMIT (BL2_RAM_BASE + BL2_RAM_SIZE) 83936072edSJun Nie 84936072edSJun Nie /* Optional Mailbox. Only relevant on i.MX7D. 0x9deff000 - 0x9df00000*/ 85936072edSJun Nie #define SHARED_RAM_SIZE 0x00001000 86936072edSJun Nie #define SHARED_RAM_BASE (BL2_RAM_BASE - SHARED_RAM_SIZE) 87936072edSJun Nie #define SHARED_RAM_LIMIT (SHARED_RAM_BASE + SHARED_RAM_SIZE) 88936072edSJun Nie 89936072edSJun Nie /* Define the absolute location of u-boot 0x87800000 - 0x87900000 */ 90936072edSJun Nie #define IMX7_UBOOT_SIZE 0x00100000 91936072edSJun Nie #define IMX7_UBOOT_BASE (DRAM_BASE + 0x7800000) 92936072edSJun Nie #define IMX7_UBOOT_LIMIT (IMX7_UBOOT_BASE + IMX7_UBOOT_SIZE) 93936072edSJun Nie 94936072edSJun Nie /* Define FIP image absolute location 0x80000000 - 0x80100000 */ 95*81d1d86cSYing-Chun Liu (PaulLiu) #define IMX_FIP_SIZE 0x00100000 96*81d1d86cSYing-Chun Liu (PaulLiu) #define IMX_FIP_BASE (DRAM_BASE) 97*81d1d86cSYing-Chun Liu (PaulLiu) #define IMX_FIP_LIMIT (IMX_FIP_BASE + IMX_FIP_SIZE) 98936072edSJun Nie 99936072edSJun Nie /* Define FIP image location at 1MB offset */ 100*81d1d86cSYing-Chun Liu (PaulLiu) #define IMX_FIP_MMC_BASE (1024 * 1024) 101936072edSJun Nie 102936072edSJun Nie /* Define the absolute location of DTB 0x83000000 - 0x83100000 */ 103936072edSJun Nie #define IMX7_DTB_SIZE 0x00100000 104936072edSJun Nie #define IMX7_DTB_BASE (DRAM_BASE + 0x03000000) 105936072edSJun Nie #define IMX7_DTB_LIMIT (IMX7_DTB_BASE + IMX7_DTB_SIZE) 106936072edSJun Nie 107936072edSJun Nie /* Define the absolute location of DTB Overlay 0x83100000 - 0x83101000 */ 108936072edSJun Nie #define IMX7_DTB_OVERLAY_SIZE 0x00001000 109936072edSJun Nie #define IMX7_DTB_OVERLAY_BASE IMX7_DTB_LIMIT 110936072edSJun Nie #define IMX7_DTB_OVERLAY_LIMIT (IMX7_DTB_OVERLAY_BASE + \ 111936072edSJun Nie IMX7_DTB_OVERLAY_SIZE) 112936072edSJun Nie /* 113936072edSJun Nie * BL2 specific defines. 114936072edSJun Nie * 115936072edSJun Nie * Put BL2 just below BL3-1. BL2_BASE is calculated using the current BL2 debug 116936072edSJun Nie * size plus a little space for growth. 117936072edSJun Nie */ 118936072edSJun Nie #define BL2_BASE BL2_RAM_BASE 119936072edSJun Nie #define BL2_LIMIT (BL2_RAM_BASE + BL2_RAM_SIZE) 120936072edSJun Nie 121936072edSJun Nie /* 122936072edSJun Nie * BL3-2/OPTEE 123936072edSJun Nie */ 124936072edSJun Nie # define BL32_BASE IMX7_OPTEE_BASE 125936072edSJun Nie # define BL32_LIMIT (IMX7_OPTEE_BASE + IMX7_OPTEE_SIZE) 126936072edSJun Nie 127936072edSJun Nie /* 128936072edSJun Nie * BL3-3/U-BOOT 129936072edSJun Nie */ 130936072edSJun Nie #define BL33_BASE IMX7_UBOOT_BASE 131936072edSJun Nie #define BL33_LIMIT (IMX7_UBOOT_BASE + IMX7_UBOOT_SIZE) 132936072edSJun Nie 133936072edSJun Nie /* 134936072edSJun Nie * ATF's view of memory 135936072edSJun Nie * 136936072edSJun Nie * 0xa0000000 +-----------------+ 137936072edSJun Nie * | DDR | BL32/OPTEE 138936072edSJun Nie * 0x9e000000 +-----------------+ 139936072edSJun Nie * | DDR | BL23 ATF 140936072edSJun Nie * 0x9df00000 +-----------------+ 141936072edSJun Nie * | DDR | Shared MBOX RAM 142936072edSJun Nie * 0x9de00000 +-----------------+ 143936072edSJun Nie * | DDR | Unallocated 144936072edSJun Nie * 0x87900000 +-----------------+ 145936072edSJun Nie * | DDR | BL33/U-BOOT 146936072edSJun Nie * 0x87800000 +-----------------+ 147936072edSJun Nie * | DDR | Unallocated 148936072edSJun Nie * 0x83100000 +-----------------+ 149936072edSJun Nie * | DDR | DTB 150936072edSJun Nie * 0x83000000 +-----------------+ 151936072edSJun Nie * | DDR | Unallocated 152936072edSJun Nie * 0x80100000 +-----------------+ 153936072edSJun Nie * | DDR | FIP 154936072edSJun Nie * 0x80000000 +-----------------+ 155936072edSJun Nie * | SOC I/0 | 156936072edSJun Nie * 0x00a00000 +-----------------+ 157936072edSJun Nie * | OCRAM | Not used 158936072edSJun Nie * 0x00900000 +-----------------+ 159936072edSJun Nie * | SOC I/0 | 160936072edSJun Nie * 0x00188000 +-----------------+ 161936072edSJun Nie * | OCRAM_S | Not used 162936072edSJun Nie * 0x00180000 +-----------------+ 163936072edSJun Nie * | SOC I/0 | 164936072edSJun Nie * 0x00020000 +-----------------+ 165936072edSJun Nie * | BootROM | BL1 166936072edSJun Nie * 0x00000000 +-----------------+ 167936072edSJun Nie */ 168936072edSJun Nie 169936072edSJun Nie #define PLAT_PHY_ADDR_SPACE_SIZE (1ULL << 32) 170936072edSJun Nie #define PLAT_VIRT_ADDR_SPACE_SIZE (1ULL << 32) 171936072edSJun Nie #define MAX_MMAP_REGIONS 10 172936072edSJun Nie #define MAX_XLAT_TABLES 6 173936072edSJun Nie #define MAX_IO_DEVICES 2 174936072edSJun Nie #define MAX_IO_HANDLES 3 175936072edSJun Nie #define MAX_IO_BLOCK_DEVICES 1 176936072edSJun Nie 177936072edSJun Nie /* UART defines */ 178936072edSJun Nie #define PLAT_IMX7_BOOT_UART_BASE MXC_UART5_BASE 179936072edSJun Nie #define PLAT_IMX7_BOOT_UART_CLK_IN_HZ 24000000 180936072edSJun Nie #define PLAT_IMX7_CONSOLE_BAUDRATE 115200 181936072edSJun Nie 182936072edSJun Nie /* MMC defines */ 183936072edSJun Nie #ifndef PLAT_PICOPI_SD 184936072edSJun Nie #define PLAT_PICOPI_SD 3 185936072edSJun Nie #endif 186936072edSJun Nie 187936072edSJun Nie #if PLAT_PICOPI_SD == 1 188936072edSJun Nie #define PLAT_PICOPI_BOOT_MMC_BASE USDHC1_BASE 189936072edSJun Nie #endif /* PLAT_PICOPI_SD == 1 */ 190936072edSJun Nie 191936072edSJun Nie #if PLAT_PICOPI_SD == 2 192936072edSJun Nie #define PLAT_PICOPI_BOOT_MMC_BASE USDHC2_BASE 193936072edSJun Nie #endif /* PLAT_PICOPI_SD == 2 */ 194936072edSJun Nie 195936072edSJun Nie #if PLAT_PICOPI_SD == 3 196936072edSJun Nie #define PLAT_PICOPI_BOOT_MMC_BASE USDHC3_BASE 197936072edSJun Nie #endif /* PLAT_PICOPI_SD == 3 */ 198936072edSJun Nie 199936072edSJun Nie /* 200936072edSJun Nie * System counter 201936072edSJun Nie */ 202936072edSJun Nie #define SYS_COUNTER_FREQ_IN_TICKS 8000000 /* 8 MHz */ 203936072edSJun Nie 204936072edSJun Nie #endif /* PLATFORM_DEF_H */ 205