fsl-imx8mp.h 7.3 KB

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