158fdd608SJacky Bai /* 226128912SSilvano di Ninno * Copyright 2020-2022 NXP 358fdd608SJacky Bai * 458fdd608SJacky Bai * SPDX-License-Identifier: BSD-3-Clause 558fdd608SJacky Bai */ 658fdd608SJacky Bai #ifndef PLATFORM_DEF_H 758fdd608SJacky Bai #define PLATFORM_DEF_H 858fdd608SJacky Bai 958fdd608SJacky Bai #include <lib/utils_def.h> 1058fdd608SJacky Bai #include <lib/xlat_tables/xlat_tables_v2.h> 11796a249cSMarco Felsch #include <plat/common/common_def.h> 129c336f61SJacky Bai 1358fdd608SJacky Bai #define PLATFORM_LINKER_FORMAT "elf64-littleaarch64" 1458fdd608SJacky Bai #define PLATFORM_LINKER_ARCH aarch64 1558fdd608SJacky Bai 1658fdd608SJacky Bai #define PLATFORM_STACK_SIZE 0xB00 1758fdd608SJacky Bai #define CACHE_WRITEBACK_GRANULE 64 1858fdd608SJacky Bai 1958fdd608SJacky Bai #define PLAT_PRIMARY_CPU U(0x0) 2058fdd608SJacky Bai #define PLATFORM_MAX_CPU_PER_CLUSTER U(4) 2158fdd608SJacky Bai #define PLATFORM_CLUSTER_COUNT U(1) 2258fdd608SJacky Bai #define PLATFORM_CLUSTER0_CORE_COUNT U(4) 2358fdd608SJacky Bai #define PLATFORM_CLUSTER1_CORE_COUNT U(0) 2458fdd608SJacky Bai #define PLATFORM_CORE_COUNT (PLATFORM_CLUSTER0_CORE_COUNT) 2558fdd608SJacky Bai 2658fdd608SJacky Bai #define IMX_PWR_LVL0 MPIDR_AFFLVL0 2758fdd608SJacky Bai #define IMX_PWR_LVL1 MPIDR_AFFLVL1 2858fdd608SJacky Bai #define IMX_PWR_LVL2 MPIDR_AFFLVL2 2958fdd608SJacky Bai 3058fdd608SJacky Bai #define PWR_DOMAIN_AT_MAX_LVL U(1) 3158fdd608SJacky Bai #define PLAT_MAX_PWR_LVL U(2) 3258fdd608SJacky Bai #define PLAT_MAX_OFF_STATE U(4) 3358fdd608SJacky Bai #define PLAT_MAX_RET_STATE U(2) 3458fdd608SJacky Bai 3558fdd608SJacky Bai #define PLAT_WAIT_RET_STATE U(1) 3658fdd608SJacky Bai #define PLAT_STOP_OFF_STATE U(3) 3758fdd608SJacky Bai 38ce2be321SPeng Fan #define PLAT_PRI_BITS U(3) 39ce2be321SPeng Fan #define PLAT_SDEI_CRITICAL_PRI 0x10 40ce2be321SPeng Fan #define PLAT_SDEI_NORMAL_PRI 0x20 41ce2be321SPeng Fan #define PLAT_SDEI_SGI_PRIVATE U(9) 42ce2be321SPeng Fan 4358fdd608SJacky Bai #define BL31_BASE U(0x960000) 44796a249cSMarco Felsch #define BL31_SIZE SZ_128K 45796a249cSMarco Felsch #define BL31_LIMIT (BL31_BASE + BL31_SIZE) 4658fdd608SJacky Bai 4758fdd608SJacky Bai /* non-secure uboot base */ 489260a8c8SMarco Felsch #ifndef PLAT_NS_IMAGE_OFFSET 4958fdd608SJacky Bai #define PLAT_NS_IMAGE_OFFSET U(0x40200000) 509260a8c8SMarco Felsch #endif 5158fdd608SJacky Bai 5226128912SSilvano di Ninno #define BL32_FDT_OVERLAY_ADDR (PLAT_NS_IMAGE_OFFSET + 0x3000000) 5326128912SSilvano di Ninno 5458fdd608SJacky Bai /* GICv3 base address */ 5558fdd608SJacky Bai #define PLAT_GICD_BASE U(0x38800000) 5658fdd608SJacky Bai #define PLAT_GICR_BASE U(0x38880000) 5758fdd608SJacky Bai 5858fdd608SJacky Bai #define PLAT_VIRT_ADDR_SPACE_SIZE (ULL(1) << 32) 5958fdd608SJacky Bai #define PLAT_PHY_ADDR_SPACE_SIZE (ULL(1) << 32) 6058fdd608SJacky Bai 6158fdd608SJacky Bai #define MAX_XLAT_TABLES 8 6258fdd608SJacky Bai #define MAX_MMAP_REGIONS 16 6358fdd608SJacky Bai 6458fdd608SJacky Bai #define HAB_RVT_BASE U(0x00000900) /* HAB_RVT for i.MX8MM */ 6558fdd608SJacky Bai 6658fdd608SJacky Bai #define IMX_BOOT_UART_CLK_IN_HZ 24000000 /* Select 24MHz oscillator */ 6758fdd608SJacky Bai #define PLAT_CRASH_UART_BASE IMX_BOOT_UART_BASE 6858fdd608SJacky Bai #define PLAT_CRASH_UART_CLK_IN_HZ 24000000 6958fdd608SJacky Bai #define IMX_CONSOLE_BAUDRATE 115200 7058fdd608SJacky Bai 71*89345562SDario Binacchi #define IMX_UART1_BASE U(0x30860000) 72*89345562SDario Binacchi #define IMX_UART2_BASE U(0x30890000) 73*89345562SDario Binacchi #define IMX_UART3_BASE U(0x30880000) 74*89345562SDario Binacchi #define IMX_UART4_BASE U(0x30a60000) 75*89345562SDario Binacchi 7658fdd608SJacky Bai #define IMX_AIPSTZ1 U(0x301f0000) 7758fdd608SJacky Bai #define IMX_AIPSTZ2 U(0x305f0000) 7858fdd608SJacky Bai #define IMX_AIPSTZ3 U(0x309f0000) 7958fdd608SJacky Bai #define IMX_AIPSTZ4 U(0x32df0000) 8058fdd608SJacky Bai 8158fdd608SJacky Bai #define IMX_AIPS_BASE U(0x30000000) 8244dea544SJacky Bai #define IMX_AIPS_SIZE U(0x3000000) 8358fdd608SJacky Bai #define IMX_GPV_BASE U(0x32000000) 8458fdd608SJacky Bai #define IMX_GPV_SIZE U(0x800000) 8558fdd608SJacky Bai #define IMX_AIPS1_BASE U(0x30200000) 8658fdd608SJacky Bai #define IMX_AIPS4_BASE U(0x32c00000) 8758fdd608SJacky Bai #define IMX_ANAMIX_BASE U(0x30360000) 8858fdd608SJacky Bai #define IMX_CCM_BASE U(0x30380000) 8958fdd608SJacky Bai #define IMX_SRC_BASE U(0x30390000) 9058fdd608SJacky Bai #define IMX_GPC_BASE U(0x303a0000) 9158fdd608SJacky Bai #define IMX_RDC_BASE U(0x303d0000) 9258fdd608SJacky Bai #define IMX_CSU_BASE U(0x303e0000) 9358fdd608SJacky Bai #define IMX_WDOG_BASE U(0x30280000) 9458fdd608SJacky Bai #define IMX_SNVS_BASE U(0x30370000) 9558fdd608SJacky Bai #define IMX_NOC_BASE U(0x32700000) 9658fdd608SJacky Bai #define IMX_TZASC_BASE U(0x32F80000) 9758fdd608SJacky Bai #define IMX_IOMUX_GPR_BASE U(0x30340000) 9858fdd608SJacky Bai #define IMX_CAAM_BASE U(0x30900000) 9958fdd608SJacky Bai #define IMX_DDRC_BASE U(0x3d400000) 10058fdd608SJacky Bai #define IMX_DDRPHY_BASE U(0x3c000000) 10158fdd608SJacky Bai #define IMX_DDR_IPS_BASE U(0x3d000000) 10258fdd608SJacky Bai #define IMX_DDR_IPS_SIZE U(0x1800000) 10358fdd608SJacky Bai #define IMX_ROM_BASE U(0x0) 104b5f06d3dSAndrey Zhizhikin #define IMX_ROM_SIZE U(0x40000) 105b5f06d3dSAndrey Zhizhikin #define IMX_NS_OCRAM_BASE U(0x900000) 106b5f06d3dSAndrey Zhizhikin #define IMX_NS_OCRAM_SIZE U(0x60000) 107b5f06d3dSAndrey Zhizhikin #define IMX_CAAM_RAM_BASE U(0x100000) 108b5f06d3dSAndrey Zhizhikin #define IMX_CAAM_RAM_SIZE U(0x10000) 109b5f06d3dSAndrey Zhizhikin #define IMX_DRAM_BASE U(0x40000000) 110b5f06d3dSAndrey Zhizhikin #define IMX_DRAM_SIZE U(0xc0000000) 11158fdd608SJacky Bai 11258fdd608SJacky Bai #define IMX_GIC_BASE PLAT_GICD_BASE 11358fdd608SJacky Bai #define IMX_GIC_SIZE U(0x200000) 11458fdd608SJacky Bai 11558fdd608SJacky Bai #define WDOG_WSR U(0x2) 11658fdd608SJacky Bai #define WDOG_WCR_WDZST BIT(0) 11758fdd608SJacky Bai #define WDOG_WCR_WDBG BIT(1) 11858fdd608SJacky Bai #define WDOG_WCR_WDE BIT(2) 11958fdd608SJacky Bai #define WDOG_WCR_WDT BIT(3) 12058fdd608SJacky Bai #define WDOG_WCR_SRS BIT(4) 12158fdd608SJacky Bai #define WDOG_WCR_WDA BIT(5) 12258fdd608SJacky Bai #define WDOG_WCR_SRE BIT(6) 12358fdd608SJacky Bai #define WDOG_WCR_WDW BIT(7) 12458fdd608SJacky Bai 12558fdd608SJacky Bai #define SRC_A53RCR0 U(0x4) 12658fdd608SJacky Bai #define SRC_A53RCR1 U(0x8) 12758fdd608SJacky Bai #define SRC_OTG1PHY_SCR U(0x20) 12858fdd608SJacky Bai #define SRC_GPR1_OFFSET U(0x74) 12958fdd608SJacky Bai 13058fdd608SJacky Bai #define SNVS_LPCR U(0x38) 13158fdd608SJacky Bai #define SNVS_LPCR_SRTC_ENV BIT(0) 13258fdd608SJacky Bai #define SNVS_LPCR_DP_EN BIT(5) 13358fdd608SJacky Bai #define SNVS_LPCR_TOP BIT(6) 13458fdd608SJacky Bai 13558fdd608SJacky Bai #define IOMUXC_GPR10 U(0x28) 13658fdd608SJacky Bai #define GPR_TZASC_EN BIT(0) 13758fdd608SJacky Bai #define GPR_TZASC_EN_LOCK BIT(16) 13858fdd608SJacky Bai 13958fdd608SJacky Bai #define ANAMIX_MISC_CTL U(0x124) 14058fdd608SJacky Bai #define DRAM_PLL_CTRL (IMX_ANAMIX_BASE + 0x50) 14158fdd608SJacky Bai 14258fdd608SJacky Bai #define MAX_CSU_NUM U(64) 14358fdd608SJacky Bai 14458fdd608SJacky Bai #define OCRAM_S_BASE U(0x00180000) 14558fdd608SJacky Bai #define OCRAM_S_SIZE U(0x8000) 14658fdd608SJacky Bai #define OCRAM_S_LIMIT (OCRAM_S_BASE + OCRAM_S_SIZE) 14758fdd608SJacky Bai #define SAVED_DRAM_TIMING_BASE OCRAM_S_BASE 148c37a877eSSascha Hauer #define IMX_TCM_BASE U(0x7E0000) 149c37a877eSSascha Hauer #define IMX_TCM_SIZE U(0x40000) 15058fdd608SJacky Bai 15158fdd608SJacky Bai #define COUNTER_FREQUENCY 8000000 /* 8MHz */ 15258fdd608SJacky Bai 15385625646SMarco Felsch #define GPV5_BASE_ADDR U(0x32500000) 15485625646SMarco Felsch #define FORCE_INCR_OFFSET U(0x4044) 15585625646SMarco Felsch #define FORCE_INCR_BIT_MASK U(0x2) 15685625646SMarco Felsch 15758fdd608SJacky Bai #define IMX_WDOG_B_RESET 15858fdd608SJacky Bai 15958fdd608SJacky Bai #define GIC_MAP MAP_REGION_FLAT(IMX_GIC_BASE, IMX_GIC_SIZE, MT_DEVICE | MT_RW) 16058fdd608SJacky Bai #define AIPS_MAP MAP_REGION_FLAT(IMX_AIPS_BASE, IMX_AIPS_SIZE, MT_DEVICE | MT_RW) /* AIPS map */ 16158fdd608SJacky Bai #define OCRAM_S_MAP MAP_REGION_FLAT(OCRAM_S_BASE, OCRAM_S_SIZE, MT_DEVICE | MT_RW) /* OCRAM_S */ 16258fdd608SJacky Bai #define DDRC_MAP MAP_REGION_FLAT(IMX_DDRPHY_BASE, IMX_DDR_IPS_SIZE, MT_DEVICE | MT_RW) /* DDRMIX */ 163b5f06d3dSAndrey Zhizhikin #define CAAM_RAM_MAP MAP_REGION_FLAT(IMX_CAAM_RAM_BASE, IMX_CAAM_RAM_SIZE, MT_MEMORY | MT_RW) /* CAMM RAM */ 164b5f06d3dSAndrey Zhizhikin #define NS_OCRAM_MAP MAP_REGION_FLAT(IMX_NS_OCRAM_BASE, IMX_NS_OCRAM_SIZE, MT_MEMORY | MT_RW) /* NS OCRAM */ 165b5f06d3dSAndrey Zhizhikin #define ROM_MAP MAP_REGION_FLAT(IMX_ROM_BASE, IMX_ROM_SIZE, MT_MEMORY | MT_RO) /* ROM code */ 166b5f06d3dSAndrey Zhizhikin 167b5f06d3dSAndrey Zhizhikin /* 168b5f06d3dSAndrey Zhizhikin * Note: DRAM region is mapped with entire size available and uses MT_RW 169b5f06d3dSAndrey Zhizhikin * attributes. 170b5f06d3dSAndrey Zhizhikin * See details in docs/plat/imx8m.rst "High Assurance Boot (HABv4)" section 171b5f06d3dSAndrey Zhizhikin * for explanation of this mapping scheme. 172b5f06d3dSAndrey Zhizhikin */ 173b5f06d3dSAndrey Zhizhikin #define DRAM_MAP MAP_REGION_FLAT(IMX_DRAM_BASE, IMX_DRAM_SIZE, MT_MEMORY | MT_RW | MT_NS) /* DRAM */ 17458fdd608SJacky Bai 17558fdd608SJacky Bai #endif /* platform_def.h */ 176