GNU Linux-libre 4.14.262-gnu1
[releases.git] / drivers / net / ethernet / renesas / ravb.h
1 /* Renesas Ethernet AVB device driver
2  *
3  * Copyright (C) 2014-2015 Renesas Electronics Corporation
4  * Copyright (C) 2015 Renesas Solutions Corp.
5  * Copyright (C) 2015-2016 Cogent Embedded, Inc. <source@cogentembedded.com>
6  *
7  * Based on the SuperH Ethernet driver
8  *
9  * This program is free software; you can redistribute it and/or modify it
10  * under the terms and conditions of the GNU General Public License version 2,
11  * as published by the Free Software Foundation.
12  */
13
14 #ifndef __RAVB_H__
15 #define __RAVB_H__
16
17 #include <linux/interrupt.h>
18 #include <linux/io.h>
19 #include <linux/kernel.h>
20 #include <linux/mdio-bitbang.h>
21 #include <linux/netdevice.h>
22 #include <linux/phy.h>
23 #include <linux/platform_device.h>
24 #include <linux/ptp_clock_kernel.h>
25
26 #define BE_TX_RING_SIZE 64      /* TX ring size for Best Effort */
27 #define BE_RX_RING_SIZE 1024    /* RX ring size for Best Effort */
28 #define NC_TX_RING_SIZE 64      /* TX ring size for Network Control */
29 #define NC_RX_RING_SIZE 64      /* RX ring size for Network Control */
30 #define BE_TX_RING_MIN  64
31 #define BE_RX_RING_MIN  64
32 #define BE_TX_RING_MAX  1024
33 #define BE_RX_RING_MAX  2048
34
35 #define PKT_BUF_SZ      1538
36
37 /* Driver's parameters */
38 #define RAVB_ALIGN      128
39
40 /* Hardware time stamp */
41 #define RAVB_TXTSTAMP_VALID     0x00000001      /* TX timestamp valid */
42 #define RAVB_TXTSTAMP_ENABLED   0x00000010      /* Enable TX timestamping */
43
44 #define RAVB_RXTSTAMP_VALID     0x00000001      /* RX timestamp valid */
45 #define RAVB_RXTSTAMP_TYPE      0x00000006      /* RX type mask */
46 #define RAVB_RXTSTAMP_TYPE_V2_L2_EVENT 0x00000002
47 #define RAVB_RXTSTAMP_TYPE_ALL  0x00000006
48 #define RAVB_RXTSTAMP_ENABLED   0x00000010      /* Enable RX timestamping */
49
50 enum ravb_reg {
51         /* AVB-DMAC registers */
52         CCC     = 0x0000,
53         DBAT    = 0x0004,
54         DLR     = 0x0008,
55         CSR     = 0x000C,
56         CDAR0   = 0x0010,
57         CDAR1   = 0x0014,
58         CDAR2   = 0x0018,
59         CDAR3   = 0x001C,
60         CDAR4   = 0x0020,
61         CDAR5   = 0x0024,
62         CDAR6   = 0x0028,
63         CDAR7   = 0x002C,
64         CDAR8   = 0x0030,
65         CDAR9   = 0x0034,
66         CDAR10  = 0x0038,
67         CDAR11  = 0x003C,
68         CDAR12  = 0x0040,
69         CDAR13  = 0x0044,
70         CDAR14  = 0x0048,
71         CDAR15  = 0x004C,
72         CDAR16  = 0x0050,
73         CDAR17  = 0x0054,
74         CDAR18  = 0x0058,
75         CDAR19  = 0x005C,
76         CDAR20  = 0x0060,
77         CDAR21  = 0x0064,
78         ESR     = 0x0088,
79         APSR    = 0x008C,       /* R-Car Gen3 only */
80         RCR     = 0x0090,
81         RQC0    = 0x0094,
82         RQC1    = 0x0098,
83         RQC2    = 0x009C,
84         RQC3    = 0x00A0,
85         RQC4    = 0x00A4,
86         RPC     = 0x00B0,
87         UFCW    = 0x00BC,
88         UFCS    = 0x00C0,
89         UFCV0   = 0x00C4,
90         UFCV1   = 0x00C8,
91         UFCV2   = 0x00CC,
92         UFCV3   = 0x00D0,
93         UFCV4   = 0x00D4,
94         UFCD0   = 0x00E0,
95         UFCD1   = 0x00E4,
96         UFCD2   = 0x00E8,
97         UFCD3   = 0x00EC,
98         UFCD4   = 0x00F0,
99         SFO     = 0x00FC,
100         SFP0    = 0x0100,
101         SFP1    = 0x0104,
102         SFP2    = 0x0108,
103         SFP3    = 0x010C,
104         SFP4    = 0x0110,
105         SFP5    = 0x0114,
106         SFP6    = 0x0118,
107         SFP7    = 0x011C,
108         SFP8    = 0x0120,
109         SFP9    = 0x0124,
110         SFP10   = 0x0128,
111         SFP11   = 0x012C,
112         SFP12   = 0x0130,
113         SFP13   = 0x0134,
114         SFP14   = 0x0138,
115         SFP15   = 0x013C,
116         SFP16   = 0x0140,
117         SFP17   = 0x0144,
118         SFP18   = 0x0148,
119         SFP19   = 0x014C,
120         SFP20   = 0x0150,
121         SFP21   = 0x0154,
122         SFP22   = 0x0158,
123         SFP23   = 0x015C,
124         SFP24   = 0x0160,
125         SFP25   = 0x0164,
126         SFP26   = 0x0168,
127         SFP27   = 0x016C,
128         SFP28   = 0x0170,
129         SFP29   = 0x0174,
130         SFP30   = 0x0178,
131         SFP31   = 0x017C,
132         SFM0    = 0x01C0,
133         SFM1    = 0x01C4,
134         TGC     = 0x0300,
135         TCCR    = 0x0304,
136         TSR     = 0x0308,
137         TFA0    = 0x0310,
138         TFA1    = 0x0314,
139         TFA2    = 0x0318,
140         CIVR0   = 0x0320,
141         CIVR1   = 0x0324,
142         CDVR0   = 0x0328,
143         CDVR1   = 0x032C,
144         CUL0    = 0x0330,
145         CUL1    = 0x0334,
146         CLL0    = 0x0338,
147         CLL1    = 0x033C,
148         DIC     = 0x0350,
149         DIS     = 0x0354,
150         EIC     = 0x0358,
151         EIS     = 0x035C,
152         RIC0    = 0x0360,
153         RIS0    = 0x0364,
154         RIC1    = 0x0368,
155         RIS1    = 0x036C,
156         RIC2    = 0x0370,
157         RIS2    = 0x0374,
158         TIC     = 0x0378,
159         TIS     = 0x037C,
160         ISS     = 0x0380,
161         CIE     = 0x0384,       /* R-Car Gen3 only */
162         GCCR    = 0x0390,
163         GMTT    = 0x0394,
164         GPTC    = 0x0398,
165         GTI     = 0x039C,
166         GTO0    = 0x03A0,
167         GTO1    = 0x03A4,
168         GTO2    = 0x03A8,
169         GIC     = 0x03AC,
170         GIS     = 0x03B0,
171         GCPT    = 0x03B4,       /* Undocumented? */
172         GCT0    = 0x03B8,
173         GCT1    = 0x03BC,
174         GCT2    = 0x03C0,
175         GIE     = 0x03CC,       /* R-Car Gen3 only */
176         GID     = 0x03D0,       /* R-Car Gen3 only */
177         DIL     = 0x0440,       /* R-Car Gen3 only */
178         RIE0    = 0x0460,       /* R-Car Gen3 only */
179         RID0    = 0x0464,       /* R-Car Gen3 only */
180         RIE2    = 0x0470,       /* R-Car Gen3 only */
181         RID2    = 0x0474,       /* R-Car Gen3 only */
182         TIE     = 0x0478,       /* R-Car Gen3 only */
183         TID     = 0x047c,       /* R-Car Gen3 only */
184
185         /* E-MAC registers */
186         ECMR    = 0x0500,
187         RFLR    = 0x0508,
188         ECSR    = 0x0510,
189         ECSIPR  = 0x0518,
190         PIR     = 0x0520,
191         PSR     = 0x0528,
192         PIPR    = 0x052c,
193         MPR     = 0x0558,
194         PFTCR   = 0x055c,
195         PFRCR   = 0x0560,
196         GECMR   = 0x05b0,
197         MAHR    = 0x05c0,
198         MALR    = 0x05c8,
199         TROCR   = 0x0700,       /* Undocumented? */
200         CDCR    = 0x0708,       /* Undocumented? */
201         LCCR    = 0x0710,       /* Undocumented? */
202         CEFCR   = 0x0740,
203         FRECR   = 0x0748,
204         TSFRCR  = 0x0750,
205         TLFRCR  = 0x0758,
206         RFCR    = 0x0760,
207         CERCR   = 0x0768,       /* Undocumented? */
208         CEECR   = 0x0770,       /* Undocumented? */
209         MAFCR   = 0x0778,
210 };
211
212
213 /* Register bits of the Ethernet AVB */
214 /* CCC */
215 enum CCC_BIT {
216         CCC_OPC         = 0x00000003,
217         CCC_OPC_RESET   = 0x00000000,
218         CCC_OPC_CONFIG  = 0x00000001,
219         CCC_OPC_OPERATION = 0x00000002,
220         CCC_GAC         = 0x00000080,
221         CCC_DTSR        = 0x00000100,
222         CCC_CSEL        = 0x00030000,
223         CCC_CSEL_HPB    = 0x00010000,
224         CCC_CSEL_ETH_TX = 0x00020000,
225         CCC_CSEL_GMII_REF = 0x00030000,
226         CCC_BOC         = 0x00100000,   /* Undocumented? */
227         CCC_LBME        = 0x01000000,
228 };
229
230 /* CSR */
231 enum CSR_BIT {
232         CSR_OPS         = 0x0000000F,
233         CSR_OPS_RESET   = 0x00000001,
234         CSR_OPS_CONFIG  = 0x00000002,
235         CSR_OPS_OPERATION = 0x00000004,
236         CSR_OPS_STANDBY = 0x00000008,   /* Undocumented? */
237         CSR_DTS         = 0x00000100,
238         CSR_TPO0        = 0x00010000,
239         CSR_TPO1        = 0x00020000,
240         CSR_TPO2        = 0x00040000,
241         CSR_TPO3        = 0x00080000,
242         CSR_RPO         = 0x00100000,
243 };
244
245 /* ESR */
246 enum ESR_BIT {
247         ESR_EQN         = 0x0000001F,
248         ESR_ET          = 0x00000F00,
249         ESR_EIL         = 0x00001000,
250 };
251
252 /* APSR */
253 enum APSR_BIT {
254         APSR_MEMS               = 0x00000002,
255         APSR_CMSW               = 0x00000010,
256         APSR_DM                 = 0x00006000,   /* Undocumented? */
257         APSR_DM_RDM             = 0x00002000,
258         APSR_DM_TDM             = 0x00004000,
259 };
260
261 /* RCR */
262 enum RCR_BIT {
263         RCR_EFFS        = 0x00000001,
264         RCR_ENCF        = 0x00000002,
265         RCR_ESF         = 0x0000000C,
266         RCR_ETS0        = 0x00000010,
267         RCR_ETS2        = 0x00000020,
268         RCR_RFCL        = 0x1FFF0000,
269 };
270
271 /* RQC0/1/2/3/4 */
272 enum RQC_BIT {
273         RQC_RSM0        = 0x00000003,
274         RQC_UFCC0       = 0x00000030,
275         RQC_RSM1        = 0x00000300,
276         RQC_UFCC1       = 0x00003000,
277         RQC_RSM2        = 0x00030000,
278         RQC_UFCC2       = 0x00300000,
279         RQC_RSM3        = 0x03000000,
280         RQC_UFCC3       = 0x30000000,
281 };
282
283 /* RPC */
284 enum RPC_BIT {
285         RPC_PCNT        = 0x00000700,
286         RPC_DCNT        = 0x00FF0000,
287 };
288
289 /* UFCW */
290 enum UFCW_BIT {
291         UFCW_WL0        = 0x0000003F,
292         UFCW_WL1        = 0x00003F00,
293         UFCW_WL2        = 0x003F0000,
294         UFCW_WL3        = 0x3F000000,
295 };
296
297 /* UFCS */
298 enum UFCS_BIT {
299         UFCS_SL0        = 0x0000003F,
300         UFCS_SL1        = 0x00003F00,
301         UFCS_SL2        = 0x003F0000,
302         UFCS_SL3        = 0x3F000000,
303 };
304
305 /* UFCV0/1/2/3/4 */
306 enum UFCV_BIT {
307         UFCV_CV0        = 0x0000003F,
308         UFCV_CV1        = 0x00003F00,
309         UFCV_CV2        = 0x003F0000,
310         UFCV_CV3        = 0x3F000000,
311 };
312
313 /* UFCD0/1/2/3/4 */
314 enum UFCD_BIT {
315         UFCD_DV0        = 0x0000003F,
316         UFCD_DV1        = 0x00003F00,
317         UFCD_DV2        = 0x003F0000,
318         UFCD_DV3        = 0x3F000000,
319 };
320
321 /* SFO */
322 enum SFO_BIT {
323         SFO_FPB         = 0x0000003F,
324 };
325
326 /* RTC */
327 enum RTC_BIT {
328         RTC_MFL0        = 0x00000FFF,
329         RTC_MFL1        = 0x0FFF0000,
330 };
331
332 /* TGC */
333 enum TGC_BIT {
334         TGC_TSM0        = 0x00000001,
335         TGC_TSM1        = 0x00000002,
336         TGC_TSM2        = 0x00000004,
337         TGC_TSM3        = 0x00000008,
338         TGC_TQP         = 0x00000030,
339         TGC_TQP_NONAVB  = 0x00000000,
340         TGC_TQP_AVBMODE1 = 0x00000010,
341         TGC_TQP_AVBMODE2 = 0x00000030,
342         TGC_TBD0        = 0x00000300,
343         TGC_TBD1        = 0x00003000,
344         TGC_TBD2        = 0x00030000,
345         TGC_TBD3        = 0x00300000,
346 };
347
348 /* TCCR */
349 enum TCCR_BIT {
350         TCCR_TSRQ0      = 0x00000001,
351         TCCR_TSRQ1      = 0x00000002,
352         TCCR_TSRQ2      = 0x00000004,
353         TCCR_TSRQ3      = 0x00000008,
354         TCCR_TFEN       = 0x00000100,
355         TCCR_TFR        = 0x00000200,
356 };
357
358 /* TSR */
359 enum TSR_BIT {
360         TSR_CCS0        = 0x00000003,
361         TSR_CCS1        = 0x0000000C,
362         TSR_TFFL        = 0x00000700,
363 };
364
365 /* TFA2 */
366 enum TFA2_BIT {
367         TFA2_TSV        = 0x0000FFFF,
368         TFA2_TST        = 0x03FF0000,
369 };
370
371 /* DIC */
372 enum DIC_BIT {
373         DIC_DPE1        = 0x00000002,
374         DIC_DPE2        = 0x00000004,
375         DIC_DPE3        = 0x00000008,
376         DIC_DPE4        = 0x00000010,
377         DIC_DPE5        = 0x00000020,
378         DIC_DPE6        = 0x00000040,
379         DIC_DPE7        = 0x00000080,
380         DIC_DPE8        = 0x00000100,
381         DIC_DPE9        = 0x00000200,
382         DIC_DPE10       = 0x00000400,
383         DIC_DPE11       = 0x00000800,
384         DIC_DPE12       = 0x00001000,
385         DIC_DPE13       = 0x00002000,
386         DIC_DPE14       = 0x00004000,
387         DIC_DPE15       = 0x00008000,
388 };
389
390 /* DIS */
391 enum DIS_BIT {
392         DIS_DPF1        = 0x00000002,
393         DIS_DPF2        = 0x00000004,
394         DIS_DPF3        = 0x00000008,
395         DIS_DPF4        = 0x00000010,
396         DIS_DPF5        = 0x00000020,
397         DIS_DPF6        = 0x00000040,
398         DIS_DPF7        = 0x00000080,
399         DIS_DPF8        = 0x00000100,
400         DIS_DPF9        = 0x00000200,
401         DIS_DPF10       = 0x00000400,
402         DIS_DPF11       = 0x00000800,
403         DIS_DPF12       = 0x00001000,
404         DIS_DPF13       = 0x00002000,
405         DIS_DPF14       = 0x00004000,
406         DIS_DPF15       = 0x00008000,
407 };
408
409 /* EIC */
410 enum EIC_BIT {
411         EIC_MREE        = 0x00000001,
412         EIC_MTEE        = 0x00000002,
413         EIC_QEE         = 0x00000004,
414         EIC_SEE         = 0x00000008,
415         EIC_CLLE0       = 0x00000010,
416         EIC_CLLE1       = 0x00000020,
417         EIC_CULE0       = 0x00000040,
418         EIC_CULE1       = 0x00000080,
419         EIC_TFFE        = 0x00000100,
420 };
421
422 /* EIS */
423 enum EIS_BIT {
424         EIS_MREF        = 0x00000001,
425         EIS_MTEF        = 0x00000002,
426         EIS_QEF         = 0x00000004,
427         EIS_SEF         = 0x00000008,
428         EIS_CLLF0       = 0x00000010,
429         EIS_CLLF1       = 0x00000020,
430         EIS_CULF0       = 0x00000040,
431         EIS_CULF1       = 0x00000080,
432         EIS_TFFF        = 0x00000100,
433         EIS_QFS         = 0x00010000,
434         EIS_RESERVED    = (GENMASK(31, 17) | GENMASK(15, 11)),
435 };
436
437 /* RIC0 */
438 enum RIC0_BIT {
439         RIC0_FRE0       = 0x00000001,
440         RIC0_FRE1       = 0x00000002,
441         RIC0_FRE2       = 0x00000004,
442         RIC0_FRE3       = 0x00000008,
443         RIC0_FRE4       = 0x00000010,
444         RIC0_FRE5       = 0x00000020,
445         RIC0_FRE6       = 0x00000040,
446         RIC0_FRE7       = 0x00000080,
447         RIC0_FRE8       = 0x00000100,
448         RIC0_FRE9       = 0x00000200,
449         RIC0_FRE10      = 0x00000400,
450         RIC0_FRE11      = 0x00000800,
451         RIC0_FRE12      = 0x00001000,
452         RIC0_FRE13      = 0x00002000,
453         RIC0_FRE14      = 0x00004000,
454         RIC0_FRE15      = 0x00008000,
455         RIC0_FRE16      = 0x00010000,
456         RIC0_FRE17      = 0x00020000,
457 };
458
459 /* RIC0 */
460 enum RIS0_BIT {
461         RIS0_FRF0       = 0x00000001,
462         RIS0_FRF1       = 0x00000002,
463         RIS0_FRF2       = 0x00000004,
464         RIS0_FRF3       = 0x00000008,
465         RIS0_FRF4       = 0x00000010,
466         RIS0_FRF5       = 0x00000020,
467         RIS0_FRF6       = 0x00000040,
468         RIS0_FRF7       = 0x00000080,
469         RIS0_FRF8       = 0x00000100,
470         RIS0_FRF9       = 0x00000200,
471         RIS0_FRF10      = 0x00000400,
472         RIS0_FRF11      = 0x00000800,
473         RIS0_FRF12      = 0x00001000,
474         RIS0_FRF13      = 0x00002000,
475         RIS0_FRF14      = 0x00004000,
476         RIS0_FRF15      = 0x00008000,
477         RIS0_FRF16      = 0x00010000,
478         RIS0_FRF17      = 0x00020000,
479         RIS0_RESERVED   = GENMASK(31, 18),
480 };
481
482 /* RIC1 */
483 enum RIC1_BIT {
484         RIC1_RFWE       = 0x80000000,
485 };
486
487 /* RIS1 */
488 enum RIS1_BIT {
489         RIS1_RFWF       = 0x80000000,
490 };
491
492 /* RIC2 */
493 enum RIC2_BIT {
494         RIC2_QFE0       = 0x00000001,
495         RIC2_QFE1       = 0x00000002,
496         RIC2_QFE2       = 0x00000004,
497         RIC2_QFE3       = 0x00000008,
498         RIC2_QFE4       = 0x00000010,
499         RIC2_QFE5       = 0x00000020,
500         RIC2_QFE6       = 0x00000040,
501         RIC2_QFE7       = 0x00000080,
502         RIC2_QFE8       = 0x00000100,
503         RIC2_QFE9       = 0x00000200,
504         RIC2_QFE10      = 0x00000400,
505         RIC2_QFE11      = 0x00000800,
506         RIC2_QFE12      = 0x00001000,
507         RIC2_QFE13      = 0x00002000,
508         RIC2_QFE14      = 0x00004000,
509         RIC2_QFE15      = 0x00008000,
510         RIC2_QFE16      = 0x00010000,
511         RIC2_QFE17      = 0x00020000,
512         RIC2_RFFE       = 0x80000000,
513 };
514
515 /* RIS2 */
516 enum RIS2_BIT {
517         RIS2_QFF0       = 0x00000001,
518         RIS2_QFF1       = 0x00000002,
519         RIS2_QFF2       = 0x00000004,
520         RIS2_QFF3       = 0x00000008,
521         RIS2_QFF4       = 0x00000010,
522         RIS2_QFF5       = 0x00000020,
523         RIS2_QFF6       = 0x00000040,
524         RIS2_QFF7       = 0x00000080,
525         RIS2_QFF8       = 0x00000100,
526         RIS2_QFF9       = 0x00000200,
527         RIS2_QFF10      = 0x00000400,
528         RIS2_QFF11      = 0x00000800,
529         RIS2_QFF12      = 0x00001000,
530         RIS2_QFF13      = 0x00002000,
531         RIS2_QFF14      = 0x00004000,
532         RIS2_QFF15      = 0x00008000,
533         RIS2_QFF16      = 0x00010000,
534         RIS2_QFF17      = 0x00020000,
535         RIS2_RFFF       = 0x80000000,
536         RIS2_RESERVED   = GENMASK(30, 18),
537 };
538
539 /* TIC */
540 enum TIC_BIT {
541         TIC_FTE0        = 0x00000001,   /* Undocumented? */
542         TIC_FTE1        = 0x00000002,   /* Undocumented? */
543         TIC_TFUE        = 0x00000100,
544         TIC_TFWE        = 0x00000200,
545 };
546
547 /* TIS */
548 enum TIS_BIT {
549         TIS_FTF0        = 0x00000001,   /* Undocumented? */
550         TIS_FTF1        = 0x00000002,   /* Undocumented? */
551         TIS_TFUF        = 0x00000100,
552         TIS_TFWF        = 0x00000200,
553         TIS_RESERVED    = (GENMASK(31, 20) | GENMASK(15, 12) | GENMASK(7, 4))
554 };
555
556 /* ISS */
557 enum ISS_BIT {
558         ISS_FRS         = 0x00000001,   /* Undocumented? */
559         ISS_FTS         = 0x00000004,   /* Undocumented? */
560         ISS_ES          = 0x00000040,
561         ISS_MS          = 0x00000080,
562         ISS_TFUS        = 0x00000100,
563         ISS_TFWS        = 0x00000200,
564         ISS_RFWS        = 0x00001000,
565         ISS_CGIS        = 0x00002000,
566         ISS_DPS1        = 0x00020000,
567         ISS_DPS2        = 0x00040000,
568         ISS_DPS3        = 0x00080000,
569         ISS_DPS4        = 0x00100000,
570         ISS_DPS5        = 0x00200000,
571         ISS_DPS6        = 0x00400000,
572         ISS_DPS7        = 0x00800000,
573         ISS_DPS8        = 0x01000000,
574         ISS_DPS9        = 0x02000000,
575         ISS_DPS10       = 0x04000000,
576         ISS_DPS11       = 0x08000000,
577         ISS_DPS12       = 0x10000000,
578         ISS_DPS13       = 0x20000000,
579         ISS_DPS14       = 0x40000000,
580         ISS_DPS15       = 0x80000000,
581 };
582
583 /* CIE (R-Car Gen3 only) */
584 enum CIE_BIT {
585         CIE_CRIE        = 0x00000001,
586         CIE_CTIE        = 0x00000100,
587         CIE_RQFM        = 0x00010000,
588         CIE_CL0M        = 0x00020000,
589         CIE_RFWL        = 0x00040000,
590         CIE_RFFL        = 0x00080000,
591 };
592
593 /* GCCR */
594 enum GCCR_BIT {
595         GCCR_TCR        = 0x00000003,
596         GCCR_TCR_NOREQ  = 0x00000000, /* No request */
597         GCCR_TCR_RESET  = 0x00000001, /* gPTP/AVTP presentation timer reset */
598         GCCR_TCR_CAPTURE = 0x00000003, /* Capture value set in GCCR.TCSS */
599         GCCR_LTO        = 0x00000004,
600         GCCR_LTI        = 0x00000008,
601         GCCR_LPTC       = 0x00000010,
602         GCCR_LMTT       = 0x00000020,
603         GCCR_TCSS       = 0x00000300,
604         GCCR_TCSS_GPTP  = 0x00000000,   /* gPTP timer value */
605         GCCR_TCSS_ADJGPTP = 0x00000100, /* Adjusted gPTP timer value */
606         GCCR_TCSS_AVTP  = 0x00000200,   /* AVTP presentation time value */
607 };
608
609 /* GTI */
610 enum GTI_BIT {
611         GTI_TIV         = 0x0FFFFFFF,
612 };
613
614 #define GTI_TIV_MAX     GTI_TIV
615 #define GTI_TIV_MIN     0x20
616
617 /* GIC */
618 enum GIC_BIT {
619         GIC_PTCE        = 0x00000001,   /* Undocumented? */
620         GIC_PTME        = 0x00000004,
621 };
622
623 /* GIS */
624 enum GIS_BIT {
625         GIS_PTCF        = 0x00000001,   /* Undocumented? */
626         GIS_PTMF        = 0x00000004,
627         GIS_RESERVED    = GENMASK(15, 10),
628 };
629
630 /* GIE (R-Car Gen3 only) */
631 enum GIE_BIT {
632         GIE_PTCS        = 0x00000001,
633         GIE_PTOS        = 0x00000002,
634         GIE_PTMS0       = 0x00000004,
635         GIE_PTMS1       = 0x00000008,
636         GIE_PTMS2       = 0x00000010,
637         GIE_PTMS3       = 0x00000020,
638         GIE_PTMS4       = 0x00000040,
639         GIE_PTMS5       = 0x00000080,
640         GIE_PTMS6       = 0x00000100,
641         GIE_PTMS7       = 0x00000200,
642         GIE_ATCS0       = 0x00010000,
643         GIE_ATCS1       = 0x00020000,
644         GIE_ATCS2       = 0x00040000,
645         GIE_ATCS3       = 0x00080000,
646         GIE_ATCS4       = 0x00100000,
647         GIE_ATCS5       = 0x00200000,
648         GIE_ATCS6       = 0x00400000,
649         GIE_ATCS7       = 0x00800000,
650         GIE_ATCS8       = 0x01000000,
651         GIE_ATCS9       = 0x02000000,
652         GIE_ATCS10      = 0x04000000,
653         GIE_ATCS11      = 0x08000000,
654         GIE_ATCS12      = 0x10000000,
655         GIE_ATCS13      = 0x20000000,
656         GIE_ATCS14      = 0x40000000,
657         GIE_ATCS15      = 0x80000000,
658 };
659
660 /* GID (R-Car Gen3 only) */
661 enum GID_BIT {
662         GID_PTCD        = 0x00000001,
663         GID_PTOD        = 0x00000002,
664         GID_PTMD0       = 0x00000004,
665         GID_PTMD1       = 0x00000008,
666         GID_PTMD2       = 0x00000010,
667         GID_PTMD3       = 0x00000020,
668         GID_PTMD4       = 0x00000040,
669         GID_PTMD5       = 0x00000080,
670         GID_PTMD6       = 0x00000100,
671         GID_PTMD7       = 0x00000200,
672         GID_ATCD0       = 0x00010000,
673         GID_ATCD1       = 0x00020000,
674         GID_ATCD2       = 0x00040000,
675         GID_ATCD3       = 0x00080000,
676         GID_ATCD4       = 0x00100000,
677         GID_ATCD5       = 0x00200000,
678         GID_ATCD6       = 0x00400000,
679         GID_ATCD7       = 0x00800000,
680         GID_ATCD8       = 0x01000000,
681         GID_ATCD9       = 0x02000000,
682         GID_ATCD10      = 0x04000000,
683         GID_ATCD11      = 0x08000000,
684         GID_ATCD12      = 0x10000000,
685         GID_ATCD13      = 0x20000000,
686         GID_ATCD14      = 0x40000000,
687         GID_ATCD15      = 0x80000000,
688 };
689
690 /* RIE0 (R-Car Gen3 only) */
691 enum RIE0_BIT {
692         RIE0_FRS0       = 0x00000001,
693         RIE0_FRS1       = 0x00000002,
694         RIE0_FRS2       = 0x00000004,
695         RIE0_FRS3       = 0x00000008,
696         RIE0_FRS4       = 0x00000010,
697         RIE0_FRS5       = 0x00000020,
698         RIE0_FRS6       = 0x00000040,
699         RIE0_FRS7       = 0x00000080,
700         RIE0_FRS8       = 0x00000100,
701         RIE0_FRS9       = 0x00000200,
702         RIE0_FRS10      = 0x00000400,
703         RIE0_FRS11      = 0x00000800,
704         RIE0_FRS12      = 0x00001000,
705         RIE0_FRS13      = 0x00002000,
706         RIE0_FRS14      = 0x00004000,
707         RIE0_FRS15      = 0x00008000,
708         RIE0_FRS16      = 0x00010000,
709         RIE0_FRS17      = 0x00020000,
710 };
711
712 /* RID0 (R-Car Gen3 only) */
713 enum RID0_BIT {
714         RID0_FRD0       = 0x00000001,
715         RID0_FRD1       = 0x00000002,
716         RID0_FRD2       = 0x00000004,
717         RID0_FRD3       = 0x00000008,
718         RID0_FRD4       = 0x00000010,
719         RID0_FRD5       = 0x00000020,
720         RID0_FRD6       = 0x00000040,
721         RID0_FRD7       = 0x00000080,
722         RID0_FRD8       = 0x00000100,
723         RID0_FRD9       = 0x00000200,
724         RID0_FRD10      = 0x00000400,
725         RID0_FRD11      = 0x00000800,
726         RID0_FRD12      = 0x00001000,
727         RID0_FRD13      = 0x00002000,
728         RID0_FRD14      = 0x00004000,
729         RID0_FRD15      = 0x00008000,
730         RID0_FRD16      = 0x00010000,
731         RID0_FRD17      = 0x00020000,
732 };
733
734 /* RIE2 (R-Car Gen3 only) */
735 enum RIE2_BIT {
736         RIE2_QFS0       = 0x00000001,
737         RIE2_QFS1       = 0x00000002,
738         RIE2_QFS2       = 0x00000004,
739         RIE2_QFS3       = 0x00000008,
740         RIE2_QFS4       = 0x00000010,
741         RIE2_QFS5       = 0x00000020,
742         RIE2_QFS6       = 0x00000040,
743         RIE2_QFS7       = 0x00000080,
744         RIE2_QFS8       = 0x00000100,
745         RIE2_QFS9       = 0x00000200,
746         RIE2_QFS10      = 0x00000400,
747         RIE2_QFS11      = 0x00000800,
748         RIE2_QFS12      = 0x00001000,
749         RIE2_QFS13      = 0x00002000,
750         RIE2_QFS14      = 0x00004000,
751         RIE2_QFS15      = 0x00008000,
752         RIE2_QFS16      = 0x00010000,
753         RIE2_QFS17      = 0x00020000,
754         RIE2_RFFS       = 0x80000000,
755 };
756
757 /* RID2 (R-Car Gen3 only) */
758 enum RID2_BIT {
759         RID2_QFD0       = 0x00000001,
760         RID2_QFD1       = 0x00000002,
761         RID2_QFD2       = 0x00000004,
762         RID2_QFD3       = 0x00000008,
763         RID2_QFD4       = 0x00000010,
764         RID2_QFD5       = 0x00000020,
765         RID2_QFD6       = 0x00000040,
766         RID2_QFD7       = 0x00000080,
767         RID2_QFD8       = 0x00000100,
768         RID2_QFD9       = 0x00000200,
769         RID2_QFD10      = 0x00000400,
770         RID2_QFD11      = 0x00000800,
771         RID2_QFD12      = 0x00001000,
772         RID2_QFD13      = 0x00002000,
773         RID2_QFD14      = 0x00004000,
774         RID2_QFD15      = 0x00008000,
775         RID2_QFD16      = 0x00010000,
776         RID2_QFD17      = 0x00020000,
777         RID2_RFFD       = 0x80000000,
778 };
779
780 /* TIE (R-Car Gen3 only) */
781 enum TIE_BIT {
782         TIE_FTS0        = 0x00000001,
783         TIE_FTS1        = 0x00000002,
784         TIE_FTS2        = 0x00000004,
785         TIE_FTS3        = 0x00000008,
786         TIE_TFUS        = 0x00000100,
787         TIE_TFWS        = 0x00000200,
788         TIE_MFUS        = 0x00000400,
789         TIE_MFWS        = 0x00000800,
790         TIE_TDPS0       = 0x00010000,
791         TIE_TDPS1       = 0x00020000,
792         TIE_TDPS2       = 0x00040000,
793         TIE_TDPS3       = 0x00080000,
794 };
795
796 /* TID (R-Car Gen3 only) */
797 enum TID_BIT {
798         TID_FTD0        = 0x00000001,
799         TID_FTD1        = 0x00000002,
800         TID_FTD2        = 0x00000004,
801         TID_FTD3        = 0x00000008,
802         TID_TFUD        = 0x00000100,
803         TID_TFWD        = 0x00000200,
804         TID_MFUD        = 0x00000400,
805         TID_MFWD        = 0x00000800,
806         TID_TDPD0       = 0x00010000,
807         TID_TDPD1       = 0x00020000,
808         TID_TDPD2       = 0x00040000,
809         TID_TDPD3       = 0x00080000,
810 };
811
812 /* ECMR */
813 enum ECMR_BIT {
814         ECMR_PRM        = 0x00000001,
815         ECMR_DM         = 0x00000002,
816         ECMR_TE         = 0x00000020,
817         ECMR_RE         = 0x00000040,
818         ECMR_MPDE       = 0x00000200,
819         ECMR_TXF        = 0x00010000,   /* Undocumented? */
820         ECMR_RXF        = 0x00020000,
821         ECMR_PFR        = 0x00040000,
822         ECMR_ZPF        = 0x00080000,   /* Undocumented? */
823         ECMR_RZPF       = 0x00100000,
824         ECMR_DPAD       = 0x00200000,
825         ECMR_RCSC       = 0x00800000,
826         ECMR_TRCCM      = 0x04000000,
827 };
828
829 /* ECSR */
830 enum ECSR_BIT {
831         ECSR_ICD        = 0x00000001,
832         ECSR_MPD        = 0x00000002,
833         ECSR_LCHNG      = 0x00000004,
834         ECSR_PHYI       = 0x00000008,
835 };
836
837 /* ECSIPR */
838 enum ECSIPR_BIT {
839         ECSIPR_ICDIP    = 0x00000001,
840         ECSIPR_MPDIP    = 0x00000002,
841         ECSIPR_LCHNGIP  = 0x00000004,   /* Undocumented? */
842 };
843
844 /* PIR */
845 enum PIR_BIT {
846         PIR_MDC         = 0x00000001,
847         PIR_MMD         = 0x00000002,
848         PIR_MDO         = 0x00000004,
849         PIR_MDI         = 0x00000008,
850 };
851
852 /* PSR */
853 enum PSR_BIT {
854         PSR_LMON        = 0x00000001,
855 };
856
857 /* PIPR */
858 enum PIPR_BIT {
859         PIPR_PHYIP      = 0x00000001,
860 };
861
862 /* MPR */
863 enum MPR_BIT {
864         MPR_MP          = 0x0000ffff,
865 };
866
867 /* GECMR */
868 enum GECMR_BIT {
869         GECMR_SPEED     = 0x00000001,
870         GECMR_SPEED_100 = 0x00000000,
871         GECMR_SPEED_1000 = 0x00000001,
872 };
873
874 /* The Ethernet AVB descriptor definitions. */
875 struct ravb_desc {
876         __le16 ds;              /* Descriptor size */
877         u8 cc;          /* Content control MSBs (reserved) */
878         u8 die_dt;      /* Descriptor interrupt enable and type */
879         __le32 dptr;    /* Descriptor pointer */
880 };
881
882 #define DPTR_ALIGN      4       /* Required descriptor pointer alignment */
883
884 enum DIE_DT {
885         /* Frame data */
886         DT_FMID         = 0x40,
887         DT_FSTART       = 0x50,
888         DT_FEND         = 0x60,
889         DT_FSINGLE      = 0x70,
890         /* Chain control */
891         DT_LINK         = 0x80,
892         DT_LINKFIX      = 0x90,
893         DT_EOS          = 0xa0,
894         /* HW/SW arbitration */
895         DT_FEMPTY       = 0xc0,
896         DT_FEMPTY_IS    = 0xd0,
897         DT_FEMPTY_IC    = 0xe0,
898         DT_FEMPTY_ND    = 0xf0,
899         DT_LEMPTY       = 0x20,
900         DT_EEMPTY       = 0x30,
901 };
902
903 struct ravb_rx_desc {
904         __le16 ds_cc;   /* Descriptor size and content control LSBs */
905         u8 msc;         /* MAC status code */
906         u8 die_dt;      /* Descriptor interrupt enable and type */
907         __le32 dptr;    /* Descpriptor pointer */
908 };
909
910 struct ravb_ex_rx_desc {
911         __le16 ds_cc;   /* Descriptor size and content control lower bits */
912         u8 msc;         /* MAC status code */
913         u8 die_dt;      /* Descriptor interrupt enable and type */
914         __le32 dptr;    /* Descpriptor pointer */
915         __le32 ts_n;    /* Timestampe nsec */
916         __le32 ts_sl;   /* Timestamp low */
917         __le16 ts_sh;   /* Timestamp high */
918         __le16 res;     /* Reserved bits */
919 };
920
921 enum RX_DS_CC_BIT {
922         RX_DS           = 0x0fff, /* Data size */
923         RX_TR           = 0x1000, /* Truncation indication */
924         RX_EI           = 0x2000, /* Error indication */
925         RX_PS           = 0xc000, /* Padding selection */
926 };
927
928 /* E-MAC status code */
929 enum MSC_BIT {
930         MSC_CRC         = 0x01, /* Frame CRC error */
931         MSC_RFE         = 0x02, /* Frame reception error (flagged by PHY) */
932         MSC_RTSF        = 0x04, /* Frame length error (frame too short) */
933         MSC_RTLF        = 0x08, /* Frame length error (frame too long) */
934         MSC_FRE         = 0x10, /* Fraction error (not a multiple of 8 bits) */
935         MSC_CRL         = 0x20, /* Carrier lost */
936         MSC_CEEF        = 0x40, /* Carrier extension error */
937         MSC_MC          = 0x80, /* Multicast frame reception */
938 };
939
940 struct ravb_tx_desc {
941         __le16 ds_tagl; /* Descriptor size and frame tag LSBs */
942         u8 tagh_tsr;    /* Frame tag MSBs and timestamp storage request bit */
943         u8 die_dt;      /* Descriptor interrupt enable and type */
944         __le32 dptr;    /* Descpriptor pointer */
945 };
946
947 enum TX_DS_TAGL_BIT {
948         TX_DS           = 0x0fff, /* Data size */
949         TX_TAGL         = 0xf000, /* Frame tag LSBs */
950 };
951
952 enum TX_TAGH_TSR_BIT {
953         TX_TAGH         = 0x3f, /* Frame tag MSBs */
954         TX_TSR          = 0x40, /* Timestamp storage request */
955 };
956 enum RAVB_QUEUE {
957         RAVB_BE = 0,    /* Best Effort Queue */
958         RAVB_NC,        /* Network Control Queue */
959 };
960
961 #define DBAT_ENTRY_NUM  22
962 #define RX_QUEUE_OFFSET 4
963 #define NUM_RX_QUEUE    2
964 #define NUM_TX_QUEUE    2
965 #define NUM_TX_DESC     2       /* TX descriptors per packet */
966
967 struct ravb_tstamp_skb {
968         struct list_head list;
969         struct sk_buff *skb;
970         u16 tag;
971 };
972
973 struct ravb_ptp_perout {
974         u32 target;
975         u32 period;
976 };
977
978 #define N_EXT_TS        1
979 #define N_PER_OUT       1
980
981 struct ravb_ptp {
982         struct ptp_clock *clock;
983         struct ptp_clock_info info;
984         u32 default_addend;
985         u32 current_addend;
986         int extts[N_EXT_TS];
987         struct ravb_ptp_perout perout[N_PER_OUT];
988 };
989
990 enum ravb_chip_id {
991         RCAR_GEN2,
992         RCAR_GEN3,
993 };
994
995 struct ravb_private {
996         struct net_device *ndev;
997         struct platform_device *pdev;
998         void __iomem *addr;
999         struct clk *clk;
1000         struct mdiobb_ctrl mdiobb;
1001         u32 num_rx_ring[NUM_RX_QUEUE];
1002         u32 num_tx_ring[NUM_TX_QUEUE];
1003         u32 desc_bat_size;
1004         dma_addr_t desc_bat_dma;
1005         struct ravb_desc *desc_bat;
1006         dma_addr_t rx_desc_dma[NUM_RX_QUEUE];
1007         dma_addr_t tx_desc_dma[NUM_TX_QUEUE];
1008         struct ravb_ex_rx_desc *rx_ring[NUM_RX_QUEUE];
1009         struct ravb_tx_desc *tx_ring[NUM_TX_QUEUE];
1010         void *tx_align[NUM_TX_QUEUE];
1011         struct sk_buff **rx_skb[NUM_RX_QUEUE];
1012         struct sk_buff **tx_skb[NUM_TX_QUEUE];
1013         u32 rx_over_errors;
1014         u32 rx_fifo_errors;
1015         struct net_device_stats stats[NUM_RX_QUEUE];
1016         u32 tstamp_tx_ctrl;
1017         u32 tstamp_rx_ctrl;
1018         struct list_head ts_skb_list;
1019         u32 ts_skb_tag;
1020         struct ravb_ptp ptp;
1021         spinlock_t lock;                /* Register access lock */
1022         u32 cur_rx[NUM_RX_QUEUE];       /* Consumer ring indices */
1023         u32 dirty_rx[NUM_RX_QUEUE];     /* Producer ring indices */
1024         u32 cur_tx[NUM_TX_QUEUE];
1025         u32 dirty_tx[NUM_TX_QUEUE];
1026         struct napi_struct napi[NUM_RX_QUEUE];
1027         struct work_struct work;
1028         /* MII transceiver section. */
1029         struct mii_bus *mii_bus;        /* MDIO bus control */
1030         int link;
1031         phy_interface_t phy_interface;
1032         int msg_enable;
1033         int speed;
1034         int duplex;
1035         int emac_irq;
1036         enum ravb_chip_id chip_id;
1037         int rx_irqs[NUM_RX_QUEUE];
1038         int tx_irqs[NUM_TX_QUEUE];
1039
1040         unsigned no_avb_link:1;
1041         unsigned avb_link_active_low:1;
1042         unsigned wol_enabled:1;
1043 };
1044
1045 static inline u32 ravb_read(struct net_device *ndev, enum ravb_reg reg)
1046 {
1047         struct ravb_private *priv = netdev_priv(ndev);
1048
1049         return ioread32(priv->addr + reg);
1050 }
1051
1052 static inline void ravb_write(struct net_device *ndev, u32 data,
1053                               enum ravb_reg reg)
1054 {
1055         struct ravb_private *priv = netdev_priv(ndev);
1056
1057         iowrite32(data, priv->addr + reg);
1058 }
1059
1060 void ravb_modify(struct net_device *ndev, enum ravb_reg reg, u32 clear,
1061                  u32 set);
1062 int ravb_wait(struct net_device *ndev, enum ravb_reg reg, u32 mask, u32 value);
1063
1064 void ravb_ptp_interrupt(struct net_device *ndev);
1065 void ravb_ptp_init(struct net_device *ndev, struct platform_device *pdev);
1066 void ravb_ptp_stop(struct net_device *ndev);
1067
1068 #endif  /* #ifndef __RAVB_H__ */