fsl_nic301.h 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. /*
  2. * Copyright 2020 NXP
  3. * All rights reserved.
  4. *
  5. * SPDX-License-Identifier: BSD-3-Clause
  6. */
  7. #ifndef _FSL_NIC301_H_
  8. #define _FSL_NIC301_H_
  9. #include "fsl_common.h"
  10. /*!
  11. * @addtogroup nic301
  12. * @{
  13. */
  14. /*******************************************************************************
  15. * Definitions
  16. ******************************************************************************/
  17. /* Component ID definition, used by tools. */
  18. #ifndef FSL_COMPONENT_ID
  19. #define FSL_COMPONENT_ID "platform.drivers.nic301"
  20. #endif
  21. /*! @name Driver version */
  22. /*@{*/
  23. /*! @brief NIC301 driver version 2.0.0. */
  24. #define FSL_NIC301_DRIVER_VERSION (MAKE_VERSION(2U, 0U, 0U))
  25. /*@}*/
  26. #define GPV0_BASE (0x41000000UL)
  27. #define GPV1_BASE (0x41100000UL)
  28. #define GPV4_BASE (0x41400000UL)
  29. #define NIC_FN_MOD_AHB_OFFSET (0x028UL)
  30. #define NIC_WR_TIDEMARK_OFFSET (0x040UL)
  31. #define NIC_READ_QOS_OFFSET (0x100UL)
  32. #define NIC_WRITE_QOS_OFFSET (0x104UL)
  33. #define NIC_FN_MOD_OFFSET (0x108UL)
  34. #define NIC_GC355_BASE (GPV0_BASE + 0x42000)
  35. #define NIC_PXP_BASE (GPV0_BASE + 0x43000)
  36. #define NIC_LCDIF_BASE (GPV0_BASE + 0x44000)
  37. #define NIC_LCDIFV2_BASE (GPV0_BASE + 0x45000)
  38. #define NIC_CSI_BASE (GPV0_BASE + 0x46000)
  39. #define NIC_CAAM_BASE (GPV1_BASE + 0x42000)
  40. #define NIC_ENET1G_RX_BASE (GPV1_BASE + 0x43000)
  41. #define NIC_ENET1G_TX_BASE (GPV1_BASE + 0x44000)
  42. #define NIC_ENET_BASE (GPV1_BASE + 0x45000)
  43. #define NIC_USBO2_BASE (GPV1_BASE + 0x46000)
  44. #define NIC_USDHC1_BASE (GPV1_BASE + 0x47000)
  45. #define NIC_USDHC2_BASE (GPV1_BASE + 0x48000)
  46. #define NIC_ENET_QOS_BASE (GPV1_BASE + 0x4A000)
  47. #define NIC_CM7_BASE (GPV4_BASE + 0x42000)
  48. #define NIC_LPSRMIX_M_BASE (GPV4_BASE + 0x46000)
  49. #define NIC_DMA_BASE (GPV4_BASE + 0x47000)
  50. #define NIC_IEE_BASE (GPV4_BASE + 0x48000)
  51. #define NIC_QOS_MASK (0xF)
  52. #define NIC_WR_TIDEMARK_MASK (0xF)
  53. #define NIC_FN_MOD_AHB_MASK (0x7)
  54. #define NIC_FN_MOD_MASK (0x1)
  55. typedef enum _nic_reg
  56. {
  57. /* read_qos */
  58. kNIC_REG_READ_QOS_GC355 = NIC_GC355_BASE + NIC_READ_QOS_OFFSET,
  59. kNIC_REG_READ_QOS_PXP = NIC_PXP_BASE + NIC_READ_QOS_OFFSET,
  60. kNIC_REG_READ_QOS_LCDIF = NIC_LCDIF_BASE + NIC_READ_QOS_OFFSET,
  61. kNIC_REG_READ_QOS_LCDIFV2 = NIC_LCDIFV2_BASE + NIC_READ_QOS_OFFSET,
  62. kNIC_REG_READ_QOS_CSI = NIC_CSI_BASE + NIC_READ_QOS_OFFSET,
  63. kNIC_REG_READ_QOS_CAAM = NIC_CAAM_BASE + NIC_READ_QOS_OFFSET,
  64. kNIC_REG_READ_QOS_ENET1G_RX = NIC_ENET1G_RX_BASE + NIC_READ_QOS_OFFSET,
  65. kNIC_REG_READ_QOS_ENET1G_TX = NIC_ENET1G_TX_BASE + NIC_READ_QOS_OFFSET,
  66. kNIC_REG_READ_QOS_ENET = NIC_ENET_BASE + NIC_READ_QOS_OFFSET,
  67. kNIC_REG_READ_QOS_USBO2 = NIC_USBO2_BASE + NIC_READ_QOS_OFFSET,
  68. kNIC_REG_READ_QOS_USDHC1 = NIC_USDHC1_BASE + NIC_READ_QOS_OFFSET,
  69. kNIC_REG_READ_QOS_USDHC2 = NIC_USDHC2_BASE + NIC_READ_QOS_OFFSET,
  70. kNIC_REG_READ_QOS_ENET_QOS = NIC_ENET_QOS_BASE + NIC_READ_QOS_OFFSET,
  71. kNIC_REG_READ_QOS_CM7 = NIC_CM7_BASE + NIC_READ_QOS_OFFSET,
  72. kNIC_REG_READ_QOS_DMA = NIC_DMA_BASE + NIC_READ_QOS_OFFSET,
  73. kNIC_REG_READ_QOS_IEE = NIC_IEE_BASE + NIC_READ_QOS_OFFSET,
  74. /* write_qos */
  75. kNIC_REG_WRITE_QOS_GC355 = NIC_GC355_BASE + NIC_WRITE_QOS_OFFSET,
  76. kNIC_REG_WRITE_QOS_PXP = NIC_PXP_BASE + NIC_WRITE_QOS_OFFSET,
  77. kNIC_REG_WRITE_QOS_LCDIF = NIC_LCDIF_BASE + NIC_WRITE_QOS_OFFSET,
  78. kNIC_REG_WRITE_QOS_LCDIFV2 = NIC_LCDIFV2_BASE + NIC_WRITE_QOS_OFFSET,
  79. kNIC_REG_WRITE_QOS_CSI = NIC_CSI_BASE + NIC_WRITE_QOS_OFFSET,
  80. kNIC_REG_WRITE_QOS_CAAM = NIC_CAAM_BASE + NIC_WRITE_QOS_OFFSET,
  81. kNIC_REG_WRITE_QOS_ENET1G_RX = NIC_ENET1G_RX_BASE + NIC_WRITE_QOS_OFFSET,
  82. kNIC_REG_WRITE_QOS_ENET1G_TX = NIC_ENET1G_TX_BASE + NIC_WRITE_QOS_OFFSET,
  83. kNIC_REG_WRITE_QOS_ENET = NIC_ENET_BASE + NIC_WRITE_QOS_OFFSET,
  84. kNIC_REG_WRITE_QOS_USBO2 = NIC_USBO2_BASE + NIC_WRITE_QOS_OFFSET,
  85. kNIC_REG_WRITE_QOS_USDHC1 = NIC_USDHC1_BASE + NIC_WRITE_QOS_OFFSET,
  86. kNIC_REG_WRITE_QOS_USDHC2 = NIC_USDHC2_BASE + NIC_WRITE_QOS_OFFSET,
  87. kNIC_REG_WRITE_QOS_ENET_QOS = NIC_ENET_QOS_BASE + NIC_WRITE_QOS_OFFSET,
  88. kNIC_REG_WRITE_QOS_CM7 = NIC_CM7_BASE + NIC_WRITE_QOS_OFFSET,
  89. kNIC_REG_WRITE_QOS_DMA = NIC_DMA_BASE + NIC_WRITE_QOS_OFFSET,
  90. kNIC_REG_WRITE_QOS_IEE = NIC_IEE_BASE + NIC_WRITE_QOS_OFFSET,
  91. /* fn_mod */
  92. kNIC_REG_FN_MOD_GC355 = NIC_GC355_BASE + NIC_FN_MOD_OFFSET,
  93. kNIC_REG_FN_MOD_PXP = NIC_PXP_BASE + NIC_FN_MOD_OFFSET,
  94. kNIC_REG_FN_MOD_LCDIF = NIC_LCDIF_BASE + NIC_FN_MOD_OFFSET,
  95. kNIC_REG_FN_MOD_LCDIFV2 = NIC_LCDIFV2_BASE + NIC_FN_MOD_OFFSET,
  96. kNIC_REG_FN_MOD_CSI = NIC_CSI_BASE + NIC_FN_MOD_OFFSET,
  97. kNIC_REG_FN_MOD_CAAM = NIC_CAAM_BASE + NIC_FN_MOD_OFFSET,
  98. kNIC_REG_FN_MOD_ENET1G_RX = NIC_ENET1G_RX_BASE + NIC_FN_MOD_OFFSET,
  99. kNIC_REG_FN_MOD_ENET1G_TX = NIC_ENET1G_TX_BASE + NIC_FN_MOD_OFFSET,
  100. kNIC_REG_FN_MOD_ENET = NIC_ENET_BASE + NIC_FN_MOD_OFFSET,
  101. kNIC_REG_FN_MOD_USBO2 = NIC_USBO2_BASE + NIC_FN_MOD_OFFSET,
  102. kNIC_REG_FN_MOD_USDHC1 = NIC_USDHC1_BASE + NIC_FN_MOD_OFFSET,
  103. kNIC_REG_FN_MOD_USDHC2 = NIC_USDHC2_BASE + NIC_FN_MOD_OFFSET,
  104. kNIC_REG_FN_MOD_ENET_QOS = NIC_ENET_QOS_BASE + NIC_FN_MOD_OFFSET,
  105. kNIC_REG_FN_MOD_CM7 = NIC_CM7_BASE + NIC_FN_MOD_OFFSET,
  106. kNIC_REG_FN_MOD_DMA = NIC_DMA_BASE + NIC_FN_MOD_OFFSET,
  107. kNIC_REG_FN_MOD_IEE = NIC_IEE_BASE + NIC_FN_MOD_OFFSET,
  108. /* fn_mod_ahb */
  109. kNIC_REG_FN_MOD_AHB_ENET = NIC_ENET_BASE + NIC_FN_MOD_AHB_OFFSET,
  110. kNIC_REG_FN_MOD_AHB_DMA = NIC_DMA_BASE + NIC_FN_MOD_AHB_OFFSET,
  111. /* wr_tidemark */
  112. kNIC_REG_WR_TIDEMARK_LPSRMIX_M = NIC_LPSRMIX_M_BASE + NIC_WR_TIDEMARK_OFFSET,
  113. } nic_reg_t;
  114. /* fn_mod_ahb */
  115. typedef enum _nic_fn_mod_ahb
  116. {
  117. kNIC_FN_MOD_AHB_RD_INCR_OVERRIDE = 0,
  118. kNIC_FN_MOD_AHB_WR_INCR_OVERRIDE,
  119. kNIC_FN_MOD_AHB_LOCK_OVERRIDE,
  120. } nic_fn_mod_ahb_t;
  121. /* fn_mod */
  122. typedef enum _nic_fn_mod
  123. {
  124. kNIC_FN_MOD_ReadIssue = 0,
  125. kNIC_FN_MOD_WriteIssue,
  126. } nic_fn_mod_t;
  127. /* read_qos/write_qos */
  128. typedef enum _nic_qos
  129. {
  130. kNIC_QOS_0 = 0,
  131. kNIC_QOS_1,
  132. kNIC_QOS_2,
  133. kNIC_QOS_3,
  134. kNIC_QOS_4,
  135. kNIC_QOS_5,
  136. kNIC_QOS_6,
  137. kNIC_QOS_7,
  138. kNIC_QOS_8,
  139. kNIC_QOS_9,
  140. kNIC_QOS_10,
  141. kNIC_QOS_11,
  142. kNIC_QOS_12,
  143. kNIC_QOS_13,
  144. kNIC_QOS_14,
  145. kNIC_QOS_15,
  146. } nic_qos_t;
  147. /*******************************************************************************
  148. * API
  149. ******************************************************************************/
  150. #if defined(__cplusplus)
  151. extern "C" {
  152. #endif /* __cplusplus */
  153. /*!
  154. * @brief Set read_qos Value
  155. *
  156. * @param base Base address of GPV address
  157. * @param value Target value (0 - 15)
  158. */
  159. static inline void NIC_SetReadQos(nic_reg_t base, nic_qos_t value)
  160. {
  161. *(volatile uint32_t *)(base + NIC_READ_QOS_OFFSET) = (value & NIC_QOS_MASK);
  162. __DSB();
  163. }
  164. /*!
  165. * @brief Get read_qos Value
  166. *
  167. * @param base Base address of GPV address
  168. * @return Current value configured
  169. */
  170. static inline nic_qos_t NIC_GetReadQos(nic_reg_t base)
  171. {
  172. return (nic_qos_t)((*(volatile uint32_t *)(base + NIC_READ_QOS_OFFSET)) & NIC_QOS_MASK);
  173. }
  174. /*!
  175. * @brief Set write_qos Value
  176. *
  177. * @param base Base address of GPV address
  178. * @param value Target value (0 - 15)
  179. */
  180. static void inline NIC_SetWriteQos(nic_reg_t base, nic_qos_t value)
  181. {
  182. *(volatile uint32_t *)(base + NIC_WRITE_QOS_OFFSET) = (value & NIC_QOS_MASK);
  183. __DSB();
  184. }
  185. /*!
  186. * @brief Get write_qos Value
  187. *
  188. * @param base Base address of GPV address
  189. * @return Current value configured
  190. */
  191. static inline nic_qos_t NIC_GetWriteQos(nic_reg_t base)
  192. {
  193. return (nic_qos_t)((*(volatile uint32_t *)(base + NIC_WRITE_QOS_OFFSET)) & NIC_QOS_MASK);
  194. }
  195. /*!
  196. * @brief Set fn_mod_ahb Value
  197. *
  198. * @param base Base address of GPV address
  199. * @param value Target value
  200. */
  201. static inline void NIC_SetFnModAhb(nic_reg_t base, nic_fn_mod_ahb_t v)
  202. {
  203. *(volatile uint32_t *)(base + NIC_FN_MOD_AHB_OFFSET) = v;
  204. __DSB();
  205. }
  206. /*!
  207. * @brief Get fn_mod_ahb Value
  208. *
  209. * @param base Base address of GPV address
  210. * @return Current value configured
  211. */
  212. static inline nic_fn_mod_ahb_t NIC_GetFnModAhb(nic_reg_t base)
  213. {
  214. return (nic_fn_mod_ahb_t)((*(volatile uint32_t *)(base + NIC_FN_MOD_AHB_OFFSET)) & NIC_FN_MOD_AHB_MASK);
  215. }
  216. /*!
  217. * @brief Set wr_tidemark Value
  218. *
  219. * @param base Base address of GPV address
  220. * @param value Target value (0 - 15)
  221. */
  222. static inline void NIC_SetWrTideMark(nic_reg_t base, uint8_t value)
  223. {
  224. *(volatile uint32_t *)(base + NIC_WR_TIDEMARK_OFFSET) = (value & NIC_WR_TIDEMARK_MASK);
  225. __DSB();
  226. }
  227. /*!
  228. * @brief Get wr_tidemark Value
  229. *
  230. * @param base Base address of GPV address
  231. * @return Current value configured
  232. */
  233. static inline uint8_t NIC_GetWrTideMark(nic_reg_t base)
  234. {
  235. return (uint8_t)((*(volatile uint32_t *)(base + NIC_WR_TIDEMARK_OFFSET)) & NIC_WR_TIDEMARK_MASK);
  236. }
  237. /*!
  238. * @brief Set fn_mod Value
  239. *
  240. * @param base Base address of GPV address
  241. * @param value Target value
  242. */
  243. static inline void NIC_SetFnMod(nic_reg_t base, nic_fn_mod_t value)
  244. {
  245. *(volatile uint32_t *)(base + NIC_FN_MOD_OFFSET) = value;
  246. __DSB();
  247. }
  248. /*!
  249. * @brief Get fn_mod Value
  250. *
  251. * @param base Base address of GPV address
  252. * @return Current value configured
  253. */
  254. static inline nic_fn_mod_t NIC_GetFnMod(nic_reg_t base)
  255. {
  256. return (nic_fn_mod_t)((*(volatile uint32_t *)(base + NIC_FN_MOD_OFFSET)) & NIC_FN_MOD_MASK);
  257. }
  258. #if defined(__cplusplus)
  259. }
  260. #endif /* __cplusplus */
  261. #endif /* _FSL_NIC301_H_ */