1 /* 2 * i.MX 8M Plus SoC Definitions 3 * 4 * Copyright (c) 2024, Bernhard Beschow <shentey@gmail.com> 5 * 6 * SPDX-License-Identifier: GPL-2.0-or-later 7 */ 8 9 #ifndef FSL_IMX8MP_H 10 #define FSL_IMX8MP_H 11 12 #include "cpu.h" 13 #include "hw/char/imx_serial.h" 14 #include "hw/gpio/imx_gpio.h" 15 #include "hw/i2c/imx_i2c.h" 16 #include "hw/intc/arm_gicv3_common.h" 17 #include "hw/misc/imx7_snvs.h" 18 #include "hw/misc/imx8mp_analog.h" 19 #include "hw/misc/imx8mp_ccm.h" 20 #include "hw/net/imx_fec.h" 21 #include "hw/or-irq.h" 22 #include "hw/pci-host/designware.h" 23 #include "hw/pci-host/fsl_imx8m_phy.h" 24 #include "hw/sd/sdhci.h" 25 #include "hw/ssi/imx_spi.h" 26 #include "hw/timer/imx_gpt.h" 27 #include "hw/usb/hcd-dwc3.h" 28 #include "hw/watchdog/wdt_imx2.h" 29 #include "qom/object.h" 30 #include "qemu/units.h" 31 32 #define TYPE_FSL_IMX8MP "fsl-imx8mp" 33 OBJECT_DECLARE_SIMPLE_TYPE(FslImx8mpState, FSL_IMX8MP) 34 35 #define FSL_IMX8MP_RAM_START 0x40000000 36 #define FSL_IMX8MP_RAM_SIZE_MAX (8 * GiB) 37 38 enum FslImx8mpConfiguration { 39 FSL_IMX8MP_NUM_CPUS = 4, 40 FSL_IMX8MP_NUM_ECSPIS = 3, 41 FSL_IMX8MP_NUM_GPIOS = 5, 42 FSL_IMX8MP_NUM_GPTS = 6, 43 FSL_IMX8MP_NUM_I2CS = 6, 44 FSL_IMX8MP_NUM_IRQS = 160, 45 FSL_IMX8MP_NUM_UARTS = 4, 46 FSL_IMX8MP_NUM_USBS = 2, 47 FSL_IMX8MP_NUM_USDHCS = 3, 48 FSL_IMX8MP_NUM_WDTS = 3, 49 }; 50 51 struct FslImx8mpState { 52 DeviceState parent_obj; 53 54 ARMCPU cpu[FSL_IMX8MP_NUM_CPUS]; 55 GICv3State gic; 56 IMXGPTState gpt[FSL_IMX8MP_NUM_GPTS]; 57 IMXGPIOState gpio[FSL_IMX8MP_NUM_GPIOS]; 58 IMX8MPCCMState ccm; 59 IMX8MPAnalogState analog; 60 IMX7SNVSState snvs; 61 IMXSPIState spi[FSL_IMX8MP_NUM_ECSPIS]; 62 IMXI2CState i2c[FSL_IMX8MP_NUM_I2CS]; 63 IMXSerialState uart[FSL_IMX8MP_NUM_UARTS]; 64 IMXFECState enet; 65 SDHCIState usdhc[FSL_IMX8MP_NUM_USDHCS]; 66 IMX2WdtState wdt[FSL_IMX8MP_NUM_WDTS]; 67 USBDWC3 usb[FSL_IMX8MP_NUM_USBS]; 68 DesignwarePCIEHost pcie; 69 FslImx8mPciePhyState pcie_phy; 70 OrIRQState gpt5_gpt6_irq; 71 MemoryRegion ocram; 72 73 uint32_t phy_num; 74 bool phy_connected; 75 }; 76 77 enum FslImx8mpMemoryRegions { 78 FSL_IMX8MP_A53_DAP, 79 FSL_IMX8MP_AIPS1_CONFIGURATION, 80 FSL_IMX8MP_AIPS2_CONFIGURATION, 81 FSL_IMX8MP_AIPS3_CONFIGURATION, 82 FSL_IMX8MP_AIPS4_CONFIGURATION, 83 FSL_IMX8MP_AIPS5_CONFIGURATION, 84 FSL_IMX8MP_ANA_OSC, 85 FSL_IMX8MP_ANA_PLL, 86 FSL_IMX8MP_ANA_TSENSOR, 87 FSL_IMX8MP_APBH_DMA, 88 FSL_IMX8MP_ASRC, 89 FSL_IMX8MP_AUDIO_BLK_CTRL, 90 FSL_IMX8MP_AUDIO_DSP, 91 FSL_IMX8MP_AUDIO_XCVR_RX, 92 FSL_IMX8MP_AUD_IRQ_STEER, 93 FSL_IMX8MP_BOOT_ROM, 94 FSL_IMX8MP_BOOT_ROM_PROTECTED, 95 FSL_IMX8MP_CAAM, 96 FSL_IMX8MP_CAAM_MEM, 97 FSL_IMX8MP_CCM, 98 FSL_IMX8MP_CSU, 99 FSL_IMX8MP_DDR_BLK_CTRL, 100 FSL_IMX8MP_DDR_CTL, 101 FSL_IMX8MP_DDR_PERF_MON, 102 FSL_IMX8MP_DDR_PHY, 103 FSL_IMX8MP_DDR_PHY_BROADCAST, 104 FSL_IMX8MP_ECSPI1, 105 FSL_IMX8MP_ECSPI2, 106 FSL_IMX8MP_ECSPI3, 107 FSL_IMX8MP_EDMA_CHANNELS, 108 FSL_IMX8MP_EDMA_MANAGEMENT_PAGE, 109 FSL_IMX8MP_ENET1, 110 FSL_IMX8MP_ENET2_TSN, 111 FSL_IMX8MP_FLEXCAN1, 112 FSL_IMX8MP_FLEXCAN2, 113 FSL_IMX8MP_GIC_DIST, 114 FSL_IMX8MP_GIC_REDIST, 115 FSL_IMX8MP_GPC, 116 FSL_IMX8MP_GPIO1, 117 FSL_IMX8MP_GPIO2, 118 FSL_IMX8MP_GPIO3, 119 FSL_IMX8MP_GPIO4, 120 FSL_IMX8MP_GPIO5, 121 FSL_IMX8MP_GPT1, 122 FSL_IMX8MP_GPT2, 123 FSL_IMX8MP_GPT3, 124 FSL_IMX8MP_GPT4, 125 FSL_IMX8MP_GPT5, 126 FSL_IMX8MP_GPT6, 127 FSL_IMX8MP_GPU2D, 128 FSL_IMX8MP_GPU3D, 129 FSL_IMX8MP_HDMI_TX, 130 FSL_IMX8MP_HDMI_TX_AUDLNK_MSTR, 131 FSL_IMX8MP_HSIO_BLK_CTL, 132 FSL_IMX8MP_I2C1, 133 FSL_IMX8MP_I2C2, 134 FSL_IMX8MP_I2C3, 135 FSL_IMX8MP_I2C4, 136 FSL_IMX8MP_I2C5, 137 FSL_IMX8MP_I2C6, 138 FSL_IMX8MP_INTERCONNECT, 139 FSL_IMX8MP_IOMUXC, 140 FSL_IMX8MP_IOMUXC_GPR, 141 FSL_IMX8MP_IPS_DEWARP, 142 FSL_IMX8MP_ISI, 143 FSL_IMX8MP_ISP1, 144 FSL_IMX8MP_ISP2, 145 FSL_IMX8MP_LCDIF1, 146 FSL_IMX8MP_LCDIF2, 147 FSL_IMX8MP_MEDIA_BLK_CTL, 148 FSL_IMX8MP_MIPI_CSI1, 149 FSL_IMX8MP_MIPI_CSI2, 150 FSL_IMX8MP_MIPI_DSI1, 151 FSL_IMX8MP_MU_1_A, 152 FSL_IMX8MP_MU_1_B, 153 FSL_IMX8MP_MU_2_A, 154 FSL_IMX8MP_MU_2_B, 155 FSL_IMX8MP_MU_3_A, 156 FSL_IMX8MP_MU_3_B, 157 FSL_IMX8MP_NPU, 158 FSL_IMX8MP_OCOTP_CTRL, 159 FSL_IMX8MP_OCRAM, 160 FSL_IMX8MP_OCRAM_S, 161 FSL_IMX8MP_PCIE1, 162 FSL_IMX8MP_PCIE1_MEM, 163 FSL_IMX8MP_PCIE_PHY1, 164 FSL_IMX8MP_PDM, 165 FSL_IMX8MP_PERFMON1, 166 FSL_IMX8MP_PERFMON2, 167 FSL_IMX8MP_PWM1, 168 FSL_IMX8MP_PWM2, 169 FSL_IMX8MP_PWM3, 170 FSL_IMX8MP_PWM4, 171 FSL_IMX8MP_QOSC, 172 FSL_IMX8MP_QSPI, 173 FSL_IMX8MP_QSPI1_RX_BUFFER, 174 FSL_IMX8MP_QSPI1_TX_BUFFER, 175 FSL_IMX8MP_QSPI_MEM, 176 FSL_IMX8MP_RAM, 177 FSL_IMX8MP_RDC, 178 FSL_IMX8MP_SAI1, 179 FSL_IMX8MP_SAI2, 180 FSL_IMX8MP_SAI3, 181 FSL_IMX8MP_SAI5, 182 FSL_IMX8MP_SAI6, 183 FSL_IMX8MP_SAI7, 184 FSL_IMX8MP_SDMA1, 185 FSL_IMX8MP_SDMA2, 186 FSL_IMX8MP_SDMA3, 187 FSL_IMX8MP_SEMAPHORE1, 188 FSL_IMX8MP_SEMAPHORE2, 189 FSL_IMX8MP_SEMAPHORE_HS, 190 FSL_IMX8MP_SNVS_HP, 191 FSL_IMX8MP_SPBA1, 192 FSL_IMX8MP_SPBA2, 193 FSL_IMX8MP_SRC, 194 FSL_IMX8MP_SYSCNT_CMP, 195 FSL_IMX8MP_SYSCNT_CTRL, 196 FSL_IMX8MP_SYSCNT_RD, 197 FSL_IMX8MP_TCM_DTCM, 198 FSL_IMX8MP_TCM_ITCM, 199 FSL_IMX8MP_TZASC, 200 FSL_IMX8MP_UART1, 201 FSL_IMX8MP_UART2, 202 FSL_IMX8MP_UART3, 203 FSL_IMX8MP_UART4, 204 FSL_IMX8MP_USB1, 205 FSL_IMX8MP_USB2, 206 FSL_IMX8MP_USB1_DEV, 207 FSL_IMX8MP_USB2_DEV, 208 FSL_IMX8MP_USB1_OTG, 209 FSL_IMX8MP_USB2_OTG, 210 FSL_IMX8MP_USB1_GLUE, 211 FSL_IMX8MP_USB2_GLUE, 212 FSL_IMX8MP_USDHC1, 213 FSL_IMX8MP_USDHC2, 214 FSL_IMX8MP_USDHC3, 215 FSL_IMX8MP_VPU, 216 FSL_IMX8MP_VPU_BLK_CTRL, 217 FSL_IMX8MP_VPU_G1_DECODER, 218 FSL_IMX8MP_VPU_G2_DECODER, 219 FSL_IMX8MP_VPU_VC8000E_ENCODER, 220 FSL_IMX8MP_WDOG1, 221 FSL_IMX8MP_WDOG2, 222 FSL_IMX8MP_WDOG3, 223 }; 224 225 enum FslImx8mpIrqs { 226 FSL_IMX8MP_USDHC1_IRQ = 22, 227 FSL_IMX8MP_USDHC2_IRQ = 23, 228 FSL_IMX8MP_USDHC3_IRQ = 24, 229 230 FSL_IMX8MP_UART1_IRQ = 26, 231 FSL_IMX8MP_UART2_IRQ = 27, 232 FSL_IMX8MP_UART3_IRQ = 28, 233 FSL_IMX8MP_UART4_IRQ = 29, 234 FSL_IMX8MP_UART5_IRQ = 30, 235 FSL_IMX8MP_UART6_IRQ = 16, 236 237 FSL_IMX8MP_ECSPI1_IRQ = 31, 238 FSL_IMX8MP_ECSPI2_IRQ = 32, 239 FSL_IMX8MP_ECSPI3_IRQ = 33, 240 FSL_IMX8MP_ECSPI4_IRQ = 34, 241 242 FSL_IMX8MP_I2C1_IRQ = 35, 243 FSL_IMX8MP_I2C2_IRQ = 36, 244 FSL_IMX8MP_I2C3_IRQ = 37, 245 FSL_IMX8MP_I2C4_IRQ = 38, 246 247 FSL_IMX8MP_USB1_IRQ = 40, 248 FSL_IMX8MP_USB2_IRQ = 41, 249 250 FSL_IMX8MP_GPT1_IRQ = 55, 251 FSL_IMX8MP_GPT2_IRQ = 54, 252 FSL_IMX8MP_GPT3_IRQ = 53, 253 FSL_IMX8MP_GPT4_IRQ = 52, 254 FSL_IMX8MP_GPT5_GPT6_IRQ = 51, 255 256 FSL_IMX8MP_GPIO1_LOW_IRQ = 64, 257 FSL_IMX8MP_GPIO1_HIGH_IRQ = 65, 258 FSL_IMX8MP_GPIO2_LOW_IRQ = 66, 259 FSL_IMX8MP_GPIO2_HIGH_IRQ = 67, 260 FSL_IMX8MP_GPIO3_LOW_IRQ = 68, 261 FSL_IMX8MP_GPIO3_HIGH_IRQ = 69, 262 FSL_IMX8MP_GPIO4_LOW_IRQ = 70, 263 FSL_IMX8MP_GPIO4_HIGH_IRQ = 71, 264 FSL_IMX8MP_GPIO5_LOW_IRQ = 72, 265 FSL_IMX8MP_GPIO5_HIGH_IRQ = 73, 266 267 FSL_IMX8MP_I2C5_IRQ = 76, 268 FSL_IMX8MP_I2C6_IRQ = 77, 269 270 FSL_IMX8MP_WDOG1_IRQ = 78, 271 FSL_IMX8MP_WDOG2_IRQ = 79, 272 FSL_IMX8MP_WDOG3_IRQ = 10, 273 274 FSL_IMX8MP_ENET1_MAC_IRQ = 118, 275 FSL_IMX6_ENET1_MAC_1588_IRQ = 121, 276 277 FSL_IMX8MP_PCI_INTA_IRQ = 126, 278 FSL_IMX8MP_PCI_INTB_IRQ = 125, 279 FSL_IMX8MP_PCI_INTC_IRQ = 124, 280 FSL_IMX8MP_PCI_INTD_IRQ = 123, 281 FSL_IMX8MP_PCI_MSI_IRQ = 140, 282 }; 283 284 #endif /* FSL_IMX8MP_H */ 285