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