xref: /qemu/include/hw/arm/fsl-imx8mp.h (revision 4226c39fea1490060163339ae45500bda1b1be05)
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 
72     uint32_t           phy_num;
73     bool               phy_connected;
74 };
75 
76 enum FslImx8mpMemoryRegions {
77     FSL_IMX8MP_A53_DAP,
78     FSL_IMX8MP_AIPS1_CONFIGURATION,
79     FSL_IMX8MP_AIPS2_CONFIGURATION,
80     FSL_IMX8MP_AIPS3_CONFIGURATION,
81     FSL_IMX8MP_AIPS4_CONFIGURATION,
82     FSL_IMX8MP_AIPS5_CONFIGURATION,
83     FSL_IMX8MP_ANA_OSC,
84     FSL_IMX8MP_ANA_PLL,
85     FSL_IMX8MP_ANA_TSENSOR,
86     FSL_IMX8MP_APBH_DMA,
87     FSL_IMX8MP_ASRC,
88     FSL_IMX8MP_AUDIO_BLK_CTRL,
89     FSL_IMX8MP_AUDIO_DSP,
90     FSL_IMX8MP_AUDIO_XCVR_RX,
91     FSL_IMX8MP_AUD_IRQ_STEER,
92     FSL_IMX8MP_BOOT_ROM,
93     FSL_IMX8MP_BOOT_ROM_PROTECTED,
94     FSL_IMX8MP_CAAM,
95     FSL_IMX8MP_CAAM_MEM,
96     FSL_IMX8MP_CCM,
97     FSL_IMX8MP_CSU,
98     FSL_IMX8MP_DDR_BLK_CTRL,
99     FSL_IMX8MP_DDR_CTL,
100     FSL_IMX8MP_DDR_PERF_MON,
101     FSL_IMX8MP_DDR_PHY,
102     FSL_IMX8MP_DDR_PHY_BROADCAST,
103     FSL_IMX8MP_ECSPI1,
104     FSL_IMX8MP_ECSPI2,
105     FSL_IMX8MP_ECSPI3,
106     FSL_IMX8MP_EDMA_CHANNELS,
107     FSL_IMX8MP_EDMA_MANAGEMENT_PAGE,
108     FSL_IMX8MP_ENET1,
109     FSL_IMX8MP_ENET2_TSN,
110     FSL_IMX8MP_FLEXCAN1,
111     FSL_IMX8MP_FLEXCAN2,
112     FSL_IMX8MP_GIC_DIST,
113     FSL_IMX8MP_GIC_REDIST,
114     FSL_IMX8MP_GPC,
115     FSL_IMX8MP_GPIO1,
116     FSL_IMX8MP_GPIO2,
117     FSL_IMX8MP_GPIO3,
118     FSL_IMX8MP_GPIO4,
119     FSL_IMX8MP_GPIO5,
120     FSL_IMX8MP_GPT1,
121     FSL_IMX8MP_GPT2,
122     FSL_IMX8MP_GPT3,
123     FSL_IMX8MP_GPT4,
124     FSL_IMX8MP_GPT5,
125     FSL_IMX8MP_GPT6,
126     FSL_IMX8MP_GPU2D,
127     FSL_IMX8MP_GPU3D,
128     FSL_IMX8MP_HDMI_TX,
129     FSL_IMX8MP_HDMI_TX_AUDLNK_MSTR,
130     FSL_IMX8MP_HSIO_BLK_CTL,
131     FSL_IMX8MP_I2C1,
132     FSL_IMX8MP_I2C2,
133     FSL_IMX8MP_I2C3,
134     FSL_IMX8MP_I2C4,
135     FSL_IMX8MP_I2C5,
136     FSL_IMX8MP_I2C6,
137     FSL_IMX8MP_INTERCONNECT,
138     FSL_IMX8MP_IOMUXC,
139     FSL_IMX8MP_IOMUXC_GPR,
140     FSL_IMX8MP_IPS_DEWARP,
141     FSL_IMX8MP_ISI,
142     FSL_IMX8MP_ISP1,
143     FSL_IMX8MP_ISP2,
144     FSL_IMX8MP_LCDIF1,
145     FSL_IMX8MP_LCDIF2,
146     FSL_IMX8MP_MEDIA_BLK_CTL,
147     FSL_IMX8MP_MIPI_CSI1,
148     FSL_IMX8MP_MIPI_CSI2,
149     FSL_IMX8MP_MIPI_DSI1,
150     FSL_IMX8MP_MU_1_A,
151     FSL_IMX8MP_MU_1_B,
152     FSL_IMX8MP_MU_2_A,
153     FSL_IMX8MP_MU_2_B,
154     FSL_IMX8MP_MU_3_A,
155     FSL_IMX8MP_MU_3_B,
156     FSL_IMX8MP_NPU,
157     FSL_IMX8MP_OCOTP_CTRL,
158     FSL_IMX8MP_OCRAM,
159     FSL_IMX8MP_OCRAM_S,
160     FSL_IMX8MP_PCIE1,
161     FSL_IMX8MP_PCIE1_MEM,
162     FSL_IMX8MP_PCIE_PHY1,
163     FSL_IMX8MP_PDM,
164     FSL_IMX8MP_PERFMON1,
165     FSL_IMX8MP_PERFMON2,
166     FSL_IMX8MP_PWM1,
167     FSL_IMX8MP_PWM2,
168     FSL_IMX8MP_PWM3,
169     FSL_IMX8MP_PWM4,
170     FSL_IMX8MP_QOSC,
171     FSL_IMX8MP_QSPI,
172     FSL_IMX8MP_QSPI1_RX_BUFFER,
173     FSL_IMX8MP_QSPI1_TX_BUFFER,
174     FSL_IMX8MP_QSPI_MEM,
175     FSL_IMX8MP_RAM,
176     FSL_IMX8MP_RDC,
177     FSL_IMX8MP_SAI1,
178     FSL_IMX8MP_SAI2,
179     FSL_IMX8MP_SAI3,
180     FSL_IMX8MP_SAI5,
181     FSL_IMX8MP_SAI6,
182     FSL_IMX8MP_SAI7,
183     FSL_IMX8MP_SDMA1,
184     FSL_IMX8MP_SDMA2,
185     FSL_IMX8MP_SDMA3,
186     FSL_IMX8MP_SEMAPHORE1,
187     FSL_IMX8MP_SEMAPHORE2,
188     FSL_IMX8MP_SEMAPHORE_HS,
189     FSL_IMX8MP_SNVS_HP,
190     FSL_IMX8MP_SPBA1,
191     FSL_IMX8MP_SPBA2,
192     FSL_IMX8MP_SRC,
193     FSL_IMX8MP_SYSCNT_CMP,
194     FSL_IMX8MP_SYSCNT_CTRL,
195     FSL_IMX8MP_SYSCNT_RD,
196     FSL_IMX8MP_TCM_DTCM,
197     FSL_IMX8MP_TCM_ITCM,
198     FSL_IMX8MP_TZASC,
199     FSL_IMX8MP_UART1,
200     FSL_IMX8MP_UART2,
201     FSL_IMX8MP_UART3,
202     FSL_IMX8MP_UART4,
203     FSL_IMX8MP_USB1,
204     FSL_IMX8MP_USB2,
205     FSL_IMX8MP_USB1_DEV,
206     FSL_IMX8MP_USB2_DEV,
207     FSL_IMX8MP_USB1_OTG,
208     FSL_IMX8MP_USB2_OTG,
209     FSL_IMX8MP_USB1_GLUE,
210     FSL_IMX8MP_USB2_GLUE,
211     FSL_IMX8MP_USDHC1,
212     FSL_IMX8MP_USDHC2,
213     FSL_IMX8MP_USDHC3,
214     FSL_IMX8MP_VPU,
215     FSL_IMX8MP_VPU_BLK_CTRL,
216     FSL_IMX8MP_VPU_G1_DECODER,
217     FSL_IMX8MP_VPU_G2_DECODER,
218     FSL_IMX8MP_VPU_VC8000E_ENCODER,
219     FSL_IMX8MP_WDOG1,
220     FSL_IMX8MP_WDOG2,
221     FSL_IMX8MP_WDOG3,
222 };
223 
224 enum FslImx8mpIrqs {
225     FSL_IMX8MP_USDHC1_IRQ   = 22,
226     FSL_IMX8MP_USDHC2_IRQ   = 23,
227     FSL_IMX8MP_USDHC3_IRQ   = 24,
228 
229     FSL_IMX8MP_UART1_IRQ    = 26,
230     FSL_IMX8MP_UART2_IRQ    = 27,
231     FSL_IMX8MP_UART3_IRQ    = 28,
232     FSL_IMX8MP_UART4_IRQ    = 29,
233     FSL_IMX8MP_UART5_IRQ    = 30,
234     FSL_IMX8MP_UART6_IRQ    = 16,
235 
236     FSL_IMX8MP_ECSPI1_IRQ   = 31,
237     FSL_IMX8MP_ECSPI2_IRQ   = 32,
238     FSL_IMX8MP_ECSPI3_IRQ   = 33,
239     FSL_IMX8MP_ECSPI4_IRQ   = 34,
240 
241     FSL_IMX8MP_I2C1_IRQ     = 35,
242     FSL_IMX8MP_I2C2_IRQ     = 36,
243     FSL_IMX8MP_I2C3_IRQ     = 37,
244     FSL_IMX8MP_I2C4_IRQ     = 38,
245 
246     FSL_IMX8MP_USB1_IRQ     = 40,
247     FSL_IMX8MP_USB2_IRQ     = 41,
248 
249     FSL_IMX8MP_GPT1_IRQ      = 55,
250     FSL_IMX8MP_GPT2_IRQ      = 54,
251     FSL_IMX8MP_GPT3_IRQ      = 53,
252     FSL_IMX8MP_GPT4_IRQ      = 52,
253     FSL_IMX8MP_GPT5_GPT6_IRQ = 51,
254 
255     FSL_IMX8MP_GPIO1_LOW_IRQ  = 64,
256     FSL_IMX8MP_GPIO1_HIGH_IRQ = 65,
257     FSL_IMX8MP_GPIO2_LOW_IRQ  = 66,
258     FSL_IMX8MP_GPIO2_HIGH_IRQ = 67,
259     FSL_IMX8MP_GPIO3_LOW_IRQ  = 68,
260     FSL_IMX8MP_GPIO3_HIGH_IRQ = 69,
261     FSL_IMX8MP_GPIO4_LOW_IRQ  = 70,
262     FSL_IMX8MP_GPIO4_HIGH_IRQ = 71,
263     FSL_IMX8MP_GPIO5_LOW_IRQ  = 72,
264     FSL_IMX8MP_GPIO5_HIGH_IRQ = 73,
265 
266     FSL_IMX8MP_I2C5_IRQ     = 76,
267     FSL_IMX8MP_I2C6_IRQ     = 77,
268 
269     FSL_IMX8MP_WDOG1_IRQ    = 78,
270     FSL_IMX8MP_WDOG2_IRQ    = 79,
271     FSL_IMX8MP_WDOG3_IRQ    = 10,
272 
273     FSL_IMX8MP_ENET1_MAC_IRQ    = 118,
274     FSL_IMX6_ENET1_MAC_1588_IRQ = 121,
275 
276     FSL_IMX8MP_PCI_INTA_IRQ = 126,
277     FSL_IMX8MP_PCI_INTB_IRQ = 125,
278     FSL_IMX8MP_PCI_INTC_IRQ = 124,
279     FSL_IMX8MP_PCI_INTD_IRQ = 123,
280     FSL_IMX8MP_PCI_MSI_IRQ  = 140,
281 };
282 
283 #endif /* FSL_IMX8MP_H */
284