19df5ba05SJiafei Pan /* 29df5ba05SJiafei Pan * Copyright 2022 NXP 39df5ba05SJiafei Pan * 49df5ba05SJiafei Pan * SPDX-License-Identifier: BSD-3-Clause 59df5ba05SJiafei Pan */ 69df5ba05SJiafei Pan 79df5ba05SJiafei Pan #ifndef SOC_H 89df5ba05SJiafei Pan #define SOC_H 99df5ba05SJiafei Pan 109df5ba05SJiafei Pan /* Chassis specific defines - common across SoC's of a particular platform */ 119df5ba05SJiafei Pan #include "dcfg_lsch3.h" 129df5ba05SJiafei Pan #include "soc_default_base_addr.h" 139df5ba05SJiafei Pan #include "soc_default_helper_macros.h" 149df5ba05SJiafei Pan 159df5ba05SJiafei Pan /* 169df5ba05SJiafei Pan * SVR Definition of LS1088A 179df5ba05SJiafei Pan * A: without security 189df5ba05SJiafei Pan * AE: with security 199df5ba05SJiafei Pan * (not include major and minor rev) 209df5ba05SJiafei Pan */ 219df5ba05SJiafei Pan #define SVR_LS1044A 0x870323 229df5ba05SJiafei Pan #define SVR_LS1044AE 0x870322 239df5ba05SJiafei Pan #define SVR_LS1048A 0x870321 249df5ba05SJiafei Pan #define SVR_LS1048AE 0x870320 259df5ba05SJiafei Pan #define SVR_LS1084A 0x870303 269df5ba05SJiafei Pan #define SVR_LS1084AE 0x870302 279df5ba05SJiafei Pan #define SVR_LS1088A 0x870301 289df5ba05SJiafei Pan #define SVR_LS1088AE 0x870300 299df5ba05SJiafei Pan 309df5ba05SJiafei Pan #define SVR_WO_E 0xFFFFFE 319df5ba05SJiafei Pan 329df5ba05SJiafei Pan /* Number of cores in platform */ 339df5ba05SJiafei Pan #define NUMBER_OF_CLUSTERS 2 349df5ba05SJiafei Pan #define CORES_PER_CLUSTER 4 359df5ba05SJiafei Pan #define PLATFORM_CORE_COUNT (NUMBER_OF_CLUSTERS * CORES_PER_CLUSTER) 369df5ba05SJiafei Pan 379df5ba05SJiafei Pan /* set to 0 if the clusters are not symmetrical */ 389df5ba05SJiafei Pan #define SYMMETRICAL_CLUSTERS 1 399df5ba05SJiafei Pan 409df5ba05SJiafei Pan 419df5ba05SJiafei Pan #define NUM_DRAM_REGIONS 2 429df5ba05SJiafei Pan #define NXP_DRAM0_ADDR 0x80000000 439df5ba05SJiafei Pan #define NXP_DRAM0_MAX_SIZE 0x80000000 /* 2 GB */ 449df5ba05SJiafei Pan 459df5ba05SJiafei Pan #define NXP_DRAM1_ADDR 0x8080000000 469df5ba05SJiafei Pan #define NXP_DRAM1_MAX_SIZE 0x7F80000000 /* 510 G */ 479df5ba05SJiafei Pan 489df5ba05SJiafei Pan /* DRAM0 Size defined in platform_def.h */ 499df5ba05SJiafei Pan #define NXP_DRAM0_SIZE PLAT_DEF_DRAM0_SIZE 509df5ba05SJiafei Pan 519df5ba05SJiafei Pan #define NXP_POWMGTDCR 0x700123C20 529df5ba05SJiafei Pan 539df5ba05SJiafei Pan /* epu register offsets and values */ 549df5ba05SJiafei Pan #define EPU_EPGCR_OFFSET 0x0 559df5ba05SJiafei Pan #define EPU_EPIMCR10_OFFSET 0x128 569df5ba05SJiafei Pan #define EPU_EPCTR10_OFFSET 0xa28 579df5ba05SJiafei Pan #define EPU_EPCCR10_OFFSET 0x828 589df5ba05SJiafei Pan 599df5ba05SJiafei Pan #ifdef EPU_EPCCR10_VAL 609df5ba05SJiafei Pan #undef EPU_EPCCR10_VAL 619df5ba05SJiafei Pan #endif 629df5ba05SJiafei Pan #define EPU_EPCCR10_VAL 0xf2800000 639df5ba05SJiafei Pan 649df5ba05SJiafei Pan #define EPU_EPIMCR10_VAL 0xba000000 659df5ba05SJiafei Pan #define EPU_EPCTR10_VAL 0x0 669df5ba05SJiafei Pan #define EPU_EPGCR_VAL (1 << 31) 679df5ba05SJiafei Pan 689df5ba05SJiafei Pan /* pmu register offsets and values */ 699df5ba05SJiafei Pan #define PMU_PCPW20SR_OFFSET 0x830 709df5ba05SJiafei Pan #define PMU_CLAINACTSETR_OFFSET 0x1100 719df5ba05SJiafei Pan #define PMU_CLAINACTCLRR_OFFSET 0x1104 729df5ba05SJiafei Pan #define PMU_CLSINACTSETR_OFFSET 0x1108 739df5ba05SJiafei Pan #define PMU_CLSINACTCLRR_OFFSET 0x110C 749df5ba05SJiafei Pan #define PMU_CLL2FLUSHSETR_OFFSET 0x1110 759df5ba05SJiafei Pan #define PMU_CLSL2FLUSHCLRR_OFFSET 0x1114 769df5ba05SJiafei Pan #define PMU_CLL2FLUSHSR_OFFSET 0x1118 779df5ba05SJiafei Pan #define PMU_POWMGTCSR_OFFSET 0x4000 789df5ba05SJiafei Pan #define PMU_IPPDEXPCR0_OFFSET 0x4040 799df5ba05SJiafei Pan #define PMU_IPPDEXPCR1_OFFSET 0x4044 809df5ba05SJiafei Pan #define PMU_IPPDEXPCR2_OFFSET 0x4048 819df5ba05SJiafei Pan #define PMU_IPPDEXPCR3_OFFSET 0x404C 829df5ba05SJiafei Pan #define PMU_IPPDEXPCR4_OFFSET 0x4050 839df5ba05SJiafei Pan #define PMU_IPPDEXPCR5_OFFSET 0x4054 849df5ba05SJiafei Pan #define PMU_IPSTPCR0_OFFSET 0x4120 859df5ba05SJiafei Pan #define PMU_IPSTPCR1_OFFSET 0x4124 869df5ba05SJiafei Pan #define PMU_IPSTPCR2_OFFSET 0x4128 879df5ba05SJiafei Pan #define PMU_IPSTPCR3_OFFSET 0x412C 889df5ba05SJiafei Pan #define PMU_IPSTPCR4_OFFSET 0x4130 899df5ba05SJiafei Pan #define PMU_IPSTPCR5_OFFSET 0x4134 909df5ba05SJiafei Pan #define PMU_IPSTPCR6_OFFSET 0x4138 919df5ba05SJiafei Pan #define PMU_IPSTPACK0_OFFSET 0x4140 929df5ba05SJiafei Pan #define PMU_IPSTPACK1_OFFSET 0x4144 939df5ba05SJiafei Pan #define PMU_IPSTPACK2_OFFSET 0x4148 949df5ba05SJiafei Pan #define PMU_IPSTPACK3_OFFSET 0x414C 959df5ba05SJiafei Pan #define PMU_IPSTPACK4_OFFSET 0x4150 969df5ba05SJiafei Pan #define PMU_IPSTPACK5_OFFSET 0x4154 979df5ba05SJiafei Pan #define PMU_IPSTPACK6_OFFSET 0x4158 989df5ba05SJiafei Pan #define PMU_POWMGTCSR_VAL (1 << 20) 999df5ba05SJiafei Pan 1009df5ba05SJiafei Pan #define IPPDEXPCR0_MASK 0xFFFFFFFF 1019df5ba05SJiafei Pan #define IPPDEXPCR1_MASK 0xFFFFFFFF 1029df5ba05SJiafei Pan #define IPPDEXPCR2_MASK 0xFFFFFFFF 1039df5ba05SJiafei Pan #define IPPDEXPCR3_MASK 0xFFFFFFFF 1049df5ba05SJiafei Pan #define IPPDEXPCR4_MASK 0xFFFFFFFF 1059df5ba05SJiafei Pan #define IPPDEXPCR5_MASK 0xFFFFFFFF 1069df5ba05SJiafei Pan 1079df5ba05SJiafei Pan /* DEVDISR5_FLX_TMR */ 1089df5ba05SJiafei Pan #define IPPDEXPCR_FLX_TMR 0x00004000 1099df5ba05SJiafei Pan #define DEVDISR5_FLX_TMR 0x00004000 1109df5ba05SJiafei Pan 1119df5ba05SJiafei Pan #define IPSTPCR0_VALUE 0x0041310C 1129df5ba05SJiafei Pan #define IPSTPCR1_VALUE 0x000003FF 1139df5ba05SJiafei Pan #define IPSTPCR2_VALUE 0x00013006 1149df5ba05SJiafei Pan 115*1b491eeaSElyes Haouas /* Don't stop UART */ 1169df5ba05SJiafei Pan #define IPSTPCR3_VALUE 0x0000033A 1179df5ba05SJiafei Pan 1189df5ba05SJiafei Pan #define IPSTPCR4_VALUE 0x00103300 1199df5ba05SJiafei Pan #define IPSTPCR5_VALUE 0x00000001 1209df5ba05SJiafei Pan #define IPSTPCR6_VALUE 0x00000000 1219df5ba05SJiafei Pan 1229df5ba05SJiafei Pan 1239df5ba05SJiafei Pan #define TZPC_BLOCK_SIZE 0x1000 1249df5ba05SJiafei Pan 1259df5ba05SJiafei Pan /* PORSR1 */ 1269df5ba05SJiafei Pan #define PORSR1_RCW_MASK 0xFF800000 1279df5ba05SJiafei Pan #define PORSR1_RCW_SHIFT 23 1289df5ba05SJiafei Pan 1299df5ba05SJiafei Pan /* CFG_RCW_SRC[6:0] */ 1309df5ba05SJiafei Pan #define RCW_SRC_TYPE_MASK 0x70 1319df5ba05SJiafei Pan 1329df5ba05SJiafei Pan /* RCW SRC NOR */ 1339df5ba05SJiafei Pan #define NOR_16B_VAL 0x20 1349df5ba05SJiafei Pan 1359df5ba05SJiafei Pan /* 1369df5ba05SJiafei Pan * RCW SRC Serial Flash 1379df5ba05SJiafei Pan * 1. SERAIL NOR (QSPI) 1389df5ba05SJiafei Pan * 2. OTHERS (SD/MMC, SPI, I2C1) 1399df5ba05SJiafei Pan */ 1409df5ba05SJiafei Pan #define RCW_SRC_SERIAL_MASK 0x7F 1419df5ba05SJiafei Pan #define QSPI_VAL 0x62 1429df5ba05SJiafei Pan #define SDHC_VAL 0x40 1439df5ba05SJiafei Pan #define EMMC_VAL 0x41 1449df5ba05SJiafei Pan 1459df5ba05SJiafei Pan /* 1469df5ba05SJiafei Pan * Required LS standard platform porting definitions 1479df5ba05SJiafei Pan * for CCN-504 - Read from RN-F node ID register 1489df5ba05SJiafei Pan */ 1499df5ba05SJiafei Pan #define PLAT_CLUSTER_TO_CCN_ID_MAP 1, 9, 11, 19 1509df5ba05SJiafei Pan 1519df5ba05SJiafei Pan /* Defines required for using XLAT tables from ARM common code */ 1529df5ba05SJiafei Pan #define PLAT_PHY_ADDR_SPACE_SIZE (1ULL << 40) 1539df5ba05SJiafei Pan #define PLAT_VIRT_ADDR_SPACE_SIZE (1ULL << 40) 1549df5ba05SJiafei Pan 1559df5ba05SJiafei Pan /* 1569df5ba05SJiafei Pan * Clock Divisors 1579df5ba05SJiafei Pan */ 1589df5ba05SJiafei Pan #define NXP_PLATFORM_CLK_DIVIDER 1 1599df5ba05SJiafei Pan #define NXP_UART_CLK_DIVIDER 2 1609df5ba05SJiafei Pan 1619df5ba05SJiafei Pan /* dcfg register offsets and values */ 1629df5ba05SJiafei Pan #define DCFG_DEVDISR1_OFFSET 0x70 1639df5ba05SJiafei Pan #define DCFG_DEVDISR2_OFFSET 0x74 1649df5ba05SJiafei Pan #define DCFG_DEVDISR3_OFFSET 0x78 1659df5ba05SJiafei Pan #define DCFG_DEVDISR5_OFFSET 0x80 1669df5ba05SJiafei Pan #define DCFG_DEVDISR6_OFFSET 0x84 1679df5ba05SJiafei Pan 1689df5ba05SJiafei Pan #define DCFG_DEVDISR1_SEC (1 << 22) 1699df5ba05SJiafei Pan #define DCFG_DEVDISR3_QBMAIN (1 << 12) 1709df5ba05SJiafei Pan #define DCFG_DEVDISR4_SPI_QSPI (1 << 4 | 1 << 5) 1719df5ba05SJiafei Pan #define DCFG_DEVDISR5_MEM (1 << 0) 1729df5ba05SJiafei Pan 1739df5ba05SJiafei Pan #define DEVDISR1_VALUE 0x0041310c 1749df5ba05SJiafei Pan #define DEVDISR2_VALUE 0x000003ff 1759df5ba05SJiafei Pan #define DEVDISR3_VALUE 0x00013006 1769df5ba05SJiafei Pan #define DEVDISR4_VALUE 0x0000033e 1779df5ba05SJiafei Pan #define DEVDISR5_VALUE 0x00103300 1789df5ba05SJiafei Pan #define DEVDISR6_VALUE 0x00000001 1799df5ba05SJiafei Pan 1809df5ba05SJiafei Pan /* 1819df5ba05SJiafei Pan * pwr mgmt features supported in the soc-specific code: 1829df5ba05SJiafei Pan * value == 0x0, the soc code does not support this feature 1839df5ba05SJiafei Pan * value != 0x0, the soc code supports this feature 1849df5ba05SJiafei Pan */ 1859df5ba05SJiafei Pan #define SOC_CORE_RELEASE 0x1 1869df5ba05SJiafei Pan #define SOC_CORE_RESTART 0x1 1879df5ba05SJiafei Pan #define SOC_CORE_OFF 0x1 1889df5ba05SJiafei Pan #define SOC_CORE_STANDBY 0x1 1899df5ba05SJiafei Pan #define SOC_CORE_PWR_DWN 0x1 1909df5ba05SJiafei Pan #define SOC_CLUSTER_STANDBY 0x1 1919df5ba05SJiafei Pan #define SOC_CLUSTER_PWR_DWN 0x1 1929df5ba05SJiafei Pan #define SOC_SYSTEM_STANDBY 0x1 1939df5ba05SJiafei Pan #define SOC_SYSTEM_PWR_DWN 0x1 1949df5ba05SJiafei Pan #define SOC_SYSTEM_OFF 0x1 1959df5ba05SJiafei Pan #define SOC_SYSTEM_RESET 0x1 1969df5ba05SJiafei Pan 1979df5ba05SJiafei Pan #define SYSTEM_PWR_DOMAINS 1 1989df5ba05SJiafei Pan #define PLAT_NUM_PWR_DOMAINS (PLATFORM_CORE_COUNT + \ 1999df5ba05SJiafei Pan NUMBER_OF_CLUSTERS + \ 2009df5ba05SJiafei Pan SYSTEM_PWR_DOMAINS) 2019df5ba05SJiafei Pan 2029df5ba05SJiafei Pan /* Power state coordination occurs at the system level */ 2039df5ba05SJiafei Pan #define PLAT_PD_COORD_LVL MPIDR_AFFLVL2 2049df5ba05SJiafei Pan #define PLAT_MAX_PWR_LVL PLAT_PD_COORD_LVL 2059df5ba05SJiafei Pan 2069df5ba05SJiafei Pan /* Local power state for power domains in Run state */ 2079df5ba05SJiafei Pan #define LS_LOCAL_STATE_RUN PSCI_LOCAL_STATE_RUN 2089df5ba05SJiafei Pan 2099df5ba05SJiafei Pan /* define retention state */ 2109df5ba05SJiafei Pan #define PLAT_MAX_RET_STATE (PSCI_LOCAL_STATE_RUN + 1) 2119df5ba05SJiafei Pan #define LS_LOCAL_STATE_RET PLAT_MAX_RET_STATE 2129df5ba05SJiafei Pan 2139df5ba05SJiafei Pan /* define power-down state */ 2149df5ba05SJiafei Pan #define PLAT_MAX_OFF_STATE (PLAT_MAX_RET_STATE + 1) 2159df5ba05SJiafei Pan #define LS_LOCAL_STATE_OFF PLAT_MAX_OFF_STATE 2169df5ba05SJiafei Pan 2179df5ba05SJiafei Pan #ifndef __ASSEMBLER__ 2189df5ba05SJiafei Pan /* CCI slave interfaces */ 2199df5ba05SJiafei Pan static const int cci_map[] = { 2209df5ba05SJiafei Pan 3, 2219df5ba05SJiafei Pan 4, 2229df5ba05SJiafei Pan }; 2239df5ba05SJiafei Pan void soc_init_lowlevel(void); 2249df5ba05SJiafei Pan void soc_init_percpu(void); 2259df5ba05SJiafei Pan void _soc_set_start_addr(unsigned long addr); 2269df5ba05SJiafei Pan void _set_platform_security(void); 2279df5ba05SJiafei Pan #endif 2289df5ba05SJiafei Pan 2299df5ba05SJiafei Pan #endif /* SOC_H */ 230