1 /*
2  * Copyright (C) 2009 Jens Scharsig (js_at_ng@scharsoft.de)
3  *
4  * based on AT91RM9200 datasheet revision I (36. Ethernet MAC (EMAC))
5  *
6  * SPDX-License-Identifier:	GPL-2.0+
7  */
8 
9 #ifndef AT91_H
10 #define AT91_H
11 
12 typedef struct at91_emac {
13 	u32	 ctl;
14 	u32	 cfg;
15 	u32	 sr;
16 	u32	 tar;
17 	u32	 tcr;
18 	u32	 tsr;
19 	u32	 rbqp;
20 	u32	 reserved0;
21 	u32	 rsr;
22 	u32	 isr;
23 	u32	 ier;
24 	u32	 idr;
25 	u32	 imr;
26 	u32	 man;
27 	u32	 reserved1[2];
28 	u32	 fra;
29 	u32	 scol;
30 	u32	 mocl;
31 	u32	 ok;
32 	u32	 seqe;
33 	u32	 ale;
34 	u32	 dte;
35 	u32	 lcol;
36 	u32	 ecol;
37 	u32	 cse;
38 	u32	 tue;
39 	u32	 cde;
40 	u32	 elr;
41 	u32	 rjb;
42 	u32	 usf;
43 	u32	 sqee;
44 	u32	 drfc;
45 	u32	 reserved2[3];
46 	u32	 hsh;
47 	u32	 hsl;
48 	u32	 sa1l;
49 	u32	 sa1h;
50 	u32	 sa2l;
51 	u32	 sa2h;
52 	u32	 sa3l;
53 	u32	 sa3h;
54 	u32	 sa4l;
55 	u32	 sa4h;
56 } at91_emac_t;
57 
58 #define AT91_EMAC_CTL_LB	0x0001
59 #define AT91_EMAC_CTL_LBL	0x0002
60 #define AT91_EMAC_CTL_RE	0x0004
61 #define AT91_EMAC_CTL_TE	0x0008
62 #define AT91_EMAC_CTL_MPE	0x0010
63 #define AT91_EMAC_CTL_CSR	0x0020
64 #define AT91_EMAC_CTL_ISR	0x0040
65 #define AT91_EMAC_CTL_WES	0x0080
66 #define AT91_EMAC_CTL_BP	0x1000
67 
68 #define AT91_EMAC_CFG_SPD	0x0001
69 #define AT91_EMAC_CFG_FD	0x0002
70 #define AT91_EMAC_CFG_BR	0x0004
71 #define AT91_EMAC_CFG_CAF	0x0010
72 #define AT91_EMAC_CFG_NBC	0x0020
73 #define AT91_EMAC_CFG_MTI	0x0040
74 #define AT91_EMAC_CFG_UNI	0x0080
75 #define AT91_EMAC_CFG_BIG	0x0100
76 #define AT91_EMAC_CFG_EAE	0x0200
77 #define AT91_EMAC_CFG_CLK_MASK	0xFFFFF3FF
78 #define AT91_EMAC_CFG_MCLK_8	0x0000
79 #define AT91_EMAC_CFG_MCLK_16	0x0400
80 #define AT91_EMAC_CFG_MCLK_32	0x0800
81 #define AT91_EMAC_CFG_MCLK_64	0x0C00
82 #define AT91_EMAC_CFG_RTY	0x1000
83 #define AT91_EMAC_CFG_RMII	0x2000
84 
85 #define AT91_EMAC_SR_LINK	0x0001
86 #define AT91_EMAC_SR_MDIO	0x0002
87 #define AT91_EMAC_SR_IDLE	0x0004
88 
89 #define AT91_EMAC_TCR_LEN(x)	(x & 0x7FF)
90 #define AT91_EMAC_TCR_NCRC	0x8000
91 
92 #define AT91_EMAC_TSR_OVR	0x0001
93 #define AT91_EMAC_TSR_COL	0x0002
94 #define AT91_EMAC_TSR_RLE	0x0004
95 #define AT91_EMAC_TSR_TXIDLE	0x0008
96 #define AT91_EMAC_TSR_BNQ	0x0010
97 #define AT91_EMAC_TSR_COMP	0x0020
98 #define AT91_EMAC_TSR_UND	0x0040
99 
100 #define AT91_EMAC_RSR_BNA	0x0001
101 #define AT91_EMAC_RSR_REC	0x0002
102 #define AT91_EMAC_RSR_OVR	0x0004
103 
104 /*  ISR, IER, IDR, IMR use the same bits */
105 #define AT91_EMAC_IxR_DONE	0x0001
106 #define AT91_EMAC_IxR_RCOM	0x0002
107 #define AT91_EMAC_IxR_RBNA	0x0004
108 #define AT91_EMAC_IxR_TOVR	0x0008
109 #define AT91_EMAC_IxR_TUND	0x0010
110 #define AT91_EMAC_IxR_RTRY	0x0020
111 #define AT91_EMAC_IxR_TBRE	0x0040
112 #define AT91_EMAC_IxR_TCOM	0x0080
113 #define AT91_EMAC_IxR_TIDLE	0x0100
114 #define AT91_EMAC_IxR_LINK	0x0200
115 #define AT91_EMAC_IxR_ROVR	0x0400
116 #define AT91_EMAC_IxR_HRESP	0x0800
117 
118 #define AT91_EMAC_MAN_DATA_MASK		0xFFFF
119 #define AT91_EMAC_MAN_CODE_802_3	0x00020000
120 #define AT91_EMAC_MAN_REGA(reg)		((reg & 0x1F) << 18)
121 #define AT91_EMAC_MAN_PHYA(phy)		((phy & 0x1F) << 23)
122 #define AT91_EMAC_MAN_RW_R		0x20000000
123 #define AT91_EMAC_MAN_RW_W		0x10000000
124 #define AT91_EMAC_MAN_HIGH		0x40000000
125 #define AT91_EMAC_MAN_LOW		0x80000000
126 
127 #endif
128