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