1c6020248SBryan O'Donoghue /* 2c5937f2dSJun Nie * Copyright (c) 2018-2019, ARM Limited and Contributors. All rights reserved. 3c6020248SBryan O'Donoghue * 4c6020248SBryan O'Donoghue * SPDX-License-Identifier: BSD-3-Clause 5c6020248SBryan O'Donoghue */ 6c6020248SBryan O'Donoghue 7c3cf06f1SAntonio Nino Diaz #ifndef PLATFORM_DEF_H 8c3cf06f1SAntonio Nino Diaz #define PLATFORM_DEF_H 9c6020248SBryan O'Donoghue 10c6020248SBryan O'Donoghue #include <arch.h> 1109d40e0eSAntonio Nino Diaz #include <common/tbbr/tbbr_img_def.h> 1209d40e0eSAntonio Nino Diaz #include <plat/common/common_def.h> 13c6020248SBryan O'Donoghue 14c6020248SBryan O'Donoghue #define PLATFORM_STACK_SIZE 0x1000 15c6020248SBryan O'Donoghue 167a57188bSDeepika Bhavnani #define PLATFORM_MAX_CPUS_PER_CLUSTER U(2) 177a57188bSDeepika Bhavnani #define PLATFORM_CLUSTER_COUNT U(1) 18c6020248SBryan O'Donoghue #define PLATFORM_CLUSTER0_CORE_COUNT PLATFORM_MAX_CPUS_PER_CLUSTER 197a57188bSDeepika Bhavnani #define PLATFORM_CLUSTER1_CORE_COUNT U(0) 20c6020248SBryan O'Donoghue 21c6020248SBryan O'Donoghue #define PLATFORM_CORE_COUNT (PLATFORM_CLUSTER0_CORE_COUNT + \ 22c6020248SBryan O'Donoghue PLATFORM_CLUSTER1_CORE_COUNT) 23c6020248SBryan O'Donoghue 247a57188bSDeepika Bhavnani #define WARP7_PRIMARY_CPU U(0) 25c6020248SBryan O'Donoghue 26c6020248SBryan O'Donoghue #define PLAT_NUM_PWR_DOMAINS (PLATFORM_CLUSTER_COUNT + \ 27c6020248SBryan O'Donoghue PLATFORM_CORE_COUNT) 28c6020248SBryan O'Donoghue #define PLAT_MAX_PWR_LVL MPIDR_AFFLVL1 29c6020248SBryan O'Donoghue 30c6020248SBryan O'Donoghue #define PLAT_MAX_RET_STATE 1 31c6020248SBryan O'Donoghue #define PLAT_MAX_OFF_STATE 2 32c6020248SBryan O'Donoghue 33c6020248SBryan O'Donoghue /* Local power state for power domains in Run state. */ 34c6020248SBryan O'Donoghue #define PLAT_LOCAL_STATE_RUN 0 35c6020248SBryan O'Donoghue 36c6020248SBryan O'Donoghue /* Local power state for retention. Valid only for CPU power domains */ 37c6020248SBryan O'Donoghue #define PLAT_LOCAL_STATE_RET 1 38c6020248SBryan O'Donoghue 39c6020248SBryan O'Donoghue /* 40c6020248SBryan O'Donoghue * Local power state for OFF/power-down. Valid for CPU and cluster power 41c6020248SBryan O'Donoghue * domains. 42c6020248SBryan O'Donoghue */ 43c6020248SBryan O'Donoghue #define PLAT_LOCAL_STATE_OFF 2 44c6020248SBryan O'Donoghue 45c6020248SBryan O'Donoghue /* 46c6020248SBryan O'Donoghue * Macros used to parse state information from State-ID if it is using the 47c6020248SBryan O'Donoghue * recommended encoding for State-ID. 48c6020248SBryan O'Donoghue */ 49c6020248SBryan O'Donoghue #define PLAT_LOCAL_PSTATE_WIDTH 4 50c6020248SBryan O'Donoghue #define PLAT_LOCAL_PSTATE_MASK ((1 << PLAT_LOCAL_PSTATE_WIDTH) - 1) 51c6020248SBryan O'Donoghue 52c6020248SBryan O'Donoghue /* 53c6020248SBryan O'Donoghue * Some data must be aligned on the biggest cache line size in the platform. 54c6020248SBryan O'Donoghue * This is known only to the platform as it might have a combination of 55c6020248SBryan O'Donoghue * integrated and external caches. 56c6020248SBryan O'Donoghue * i.MX7 has a 32 byte cacheline size 57c6020248SBryan O'Donoghue * i.MX 7Solo Applications Processor Reference Manual, Rev. 0.1, 08/2016 pg 244 58c6020248SBryan O'Donoghue */ 59c6020248SBryan O'Donoghue #define CACHE_WRITEBACK_SHIFT 4 60c6020248SBryan O'Donoghue #define CACHE_WRITEBACK_GRANULE (1 << CACHE_WRITEBACK_SHIFT) 61c6020248SBryan O'Donoghue 62c6020248SBryan O'Donoghue /* 63c6020248SBryan O'Donoghue * Partition memory into secure BootROM, OCRAM_S, non-secure DRAM, secure DRAM 64c6020248SBryan O'Donoghue */ 65c6020248SBryan O'Donoghue #define BOOT_ROM_BASE 0x00000000 66c6020248SBryan O'Donoghue #define BOOT_ROM_SIZE 0x00020000 67c6020248SBryan O'Donoghue 68c6020248SBryan O'Donoghue #define OCRAM_S_BASE 0x00180000 69c6020248SBryan O'Donoghue #define OCRAM_S_SIZE 0x00008000 70c6020248SBryan O'Donoghue 71c6020248SBryan O'Donoghue /* Controller maps 2GB, board contains 512 MB. 0x80000000 - 0xa0000000 */ 72c6020248SBryan O'Donoghue #define DRAM_BASE 0x80000000 73c6020248SBryan O'Donoghue #define DRAM_SIZE 0x20000000 74c6020248SBryan O'Donoghue #define DRAM_LIMIT (DRAM_BASE + DRAM_SIZE) 75c6020248SBryan O'Donoghue 76c6020248SBryan O'Donoghue /* Place OPTEE at minus 32 MB from the end of memory. 0x9e000000 - 0xa0000000 */ 77c5937f2dSJun Nie #define IMX7_OPTEE_SIZE 0x02000000 78c5937f2dSJun Nie #define IMX7_OPTEE_BASE (DRAM_LIMIT - IMX7_OPTEE_SIZE) 79c5937f2dSJun Nie #define IMX7_OPTEE_LIMIT (IMX7_OPTEE_BASE + IMX7_OPTEE_SIZE) 80c6020248SBryan O'Donoghue 81c6020248SBryan O'Donoghue /* Place ATF directly beneath OPTEE. 0x9df00000 - 0x9e000000 */ 82c6020248SBryan O'Donoghue #define BL2_RAM_SIZE 0x00100000 83c5937f2dSJun Nie #define BL2_RAM_BASE (IMX7_OPTEE_BASE - BL2_RAM_SIZE) 84c6020248SBryan O'Donoghue #define BL2_RAM_LIMIT (BL2_RAM_BASE + BL2_RAM_SIZE) 85c6020248SBryan O'Donoghue 86c6020248SBryan O'Donoghue /* Optional Mailbox. Only relevant on i.MX7D. 0x9deff000 - 0x9df00000*/ 87c6020248SBryan O'Donoghue #define SHARED_RAM_SIZE 0x00001000 88c6020248SBryan O'Donoghue #define SHARED_RAM_BASE (BL2_RAM_BASE - SHARED_RAM_SIZE) 89c6020248SBryan O'Donoghue #define SHARED_RAM_LIMIT (SHARED_RAM_BASE + SHARED_RAM_SIZE) 90c6020248SBryan O'Donoghue 91c6020248SBryan O'Donoghue /* Define the absolute location of u-boot 0x87800000 - 0x87900000 */ 92c5937f2dSJun Nie #define IMX7_UBOOT_SIZE 0x00100000 93c5937f2dSJun Nie #define IMX7_UBOOT_BASE (DRAM_BASE + 0x7800000) 94c5937f2dSJun Nie #define IMX7_UBOOT_LIMIT (IMX7_UBOOT_BASE + IMX7_UBOOT_SIZE) 95c6020248SBryan O'Donoghue 96c6020248SBryan O'Donoghue /* Define FIP image absolute location 0x80000000 - 0x80100000 */ 97*81d1d86cSYing-Chun Liu (PaulLiu) #define IMX_FIP_SIZE 0x00100000 98*81d1d86cSYing-Chun Liu (PaulLiu) #define IMX_FIP_BASE (DRAM_BASE) 99*81d1d86cSYing-Chun Liu (PaulLiu) #define IMX_FIP_LIMIT (IMX_FIP_BASE + IMX_FIP_SIZE) 100c6020248SBryan O'Donoghue 101c6020248SBryan O'Donoghue /* Define FIP image location at 1MB offset */ 102*81d1d86cSYing-Chun Liu (PaulLiu) #define IMX_FIP_MMC_BASE (1024 * 1024) 103c6020248SBryan O'Donoghue 104c6020248SBryan O'Donoghue /* Define the absolute location of DTB 0x83000000 - 0x83100000 */ 105c5937f2dSJun Nie #define IMX7_DTB_SIZE 0x00100000 106c5937f2dSJun Nie #define IMX7_DTB_BASE (DRAM_BASE + 0x03000000) 107c5937f2dSJun Nie #define IMX7_DTB_LIMIT (IMX7_DTB_BASE + IMX7_DTB_SIZE) 108c6020248SBryan O'Donoghue 109e483639aSBryan O'Donoghue /* Define the absolute location of DTB Overlay 0x83100000 - 0x83101000 */ 110c5937f2dSJun Nie #define IMX7_DTB_OVERLAY_SIZE 0x00001000 111c5937f2dSJun Nie #define IMX7_DTB_OVERLAY_BASE IMX7_DTB_LIMIT 112c5937f2dSJun Nie #define IMX7_DTB_OVERLAY_LIMIT (IMX7_DTB_OVERLAY_BASE + \ 113c5937f2dSJun Nie IMX7_DTB_OVERLAY_SIZE) 114e483639aSBryan O'Donoghue 115c6020248SBryan O'Donoghue /* 116c6020248SBryan O'Donoghue * BL2 specific defines. 117c6020248SBryan O'Donoghue * 118c6020248SBryan O'Donoghue * Put BL2 just below BL3-1. BL2_BASE is calculated using the current BL2 debug 119c6020248SBryan O'Donoghue * size plus a little space for growth. 120c6020248SBryan O'Donoghue */ 121c6020248SBryan O'Donoghue #define BL2_BASE BL2_RAM_BASE 122c6020248SBryan O'Donoghue #define BL2_LIMIT (BL2_RAM_BASE + BL2_RAM_SIZE) 123c6020248SBryan O'Donoghue 124c6020248SBryan O'Donoghue /* 125c6020248SBryan O'Donoghue * BL3-2/OPTEE 126c6020248SBryan O'Donoghue */ 127c5937f2dSJun Nie # define BL32_BASE IMX7_OPTEE_BASE 128c5937f2dSJun Nie # define BL32_LIMIT (IMX7_OPTEE_BASE + IMX7_OPTEE_SIZE) 129c6020248SBryan O'Donoghue 130c6020248SBryan O'Donoghue /* 131c6020248SBryan O'Donoghue * BL3-3/U-BOOT 132c6020248SBryan O'Donoghue */ 133c5937f2dSJun Nie #define BL33_BASE IMX7_UBOOT_BASE 134c5937f2dSJun Nie #define BL33_LIMIT (IMX7_UBOOT_BASE + IMX7_UBOOT_SIZE) 135c6020248SBryan O'Donoghue 136c6020248SBryan O'Donoghue /* 137c6020248SBryan O'Donoghue * ATF's view of memory 138c6020248SBryan O'Donoghue * 139c6020248SBryan O'Donoghue * 0xa0000000 +-----------------+ 140c6020248SBryan O'Donoghue * | DDR | BL32/OPTEE 141c6020248SBryan O'Donoghue * 0x9e000000 +-----------------+ 142c6020248SBryan O'Donoghue * | DDR | BL23 ATF 143c6020248SBryan O'Donoghue * 0x9df00000 +-----------------+ 144c6020248SBryan O'Donoghue * | DDR | Shared MBOX RAM 145c6020248SBryan O'Donoghue * 0x9de00000 +-----------------+ 146c6020248SBryan O'Donoghue * | DDR | Unallocated 147c6020248SBryan O'Donoghue * 0x87900000 +-----------------+ 148c6020248SBryan O'Donoghue * | DDR | BL33/U-BOOT 149c6020248SBryan O'Donoghue * 0x87800000 +-----------------+ 150c6020248SBryan O'Donoghue * | DDR | Unallocated 151e483639aSBryan O'Donoghue * 0x83101000 +-----------------+ 152e483639aSBryan O'Donoghue * | DDR | DTB Overlay 153c6020248SBryan O'Donoghue * 0x83100000 +-----------------+ 154c6020248SBryan O'Donoghue * | DDR | DTB 155c6020248SBryan O'Donoghue * 0x83000000 +-----------------+ 156c6020248SBryan O'Donoghue * | DDR | Unallocated 157c6020248SBryan O'Donoghue * 0x80100000 +-----------------+ 158c6020248SBryan O'Donoghue * | DDR | FIP 159c6020248SBryan O'Donoghue * 0x80000000 +-----------------+ 160c6020248SBryan O'Donoghue * | SOC I/0 | 161c6020248SBryan O'Donoghue * 0x00a00000 +-----------------+ 162c6020248SBryan O'Donoghue * | OCRAM | Not used 163c6020248SBryan O'Donoghue * 0x00900000 +-----------------+ 164c6020248SBryan O'Donoghue * | SOC I/0 | 165c6020248SBryan O'Donoghue * 0x00188000 +-----------------+ 166c6020248SBryan O'Donoghue * | OCRAM_S | Not used 167c6020248SBryan O'Donoghue * 0x00180000 +-----------------+ 168c6020248SBryan O'Donoghue * | SOC I/0 | 169c6020248SBryan O'Donoghue * 0x00020000 +-----------------+ 170c6020248SBryan O'Donoghue * | BootROM | BL1 171c6020248SBryan O'Donoghue * 0x00000000 +-----------------+ 172c6020248SBryan O'Donoghue */ 173c6020248SBryan O'Donoghue 174c6020248SBryan O'Donoghue #define PLAT_PHY_ADDR_SPACE_SIZE (1ULL << 32) 175c6020248SBryan O'Donoghue #define PLAT_VIRT_ADDR_SPACE_SIZE (1ULL << 32) 176c6020248SBryan O'Donoghue #define MAX_MMAP_REGIONS 10 177c6020248SBryan O'Donoghue #define MAX_XLAT_TABLES 6 178c6020248SBryan O'Donoghue #define MAX_IO_DEVICES 2 179c6020248SBryan O'Donoghue #define MAX_IO_HANDLES 3 180b7c6529cSYann Gautier #define MAX_IO_BLOCK_DEVICES 1U 181c6020248SBryan O'Donoghue 182c6020248SBryan O'Donoghue /* UART defines */ 183c6020248SBryan O'Donoghue #if PLAT_WARP7_UART == 1 184c6020248SBryan O'Donoghue #define PLAT_WARP7_UART_BASE MXC_UART1_BASE 185c6020248SBryan O'Donoghue #elif PLAT_WARP7_UART == 6 186c6020248SBryan O'Donoghue #define IMX_UART_DTE 187c6020248SBryan O'Donoghue #define PLAT_WARP7_UART_BASE MXC_UART6_BASE 188c6020248SBryan O'Donoghue #else 189c6020248SBryan O'Donoghue #error "define PLAT_WARP7_UART=1 or PLAT_WARP7_UART=6" 190c6020248SBryan O'Donoghue #endif 191c6020248SBryan O'Donoghue 192c5937f2dSJun Nie #define PLAT_IMX7_BOOT_UART_BASE PLAT_WARP7_UART_BASE 193c5937f2dSJun Nie #define PLAT_IMX7_BOOT_UART_CLK_IN_HZ 24000000 194c5937f2dSJun Nie #define PLAT_IMX7_CONSOLE_BAUDRATE 115200 195c6020248SBryan O'Donoghue 196c6020248SBryan O'Donoghue /* MMC defines */ 197c6020248SBryan O'Donoghue #ifndef PLAT_WARP7_SD 198c6020248SBryan O'Donoghue #define PLAT_WARP7_SD 3 199c6020248SBryan O'Donoghue #endif 200c6020248SBryan O'Donoghue 201c6020248SBryan O'Donoghue #if PLAT_WARP7_SD == 1 202c6020248SBryan O'Donoghue #define PLAT_WARP7_BOOT_MMC_BASE USDHC1_BASE 203c6020248SBryan O'Donoghue #endif /* PLAT_WARP7_SD == 1 */ 204c6020248SBryan O'Donoghue 205c6020248SBryan O'Donoghue #if PLAT_WARP7_SD == 2 206c6020248SBryan O'Donoghue #define PLAT_WARP7_BOOT_MMC_BASE USDHC2_BASE 207c6020248SBryan O'Donoghue #endif /* PLAT_WARP7_SD == 2 */ 208c6020248SBryan O'Donoghue 209c6020248SBryan O'Donoghue #if PLAT_WARP7_SD == 3 210c6020248SBryan O'Donoghue #define PLAT_WARP7_BOOT_MMC_BASE USDHC3_BASE 211c6020248SBryan O'Donoghue #endif /* PLAT_WARP7_SD == 3 */ 212c6020248SBryan O'Donoghue 213c6020248SBryan O'Donoghue /* 214c6020248SBryan O'Donoghue * System counter 215c6020248SBryan O'Donoghue */ 216c6020248SBryan O'Donoghue #define SYS_COUNTER_FREQ_IN_TICKS 8000000 /* 8 MHz */ 217c6020248SBryan O'Donoghue 218c3cf06f1SAntonio Nino Diaz #endif /* PLATFORM_DEF_H */ 219