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_MOD2_OFFSET     (0x024UL)
38 #define NIC_FN_MOD_AHB_OFFSET  (0x028UL)
39 #define NIC_WR_TIDEMARK_OFFSET (0x040UL)
40 #define NIC_READ_QOS_OFFSET    (0x100UL)
41 #define NIC_WRITE_QOS_OFFSET   (0x104UL)
42 #define NIC_FN_MOD_OFFSET      (0x108UL)
43 
44 #define NIC_LCD_BASE (GPV0_BASE + 0x44000)
45 #define NIC_CSI_BASE (GPV0_BASE + 0x45000)
46 #define NIC_PXP_BASE (GPV0_BASE + 0x46000)
47 
48 #define NIC_DCP_BASE      (GPV1_BASE + 0x42000)
49 #define NIC_ENET_BASE     (GPV1_BASE + 0x43000)
50 #define NIC_USBO2_BASE    (GPV1_BASE + 0x44000)
51 #define NIC_USDHC1_BASE   (GPV1_BASE + 0x45000)
52 #define NIC_USDHC2_BASE   (GPV1_BASE + 0x46000)
53 #define NIC_TestPort_BASE (GPV1_BASE + 0x47000)
54 
55 #define NIC_CM7_BASE (GPV4_BASE + 0x42000)
56 #define NIC_DMA_BASE (GPV4_BASE + 0x43000)
57 
58 #define NIC_QOS_MASK         (0xF)
59 #define NIC_WR_TIDEMARK_MASK (0x7)
60 #define NIC_FN_MOD_AHB_MASK  (0x7)
61 #define NIC_FN_MOD_MASK      (0x1)
62 #define NIC_FN_MOD2_MASK     (0x1)
63 
64 typedef enum _nic_reg
65 {
66     /* read_qos */
67     kNIC_REG_READ_QOS_LCD      = NIC_LCD_BASE + NIC_READ_QOS_OFFSET,
68     kNIC_REG_READ_QOS_CSI      = NIC_CSI_BASE + NIC_READ_QOS_OFFSET,
69     kNIC_REG_READ_QOS_PXP      = NIC_PXP_BASE + NIC_READ_QOS_OFFSET,
70     kNIC_REG_READ_QOS_DCP      = NIC_DCP_BASE + NIC_READ_QOS_OFFSET,
71     kNIC_REG_READ_QOS_ENET     = NIC_ENET_BASE + NIC_READ_QOS_OFFSET,
72     kNIC_REG_READ_QOS_USBO2    = NIC_USBO2_BASE + NIC_READ_QOS_OFFSET,
73     kNIC_REG_READ_QOS_USDHC1   = NIC_USDHC1_BASE + NIC_READ_QOS_OFFSET,
74     kNIC_REG_READ_QOS_USDHC2   = NIC_USDHC2_BASE + NIC_READ_QOS_OFFSET,
75     kNIC_REG_READ_QOS_TestPort = NIC_TestPort_BASE + NIC_READ_QOS_OFFSET,
76     kNIC_REG_READ_QOS_CM7      = NIC_CM7_BASE + NIC_READ_QOS_OFFSET,
77     kNIC_REG_READ_QOS_DMA      = NIC_DMA_BASE + NIC_READ_QOS_OFFSET,
78 
79     /* write_qos */
80     kNIC_REG_WRITE_QOS_LCD      = NIC_LCD_BASE + NIC_WRITE_QOS_OFFSET,
81     kNIC_REG_WRITE_QOS_CSI      = NIC_CSI_BASE + NIC_WRITE_QOS_OFFSET,
82     kNIC_REG_WRITE_QOS_PXP      = NIC_PXP_BASE + NIC_WRITE_QOS_OFFSET,
83     kNIC_REG_WRITE_QOS_DCP      = NIC_DCP_BASE + NIC_WRITE_QOS_OFFSET,
84     kNIC_REG_WRITE_QOS_ENET     = NIC_ENET_BASE + NIC_WRITE_QOS_OFFSET,
85     kNIC_REG_WRITE_QOS_USBO2    = NIC_USBO2_BASE + NIC_WRITE_QOS_OFFSET,
86     kNIC_REG_WRITE_QOS_USDHC1   = NIC_USDHC1_BASE + NIC_WRITE_QOS_OFFSET,
87     kNIC_REG_WRITE_QOS_USDHC2   = NIC_USDHC2_BASE + NIC_WRITE_QOS_OFFSET,
88     kNIC_REG_WRITE_QOS_TestPort = NIC_TestPort_BASE + NIC_WRITE_QOS_OFFSET,
89     kNIC_REG_WRITE_QOS_CM7      = NIC_CM7_BASE + NIC_WRITE_QOS_OFFSET,
90     kNIC_REG_WRITE_QOS_DMA      = NIC_DMA_BASE + NIC_WRITE_QOS_OFFSET,
91 
92     /* fn_mod */
93     kNIC_REG_FN_MOD_LCD      = NIC_LCD_BASE + NIC_FN_MOD_OFFSET,
94     kNIC_REG_FN_MOD_CSI      = NIC_CSI_BASE + NIC_FN_MOD_OFFSET,
95     kNIC_REG_FN_MOD_PXP      = NIC_PXP_BASE + NIC_FN_MOD_OFFSET,
96     kNIC_REG_FN_MOD_DCP      = NIC_DCP_BASE + NIC_FN_MOD_OFFSET,
97     kNIC_REG_FN_MOD_ENET     = NIC_ENET_BASE + NIC_FN_MOD_OFFSET,
98     kNIC_REG_FN_MOD_USBO2    = NIC_USBO2_BASE + NIC_FN_MOD_OFFSET,
99     kNIC_REG_FN_MOD_USDHC1   = NIC_USDHC1_BASE + NIC_FN_MOD_OFFSET,
100     kNIC_REG_FN_MOD_USDHC2   = NIC_USDHC2_BASE + NIC_FN_MOD_OFFSET,
101     kNIC_REG_FN_MOD_TestPort = NIC_TestPort_BASE + NIC_FN_MOD_OFFSET,
102     kNIC_REG_FN_MOD_CM7      = NIC_CM7_BASE + NIC_FN_MOD_OFFSET,
103     kNIC_REG_FN_MOD_DMA      = NIC_DMA_BASE + NIC_FN_MOD_OFFSET,
104 
105     /* fn_mod2 */
106     kNIC_REG_FN_MOD2_DCP = NIC_ENET_BASE + NIC_FN_MOD2_OFFSET,
107 
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_TestPort = NIC_TestPort_BASE + NIC_FN_MOD_AHB_OFFSET,
111     kNIC_REG_FN_MOD_AHB_DMA      = NIC_DMA_BASE + NIC_FN_MOD_AHB_OFFSET,
112 
113     /* wr_tidemark */
114     kNIC_REG_WR_TIDEMARK_CM7 = NIC_CM7_BASE + NIC_WR_TIDEMARK_OFFSET,
115 } nic_reg_t;
116 
117 /* fn_mod2 */
118 typedef enum _nic_fn_mod2
119 {
120     kNIC_FN_MOD2_ENABLE = 0,
121     kNIC_FN_MOD2_BYPASS,
122 } nic_fn_mod2_t;
123 
124 /* fn_mod_ahb */
125 typedef enum _nic_fn_mod_ahb
126 {
127     kNIC_FN_MOD_AHB_RD_INCR_OVERRIDE = 0,
128     kNIC_FN_MOD_AHB_WR_INCR_OVERRIDE,
129     kNIC_FN_MOD_AHB_LOCK_OVERRIDE,
130 } nic_fn_mod_ahb_t;
131 
132 /* fn_mod */
133 typedef enum _nic_fn_mod
134 {
135     kNIC_FN_MOD_ReadIssue = 0,
136     kNIC_FN_MOD_WriteIssue,
137 } nic_fn_mod_t;
138 
139 /* read_qos/write_qos */
140 typedef enum _nic_qos
141 {
142     kNIC_QOS_0 = 0,
143     kNIC_QOS_1,
144     kNIC_QOS_2,
145     kNIC_QOS_3,
146     kNIC_QOS_4,
147     kNIC_QOS_5,
148     kNIC_QOS_6,
149     kNIC_QOS_7,
150     kNIC_QOS_8,
151     kNIC_QOS_9,
152     kNIC_QOS_10,
153     kNIC_QOS_11,
154     kNIC_QOS_12,
155     kNIC_QOS_13,
156     kNIC_QOS_14,
157     kNIC_QOS_15,
158 } nic_qos_t;
159 
160 /*******************************************************************************
161  * API
162  ******************************************************************************/
163 #if defined(__cplusplus)
164 extern "C" {
165 #endif /* __cplusplus */
166 
167 /*!
168  * @brief Set read_qos Value
169  *
170  * @param base Base address of GPV address
171  * @param value Target value (0 - 15)
172  */
NIC_SetReadQos(nic_reg_t base,nic_qos_t value)173 static inline void NIC_SetReadQos(nic_reg_t base, nic_qos_t value)
174 {
175     *(volatile uint32_t *)(base) = (value & NIC_QOS_MASK);
176     __DSB();
177 }
178 
179 /*!
180  * @brief Get read_qos Value
181  *
182  * @param base Base address of GPV address
183  * @return Current value configured
184  */
NIC_GetReadQos(nic_reg_t base)185 static inline nic_qos_t NIC_GetReadQos(nic_reg_t base)
186 {
187     return (nic_qos_t)((*(volatile uint32_t *)(base)) & NIC_QOS_MASK);
188 }
189 
190 /*!
191  * @brief Set write_qos Value
192  *
193  * @param base Base address of GPV address
194  * @param value Target value (0 - 15)
195  */
NIC_SetWriteQos(nic_reg_t base,nic_qos_t value)196 static void inline NIC_SetWriteQos(nic_reg_t base, nic_qos_t value)
197 {
198     *(volatile uint32_t *)(base) = (value & NIC_QOS_MASK);
199     __DSB();
200 }
201 
202 /*!
203  * @brief Get write_qos Value
204  *
205  * @param base Base address of GPV address
206  * @return Current value configured
207  */
NIC_GetWriteQos(nic_reg_t base)208 static inline nic_qos_t NIC_GetWriteQos(nic_reg_t base)
209 {
210     return (nic_qos_t)((*(volatile uint32_t *)(base)) & NIC_QOS_MASK);
211 }
212 
213 /*!
214  * @brief Set fn_mod_ahb Value
215  *
216  * @param base Base address of GPV address
217  * @param value Target value
218  */
NIC_SetFnModAhb(nic_reg_t base,nic_fn_mod_ahb_t value)219 static inline void NIC_SetFnModAhb(nic_reg_t base, nic_fn_mod_ahb_t value)
220 {
221     *(volatile uint32_t *)(base) = value;
222     __DSB();
223 }
224 
225 /*!
226  * @brief Get fn_mod_ahb Value
227  *
228  * @param base Base address of GPV address
229  * @return Current value configured
230  */
NIC_GetFnModAhb(nic_reg_t base)231 static inline nic_fn_mod_ahb_t NIC_GetFnModAhb(nic_reg_t base)
232 {
233     return (nic_fn_mod_ahb_t)((*(volatile uint32_t *)(base)) & NIC_FN_MOD_AHB_MASK);
234 }
235 
236 /*!
237  * @brief Set wr_tidemark Value
238  *
239  * @param base Base address of GPV address
240  * @param value Target value (0 - 7)
241  */
NIC_SetWrTideMark(nic_reg_t base,uint8_t value)242 static inline void NIC_SetWrTideMark(nic_reg_t base, uint8_t value)
243 {
244     *(volatile uint32_t *)(base) = (value & NIC_WR_TIDEMARK_MASK);
245     __DSB();
246 }
247 
248 /*!
249  * @brief Get wr_tidemark Value
250  *
251  * @param base Base address of GPV address
252  * @return Current value configured
253  */
NIC_GetWrTideMark(nic_reg_t base)254 static inline uint8_t NIC_GetWrTideMark(nic_reg_t base)
255 {
256     return (uint8_t)((*(volatile uint32_t *)(base)) & NIC_WR_TIDEMARK_MASK);
257 }
258 
259 /*!
260  * @brief Set fn_mod Value
261  *
262  * @param base Base address of GPV address
263  * @param value Target value
264  */
NIC_SetFnMod(nic_reg_t base,nic_fn_mod_t value)265 static inline void NIC_SetFnMod(nic_reg_t base, nic_fn_mod_t value)
266 {
267     *(volatile uint32_t *)(base) = value;
268     __DSB();
269 }
270 
271 /*!
272  * @brief Get fn_mod Value
273  *
274  * @param base Base address of GPV address
275  * @return Current value configured
276  */
NIC_GetFnMod(nic_reg_t base)277 static inline nic_fn_mod_t NIC_GetFnMod(nic_reg_t base)
278 {
279     return (nic_fn_mod_t)((*(volatile uint32_t *)(base)) & NIC_FN_MOD_MASK);
280 }
281 
282 /*!
283  * @brief Set fn_mod2 Value
284  *
285  * @param base Base address of GPV address
286  * @param value Target value
287  */
NIC_SetFnMod2(nic_reg_t base,nic_fn_mod_t value)288 static inline void NIC_SetFnMod2(nic_reg_t base, nic_fn_mod_t value)
289 {
290     *(volatile uint32_t *)(base) = value;
291     __DSB();
292 }
293 
294 /*!
295  * @brief Get fn_mod2 Value
296  *
297  * @param base Base address of GPV address
298  * @return Current value configured
299  */
NIC_GetFnMod2(nic_reg_t base)300 static inline nic_fn_mod2_t NIC_GetFnMod2(nic_reg_t base)
301 {
302     return (nic_fn_mod2_t)((*(volatile uint32_t *)(base)) & NIC_FN_MOD2_MASK);
303 }
304 
305 #if defined(__cplusplus)
306 }
307 #endif /* __cplusplus */
308 /*!
309  * @}
310  */
311 #endif /* _FSL_NIC301_H_ */
312