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