1 /* 2 * Copyright (c) 2018 Jean-Christophe Dubois <jcd@tribudubois.net> 3 * 4 * i.MX6ul SoC definitions 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2 of the License, or 9 * (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 */ 16 17 #ifndef FSL_IMX6UL_H 18 #define FSL_IMX6UL_H 19 20 #include "hw/arm/boot.h" 21 #include "hw/cpu/a15mpcore.h" 22 #include "hw/misc/imx6ul_ccm.h" 23 #include "hw/misc/imx6_src.h" 24 #include "hw/misc/imx7_snvs.h" 25 #include "hw/misc/imx7_gpr.h" 26 #include "hw/intc/imx_gpcv2.h" 27 #include "hw/misc/imx2_wdt.h" 28 #include "hw/gpio/imx_gpio.h" 29 #include "hw/char/imx_serial.h" 30 #include "hw/timer/imx_gpt.h" 31 #include "hw/timer/imx_epit.h" 32 #include "hw/i2c/imx_i2c.h" 33 #include "hw/gpio/imx_gpio.h" 34 #include "hw/sd/sdhci.h" 35 #include "hw/ssi/imx_spi.h" 36 #include "hw/net/imx_fec.h" 37 #include "exec/memory.h" 38 #include "cpu.h" 39 40 #define TYPE_FSL_IMX6UL "fsl,imx6ul" 41 #define FSL_IMX6UL(obj) OBJECT_CHECK(FslIMX6ULState, (obj), TYPE_FSL_IMX6UL) 42 43 enum FslIMX6ULConfiguration { 44 FSL_IMX6UL_NUM_CPUS = 1, 45 FSL_IMX6UL_NUM_UARTS = 8, 46 FSL_IMX6UL_NUM_ETHS = 2, 47 FSL_IMX6UL_ETH_NUM_TX_RINGS = 2, 48 FSL_IMX6UL_NUM_USDHCS = 2, 49 FSL_IMX6UL_NUM_WDTS = 3, 50 FSL_IMX6UL_NUM_GPTS = 2, 51 FSL_IMX6UL_NUM_EPITS = 2, 52 FSL_IMX6UL_NUM_IOMUXCS = 2, 53 FSL_IMX6UL_NUM_GPIOS = 5, 54 FSL_IMX6UL_NUM_I2CS = 4, 55 FSL_IMX6UL_NUM_ECSPIS = 4, 56 FSL_IMX6UL_NUM_ADCS = 2, 57 }; 58 59 typedef struct FslIMX6ULState { 60 /*< private >*/ 61 DeviceState parent_obj; 62 63 /*< public >*/ 64 ARMCPU cpu[FSL_IMX6UL_NUM_CPUS]; 65 A15MPPrivState a7mpcore; 66 IMXGPTState gpt[FSL_IMX6UL_NUM_GPTS]; 67 IMXEPITState epit[FSL_IMX6UL_NUM_EPITS]; 68 IMXGPIOState gpio[FSL_IMX6UL_NUM_GPIOS]; 69 IMX6ULCCMState ccm; 70 IMX6SRCState src; 71 IMX7SNVSState snvs; 72 IMXGPCv2State gpcv2; 73 IMX7GPRState gpr; 74 IMXSPIState spi[FSL_IMX6UL_NUM_ECSPIS]; 75 IMXI2CState i2c[FSL_IMX6UL_NUM_I2CS]; 76 IMXSerialState uart[FSL_IMX6UL_NUM_UARTS]; 77 IMXFECState eth[FSL_IMX6UL_NUM_ETHS]; 78 SDHCIState usdhc[FSL_IMX6UL_NUM_USDHCS]; 79 IMX2WdtState wdt[FSL_IMX6UL_NUM_WDTS]; 80 MemoryRegion rom; 81 MemoryRegion caam; 82 MemoryRegion ocram; 83 MemoryRegion ocram_alias; 84 } FslIMX6ULState; 85 86 enum FslIMX6ULMemoryMap { 87 FSL_IMX6UL_MMDC_ADDR = 0x80000000, 88 FSL_IMX6UL_MMDC_SIZE = 2 * 1024 * 1024 * 1024UL, 89 90 FSL_IMX6UL_QSPI1_MEM_ADDR = 0x60000000, 91 FSL_IMX6UL_EIM_ALIAS_ADDR = 0x58000000, 92 FSL_IMX6UL_EIM_CS_ADDR = 0x50000000, 93 FSL_IMX6UL_AES_ENCRYPT_ADDR = 0x10000000, 94 FSL_IMX6UL_QSPI1_RX_ADDR = 0x0C000000, 95 96 /* AIPS-2 */ 97 FSL_IMX6UL_UART6_ADDR = 0x021FC000, 98 FSL_IMX6UL_I2C4_ADDR = 0x021F8000, 99 FSL_IMX6UL_UART5_ADDR = 0x021F4000, 100 FSL_IMX6UL_UART4_ADDR = 0x021F0000, 101 FSL_IMX6UL_UART3_ADDR = 0x021EC000, 102 FSL_IMX6UL_UART2_ADDR = 0x021E8000, 103 FSL_IMX6UL_WDOG3_ADDR = 0x021E4000, 104 FSL_IMX6UL_QSPI_ADDR = 0x021E0000, 105 FSL_IMX6UL_SYS_CNT_CTRL_ADDR = 0x021DC000, 106 FSL_IMX6UL_SYS_CNT_CMP_ADDR = 0x021D8000, 107 FSL_IMX6UL_SYS_CNT_RD_ADDR = 0x021D4000, 108 FSL_IMX6UL_TZASC_ADDR = 0x021D0000, 109 FSL_IMX6UL_PXP_ADDR = 0x021CC000, 110 FSL_IMX6UL_LCDIF_ADDR = 0x021C8000, 111 FSL_IMX6UL_CSI_ADDR = 0x021C4000, 112 FSL_IMX6UL_CSU_ADDR = 0x021C0000, 113 FSL_IMX6UL_OCOTP_CTRL_ADDR = 0x021BC000, 114 FSL_IMX6UL_EIM_ADDR = 0x021B8000, 115 FSL_IMX6UL_SIM2_ADDR = 0x021B4000, 116 FSL_IMX6UL_MMDC_CFG_ADDR = 0x021B0000, 117 FSL_IMX6UL_ROMCP_ADDR = 0x021AC000, 118 FSL_IMX6UL_I2C3_ADDR = 0x021A8000, 119 FSL_IMX6UL_I2C2_ADDR = 0x021A4000, 120 FSL_IMX6UL_I2C1_ADDR = 0x021A0000, 121 FSL_IMX6UL_ADC2_ADDR = 0x0219C000, 122 FSL_IMX6UL_ADC1_ADDR = 0x02198000, 123 FSL_IMX6UL_USDHC2_ADDR = 0x02194000, 124 FSL_IMX6UL_USDHC1_ADDR = 0x02190000, 125 FSL_IMX6UL_SIM1_ADDR = 0x0218C000, 126 FSL_IMX6UL_ENET1_ADDR = 0x02188000, 127 FSL_IMX6UL_USBO2_USBMISC_ADDR = 0x02184800, 128 FSL_IMX6UL_USBO2_USB_ADDR = 0x02184000, 129 FSL_IMX6UL_USBO2_PL301_ADDR = 0x02180000, 130 FSL_IMX6UL_AIPS2_CFG_ADDR = 0x0217C000, 131 FSL_IMX6UL_CAAM_ADDR = 0x02140000, 132 FSL_IMX6UL_A7MPCORE_DAP_ADDR = 0x02100000, 133 134 /* AIPS-1 */ 135 FSL_IMX6UL_PWM8_ADDR = 0x020FC000, 136 FSL_IMX6UL_PWM7_ADDR = 0x020F8000, 137 FSL_IMX6UL_PWM6_ADDR = 0x020F4000, 138 FSL_IMX6UL_PWM5_ADDR = 0x020F0000, 139 FSL_IMX6UL_SDMA_ADDR = 0x020EC000, 140 FSL_IMX6UL_GPT2_ADDR = 0x020E8000, 141 FSL_IMX6UL_IOMUXC_GPR_ADDR = 0x020E4000, 142 FSL_IMX6UL_IOMUXC_ADDR = 0x020E0000, 143 FSL_IMX6UL_GPC_ADDR = 0x020DC000, 144 FSL_IMX6UL_SRC_ADDR = 0x020D8000, 145 FSL_IMX6UL_EPIT2_ADDR = 0x020D4000, 146 FSL_IMX6UL_EPIT1_ADDR = 0x020D0000, 147 FSL_IMX6UL_SNVS_HP_ADDR = 0x020CC000, 148 FSL_IMX6UL_ANALOG_ADDR = 0x020C8000, 149 FSL_IMX6UL_CCM_ADDR = 0x020C4000, 150 FSL_IMX6UL_WDOG2_ADDR = 0x020C0000, 151 FSL_IMX6UL_WDOG1_ADDR = 0x020BC000, 152 FSL_IMX6UL_KPP_ADDR = 0x020B8000, 153 FSL_IMX6UL_ENET2_ADDR = 0x020B4000, 154 FSL_IMX6UL_SNVS_LP_ADDR = 0x020B0000, 155 FSL_IMX6UL_GPIO5_ADDR = 0x020AC000, 156 FSL_IMX6UL_GPIO4_ADDR = 0x020A8000, 157 FSL_IMX6UL_GPIO3_ADDR = 0x020A4000, 158 FSL_IMX6UL_GPIO2_ADDR = 0x020A0000, 159 FSL_IMX6UL_GPIO1_ADDR = 0x0209C000, 160 FSL_IMX6UL_GPT1_ADDR = 0x02098000, 161 FSL_IMX6UL_CAN2_ADDR = 0x02094000, 162 FSL_IMX6UL_CAN1_ADDR = 0x02090000, 163 FSL_IMX6UL_PWM4_ADDR = 0x0208C000, 164 FSL_IMX6UL_PWM3_ADDR = 0x02088000, 165 FSL_IMX6UL_PWM2_ADDR = 0x02084000, 166 FSL_IMX6UL_PWM1_ADDR = 0x02080000, 167 FSL_IMX6UL_AIPS1_CFG_ADDR = 0x0207C000, 168 FSL_IMX6UL_BEE_ADDR = 0x02044000, 169 FSL_IMX6UL_TOUCH_CTRL_ADDR = 0x02040000, 170 FSL_IMX6UL_SPBA_ADDR = 0x0203C000, 171 FSL_IMX6UL_ASRC_ADDR = 0x02034000, 172 FSL_IMX6UL_SAI3_ADDR = 0x02030000, 173 FSL_IMX6UL_SAI2_ADDR = 0x0202C000, 174 FSL_IMX6UL_SAI1_ADDR = 0x02028000, 175 FSL_IMX6UL_UART8_ADDR = 0x02024000, 176 FSL_IMX6UL_UART1_ADDR = 0x02020000, 177 FSL_IMX6UL_UART7_ADDR = 0x02018000, 178 FSL_IMX6UL_ECSPI4_ADDR = 0x02014000, 179 FSL_IMX6UL_ECSPI3_ADDR = 0x02010000, 180 FSL_IMX6UL_ECSPI2_ADDR = 0x0200C000, 181 FSL_IMX6UL_ECSPI1_ADDR = 0x02008000, 182 FSL_IMX6UL_SPDIF_ADDR = 0x02004000, 183 184 FSL_IMX6UL_APBH_DMA_ADDR = 0x01804000, 185 FSL_IMX6UL_APBH_DMA_SIZE = (32 * 1024), 186 187 FSL_IMX6UL_A7MPCORE_ADDR = 0x00A00000, 188 189 FSL_IMX6UL_OCRAM_ALIAS_ADDR = 0x00920000, 190 FSL_IMX6UL_OCRAM_ALIAS_SIZE = 0x00060000, 191 FSL_IMX6UL_OCRAM_MEM_ADDR = 0x00900000, 192 FSL_IMX6UL_OCRAM_MEM_SIZE = 0x00020000, 193 FSL_IMX6UL_CAAM_MEM_ADDR = 0x00100000, 194 FSL_IMX6UL_CAAM_MEM_SIZE = 0x00008000, 195 FSL_IMX6UL_ROM_ADDR = 0x00000000, 196 FSL_IMX6UL_ROM_SIZE = 0x00018000, 197 }; 198 199 enum FslIMX6ULIRQs { 200 FSL_IMX6UL_IOMUXC_IRQ = 0, 201 FSL_IMX6UL_DAP_IRQ = 1, 202 FSL_IMX6UL_SDMA_IRQ = 2, 203 FSL_IMX6UL_TSC_IRQ = 3, 204 FSL_IMX6UL_SNVS_IRQ = 4, 205 FSL_IMX6UL_LCDIF_IRQ = 5, 206 FSL_IMX6UL_BEE_IRQ = 6, 207 FSL_IMX6UL_CSI_IRQ = 7, 208 FSL_IMX6UL_PXP_IRQ = 8, 209 FSL_IMX6UL_SCTR1_IRQ = 9, 210 FSL_IMX6UL_SCTR2_IRQ = 10, 211 FSL_IMX6UL_WDOG3_IRQ = 11, 212 FSL_IMX6UL_APBH_DMA_IRQ = 13, 213 FSL_IMX6UL_WEIM_IRQ = 14, 214 FSL_IMX6UL_RAWNAND1_IRQ = 15, 215 FSL_IMX6UL_RAWNAND2_IRQ = 16, 216 FSL_IMX6UL_UART6_IRQ = 17, 217 FSL_IMX6UL_SRTC_IRQ = 19, 218 FSL_IMX6UL_SRTC_SEC_IRQ = 20, 219 FSL_IMX6UL_CSU_IRQ = 21, 220 FSL_IMX6UL_USDHC1_IRQ = 22, 221 FSL_IMX6UL_USDHC2_IRQ = 23, 222 FSL_IMX6UL_SAI3_IRQ = 24, 223 FSL_IMX6UL_SAI32_IRQ = 25, 224 225 FSL_IMX6UL_UART1_IRQ = 26, 226 FSL_IMX6UL_UART2_IRQ = 27, 227 FSL_IMX6UL_UART3_IRQ = 28, 228 FSL_IMX6UL_UART4_IRQ = 29, 229 FSL_IMX6UL_UART5_IRQ = 30, 230 231 FSL_IMX6UL_ECSPI1_IRQ = 31, 232 FSL_IMX6UL_ECSPI2_IRQ = 32, 233 FSL_IMX6UL_ECSPI3_IRQ = 33, 234 FSL_IMX6UL_ECSPI4_IRQ = 34, 235 236 FSL_IMX6UL_I2C4_IRQ = 35, 237 FSL_IMX6UL_I2C1_IRQ = 36, 238 FSL_IMX6UL_I2C2_IRQ = 37, 239 FSL_IMX6UL_I2C3_IRQ = 38, 240 241 FSL_IMX6UL_UART7_IRQ = 39, 242 FSL_IMX6UL_UART8_IRQ = 40, 243 244 FSL_IMX6UL_USB1_IRQ = 42, 245 FSL_IMX6UL_USB2_IRQ = 43, 246 FSL_IMX6UL_USB_PHY1_IRQ = 44, 247 FSL_IMX6UL_USB_PHY2_IRQ = 44, 248 249 FSL_IMX6UL_CAAM_JQ2_IRQ = 46, 250 FSL_IMX6UL_CAAM_ERR_IRQ = 47, 251 FSL_IMX6UL_CAAM_RTIC_IRQ = 48, 252 FSL_IMX6UL_TEMP_IRQ = 49, 253 FSL_IMX6UL_ASRC_IRQ = 50, 254 FSL_IMX6UL_SPDIF_IRQ = 52, 255 FSL_IMX6UL_PMU_REG_IRQ = 54, 256 FSL_IMX6UL_GPT1_IRQ = 55, 257 258 FSL_IMX6UL_EPIT1_IRQ = 56, 259 FSL_IMX6UL_EPIT2_IRQ = 57, 260 261 FSL_IMX6UL_GPIO1_INT7_IRQ = 58, 262 FSL_IMX6UL_GPIO1_INT6_IRQ = 59, 263 FSL_IMX6UL_GPIO1_INT5_IRQ = 60, 264 FSL_IMX6UL_GPIO1_INT4_IRQ = 61, 265 FSL_IMX6UL_GPIO1_INT3_IRQ = 62, 266 FSL_IMX6UL_GPIO1_INT2_IRQ = 63, 267 FSL_IMX6UL_GPIO1_INT1_IRQ = 64, 268 FSL_IMX6UL_GPIO1_INT0_IRQ = 65, 269 FSL_IMX6UL_GPIO1_LOW_IRQ = 66, 270 FSL_IMX6UL_GPIO1_HIGH_IRQ = 67, 271 FSL_IMX6UL_GPIO2_LOW_IRQ = 68, 272 FSL_IMX6UL_GPIO2_HIGH_IRQ = 69, 273 FSL_IMX6UL_GPIO3_LOW_IRQ = 70, 274 FSL_IMX6UL_GPIO3_HIGH_IRQ = 71, 275 FSL_IMX6UL_GPIO4_LOW_IRQ = 72, 276 FSL_IMX6UL_GPIO4_HIGH_IRQ = 73, 277 FSL_IMX6UL_GPIO5_LOW_IRQ = 74, 278 FSL_IMX6UL_GPIO5_HIGH_IRQ = 75, 279 280 FSL_IMX6UL_WDOG1_IRQ = 80, 281 FSL_IMX6UL_WDOG2_IRQ = 81, 282 283 FSL_IMX6UL_KPP_IRQ = 82, 284 285 FSL_IMX6UL_PWM1_IRQ = 83, 286 FSL_IMX6UL_PWM2_IRQ = 84, 287 FSL_IMX6UL_PWM3_IRQ = 85, 288 FSL_IMX6UL_PWM4_IRQ = 86, 289 290 FSL_IMX6UL_CCM1_IRQ = 87, 291 FSL_IMX6UL_CCM2_IRQ = 88, 292 293 FSL_IMX6UL_GPC_IRQ = 89, 294 295 FSL_IMX6UL_SRC_IRQ = 91, 296 297 FSL_IMX6UL_CPU_PERF_IRQ = 94, 298 FSL_IMX6UL_CPU_CTI_IRQ = 95, 299 300 FSL_IMX6UL_SRC_WDOG_IRQ = 96, 301 302 FSL_IMX6UL_SAI1_IRQ = 97, 303 FSL_IMX6UL_SAI2_IRQ = 98, 304 305 FSL_IMX6UL_ADC1_IRQ = 100, 306 FSL_IMX6UL_ADC2_IRQ = 101, 307 308 FSL_IMX6UL_SJC_IRQ = 104, 309 310 FSL_IMX6UL_CAAM_RING0_IRQ = 105, 311 FSL_IMX6UL_CAAM_RING1_IRQ = 106, 312 313 FSL_IMX6UL_QSPI_IRQ = 107, 314 315 FSL_IMX6UL_TZASC_IRQ = 108, 316 317 FSL_IMX6UL_GPT2_IRQ = 109, 318 319 FSL_IMX6UL_CAN1_IRQ = 110, 320 FSL_IMX6UL_CAN2_IRQ = 111, 321 322 FSL_IMX6UL_SIM1_IRQ = 112, 323 FSL_IMX6UL_SIM2_IRQ = 113, 324 325 FSL_IMX6UL_PWM5_IRQ = 114, 326 FSL_IMX6UL_PWM6_IRQ = 115, 327 FSL_IMX6UL_PWM7_IRQ = 116, 328 FSL_IMX6UL_PWM8_IRQ = 117, 329 330 FSL_IMX6UL_ENET1_IRQ = 118, 331 FSL_IMX6UL_ENET1_TIMER_IRQ = 119, 332 FSL_IMX6UL_ENET2_IRQ = 120, 333 FSL_IMX6UL_ENET2_TIMER_IRQ = 121, 334 335 FSL_IMX6UL_PMU_CORE_IRQ = 127, 336 FSL_IMX6UL_MAX_IRQ = 128, 337 }; 338 339 #endif /* FSL_IMX6UL_H */ 340