imx6ull.h 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386
  1. /*
  2. * Copyright (c) 2006-2021, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2018-03-22 quanzhao first version
  9. */
  10. #ifndef __IMX6UL_H__
  11. #define __IMX6UL_H__
  12. #include <rthw.h>
  13. #include <rtthread.h>
  14. #ifdef RT_USING_LWP
  15. #include <lwp.h>
  16. #include <ioremap.h>
  17. #endif
  18. enum _gic_base_offsets
  19. {
  20. kGICDBaseOffset = 0x1000, //!< GIC distributor offset.
  21. kGICCBaseOffset = 0x2000 //!< GIC CPU interface offset.
  22. };
  23. /* SOC-relative definitions */
  24. enum _imx_interrupts
  25. {
  26. SW_INTERRUPT_0 = 0, //!< Software interrupt 0.
  27. SW_INTERRUPT_1 = 1, //!< Software interrupt 1.
  28. SW_INTERRUPT_2 = 2, //!< Software interrupt 2.
  29. SW_INTERRUPT_3 = 3, //!< Software interrupt 3.
  30. SW_INTERRUPT_4 = 4, //!< Software interrupt 4.
  31. SW_INTERRUPT_5 = 5, //!< Software interrupt 5.
  32. SW_INTERRUPT_6 = 6, //!< Software interrupt 6.
  33. SW_INTERRUPT_7 = 7, //!< Software interrupt 7.
  34. SW_INTERRUPT_8 = 8, //!< Software interrupt 8.
  35. SW_INTERRUPT_9 = 9, //!< Software interrupt 9.
  36. SW_INTERRUPT_10 = 10, //!< Software interrupt 10.
  37. SW_INTERRUPT_11 = 11, //!< Software interrupt 11.
  38. SW_INTERRUPT_12 = 12, //!< Software interrupt 12.
  39. SW_INTERRUPT_13 = 13, //!< Software interrupt 13.
  40. SW_INTERRUPT_14 = 14, //!< Software interrupt 14.
  41. SW_INTERRUPT_15 = 15, //!< Software interrupt 15.
  42. RSVD_INTERRUPT_16 = 16, //!< Reserved.
  43. RSVD_INTERRUPT_17 = 17, //!< Reserved.
  44. RSVD_INTERRUPT_18 = 18, //!< Reserved.
  45. RSVD_INTERRUPT_19 = 19, //!< Reserved.
  46. RSVD_INTERRUPT_20 = 20, //!< Reserved.
  47. RSVD_INTERRUPT_21 = 21, //!< Reserved.
  48. RSVD_INTERRUPT_22 = 22, //!< Reserved.
  49. RSVD_INTERRUPT_23 = 23, //!< Reserved.
  50. RSVD_INTERRUPT_24 = 24, //!< Reserved.
  51. RSVD_INTERRUPT_25 = 25, //!< Reserved.
  52. RSVD_INTERRUPT_26 = 26, //!< Reserved.
  53. RSVD_INTERRUPT_27 = 27, //!< Reserved.
  54. RSVD_INTERRUPT_28 = 28, //!< Reserved.
  55. RSVD_INTERRUPT_29 = 29, //!< Reserved.
  56. RSVD_INTERRUPT_30 = 30, //!< Reserved.
  57. RSVD_INTERRUPT_31 = 31, //!< Reserved.
  58. IMX_INT_IOMUXC_GPR = 32, //!< General Purpose Register 1 from IOMUXC. Used to notify cores on exception condition while boot.
  59. IMX_INT_CHEETAH_CSYSPWRUPREQ = 33, //!< @todo Listed as DAP in RM
  60. IMX_INT_SDMA = 34, //!< Logical OR of all 48 SDMA interrupt requests/events from all channels.
  61. IMX_INT_TSC = 35, //!< TSC
  62. IMX_INT_SNVS_LP_SET_PWR_OFF = 36, //!< PMIC power off request.
  63. IMX_INT_LCDIF = 37, //!< LCDIF interrupt request.
  64. IMX_INT_BEE = 38, //!< BEE interrupt request.
  65. IMX_INT_CSI = 39, //!< CMOS Sensor Interface interrupt request.
  66. IMX_INT_PXP = 40, //!< PXP interrupt request.
  67. IMX_INT_SCTR1 = 41, //!< SCTR1
  68. IMX_INT_SCTR2 = 42, //!< SCTR2
  69. IMX_INT_WDOG3 = 43, //!< WDOG3 timer reset interrupt request.
  70. IMX_INT_INTERRUPT_44 = 44, //!< Reserved.
  71. IMX_INT_APBH_DMA = 45, //!< APBH DMA
  72. IMX_INT_EIM = 46, //!< EIM interrupt request.
  73. IMX_INT_NAND_BCH = 47, //!< Reserved.
  74. IMX_INT_NAND_GPMI = 48, //!< Reserved.
  75. IMX_INT_UART6 = 49, //!< Logical OR of UART5 interrupt requests.
  76. IMX_INT_INTERRUPT_50 = 50, //!< Reserved.
  77. IMX_INT_SNVS = 51, //!< SNVS consolidated interrupt.
  78. IMX_INT_SNVS_SEC = 52, //!< SNVS security interrupt.
  79. IMX_INT_CSU = 53, //!< CSU interrupt request 1. Indicates to the processor that one or more alarm inputs were asserted.
  80. IMX_INT_USDHC1 = 54, //!< uSDHC1 (Enhanced SDHC) interrupt request.
  81. IMX_INT_USDHC2 = 55, //!< uSDHC2 (Enhanced SDHC) interrupt request.
  82. IMX_INT_SAI3 = 56, //!< uSDHC3 (Enhanced SDHC) interrupt request.
  83. IMX_INT_SAI4 = 57, //!< uSDHC4 (Enhanced SDHC) interrupt request.
  84. IMX_INT_UART1 = 58, //!< Logical OR of UART1 interrupt requests.
  85. IMX_INT_UART2 = 59, //!< Logical OR of UART2 interrupt requests.
  86. IMX_INT_UART3 = 60, //!< Logical OR of UART3 interrupt requests.
  87. IMX_INT_UART4 = 61, //!< Logical OR of UART4 interrupt requests.
  88. IMX_INT_UART5 = 62, //!< Logical OR of UART5 interrupt requests.
  89. IMX_INT_ECSPI1 = 63, //!< eCSPI1 interrupt request.
  90. IMX_INT_ECSPI2 = 64, //!< eCSPI2 interrupt request.
  91. IMX_INT_ECSPI3 = 65, //!< eCSPI3 interrupt request.
  92. IMX_INT_ECSPI4 = 66, //!< eCSPI4 interrupt request.
  93. IMX_INT_I2C4 = 67, //!< Reserved.
  94. IMX_INT_I2C1 = 68, //!< I2C1 interrupt request.
  95. IMX_INT_I2C2 = 69, //!< I2C2 interrupt request.
  96. IMX_INT_I2C3 = 70, //!< I2C3 interrupt request.
  97. IMX_INT_UART7 = 71, //!< Logical OR of UART5 interrupt requests.
  98. IMX_INT_UART8 = 72, //!< Logical OR of UART5 interrupt requests.
  99. IMX_INT_INTERRUPT_73 = 73, //!< Reserved.
  100. IMX_INT_USB_OTG2 = 74, //!< USB Host 1 interrupt request.
  101. IMX_INT_USB_OTG1 = 75, //!< USB OTG1 interrupt request.
  102. IMX_INT_USB_UTMI0 = 76, //!< UTMI0 interrupt request.
  103. IMX_INT_USB_UTMI1 = 77, //!< UTMI1 interrupt request.
  104. IMX_INT_CAAM_JQ2 = 78, //!< SSI1 interrupt request.
  105. IMX_INT_CAAM_ERR = 79, //!< SSI2 interrupt request.
  106. IMX_INT_CAAM_RTIC = 80, //!< SSI3 interrupt request.
  107. IMX_INT_TEMPERATURE = 81, //!< Temperature Sensor (temp. greater than threshold) interrupt request.
  108. IMX_INT_ASRC = 82, //!< Reserved.
  109. IMX_INT_INTERRUPT_83 = 83, //!< Reserved.
  110. IMX_INT_SPDIF = 84, //!< Logical OR of SPDIF TX and SPDIF RX interrupts.
  111. IMX_INT_INTERRUPT_85 = 85, //!< Reserved.
  112. IMX_INT_PMU_ANA_BO = 86, //!< PMU analog regulator brown-out interrupt request.
  113. IMX_INT_GPT1 = 87, //
  114. IMX_INT_EPIT1 = 88, //!< EPIT1 output compare interrupt.
  115. IMX_INT_EPIT2 = 89, //!< EPIT2 output compare interrupt.
  116. IMX_INT_GPIO1_INT7 = 90, //!< INT7 interrupt request.
  117. IMX_INT_GPIO1_INT6 = 91, //!< INT6 interrupt request.
  118. IMX_INT_GPIO1_INT5 = 92, //!< INT5 interrupt request.
  119. IMX_INT_GPIO1_INT4 = 93, //!< INT4 interrupt request.
  120. IMX_INT_GPIO1_INT3 = 94, //!< INT3 interrupt request.
  121. IMX_INT_GPIO1_INT2 = 95, //!< INT2 interrupt request.
  122. IMX_INT_GPIO1_INT1 = 96, //!< INT1 interrupt request.
  123. IMX_INT_GPIO1_INT0 = 97, //!< INT0 interrupt request.
  124. IMX_INT_GPIO1_INT15_0 = 98, //!< Combined interrupt indication for GPIO1 signals 0 - 15.
  125. IMX_INT_GPIO1_INT31_16 = 99, //!< Combined interrupt indication for GPIO1 signals 16 - 31.
  126. IMX_INT_GPIO2_INT15_0 = 100, //!< Combined interrupt indication for GPIO2 signals 0 - 15.
  127. IMX_INT_GPIO2_INT31_16 = 101, //!< Combined interrupt indication for GPIO2 signals 16 - 31.
  128. IMX_INT_GPIO3_INT15_0 = 102, //!< Combined interrupt indication for GPIO3 signals 0 - 15.
  129. IMX_INT_GPIO3_INT31_16 = 103, //!< Combined interrupt indication for GPIO3 signals 16 - 31.
  130. IMX_INT_GPIO4_INT15_0 = 104, //!< Combined interrupt indication for GPIO4 signals 0 - 15.
  131. IMX_INT_GPIO4_INT31_16 = 105, //!< Combined interrupt indication for GPIO4 signals 16 - 31.
  132. IMX_INT_GPIO5_INT15_0 = 106, //!< Combined interrupt indication for GPIO5 signals 0 - 15.
  133. IMX_INT_GPIO5_INT31_16 = 107, //!< Combined interrupt indication for GPIO5 signals 16 - 31.
  134. IMX_INT_INTERRUPT_108 = 108, //!< Reserved.
  135. IMX_INT_INTERRUPT_109 = 109, //!< Reserved.
  136. IMX_INT_INTERRUPT_110 = 110, //!< Reserved.
  137. IMX_INT_INTERRUPT_111 = 111, //!< Reserved.
  138. IMX_INT_WDOG1 = 112, //!< WDOG1 timer reset interrupt request.
  139. IMX_INT_WDOG2 = 113, //!< WDOG2 timer reset interrupt request.
  140. IMX_INT_KPP = 114, //!< Key Pad interrupt request.
  141. IMX_INT_PWM1 = 115, //!< Cumulative interrupt line for PWM1. Logical OR of rollover, compare, and FIFO waterlevel crossing interrupts.
  142. IMX_INT_PWM2 = 116, //!< Cumulative interrupt line for PWM2. Logical OR of rollover, compare, and FIFO waterlevel crossing interrupts.
  143. IMX_INT_PWM3 = 117, //!< Cumulative interrupt line for PWM3. Logical OR of rollover, compare, and FIFO waterlevel crossing interrupts.
  144. IMX_INT_PWM4 = 118, //!< Cumulative interrupt line for PWM4. Logical OR of rollover, compare, and FIFO waterlevel crossing interrupts.
  145. IMX_INT_CCM_INT1 = 119, //!< CCM interrupt request 1.
  146. IMX_INT_CCM_INT2 = 120, //!< CCM interrupt request 2.
  147. IMX_INT_GPC_INT1 = 121, //!< GPC interrupt request 1.
  148. IMX_INT_INTERRUPT_122 = 122, //!< Reserved.
  149. IMX_INT_SRC = 123, //!< SRC interrupt request.
  150. IMX_INT_INTERRUPT_124 = 124, //!< Logical OR of all L2 interrupt requests.
  151. IMX_INT_INTERRUPT_125 = 125, //!< Parity Check error interrupt request.
  152. IMX_INT_CHEETAH_PERFORM = 126, //!< Logical OR of Performance Unit interrupts.
  153. IMX_INT_CHEETAH_TRIGGER = 127, //!< Logical OR of CTI trigger outputs.
  154. IMX_INT_SRC_CPU_WDOG = 128, //!< Combined CPU wdog interrupts (4x) out of SRC.
  155. IMX_INT_SAI1 = 129, //!< EPDC interrupt request.
  156. IMX_INT_SAI2 = 130, //!< EPDC interrupt request.
  157. IMX_INT_INTERRUPT_131 = 131, //!< DCP general interrupt request.
  158. IMX_INT_ADC1 = 132, //!< DCP channel 0 interrupt request.
  159. IMX_INT_ADC2 = 133, //!< DCP secure interrupt request.
  160. IMX_INT_INTERRUPT_134 = 134, //!< Reserved.
  161. IMX_INT_INTERRUPT_135 = 135, //!< Reserved.
  162. IMX_INT_SJC = 136, //!< SJC interrupt from General Purpose register.
  163. IMX_INT_CAAM_0 = 137, //!< Reserved.
  164. IMX_INT_CAAM_1 = 138, //!< Reserved.
  165. IMX_INT_QSPI = 139, //!< Reserved.
  166. IMX_INT_TZASC1 = 140, //!< ASC1 interrupt request.
  167. IMX_INT_GPT2 = 141, //!< Reserved.
  168. IMX_INT_CAN1 = 142, //!< Reserved.
  169. IMX_INT_CAN2 = 143, //!< Reserved.
  170. IMX_INT_SIM1 = 144, //!< Reserved.
  171. IMX_INT_SIM2 = 145, //!< Reserved.
  172. IMX_INT_PWM5 = 146, //!< Fast Ethernet Controller interrupt request.
  173. IMX_INT_PWM6 = 147, //!< Reserved.
  174. IMX_INT_PWM7 = 148, //!< Reserved.
  175. IMX_INT_PWM8 = 149, //!< Reserved.
  176. IMX_INT_ENET1 = 150, //!< Reserved.
  177. IMX_INT_ENET1_TIMER = 151, //!< Reserved.
  178. IMX_INT_ENET2 = 152, //!< Reserved.
  179. IMX_INT_ENET2_TIMER = 153, //!< Reserved.
  180. IMX_INT_INTERRUPT_154 = 154, //!< Reserved.
  181. IMX_INT_INTERRUPT_155 = 155, //!< Reserved.
  182. IMX_INT_INTERRUPT_156 = 156, //!< Reserved.
  183. IMX_INT_INTERRUPT_157 = 157, //!< Reserved.
  184. IMX_INT_INTERRUPT_158 = 158, //!< Reserved.
  185. IMX_INT_PMU_DIG_BO = 159, //!< //!< PMU digital regulator brown-out interrupt request.
  186. IMX_INTERRUPT_COUNT = 160 //!< Total number of interrupts.
  187. };
  188. /* SOC-relative definitions */
  189. #include "MCIMX6Y2.h"
  190. #include "fsl_cache.h"
  191. #include "fsl_common.h"
  192. #include "fsl_iomuxc.h"
  193. #include "fsl_gpio.h"
  194. #include "fsl_elcdif.h"
  195. #include "fsl_usdhc.h"
  196. #include "fsl_card.h"
  197. #include "fsl_wdog.h"
  198. #include "fsl_i2c.h"
  199. #include "fsl_ecspi.h"
  200. #include "fsl_snvs_hp.h"
  201. #include "fsl_adc.h"
  202. #define IMX6ULL_PERIPH_SIZE (16 * 1024)
  203. /* Interrupt Control Interface */
  204. #define ARM_GIC_CPU_BASE 0x00A00000
  205. /*
  206. * Peripheral addresses
  207. */
  208. #define IMX6ULL_UART1_BASE UART1_BASE /* UART 1 */
  209. #define IMX6ULL_UART2_BASE UART2_BASE /* UART 2 */
  210. #define IMX6ULL_UART3_BASE UART3_BASE /* UART 3 */
  211. #define IMX6ULL_UART4_BASE UART4_BASE /* UART 4 */
  212. #define IMX6ULL_UART5_BASE UART5_BASE /* UART 5 */
  213. #define IMX6ULL_UART6_BASE UART6_BASE /* UART 6 */
  214. #define IMX6ULL_UART7_BASE UART7_BASE /* UART 7 */
  215. #define IMX6ULL_UART8_BASE UART8_BASE /* UART 8 */
  216. #define IMX6ULL_WATCHDOG1_BASE WDOG1_BASE /* watchdog 1 */
  217. #define IMX6ULL_WATCHDOG2_BASE WDOG2_BASE /* watchdog 2 */
  218. #define IMX6ULL_WATCHDOG3_BASE WDOG3_BASE /* watchdog 3 */
  219. #define IMX6ULL_GPIO1_BASE GPIO1_BASE /* GPIO port 0 */
  220. #define IMX6ULL_GPIO2_BASE GPIO2_BASE /* GPIO port 1 */
  221. #define IMX6ULL_GPIO3_BASE GPIO3_BASE /* GPIO port 2 */
  222. #define IMX6ULL_GPIO4_BASE GPIO4_BASE /* GPIO port 3 */
  223. #define IMX6ULL_GPIO5_BASE GPIO5_BASE /* GPIO port 4 */
  224. #define IMX6ULL_SNVS_BASE SNVS_BASE /* Real Time Clock */
  225. #define IMX6ULL_SCTL_BASE 0x021DC000u /* System Controller */
  226. #define IMX6ULL_CLCD_BASE LCDIF_BASE /* CLCD */
  227. #define IMX6ULL_GIC_DIST_BASE (ARM_GIC_CPU_BASE+kGICDBaseOffset) /* Generic interrupt controller distributor */
  228. #define IMX6ULL_GIC_CPU_BASE (ARM_GIC_CPU_BASE+kGICCBaseOffset) /* Generic interrupt controller CPU interface */
  229. #define IMX6ULL_IOMUXC_BASE IOMUXC_BASE
  230. #define IMX6ULL_IOMUXC_SNVS_BASE IOMUXC_SNVS_BASE
  231. #define IMX6ULL_IOMUXC_GPR_BASE IOMUXC_GPR_BASE
  232. #define IMX6ULL_CCM_BASE 0x20C4000u
  233. #define IMX6ULL_CCM_ANALOGY_BASE 0x20C8000u
  234. #define IMX6ULL_PMU_BASE 0x20C8110u
  235. #define IMX6ULL_ENET1_BASE ENET1_BASE
  236. #define IMX6ULL_ENET2_BASE ENET2_BASE
  237. #define IMX6ULL_GPT1_BASE GPT1_BASE
  238. #define IMX6ULL_GPT2_BASE GPT2_BASE
  239. #define IMX6ULL_ECSPI1_BASE ECSPI1_BASE
  240. #define IMX6ULL_ECSPI2_BASE ECSPI2_BASE
  241. #define IMX6ULL_ECSPI3_BASE ECSPI3_BASE
  242. #define IMX6ULL_ECSPI4_BASE ECSPI4_BASE
  243. #define IMX6ULL_I2C1_BASE I2C1_BASE
  244. #define IMX6ULL_I2C2_BASE I2C2_BASE
  245. #define IMX6ULL_I2C3_BASE I2C3_BASE
  246. #define IMX6ULL_I2C4_BASE I2C4_BASE
  247. #define IMX6ULL_SDMA_BASE SDMAARM_BASE
  248. #define IMX6ULL_USDHC1_BASE USDHC1_BASE
  249. #define IMX6ULL_USDHC2_BASE USDHC2_BASE
  250. #define IMX6ULL_SRC_BASE SRC_BASE
  251. #define IMX6ULL_GPMI_BASE GPMI_BASE
  252. #define IMX6ULL_BCH_BASE BCH_BASE
  253. #define IMX6ULL_APBH_BASE APBH_BASE
  254. #define IMX6ULL_CSI_BASE CSI_BASE
  255. #define IMX6ULL_CAN1_BASE CAN1_BASE
  256. #define IMX6ULL_CAN2_BASE CAN2_BASE
  257. #define IMX6ULL_USBPHY1_BASE 0x20C9000u
  258. #define IMX6ULL_USBPHY2_BASE 0x20CA000u
  259. #define IMX6ULL_USB1_BASE 0x2184000u
  260. #define IMX6ULL_USB2_BASE 0x2184200u
  261. #define IMX6ULL_USB_ANALOG_BASE 0x20C81A0u
  262. /* the maximum number of gic */
  263. #define ARM_GIC_MAX_NR 1
  264. #define _internal_ro static const
  265. #define _internal_rw static
  266. #define _internal_zi static
  267. #define GET_ARRAY_NUM(ins) ((uint32_t)(sizeof(ins)/sizeof(ins[0])))
  268. #include "bsp_clock.h"
  269. /* the maximum number of interrupts */
  270. #define ARM_GIC_NR_IRQS IMX_INTERRUPT_COUNT
  271. /* the maximum entries of the interrupt table */
  272. #define MAX_HANDLERS IMX_INTERRUPT_COUNT
  273. /* the basic constants needed by gic */
  274. rt_inline rt_uint32_t platform_get_gic_dist_base(void)
  275. {
  276. rt_uint32_t gic_base;
  277. asm volatile ("mrc p15, 4, %0, c15, c0, 0" : "=r"(gic_base));
  278. return gic_base + kGICDBaseOffset;
  279. }
  280. rt_inline rt_uint32_t platform_get_gic_cpu_base(void)
  281. {
  282. rt_uint32_t gic_base;
  283. asm volatile ("mrc p15, 4, %0, c15, c0, 0" : "=r"(gic_base));
  284. return gic_base + kGICCBaseOffset;
  285. }
  286. rt_inline rt_uint32_t platform_get_periph_vaddr(rt_uint32_t paddr)
  287. {
  288. #ifdef RT_USING_SMART
  289. rt_uint32_t mask = IMX6ULL_PERIPH_SIZE - 1;
  290. return (rt_uint32_t)rt_ioremap((void*)(paddr&(~mask)), IMX6ULL_PERIPH_SIZE) + (paddr & mask);
  291. #else
  292. return paddr;
  293. #endif
  294. }
  295. #define GIC_IRQ_START 0
  296. #define GIC_ACK_INTID_MASK 0x000003ff
  297. /* the definition needed by gic.c */
  298. #define __REG32(x) (*((volatile unsigned int *)(x)))
  299. /* keep compatible with platform SDK */
  300. typedef enum {
  301. CPU_0,
  302. CPU_1,
  303. CPU_2,
  304. CPU_3,
  305. } cpuid_e;
  306. enum _gicd_sgi_filter
  307. {
  308. //! Forward the interrupt to the CPU interfaces specified in the @a target_list parameter.
  309. kGicSgiFilter_UseTargetList = 0,
  310. //! Forward the interrupt to all CPU interfaces except that of the processor that requested
  311. //! the interrupt.
  312. kGicSgiFilter_AllOtherCPUs = 1,
  313. //! Forward the interrupt only to the CPU interface of the processor that requested the
  314. //! interrupt.
  315. kGicSgiFilter_OnlyThisCPU = 2
  316. };
  317. typedef void (*irq_hdlr_t) (void);
  318. extern void rt_hw_interrupt_mask(int vector);
  319. extern void rt_hw_interrupt_umask(int vector);
  320. extern rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler,
  321. void *param, const char *name);
  322. rt_inline void register_interrupt_routine(uint32_t irq_id, irq_hdlr_t isr)
  323. {
  324. rt_hw_interrupt_install(irq_id, (rt_isr_handler_t)isr, RT_NULL, "unknown");
  325. }
  326. rt_inline void enable_interrupt(uint32_t irq_id, uint32_t cpu_id, uint32_t priority)
  327. {
  328. rt_hw_interrupt_umask(irq_id);
  329. }
  330. rt_inline void disable_interrupt(uint32_t irq_id, uint32_t cpu_id)
  331. {
  332. rt_hw_interrupt_mask(irq_id);
  333. }
  334. #endif /* __IMX6UL_H__ */