1 /* SPDX-License-Identifier: GPL-2.0 */
2 /* Renesas Ethernet Switch device driver
3  *
4  * Copyright (C) 2022 Renesas Electronics Corporation
5  */
6 
7 #ifndef __RSWITCH_H__
8 #define __RSWITCH_H__
9 
10 #include <linux/platform_device.h>
11 #include "rcar_gen4_ptp.h"
12 
13 #define RSWITCH_MAX_NUM_QUEUES	128
14 
15 #define RSWITCH_NUM_PORTS	3
16 #define rswitch_for_each_enabled_port(priv, i)		\
17 	for (i = 0; i < RSWITCH_NUM_PORTS; i++)		\
18 		if (priv->rdev[i]->disabled)		\
19 			continue;			\
20 		else
21 
22 #define rswitch_for_each_enabled_port_continue_reverse(priv, i)	\
23 	for (i--; i >= 0; i--)					\
24 		if (priv->rdev[i]->disabled)			\
25 			continue;				\
26 		else
27 
28 #define TX_RING_SIZE		1024
29 #define RX_RING_SIZE		1024
30 #define TS_RING_SIZE		(TX_RING_SIZE * RSWITCH_NUM_PORTS)
31 
32 #define PKT_BUF_SZ		1584
33 #define RSWITCH_ALIGN		128
34 #define RSWITCH_MAX_CTAG_PCP	7
35 
36 #define RSWITCH_TIMEOUT_US	100000
37 
38 #define RSWITCH_TOP_OFFSET	0x00008000
39 #define RSWITCH_COMA_OFFSET	0x00009000
40 #define RSWITCH_ETHA_OFFSET	0x0000a000	/* with RMAC */
41 #define RSWITCH_ETHA_SIZE	0x00002000	/* with RMAC */
42 #define RSWITCH_GWCA0_OFFSET	0x00010000
43 #define RSWITCH_GWCA1_OFFSET	0x00012000
44 
45 /* TODO: hardcoded ETHA/GWCA settings for now */
46 #define GWCA_IRQ_RESOURCE_NAME	"gwca0_rxtx%d"
47 #define GWCA_IRQ_NAME		"rswitch: gwca0_rxtx%d"
48 #define GWCA_NUM_IRQS		8
49 #define GWCA_INDEX		0
50 #define AGENT_INDEX_GWCA	3
51 #define GWCA_IPV_NUM		0
52 #define GWRO			RSWITCH_GWCA0_OFFSET
53 
54 #define GWCA_TS_IRQ_RESOURCE_NAME	"gwca0_rxts0"
55 #define GWCA_TS_IRQ_NAME		"rswitch: gwca0_rxts0"
56 #define GWCA_TS_IRQ_BIT			BIT(0)
57 
58 #define FWRO	0
59 #define TPRO	RSWITCH_TOP_OFFSET
60 #define CARO	RSWITCH_COMA_OFFSET
61 #define TARO	0
62 #define RMRO	0x1000
63 enum rswitch_reg {
64 	FWGC		= FWRO + 0x0000,
65 	FWTTC0		= FWRO + 0x0010,
66 	FWTTC1		= FWRO + 0x0014,
67 	FWLBMC		= FWRO + 0x0018,
68 	FWCEPTC		= FWRO + 0x0020,
69 	FWCEPRC0	= FWRO + 0x0024,
70 	FWCEPRC1	= FWRO + 0x0028,
71 	FWCEPRC2	= FWRO + 0x002c,
72 	FWCLPTC		= FWRO + 0x0030,
73 	FWCLPRC		= FWRO + 0x0034,
74 	FWCMPTC		= FWRO + 0x0040,
75 	FWEMPTC		= FWRO + 0x0044,
76 	FWSDMPTC	= FWRO + 0x0050,
77 	FWSDMPVC	= FWRO + 0x0054,
78 	FWLBWMC0	= FWRO + 0x0080,
79 	FWPC00		= FWRO + 0x0100,
80 	FWPC10		= FWRO + 0x0104,
81 	FWPC20		= FWRO + 0x0108,
82 	FWCTGC00	= FWRO + 0x0400,
83 	FWCTGC10	= FWRO + 0x0404,
84 	FWCTTC00	= FWRO + 0x0408,
85 	FWCTTC10	= FWRO + 0x040c,
86 	FWCTTC200	= FWRO + 0x0410,
87 	FWCTSC00	= FWRO + 0x0420,
88 	FWCTSC10	= FWRO + 0x0424,
89 	FWCTSC20	= FWRO + 0x0428,
90 	FWCTSC30	= FWRO + 0x042c,
91 	FWCTSC40	= FWRO + 0x0430,
92 	FWTWBFC0	= FWRO + 0x1000,
93 	FWTWBFVC0	= FWRO + 0x1004,
94 	FWTHBFC0	= FWRO + 0x1400,
95 	FWTHBFV0C0	= FWRO + 0x1404,
96 	FWTHBFV1C0	= FWRO + 0x1408,
97 	FWFOBFC0	= FWRO + 0x1800,
98 	FWFOBFV0C0	= FWRO + 0x1804,
99 	FWFOBFV1C0	= FWRO + 0x1808,
100 	FWRFC0		= FWRO + 0x1c00,
101 	FWRFVC0		= FWRO + 0x1c04,
102 	FWCFC0		= FWRO + 0x2000,
103 	FWCFMC00	= FWRO + 0x2004,
104 	FWIP4SC		= FWRO + 0x4008,
105 	FWIP6SC		= FWRO + 0x4018,
106 	FWIP6OC		= FWRO + 0x401c,
107 	FWL2SC		= FWRO + 0x4020,
108 	FWSFHEC		= FWRO + 0x4030,
109 	FWSHCR0		= FWRO + 0x4040,
110 	FWSHCR1		= FWRO + 0x4044,
111 	FWSHCR2		= FWRO + 0x4048,
112 	FWSHCR3		= FWRO + 0x404c,
113 	FWSHCR4		= FWRO + 0x4050,
114 	FWSHCR5		= FWRO + 0x4054,
115 	FWSHCR6		= FWRO + 0x4058,
116 	FWSHCR7		= FWRO + 0x405c,
117 	FWSHCR8		= FWRO + 0x4060,
118 	FWSHCR9		= FWRO + 0x4064,
119 	FWSHCR10	= FWRO + 0x4068,
120 	FWSHCR11	= FWRO + 0x406c,
121 	FWSHCR12	= FWRO + 0x4070,
122 	FWSHCR13	= FWRO + 0x4074,
123 	FWSHCRR		= FWRO + 0x4078,
124 	FWLTHHEC	= FWRO + 0x4090,
125 	FWLTHHC		= FWRO + 0x4094,
126 	FWLTHTL0	= FWRO + 0x40a0,
127 	FWLTHTL1	= FWRO + 0x40a4,
128 	FWLTHTL2	= FWRO + 0x40a8,
129 	FWLTHTL3	= FWRO + 0x40ac,
130 	FWLTHTL4	= FWRO + 0x40b0,
131 	FWLTHTL5	= FWRO + 0x40b4,
132 	FWLTHTL6	= FWRO + 0x40b8,
133 	FWLTHTL7	= FWRO + 0x40bc,
134 	FWLTHTL80	= FWRO + 0x40c0,
135 	FWLTHTL9	= FWRO + 0x40d0,
136 	FWLTHTLR	= FWRO + 0x40d4,
137 	FWLTHTIM	= FWRO + 0x40e0,
138 	FWLTHTEM	= FWRO + 0x40e4,
139 	FWLTHTS0	= FWRO + 0x4100,
140 	FWLTHTS1	= FWRO + 0x4104,
141 	FWLTHTS2	= FWRO + 0x4108,
142 	FWLTHTS3	= FWRO + 0x410c,
143 	FWLTHTS4	= FWRO + 0x4110,
144 	FWLTHTSR0	= FWRO + 0x4120,
145 	FWLTHTSR1	= FWRO + 0x4124,
146 	FWLTHTSR2	= FWRO + 0x4128,
147 	FWLTHTSR3	= FWRO + 0x412c,
148 	FWLTHTSR40	= FWRO + 0x4130,
149 	FWLTHTSR5	= FWRO + 0x4140,
150 	FWLTHTR		= FWRO + 0x4150,
151 	FWLTHTRR0	= FWRO + 0x4154,
152 	FWLTHTRR1	= FWRO + 0x4158,
153 	FWLTHTRR2	= FWRO + 0x415c,
154 	FWLTHTRR3	= FWRO + 0x4160,
155 	FWLTHTRR4	= FWRO + 0x4164,
156 	FWLTHTRR5	= FWRO + 0x4168,
157 	FWLTHTRR6	= FWRO + 0x416c,
158 	FWLTHTRR7	= FWRO + 0x4170,
159 	FWLTHTRR8	= FWRO + 0x4174,
160 	FWLTHTRR9	= FWRO + 0x4180,
161 	FWLTHTRR10	= FWRO + 0x4190,
162 	FWIPHEC		= FWRO + 0x4214,
163 	FWIPHC		= FWRO + 0x4218,
164 	FWIPTL0		= FWRO + 0x4220,
165 	FWIPTL1		= FWRO + 0x4224,
166 	FWIPTL2		= FWRO + 0x4228,
167 	FWIPTL3		= FWRO + 0x422c,
168 	FWIPTL4		= FWRO + 0x4230,
169 	FWIPTL5		= FWRO + 0x4234,
170 	FWIPTL6		= FWRO + 0x4238,
171 	FWIPTL7		= FWRO + 0x4240,
172 	FWIPTL8		= FWRO + 0x4250,
173 	FWIPTLR		= FWRO + 0x4254,
174 	FWIPTIM		= FWRO + 0x4260,
175 	FWIPTEM		= FWRO + 0x4264,
176 	FWIPTS0		= FWRO + 0x4270,
177 	FWIPTS1		= FWRO + 0x4274,
178 	FWIPTS2		= FWRO + 0x4278,
179 	FWIPTS3		= FWRO + 0x427c,
180 	FWIPTS4		= FWRO + 0x4280,
181 	FWIPTSR0	= FWRO + 0x4284,
182 	FWIPTSR1	= FWRO + 0x4288,
183 	FWIPTSR2	= FWRO + 0x428c,
184 	FWIPTSR3	= FWRO + 0x4290,
185 	FWIPTSR4	= FWRO + 0x42a0,
186 	FWIPTR		= FWRO + 0x42b0,
187 	FWIPTRR0	= FWRO + 0x42b4,
188 	FWIPTRR1	= FWRO + 0x42b8,
189 	FWIPTRR2	= FWRO + 0x42bc,
190 	FWIPTRR3	= FWRO + 0x42c0,
191 	FWIPTRR4	= FWRO + 0x42c4,
192 	FWIPTRR5	= FWRO + 0x42c8,
193 	FWIPTRR6	= FWRO + 0x42cc,
194 	FWIPTRR7	= FWRO + 0x42d0,
195 	FWIPTRR8	= FWRO + 0x42e0,
196 	FWIPTRR9	= FWRO + 0x42f0,
197 	FWIPHLEC	= FWRO + 0x4300,
198 	FWIPAGUSPC	= FWRO + 0x4500,
199 	FWIPAGC		= FWRO + 0x4504,
200 	FWIPAGM0	= FWRO + 0x4510,
201 	FWIPAGM1	= FWRO + 0x4514,
202 	FWIPAGM2	= FWRO + 0x4518,
203 	FWIPAGM3	= FWRO + 0x451c,
204 	FWIPAGM4	= FWRO + 0x4520,
205 	FWMACHEC	= FWRO + 0x4620,
206 	FWMACHC		= FWRO + 0x4624,
207 	FWMACTL0	= FWRO + 0x4630,
208 	FWMACTL1	= FWRO + 0x4634,
209 	FWMACTL2	= FWRO + 0x4638,
210 	FWMACTL3	= FWRO + 0x463c,
211 	FWMACTL4	= FWRO + 0x4640,
212 	FWMACTL5	= FWRO + 0x4650,
213 	FWMACTLR	= FWRO + 0x4654,
214 	FWMACTIM	= FWRO + 0x4660,
215 	FWMACTEM	= FWRO + 0x4664,
216 	FWMACTS0	= FWRO + 0x4670,
217 	FWMACTS1	= FWRO + 0x4674,
218 	FWMACTSR0	= FWRO + 0x4678,
219 	FWMACTSR1	= FWRO + 0x467c,
220 	FWMACTSR2	= FWRO + 0x4680,
221 	FWMACTSR3	= FWRO + 0x4690,
222 	FWMACTR		= FWRO + 0x46a0,
223 	FWMACTRR0	= FWRO + 0x46a4,
224 	FWMACTRR1	= FWRO + 0x46a8,
225 	FWMACTRR2	= FWRO + 0x46ac,
226 	FWMACTRR3	= FWRO + 0x46b0,
227 	FWMACTRR4	= FWRO + 0x46b4,
228 	FWMACTRR5	= FWRO + 0x46c0,
229 	FWMACTRR6	= FWRO + 0x46d0,
230 	FWMACHLEC	= FWRO + 0x4700,
231 	FWMACAGUSPC	= FWRO + 0x4880,
232 	FWMACAGC	= FWRO + 0x4884,
233 	FWMACAGM0	= FWRO + 0x4888,
234 	FWMACAGM1	= FWRO + 0x488c,
235 	FWVLANTEC	= FWRO + 0x4900,
236 	FWVLANTL0	= FWRO + 0x4910,
237 	FWVLANTL1	= FWRO + 0x4914,
238 	FWVLANTL2	= FWRO + 0x4918,
239 	FWVLANTL3	= FWRO + 0x4920,
240 	FWVLANTL4	= FWRO + 0x4930,
241 	FWVLANTLR	= FWRO + 0x4934,
242 	FWVLANTIM	= FWRO + 0x4940,
243 	FWVLANTEM	= FWRO + 0x4944,
244 	FWVLANTS	= FWRO + 0x4950,
245 	FWVLANTSR0	= FWRO + 0x4954,
246 	FWVLANTSR1	= FWRO + 0x4958,
247 	FWVLANTSR2	= FWRO + 0x4960,
248 	FWVLANTSR3	= FWRO + 0x4970,
249 	FWPBFC0		= FWRO + 0x4a00,
250 	FWPBFCSDC00	= FWRO + 0x4a04,
251 	FWL23URL0	= FWRO + 0x4e00,
252 	FWL23URL1	= FWRO + 0x4e04,
253 	FWL23URL2	= FWRO + 0x4e08,
254 	FWL23URL3	= FWRO + 0x4e0c,
255 	FWL23URLR	= FWRO + 0x4e10,
256 	FWL23UTIM	= FWRO + 0x4e20,
257 	FWL23URR	= FWRO + 0x4e30,
258 	FWL23URRR0	= FWRO + 0x4e34,
259 	FWL23URRR1	= FWRO + 0x4e38,
260 	FWL23URRR2	= FWRO + 0x4e3c,
261 	FWL23URRR3	= FWRO + 0x4e40,
262 	FWL23URMC0	= FWRO + 0x4f00,
263 	FWPMFGC0	= FWRO + 0x5000,
264 	FWPGFC0		= FWRO + 0x5100,
265 	FWPGFIGSC0	= FWRO + 0x5104,
266 	FWPGFENC0	= FWRO + 0x5108,
267 	FWPGFENM0	= FWRO + 0x510c,
268 	FWPGFCSTC00	= FWRO + 0x5110,
269 	FWPGFCSTC10	= FWRO + 0x5114,
270 	FWPGFCSTM00	= FWRO + 0x5118,
271 	FWPGFCSTM10	= FWRO + 0x511c,
272 	FWPGFCTC0	= FWRO + 0x5120,
273 	FWPGFCTM0	= FWRO + 0x5124,
274 	FWPGFHCC0	= FWRO + 0x5128,
275 	FWPGFSM0	= FWRO + 0x512c,
276 	FWPGFGC0	= FWRO + 0x5130,
277 	FWPGFGL0	= FWRO + 0x5500,
278 	FWPGFGL1	= FWRO + 0x5504,
279 	FWPGFGLR	= FWRO + 0x5518,
280 	FWPGFGR		= FWRO + 0x5510,
281 	FWPGFGRR0	= FWRO + 0x5514,
282 	FWPGFGRR1	= FWRO + 0x5518,
283 	FWPGFRIM	= FWRO + 0x5520,
284 	FWPMTRFC0	= FWRO + 0x5600,
285 	FWPMTRCBSC0	= FWRO + 0x5604,
286 	FWPMTRC0RC0	= FWRO + 0x5608,
287 	FWPMTREBSC0	= FWRO + 0x560c,
288 	FWPMTREIRC0	= FWRO + 0x5610,
289 	FWPMTRFM0	= FWRO + 0x5614,
290 	FWFTL0		= FWRO + 0x6000,
291 	FWFTL1		= FWRO + 0x6004,
292 	FWFTLR		= FWRO + 0x6008,
293 	FWFTOC		= FWRO + 0x6010,
294 	FWFTOPC		= FWRO + 0x6014,
295 	FWFTIM		= FWRO + 0x6020,
296 	FWFTR		= FWRO + 0x6030,
297 	FWFTRR0		= FWRO + 0x6034,
298 	FWFTRR1		= FWRO + 0x6038,
299 	FWFTRR2		= FWRO + 0x603c,
300 	FWSEQNGC0	= FWRO + 0x6100,
301 	FWSEQNGM0	= FWRO + 0x6104,
302 	FWSEQNRC	= FWRO + 0x6200,
303 	FWCTFDCN0	= FWRO + 0x6300,
304 	FWLTHFDCN0	= FWRO + 0x6304,
305 	FWIPFDCN0	= FWRO + 0x6308,
306 	FWLTWFDCN0	= FWRO + 0x630c,
307 	FWPBFDCN0	= FWRO + 0x6310,
308 	FWMHLCN0	= FWRO + 0x6314,
309 	FWIHLCN0	= FWRO + 0x6318,
310 	FWICRDCN0	= FWRO + 0x6500,
311 	FWWMRDCN0	= FWRO + 0x6504,
312 	FWCTRDCN0	= FWRO + 0x6508,
313 	FWLTHRDCN0	= FWRO + 0x650c,
314 	FWIPRDCN0	= FWRO + 0x6510,
315 	FWLTWRDCN0	= FWRO + 0x6514,
316 	FWPBRDCN0	= FWRO + 0x6518,
317 	FWPMFDCN0	= FWRO + 0x6700,
318 	FWPGFDCN0	= FWRO + 0x6780,
319 	FWPMGDCN0	= FWRO + 0x6800,
320 	FWPMYDCN0	= FWRO + 0x6804,
321 	FWPMRDCN0	= FWRO + 0x6808,
322 	FWFRPPCN0	= FWRO + 0x6a00,
323 	FWFRDPCN0	= FWRO + 0x6a04,
324 	FWEIS00		= FWRO + 0x7900,
325 	FWEIE00		= FWRO + 0x7904,
326 	FWEID00		= FWRO + 0x7908,
327 	FWEIS1		= FWRO + 0x7a00,
328 	FWEIE1		= FWRO + 0x7a04,
329 	FWEID1		= FWRO + 0x7a08,
330 	FWEIS2		= FWRO + 0x7a10,
331 	FWEIE2		= FWRO + 0x7a14,
332 	FWEID2		= FWRO + 0x7a18,
333 	FWEIS3		= FWRO + 0x7a20,
334 	FWEIE3		= FWRO + 0x7a24,
335 	FWEID3		= FWRO + 0x7a28,
336 	FWEIS4		= FWRO + 0x7a30,
337 	FWEIE4		= FWRO + 0x7a34,
338 	FWEID4		= FWRO + 0x7a38,
339 	FWEIS5		= FWRO + 0x7a40,
340 	FWEIE5		= FWRO + 0x7a44,
341 	FWEID5		= FWRO + 0x7a48,
342 	FWEIS60		= FWRO + 0x7a50,
343 	FWEIE60		= FWRO + 0x7a54,
344 	FWEID60		= FWRO + 0x7a58,
345 	FWEIS61		= FWRO + 0x7a60,
346 	FWEIE61		= FWRO + 0x7a64,
347 	FWEID61		= FWRO + 0x7a68,
348 	FWEIS62		= FWRO + 0x7a70,
349 	FWEIE62		= FWRO + 0x7a74,
350 	FWEID62		= FWRO + 0x7a78,
351 	FWEIS63		= FWRO + 0x7a80,
352 	FWEIE63		= FWRO + 0x7a84,
353 	FWEID63		= FWRO + 0x7a88,
354 	FWEIS70		= FWRO + 0x7a90,
355 	FWEIE70		= FWRO + 0x7A94,
356 	FWEID70		= FWRO + 0x7a98,
357 	FWEIS71		= FWRO + 0x7aa0,
358 	FWEIE71		= FWRO + 0x7aa4,
359 	FWEID71		= FWRO + 0x7aa8,
360 	FWEIS72		= FWRO + 0x7ab0,
361 	FWEIE72		= FWRO + 0x7ab4,
362 	FWEID72		= FWRO + 0x7ab8,
363 	FWEIS73		= FWRO + 0x7ac0,
364 	FWEIE73		= FWRO + 0x7ac4,
365 	FWEID73		= FWRO + 0x7ac8,
366 	FWEIS80		= FWRO + 0x7ad0,
367 	FWEIE80		= FWRO + 0x7ad4,
368 	FWEID80		= FWRO + 0x7ad8,
369 	FWEIS81		= FWRO + 0x7ae0,
370 	FWEIE81		= FWRO + 0x7ae4,
371 	FWEID81		= FWRO + 0x7ae8,
372 	FWEIS82		= FWRO + 0x7af0,
373 	FWEIE82		= FWRO + 0x7af4,
374 	FWEID82		= FWRO + 0x7af8,
375 	FWEIS83		= FWRO + 0x7b00,
376 	FWEIE83		= FWRO + 0x7b04,
377 	FWEID83		= FWRO + 0x7b08,
378 	FWMIS0		= FWRO + 0x7c00,
379 	FWMIE0		= FWRO + 0x7c04,
380 	FWMID0		= FWRO + 0x7c08,
381 	FWSCR0		= FWRO + 0x7d00,
382 	FWSCR1		= FWRO + 0x7d04,
383 	FWSCR2		= FWRO + 0x7d08,
384 	FWSCR3		= FWRO + 0x7d0c,
385 	FWSCR4		= FWRO + 0x7d10,
386 	FWSCR5		= FWRO + 0x7d14,
387 	FWSCR6		= FWRO + 0x7d18,
388 	FWSCR7		= FWRO + 0x7d1c,
389 	FWSCR8		= FWRO + 0x7d20,
390 	FWSCR9		= FWRO + 0x7d24,
391 	FWSCR10		= FWRO + 0x7d28,
392 	FWSCR11		= FWRO + 0x7d2c,
393 	FWSCR12		= FWRO + 0x7d30,
394 	FWSCR13		= FWRO + 0x7d34,
395 	FWSCR14		= FWRO + 0x7d38,
396 	FWSCR15		= FWRO + 0x7d3c,
397 	FWSCR16		= FWRO + 0x7d40,
398 	FWSCR17		= FWRO + 0x7d44,
399 	FWSCR18		= FWRO + 0x7d48,
400 	FWSCR19		= FWRO + 0x7d4c,
401 	FWSCR20		= FWRO + 0x7d50,
402 	FWSCR21		= FWRO + 0x7d54,
403 	FWSCR22		= FWRO + 0x7d58,
404 	FWSCR23		= FWRO + 0x7d5c,
405 	FWSCR24		= FWRO + 0x7d60,
406 	FWSCR25		= FWRO + 0x7d64,
407 	FWSCR26		= FWRO + 0x7d68,
408 	FWSCR27		= FWRO + 0x7d6c,
409 	FWSCR28		= FWRO + 0x7d70,
410 	FWSCR29		= FWRO + 0x7d74,
411 	FWSCR30		= FWRO + 0x7d78,
412 	FWSCR31		= FWRO + 0x7d7c,
413 	FWSCR32		= FWRO + 0x7d80,
414 	FWSCR33		= FWRO + 0x7d84,
415 	FWSCR34		= FWRO + 0x7d88,
416 	FWSCR35		= FWRO + 0x7d8c,
417 	FWSCR36		= FWRO + 0x7d90,
418 	FWSCR37		= FWRO + 0x7d94,
419 	FWSCR38		= FWRO + 0x7d98,
420 	FWSCR39		= FWRO + 0x7d9c,
421 	FWSCR40		= FWRO + 0x7da0,
422 	FWSCR41		= FWRO + 0x7da4,
423 	FWSCR42		= FWRO + 0x7da8,
424 	FWSCR43		= FWRO + 0x7dac,
425 	FWSCR44		= FWRO + 0x7db0,
426 	FWSCR45		= FWRO + 0x7db4,
427 	FWSCR46		= FWRO + 0x7db8,
428 
429 	TPEMIMC0	= TPRO + 0x0000,
430 	TPEMIMC1	= TPRO + 0x0004,
431 	TPEMIMC2	= TPRO + 0x0008,
432 	TPEMIMC3	= TPRO + 0x000c,
433 	TPEMIMC4	= TPRO + 0x0010,
434 	TPEMIMC5	= TPRO + 0x0014,
435 	TPEMIMC60	= TPRO + 0x0080,
436 	TPEMIMC70	= TPRO + 0x0100,
437 	TSIM		= TPRO + 0x0700,
438 	TFIM		= TPRO + 0x0704,
439 	TCIM		= TPRO + 0x0708,
440 	TGIM0		= TPRO + 0x0710,
441 	TGIM1		= TPRO + 0x0714,
442 	TEIM0		= TPRO + 0x0720,
443 	TEIM1		= TPRO + 0x0724,
444 	TEIM2		= TPRO + 0x0728,
445 
446 	RIPV		= CARO + 0x0000,
447 	RRC		= CARO + 0x0004,
448 	RCEC		= CARO + 0x0008,
449 	RCDC		= CARO + 0x000c,
450 	RSSIS		= CARO + 0x0010,
451 	RSSIE		= CARO + 0x0014,
452 	RSSID		= CARO + 0x0018,
453 	CABPIBWMC	= CARO + 0x0020,
454 	CABPWMLC	= CARO + 0x0040,
455 	CABPPFLC0	= CARO + 0x0050,
456 	CABPPWMLC0	= CARO + 0x0060,
457 	CABPPPFLC00	= CARO + 0x00a0,
458 	CABPULC		= CARO + 0x0100,
459 	CABPIRM		= CARO + 0x0140,
460 	CABPPCM		= CARO + 0x0144,
461 	CABPLCM		= CARO + 0x0148,
462 	CABPCPM		= CARO + 0x0180,
463 	CABPMCPM	= CARO + 0x0200,
464 	CARDNM		= CARO + 0x0280,
465 	CARDMNM		= CARO + 0x0284,
466 	CARDCN		= CARO + 0x0290,
467 	CAEIS0		= CARO + 0x0300,
468 	CAEIE0		= CARO + 0x0304,
469 	CAEID0		= CARO + 0x0308,
470 	CAEIS1		= CARO + 0x0310,
471 	CAEIE1		= CARO + 0x0314,
472 	CAEID1		= CARO + 0x0318,
473 	CAMIS0		= CARO + 0x0340,
474 	CAMIE0		= CARO + 0x0344,
475 	CAMID0		= CARO + 0x0348,
476 	CAMIS1		= CARO + 0x0350,
477 	CAMIE1		= CARO + 0x0354,
478 	CAMID1		= CARO + 0x0358,
479 	CASCR		= CARO + 0x0380,
480 
481 	EAMC		= TARO + 0x0000,
482 	EAMS		= TARO + 0x0004,
483 	EAIRC		= TARO + 0x0010,
484 	EATDQSC		= TARO + 0x0014,
485 	EATDQC		= TARO + 0x0018,
486 	EATDQAC		= TARO + 0x001c,
487 	EATPEC		= TARO + 0x0020,
488 	EATMFSC0	= TARO + 0x0040,
489 	EATDQDC0	= TARO + 0x0060,
490 	EATDQM0		= TARO + 0x0080,
491 	EATDQMLM0	= TARO + 0x00a0,
492 	EACTQC		= TARO + 0x0100,
493 	EACTDQDC	= TARO + 0x0104,
494 	EACTDQM		= TARO + 0x0108,
495 	EACTDQMLM	= TARO + 0x010c,
496 	EAVCC		= TARO + 0x0130,
497 	EAVTC		= TARO + 0x0134,
498 	EATTFC		= TARO + 0x0138,
499 	EACAEC		= TARO + 0x0200,
500 	EACC		= TARO + 0x0204,
501 	EACAIVC0	= TARO + 0x0220,
502 	EACAULC0	= TARO + 0x0240,
503 	EACOEM		= TARO + 0x0260,
504 	EACOIVM0	= TARO + 0x0280,
505 	EACOULM0	= TARO + 0x02a0,
506 	EACGSM		= TARO + 0x02c0,
507 	EATASC		= TARO + 0x0300,
508 	EATASENC0	= TARO + 0x0320,
509 	EATASCTENC	= TARO + 0x0340,
510 	EATASENM0	= TARO + 0x0360,
511 	EATASCTENM	= TARO + 0x0380,
512 	EATASCSTC0	= TARO + 0x03a0,
513 	EATASCSTC1	= TARO + 0x03a4,
514 	EATASCSTM0	= TARO + 0x03a8,
515 	EATASCSTM1	= TARO + 0x03ac,
516 	EATASCTC	= TARO + 0x03b0,
517 	EATASCTM	= TARO + 0x03b4,
518 	EATASGL0	= TARO + 0x03c0,
519 	EATASGL1	= TARO + 0x03c4,
520 	EATASGLR	= TARO + 0x03c8,
521 	EATASGR		= TARO + 0x03d0,
522 	EATASGRR	= TARO + 0x03d4,
523 	EATASHCC	= TARO + 0x03e0,
524 	EATASRIRM	= TARO + 0x03e4,
525 	EATASSM		= TARO + 0x03e8,
526 	EAUSMFSECN	= TARO + 0x0400,
527 	EATFECN		= TARO + 0x0404,
528 	EAFSECN		= TARO + 0x0408,
529 	EADQOECN	= TARO + 0x040c,
530 	EADQSECN	= TARO + 0x0410,
531 	EACKSECN	= TARO + 0x0414,
532 	EAEIS0		= TARO + 0x0500,
533 	EAEIE0		= TARO + 0x0504,
534 	EAEID0		= TARO + 0x0508,
535 	EAEIS1		= TARO + 0x0510,
536 	EAEIE1		= TARO + 0x0514,
537 	EAEID1		= TARO + 0x0518,
538 	EAEIS2		= TARO + 0x0520,
539 	EAEIE2		= TARO + 0x0524,
540 	EAEID2		= TARO + 0x0528,
541 	EASCR		= TARO + 0x0580,
542 
543 	MPSM		= RMRO + 0x0000,
544 	MPIC		= RMRO + 0x0004,
545 	MPIM		= RMRO + 0x0008,
546 	MIOC		= RMRO + 0x0010,
547 	MIOM		= RMRO + 0x0014,
548 	MXMS		= RMRO + 0x0018,
549 	MTFFC		= RMRO + 0x0020,
550 	MTPFC		= RMRO + 0x0024,
551 	MTPFC2		= RMRO + 0x0028,
552 	MTPFC30		= RMRO + 0x0030,
553 	MTATC0		= RMRO + 0x0050,
554 	MTIM		= RMRO + 0x0060,
555 	MRGC		= RMRO + 0x0080,
556 	MRMAC0		= RMRO + 0x0084,
557 	MRMAC1		= RMRO + 0x0088,
558 	MRAFC		= RMRO + 0x008c,
559 	MRSCE		= RMRO + 0x0090,
560 	MRSCP		= RMRO + 0x0094,
561 	MRSCC		= RMRO + 0x0098,
562 	MRFSCE		= RMRO + 0x009c,
563 	MRFSCP		= RMRO + 0x00a0,
564 	MTRC		= RMRO + 0x00a4,
565 	MRIM		= RMRO + 0x00a8,
566 	MRPFM		= RMRO + 0x00ac,
567 	MPFC0		= RMRO + 0x0100,
568 	MLVC		= RMRO + 0x0180,
569 	MEEEC		= RMRO + 0x0184,
570 	MLBC		= RMRO + 0x0188,
571 	MXGMIIC		= RMRO + 0x0190,
572 	MPCH		= RMRO + 0x0194,
573 	MANC		= RMRO + 0x0198,
574 	MANM		= RMRO + 0x019c,
575 	MPLCA1		= RMRO + 0x01a0,
576 	MPLCA2		= RMRO + 0x01a4,
577 	MPLCA3		= RMRO + 0x01a8,
578 	MPLCA4		= RMRO + 0x01ac,
579 	MPLCAM		= RMRO + 0x01b0,
580 	MHDC1		= RMRO + 0x01c0,
581 	MHDC2		= RMRO + 0x01c4,
582 	MEIS		= RMRO + 0x0200,
583 	MEIE		= RMRO + 0x0204,
584 	MEID		= RMRO + 0x0208,
585 	MMIS0		= RMRO + 0x0210,
586 	MMIE0		= RMRO + 0x0214,
587 	MMID0		= RMRO + 0x0218,
588 	MMIS1		= RMRO + 0x0220,
589 	MMIE1		= RMRO + 0x0224,
590 	MMID1		= RMRO + 0x0228,
591 	MMIS2		= RMRO + 0x0230,
592 	MMIE2		= RMRO + 0x0234,
593 	MMID2		= RMRO + 0x0238,
594 	MMPFTCT		= RMRO + 0x0300,
595 	MAPFTCT		= RMRO + 0x0304,
596 	MPFRCT		= RMRO + 0x0308,
597 	MFCICT		= RMRO + 0x030c,
598 	MEEECT		= RMRO + 0x0310,
599 	MMPCFTCT0	= RMRO + 0x0320,
600 	MAPCFTCT0	= RMRO + 0x0330,
601 	MPCFRCT0	= RMRO + 0x0340,
602 	MHDCC		= RMRO + 0x0350,
603 	MROVFC		= RMRO + 0x0354,
604 	MRHCRCEC	= RMRO + 0x0358,
605 	MRXBCE		= RMRO + 0x0400,
606 	MRXBCP		= RMRO + 0x0404,
607 	MRGFCE		= RMRO + 0x0408,
608 	MRGFCP		= RMRO + 0x040c,
609 	MRBFC		= RMRO + 0x0410,
610 	MRMFC		= RMRO + 0x0414,
611 	MRUFC		= RMRO + 0x0418,
612 	MRPEFC		= RMRO + 0x041c,
613 	MRNEFC		= RMRO + 0x0420,
614 	MRFMEFC		= RMRO + 0x0424,
615 	MRFFMEFC	= RMRO + 0x0428,
616 	MRCFCEFC	= RMRO + 0x042c,
617 	MRFCEFC		= RMRO + 0x0430,
618 	MRRCFEFC	= RMRO + 0x0434,
619 	MRUEFC		= RMRO + 0x043c,
620 	MROEFC		= RMRO + 0x0440,
621 	MRBOEC		= RMRO + 0x0444,
622 	MTXBCE		= RMRO + 0x0500,
623 	MTXBCP		= RMRO + 0x0504,
624 	MTGFCE		= RMRO + 0x0508,
625 	MTGFCP		= RMRO + 0x050c,
626 	MTBFC		= RMRO + 0x0510,
627 	MTMFC		= RMRO + 0x0514,
628 	MTUFC		= RMRO + 0x0518,
629 	MTEFC		= RMRO + 0x051c,
630 
631 	GWMC		= GWRO + 0x0000,
632 	GWMS		= GWRO + 0x0004,
633 	GWIRC		= GWRO + 0x0010,
634 	GWRDQSC		= GWRO + 0x0014,
635 	GWRDQC		= GWRO + 0x0018,
636 	GWRDQAC		= GWRO + 0x001c,
637 	GWRGC		= GWRO + 0x0020,
638 	GWRMFSC0	= GWRO + 0x0040,
639 	GWRDQDC0	= GWRO + 0x0060,
640 	GWRDQM0		= GWRO + 0x0080,
641 	GWRDQMLM0	= GWRO + 0x00a0,
642 	GWMTIRM		= GWRO + 0x0100,
643 	GWMSTLS		= GWRO + 0x0104,
644 	GWMSTLR		= GWRO + 0x0108,
645 	GWMSTSS		= GWRO + 0x010c,
646 	GWMSTSR		= GWRO + 0x0110,
647 	GWMAC0		= GWRO + 0x0120,
648 	GWMAC1		= GWRO + 0x0124,
649 	GWVCC		= GWRO + 0x0130,
650 	GWVTC		= GWRO + 0x0134,
651 	GWTTFC		= GWRO + 0x0138,
652 	GWTDCAC00	= GWRO + 0x0140,
653 	GWTDCAC10	= GWRO + 0x0144,
654 	GWTSDCC0	= GWRO + 0x0160,
655 	GWTNM		= GWRO + 0x0180,
656 	GWTMNM		= GWRO + 0x0184,
657 	GWAC		= GWRO + 0x0190,
658 	GWDCBAC0	= GWRO + 0x0194,
659 	GWDCBAC1	= GWRO + 0x0198,
660 	GWIICBSC	= GWRO + 0x019c,
661 	GWMDNC		= GWRO + 0x01a0,
662 	GWTRC0		= GWRO + 0x0200,
663 	GWTPC0		= GWRO + 0x0300,
664 	GWARIRM		= GWRO + 0x0380,
665 	GWDCC0		= GWRO + 0x0400,
666 	GWAARSS		= GWRO + 0x0800,
667 	GWAARSR0	= GWRO + 0x0804,
668 	GWAARSR1	= GWRO + 0x0808,
669 	GWIDAUAS0	= GWRO + 0x0840,
670 	GWIDASM0	= GWRO + 0x0880,
671 	GWIDASAM00	= GWRO + 0x0900,
672 	GWIDASAM10	= GWRO + 0x0904,
673 	GWIDACAM00	= GWRO + 0x0980,
674 	GWIDACAM10	= GWRO + 0x0984,
675 	GWGRLC		= GWRO + 0x0a00,
676 	GWGRLULC	= GWRO + 0x0a04,
677 	GWRLIVC0	= GWRO + 0x0a80,
678 	GWRLULC0	= GWRO + 0x0a84,
679 	GWIDPC		= GWRO + 0x0b00,
680 	GWIDC0		= GWRO + 0x0c00,
681 	GWDIS0		= GWRO + 0x1100,
682 	GWDIE0		= GWRO + 0x1104,
683 	GWDID0		= GWRO + 0x1108,
684 	GWTSDIS		= GWRO + 0x1180,
685 	GWTSDIE		= GWRO + 0x1184,
686 	GWTSDID		= GWRO + 0x1188,
687 	GWEIS0		= GWRO + 0x1190,
688 	GWEIE0		= GWRO + 0x1194,
689 	GWEID0		= GWRO + 0x1198,
690 	GWEIS1		= GWRO + 0x11a0,
691 	GWEIE1		= GWRO + 0x11a4,
692 	GWEID1		= GWRO + 0x11a8,
693 	GWEIS20		= GWRO + 0x1200,
694 	GWEIE20		= GWRO + 0x1204,
695 	GWEID20		= GWRO + 0x1208,
696 	GWEIS3		= GWRO + 0x1280,
697 	GWEIE3		= GWRO + 0x1284,
698 	GWEID3		= GWRO + 0x1288,
699 	GWEIS4		= GWRO + 0x1290,
700 	GWEIE4		= GWRO + 0x1294,
701 	GWEID4		= GWRO + 0x1298,
702 	GWEIS5		= GWRO + 0x12a0,
703 	GWEIE5		= GWRO + 0x12a4,
704 	GWEID5		= GWRO + 0x12a8,
705 	GWSCR0		= GWRO + 0x1800,
706 	GWSCR1		= GWRO + 0x1900,
707 };
708 
709 /* ETHA/RMAC */
710 enum rswitch_etha_mode {
711 	EAMC_OPC_RESET,
712 	EAMC_OPC_DISABLE,
713 	EAMC_OPC_CONFIG,
714 	EAMC_OPC_OPERATION,
715 };
716 
717 #define EAMS_OPS_MASK		EAMC_OPC_OPERATION
718 
719 #define EAVCC_VEM_SC_TAG	(0x3 << 16)
720 
721 #define MPIC_PIS_MII		0x00
722 #define MPIC_PIS_GMII		0x02
723 #define MPIC_PIS_XGMII		0x04
724 #define MPIC_LSC_SHIFT		3
725 #define MPIC_LSC_100M		(1 << MPIC_LSC_SHIFT)
726 #define MPIC_LSC_1G		(2 << MPIC_LSC_SHIFT)
727 #define MPIC_LSC_2_5G		(3 << MPIC_LSC_SHIFT)
728 
729 #define MDIO_READ_C45		0x03
730 #define MDIO_WRITE_C45		0x01
731 
732 #define MPSM_PSME		BIT(0)
733 #define MPSM_MFF_C45		BIT(2)
734 #define MPSM_PRD_SHIFT		16
735 #define MPSM_PRD_MASK		GENMASK(31, MPSM_PRD_SHIFT)
736 
737 /* Completion flags */
738 #define MMIS1_PAACS             BIT(2) /* Address */
739 #define MMIS1_PWACS             BIT(1) /* Write */
740 #define MMIS1_PRACS             BIT(0) /* Read */
741 #define MMIS1_CLEAR_FLAGS       0xf
742 
743 #define MPIC_PSMCS_SHIFT	16
744 #define MPIC_PSMCS_MASK		GENMASK(22, MPIC_PSMCS_SHIFT)
745 #define MPIC_PSMCS(val)		((val) << MPIC_PSMCS_SHIFT)
746 
747 #define MPIC_PSMHT_SHIFT	24
748 #define MPIC_PSMHT_MASK		GENMASK(26, MPIC_PSMHT_SHIFT)
749 #define MPIC_PSMHT(val)		((val) << MPIC_PSMHT_SHIFT)
750 
751 #define MLVC_PLV		BIT(16)
752 
753 /* GWCA */
754 enum rswitch_gwca_mode {
755 	GWMC_OPC_RESET,
756 	GWMC_OPC_DISABLE,
757 	GWMC_OPC_CONFIG,
758 	GWMC_OPC_OPERATION,
759 };
760 
761 #define GWMS_OPS_MASK		GWMC_OPC_OPERATION
762 
763 #define GWMTIRM_MTIOG		BIT(0)
764 #define GWMTIRM_MTR		BIT(1)
765 
766 #define GWVCC_VEM_SC_TAG	(0x3 << 16)
767 
768 #define GWARIRM_ARIOG		BIT(0)
769 #define GWARIRM_ARR		BIT(1)
770 
771 #define GWDCC_BALR		BIT(24)
772 #define GWDCC_DCP_MASK		GENMASK(18, 16)
773 #define GWDCC_DCP(prio)		FIELD_PREP(GWDCC_DCP_MASK, (prio))
774 #define GWDCC_DQT		BIT(11)
775 #define GWDCC_ETS		BIT(9)
776 #define GWDCC_EDE		BIT(8)
777 
778 #define GWTRC(queue)		(GWTRC0 + (queue) / 32 * 4)
779 #define GWTPC_PPPL(ipv)		BIT(ipv)
780 #define GWDCC_OFFS(queue)	(GWDCC0 + (queue) * 4)
781 
782 #define GWDIS(i)		(GWDIS0 + (i) * 0x10)
783 #define GWDIE(i)		(GWDIE0 + (i) * 0x10)
784 #define GWDID(i)		(GWDID0 + (i) * 0x10)
785 
786 /* COMA */
787 #define RRC_RR			BIT(0)
788 #define RRC_RR_CLR		0
789 #define	RCEC_ACE_DEFAULT	(BIT(0) | BIT(AGENT_INDEX_GWCA))
790 #define RCEC_RCE		BIT(16)
791 #define RCDC_RCD		BIT(16)
792 
793 #define CABPIRM_BPIOG		BIT(0)
794 #define CABPIRM_BPR		BIT(1)
795 
796 #define CABPPFLC_INIT_VALUE	0x00800080
797 
798 /* MFWD */
799 #define FWPC0_LTHTA		BIT(0)
800 #define FWPC0_IP4UE		BIT(3)
801 #define FWPC0_IP4TE		BIT(4)
802 #define FWPC0_IP4OE		BIT(5)
803 #define FWPC0_L2SE		BIT(9)
804 #define FWPC0_IP4EA		BIT(10)
805 #define FWPC0_IPDSA		BIT(12)
806 #define FWPC0_IPHLA		BIT(18)
807 #define FWPC0_MACSDA		BIT(20)
808 #define FWPC0_MACHLA		BIT(26)
809 #define FWPC0_MACHMA		BIT(27)
810 #define FWPC0_VLANSA		BIT(28)
811 
812 #define FWPC0(i)		(FWPC00 + (i) * 0x10)
813 #define FWPC0_DEFAULT		(FWPC0_LTHTA | FWPC0_IP4UE | FWPC0_IP4TE | \
814 				 FWPC0_IP4OE | FWPC0_L2SE | FWPC0_IP4EA | \
815 				 FWPC0_IPDSA | FWPC0_IPHLA | FWPC0_MACSDA | \
816 				 FWPC0_MACHLA |	FWPC0_MACHMA | FWPC0_VLANSA)
817 #define FWPC1(i)		(FWPC10 + (i) * 0x10)
818 #define FWPC1_DDE		BIT(0)
819 
820 #define	FWPBFC(i)		(FWPBFC0 + (i) * 0x10)
821 
822 #define FWPBFCSDC(j, i)         (FWPBFCSDC00 + (i) * 0x10 + (j) * 0x04)
823 
824 /* TOP */
825 #define TPEMIMC7(queue)		(TPEMIMC70 + (queue) * 4)
826 
827 /* Descriptors */
828 enum RX_DS_CC_BIT {
829 	RX_DS	= 0x0fff, /* Data size */
830 	RX_TR	= 0x1000, /* Truncation indication */
831 	RX_EI	= 0x2000, /* Error indication */
832 	RX_PS	= 0xc000, /* Padding selection */
833 };
834 
835 enum TX_DS_TAGL_BIT {
836 	TX_DS	= 0x0fff, /* Data size */
837 	TX_TAGL	= 0xf000, /* Frame tag LSBs */
838 };
839 
840 enum DIE_DT {
841 	/* Frame data */
842 	DT_FSINGLE	= 0x80,
843 	DT_FSTART	= 0x90,
844 	DT_FMID		= 0xa0,
845 	DT_FEND		= 0xb0,
846 
847 	/* Chain control */
848 	DT_LEMPTY	= 0xc0,
849 	DT_EEMPTY	= 0xd0,
850 	DT_LINKFIX	= 0x00,
851 	DT_LINK		= 0xe0,
852 	DT_EOS		= 0xf0,
853 	/* HW/SW arbitration */
854 	DT_FEMPTY	= 0x40,
855 	DT_FEMPTY_IS	= 0x10,
856 	DT_FEMPTY_IC	= 0x20,
857 	DT_FEMPTY_ND	= 0x30,
858 	DT_FEMPTY_START	= 0x50,
859 	DT_FEMPTY_MID	= 0x60,
860 	DT_FEMPTY_END	= 0x70,
861 
862 	DT_MASK		= 0xf0,
863 	DIE		= 0x08,	/* Descriptor Interrupt Enable */
864 };
865 
866 /* Both transmission and reception */
867 #define INFO1_FMT		BIT(2)
868 #define INFO1_TXC		BIT(3)
869 
870 /* For transmission */
871 #define INFO1_TSUN(val)		((u64)(val) << 8ULL)
872 #define INFO1_IPV(prio)		((u64)(prio) << 28ULL)
873 #define INFO1_CSD0(index)	((u64)(index) << 32ULL)
874 #define INFO1_CSD1(index)	((u64)(index) << 40ULL)
875 #define INFO1_DV(port_vector)	((u64)(port_vector) << 48ULL)
876 
877 /* For reception */
878 #define INFO1_SPN(port)		((u64)(port) << 36ULL)
879 
880 /* For timestamp descriptor in dptrl (Byte 4 to 7) */
881 #define TS_DESC_TSUN(dptrl)	((dptrl) & GENMASK(7, 0))
882 #define TS_DESC_SPN(dptrl)	(((dptrl) & GENMASK(10, 8)) >> 8)
883 #define TS_DESC_DPN(dptrl)	(((dptrl) & GENMASK(17, 16)) >> 16)
884 #define TS_DESC_TN(dptrl)	((dptrl) & BIT(24))
885 
886 struct rswitch_desc {
887 	__le16 info_ds;	/* Descriptor size */
888 	u8 die_dt;	/* Descriptor interrupt enable and type */
889 	__u8  dptrh;	/* Descriptor pointer MSB */
890 	__le32 dptrl;	/* Descriptor pointer LSW */
891 } __packed;
892 
893 struct rswitch_ts_desc {
894 	struct rswitch_desc desc;
895 	__le32 ts_nsec;
896 	__le32 ts_sec;
897 } __packed;
898 
899 struct rswitch_ext_desc {
900 	struct rswitch_desc desc;
901 	__le64 info1;
902 } __packed;
903 
904 struct rswitch_ext_ts_desc {
905 	struct rswitch_desc desc;
906 	__le64 info1;
907 	__le32 ts_nsec;
908 	__le32 ts_sec;
909 } __packed;
910 
911 struct rswitch_etha {
912 	int index;
913 	void __iomem *addr;
914 	void __iomem *coma_addr;
915 	bool external_phy;
916 	struct mii_bus *mii;
917 	phy_interface_t phy_interface;
918 	u8 mac_addr[MAX_ADDR_LEN];
919 	int link;
920 	int speed;
921 
922 	/* This hardware could not be initialized twice so that marked
923 	 * this flag to avoid multiple initialization.
924 	 */
925 	bool operated;
926 };
927 
928 /* The datasheet said descriptor "chain" and/or "queue". For consistency of
929  * name, this driver calls "queue".
930  */
931 struct rswitch_gwca_queue {
932 	union {
933 		struct rswitch_ext_desc *tx_ring;
934 		struct rswitch_ext_ts_desc *rx_ring;
935 		struct rswitch_ts_desc *ts_ring;
936 	};
937 
938 	/* Common */
939 	dma_addr_t ring_dma;
940 	int ring_size;
941 	int cur;
942 	int dirty;
943 
944 	/* For [rt]_ring */
945 	int index;
946 	bool dir_tx;
947 	struct sk_buff **skbs;
948 	struct net_device *ndev;	/* queue to ndev for irq */
949 };
950 
951 struct rswitch_gwca_ts_info {
952 	struct sk_buff *skb;
953 	struct list_head list;
954 
955 	int port;
956 	u8 tag;
957 };
958 
959 #define RSWITCH_NUM_IRQ_REGS	(RSWITCH_MAX_NUM_QUEUES / BITS_PER_TYPE(u32))
960 struct rswitch_gwca {
961 	int index;
962 	struct rswitch_desc *linkfix_table;
963 	dma_addr_t linkfix_table_dma;
964 	u32 linkfix_table_size;
965 	struct rswitch_gwca_queue *queues;
966 	int num_queues;
967 	struct rswitch_gwca_queue ts_queue;
968 	struct list_head ts_info_list;
969 	DECLARE_BITMAP(used, RSWITCH_MAX_NUM_QUEUES);
970 	u32 tx_irq_bits[RSWITCH_NUM_IRQ_REGS];
971 	u32 rx_irq_bits[RSWITCH_NUM_IRQ_REGS];
972 	int speed;
973 };
974 
975 #define NUM_QUEUES_PER_NDEV	2
976 struct rswitch_device {
977 	struct rswitch_private *priv;
978 	struct net_device *ndev;
979 	struct napi_struct napi;
980 	void __iomem *addr;
981 	struct rswitch_gwca_queue *tx_queue;
982 	struct rswitch_gwca_queue *rx_queue;
983 	u8 ts_tag;
984 	bool disabled;
985 
986 	int port;
987 	struct rswitch_etha *etha;
988 	struct device_node *np_port;
989 	struct phy *serdes;
990 };
991 
992 struct rswitch_mfwd_mac_table_entry {
993 	int queue_index;
994 	unsigned char addr[MAX_ADDR_LEN];
995 };
996 
997 struct rswitch_mfwd {
998 	struct rswitch_mac_table_entry *mac_table_entries;
999 	int num_mac_table_entries;
1000 };
1001 
1002 struct rswitch_private {
1003 	struct platform_device *pdev;
1004 	void __iomem *addr;
1005 	struct rcar_gen4_ptp_private *ptp_priv;
1006 
1007 	struct rswitch_device *rdev[RSWITCH_NUM_PORTS];
1008 	DECLARE_BITMAP(opened_ports, RSWITCH_NUM_PORTS);
1009 
1010 	struct rswitch_gwca gwca;
1011 	struct rswitch_etha etha[RSWITCH_NUM_PORTS];
1012 	struct rswitch_mfwd mfwd;
1013 
1014 	bool gwca_halt;
1015 };
1016 
1017 #endif	/* #ifndef __RSWITCH_H__ */
1018