xref: /openbsd-src/sys/dev/ic/dwqereg.h (revision 84a278ff9748658ca1a944cc42f86f046094a7ec)
1*84a278ffSstsp /*	$OpenBSD: dwqereg.h,v 1.10 2024/06/05 10:19:55 stsp Exp $	*/
2305ac5f9Spatrick /*
3305ac5f9Spatrick  * Copyright (c) 2008, 2019 Mark Kettenis <kettenis@openbsd.org>
4305ac5f9Spatrick  * Copyright (c) 2017, 2022 Patrick Wildt <patrick@blueri.se>
5305ac5f9Spatrick  *
6305ac5f9Spatrick  * Permission to use, copy, modify, and distribute this software for any
7305ac5f9Spatrick  * purpose with or without fee is hereby granted, provided that the above
8305ac5f9Spatrick  * copyright notice and this permission notice appear in all copies.
9305ac5f9Spatrick  *
10305ac5f9Spatrick  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11305ac5f9Spatrick  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12305ac5f9Spatrick  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13305ac5f9Spatrick  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14305ac5f9Spatrick  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15305ac5f9Spatrick  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16305ac5f9Spatrick  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17305ac5f9Spatrick  */
18305ac5f9Spatrick 
19305ac5f9Spatrick #define GMAC_MAC_CONF		0x0000
20a72369d8Sstsp #define  GMAC_MAC_CONF_IPC		(1 << 27)
21305ac5f9Spatrick #define  GMAC_MAC_CONF_CST		(1 << 21)
22305ac5f9Spatrick #define  GMAC_MAC_CONF_ACS		(1 << 20)
23305ac5f9Spatrick #define  GMAC_MAC_CONF_BE		(1 << 18)
24305ac5f9Spatrick #define  GMAC_MAC_CONF_JD		(1 << 17)
25305ac5f9Spatrick #define  GMAC_MAC_CONF_JE		(1 << 16)
26305ac5f9Spatrick #define  GMAC_MAC_CONF_PS		(1 << 15)
27305ac5f9Spatrick #define  GMAC_MAC_CONF_FES		(1 << 14)
28305ac5f9Spatrick #define  GMAC_MAC_CONF_DM		(1 << 13)
29305ac5f9Spatrick #define  GMAC_MAC_CONF_DCRS		(1 << 9)
30305ac5f9Spatrick #define  GMAC_MAC_CONF_TE		(1 << 1)
31305ac5f9Spatrick #define  GMAC_MAC_CONF_RE		(1 << 0)
32305ac5f9Spatrick #define GMAC_MAC_PACKET_FILTER	0x0008
33305ac5f9Spatrick #define  GMAC_MAC_PACKET_FILTER_HPF	(1 << 10)
34305ac5f9Spatrick #define  GMAC_MAC_PACKET_FILTER_PCF_MASK (3 << 6)
35305ac5f9Spatrick #define  GMAC_MAC_PACKET_FILTER_PCF_ALL	(2 << 6)
36305ac5f9Spatrick #define  GMAC_MAC_PACKET_FILTER_DBF	(1 << 5)
37305ac5f9Spatrick #define  GMAC_MAC_PACKET_FILTER_PM	(1 << 4)
38305ac5f9Spatrick #define  GMAC_MAC_PACKET_FILTER_HMC	(1 << 2)
39305ac5f9Spatrick #define  GMAC_MAC_PACKET_FILTER_HUC	(1 << 1)
40305ac5f9Spatrick #define  GMAC_MAC_PACKET_FILTER_PR	(1 << 0)
41305ac5f9Spatrick #define GMAC_MAC_HASH_TAB_REG0	0x0010
42305ac5f9Spatrick #define GMAC_MAC_HASH_TAB_REG1	0x0014
43305ac5f9Spatrick #define GMAC_INT_MASK		0x003c
44305ac5f9Spatrick #define  GMAC_INT_MASK_LPIIM		(1 << 10)
45305ac5f9Spatrick #define  GMAC_INT_MASK_PIM		(1 << 3)
46305ac5f9Spatrick #define  GMAC_INT_MASK_RIM		(1 << 0)
47*84a278ffSstsp #define GMAC_VLAN_TAG_CTRL	0x0050
48*84a278ffSstsp #define  GMAC_VLAN_TAG_CTRL_EVLRXS		(1 << 24)
49*84a278ffSstsp #define  GMAC_VLAN_TAG_CTRL_STRIP_ALWAYS	((1 << 21) | (1 << 22))
50*84a278ffSstsp #define GMAC_VLAN_TAG_DATA	0x0054
51*84a278ffSstsp #define GMAC_VLAN_TAG_INCL	0x0060
52*84a278ffSstsp #define  GMAC_VLAN_TAG_INCL_VLTI	(1 << 20)
53*84a278ffSstsp #define  GMAC_VLAN_TAG_INCL_CSVL	(1 << 19)
54*84a278ffSstsp #define  GMAC_VLAN_TAG_INCL_DELETE	0x10000
55*84a278ffSstsp #define  GMAC_VLAN_TAG_INCL_INSERT	0x20000
56*84a278ffSstsp #define  GMAC_VLAN_TAG_INCL_REPLACE	0x30000
57*84a278ffSstsp #define  GMAC_VLAN_TAG_INCL_VLT		0x0ffff
58*84a278ffSstsp #define  GMAC_VLAN_TAG_INCL_RDWR	(1U << 30)
59*84a278ffSstsp #define  GMAC_VLAN_TAG_INCL_BUSY	(1U << 31)
60305ac5f9Spatrick #define GMAC_QX_TX_FLOW_CTRL(x)	(0x0070 + (x) * 4)
61305ac5f9Spatrick #define  GMAC_QX_TX_FLOW_CTRL_PT_SHIFT	16
62305ac5f9Spatrick #define  GMAC_QX_TX_FLOW_CTRL_TFE	(1 << 0)
63305ac5f9Spatrick #define GMAC_RX_FLOW_CTRL	0x0090
64305ac5f9Spatrick #define  GMAC_RX_FLOW_CTRL_RFE		(1 << 0)
65305ac5f9Spatrick #define GMAC_RXQ_CTRL0		0x00a0
66305ac5f9Spatrick #define  GMAC_RXQ_CTRL0_QUEUE_CLR(x)	(0x3 << ((x) * 2)
67305ac5f9Spatrick #define  GMAC_RXQ_CTRL0_AVB_QUEUE_EN(x)	(1 << ((x) * 2))
68305ac5f9Spatrick #define  GMAC_RXQ_CTRL0_DCB_QUEUE_EN(x)	(2 << ((x) * 2))
69305ac5f9Spatrick #define GMAC_RXQ_CTRL1		0x00a4
70305ac5f9Spatrick #define GMAC_RXQ_CTRL2		0x00a8
71305ac5f9Spatrick #define GMAC_RXQ_CTRL3		0x00ac
72305ac5f9Spatrick #define GMAC_INT_STATUS		0x00b0
73305ac5f9Spatrick #define GMAC_INT_EN		0x00b4
74305ac5f9Spatrick #define GMAC_MAC_1US_TIC_CTR	0x00dc
75b6eb1329Skettenis #define GMAC_VERSION		0x0110
76b6eb1329Skettenis #define  GMAC_VERSION_SNPS_MASK		0xff
77305ac5f9Spatrick #define GMAC_MAC_HW_FEATURE(x)	(0x011c + (x) * 0x4)
78a72369d8Sstsp #define  GMAC_MAC_HW_FEATURE0_TXCOESEL	(1 << 14)
79a72369d8Sstsp #define  GMAC_MAC_HW_FEATURE0_RXCOESEL	(1 << 16)
80*84a278ffSstsp #define  GMAC_MAC_HW_FEATURE0_SAVLANINS	(1 << 27)
81305ac5f9Spatrick #define  GMAC_MAC_HW_FEATURE1_TXFIFOSIZE(x) (((x) >> 6) & 0x1f)
821066eb27Sstsp #define  GMAC_MAC_HW_FEATURE1_RXFIFOSIZE(x) (((x) >> 0) & 0x1f)
83305ac5f9Spatrick #define GMAC_MAC_MDIO_ADDR	0x0200
84305ac5f9Spatrick #define  GMAC_MAC_MDIO_ADDR_PA_SHIFT	21
85305ac5f9Spatrick #define  GMAC_MAC_MDIO_ADDR_RDA_SHIFT	16
86305ac5f9Spatrick #define  GMAC_MAC_MDIO_ADDR_CR_SHIFT	8
87305ac5f9Spatrick #define  GMAC_MAC_MDIO_ADDR_CR_60_100	0
88305ac5f9Spatrick #define  GMAC_MAC_MDIO_ADDR_CR_100_150	1
89305ac5f9Spatrick #define  GMAC_MAC_MDIO_ADDR_CR_20_35	2
90305ac5f9Spatrick #define  GMAC_MAC_MDIO_ADDR_CR_35_60	3
91305ac5f9Spatrick #define  GMAC_MAC_MDIO_ADDR_CR_150_250	4
92305ac5f9Spatrick #define  GMAC_MAC_MDIO_ADDR_CR_250_300	5
93305ac5f9Spatrick #define  GMAC_MAC_MDIO_ADDR_CR_300_500	6
94305ac5f9Spatrick #define  GMAC_MAC_MDIO_ADDR_CR_500_800	7
95305ac5f9Spatrick #define  GMAC_MAC_MDIO_ADDR_SKAP	(1 << 4)
96305ac5f9Spatrick #define  GMAC_MAC_MDIO_ADDR_GOC_READ	(3 << 2)
97305ac5f9Spatrick #define  GMAC_MAC_MDIO_ADDR_GOC_WRITE	(1 << 2)
98305ac5f9Spatrick #define  GMAC_MAC_MDIO_ADDR_C45E	(1 << 1)
99305ac5f9Spatrick #define  GMAC_MAC_MDIO_ADDR_GB		(1 << 0)
100305ac5f9Spatrick #define GMAC_MAC_MDIO_DATA	0x0204
101bc63a4e9Skettenis #define GMAC_MAC_ADDR0_HI	0x0300
102bc63a4e9Skettenis #define GMAC_MAC_ADDR0_LO	0x0304
10364bdd17fSjmatthew #define GMAC_MMC_RX_INT_MASK	0x070c
10464bdd17fSjmatthew #define GMAC_MMC_TX_INT_MASK	0x0710
105305ac5f9Spatrick 
106305ac5f9Spatrick #define GMAC_MTL_OPERATION_MODE	0x0c00
107305ac5f9Spatrick #define  GMAC_MTL_FRPE			(1 << 15)
108305ac5f9Spatrick #define  GMAC_MTL_OPERATION_SCHALG_MASK	(0x3 << 5)
109305ac5f9Spatrick #define  GMAC_MTL_OPERATION_SCHALG_WRR	(0x0 << 5)
110305ac5f9Spatrick #define  GMAC_MTL_OPERATION_SCHALG_WFQ	(0x1 << 5)
111305ac5f9Spatrick #define  GMAC_MTL_OPERATION_SCHALG_DWRR	(0x2 << 5)
112305ac5f9Spatrick #define  GMAC_MTL_OPERATION_SCHALG_SP	(0x3 << 5)
113305ac5f9Spatrick #define  GMAC_MTL_OPERATION_RAA_MASK	(0x1 << 2)
114305ac5f9Spatrick #define  GMAC_MTL_OPERATION_RAA_SP	(0x0 << 2)
115305ac5f9Spatrick #define  GMAC_MTL_OPERATION_RAA_WSP	(0x1 << 2)
116305ac5f9Spatrick 
117305ac5f9Spatrick #define GMAC_MTL_CHAN_BASE_ADDR(x)	(0x0d00 + (x) * 0x40)
118305ac5f9Spatrick #define GMAC_MTL_CHAN_TX_OP_MODE(x)	(GMAC_MTL_CHAN_BASE_ADDR(x) + 0x0)
119305ac5f9Spatrick #define  GMAC_MTL_CHAN_TX_OP_MODE_TQS_MASK	(0x1ffU << 16)
120305ac5f9Spatrick #define  GMAC_MTL_CHAN_TX_OP_MODE_TQS_SHIFT	16
121305ac5f9Spatrick #define  GMAC_MTL_CHAN_TX_OP_MODE_TTC_MASK	(0x7 << 4)
122305ac5f9Spatrick #define  GMAC_MTL_CHAN_TX_OP_MODE_TTC_SHIFT	4
123305ac5f9Spatrick #define  GMAC_MTL_CHAN_TX_OP_MODE_TTC_32	0
124305ac5f9Spatrick #define  GMAC_MTL_CHAN_TX_OP_MODE_TTC_64	(1 << 4)
125305ac5f9Spatrick #define  GMAC_MTL_CHAN_TX_OP_MODE_TTC_96	(2 << 4)
126305ac5f9Spatrick #define  GMAC_MTL_CHAN_TX_OP_MODE_TTC_128	(3 << 4)
127305ac5f9Spatrick #define  GMAC_MTL_CHAN_TX_OP_MODE_TTC_192	(4 << 4)
128305ac5f9Spatrick #define  GMAC_MTL_CHAN_TX_OP_MODE_TTC_256	(5 << 4)
129305ac5f9Spatrick #define  GMAC_MTL_CHAN_TX_OP_MODE_TTC_384	(6 << 4)
130305ac5f9Spatrick #define  GMAC_MTL_CHAN_TX_OP_MODE_TTC_512	(7 << 4)
131305ac5f9Spatrick #define  GMAC_MTL_CHAN_TX_OP_MODE_TXQEN_MASK	(0x3 << 2)
132305ac5f9Spatrick #define  GMAC_MTL_CHAN_TX_OP_MODE_TXQEN_AV	(1 << 2)
133305ac5f9Spatrick #define  GMAC_MTL_CHAN_TX_OP_MODE_TXQEN		(2 << 2)
134305ac5f9Spatrick #define  GMAC_MTL_CHAN_TX_OP_MODE_TSF		(1 << 1)
135305ac5f9Spatrick #define  GMAC_MTL_CHAN_TX_OP_MODE_FTQ		(1 << 0)
136305ac5f9Spatrick #define GMAC_MTL_CHAN_TX_DEBUG(x)	(GMAC_MTL_CHAN_BASE_ADDR(x) + 0x8)
137305ac5f9Spatrick #define GMAC_MTL_CHAN_INT_CTRL(x)	(GMAC_MTL_CHAN_BASE_ADDR(x) + 0x2c)
138305ac5f9Spatrick #define GMAC_MTL_CHAN_RX_OP_MODE(x)	(GMAC_MTL_CHAN_BASE_ADDR(x) + 0x30)
139305ac5f9Spatrick #define  GMAC_MTL_CHAN_RX_OP_MODE_RQS_MASK	(0x3ffU << 20)
140305ac5f9Spatrick #define  GMAC_MTL_CHAN_RX_OP_MODE_RQS_SHIFT	20
141305ac5f9Spatrick #define  GMAC_MTL_CHAN_RX_OP_MODE_RFD_MASK	(0x3fU << 14)
142305ac5f9Spatrick #define  GMAC_MTL_CHAN_RX_OP_MODE_RFD_SHIFT	14
143305ac5f9Spatrick #define  GMAC_MTL_CHAN_RX_OP_MODE_RFA_MASK	(0x3fU << 8)
144305ac5f9Spatrick #define  GMAC_MTL_CHAN_RX_OP_MODE_RFA_SHIFT	8
145305ac5f9Spatrick #define  GMAC_MTL_CHAN_RX_OP_MODE_EHFC		(1 << 7)
146305ac5f9Spatrick #define  GMAC_MTL_CHAN_RX_OP_MODE_RSF		(1 << 5)
147305ac5f9Spatrick #define  GMAC_MTL_CHAN_RX_OP_MODE_RTC_MASK	(0x3 << 3)
148305ac5f9Spatrick #define  GMAC_MTL_CHAN_RX_OP_MODE_RTC_SHIFT	3
149305ac5f9Spatrick #define  GMAC_MTL_CHAN_RX_OP_MODE_RTC_32	(1 << 3)
150305ac5f9Spatrick #define  GMAC_MTL_CHAN_RX_OP_MODE_RTC_64	(0 << 3)
151305ac5f9Spatrick #define  GMAC_MTL_CHAN_RX_OP_MODE_RTC_96	(2 << 3)
152305ac5f9Spatrick #define  GMAC_MTL_CHAN_RX_OP_MODE_RTC_128	(3 << 3)
153305ac5f9Spatrick #define GMAC_MTL_CHAN_RX_DEBUG(x)	(GMAC_MTL_CHAN_BASE_ADDR(x) + 0x38)
154305ac5f9Spatrick 
155305ac5f9Spatrick #define GMAC_BUS_MODE		0x1000
156305ac5f9Spatrick #define  GMAC_BUS_MODE_DCHE		(1 << 19)
157305ac5f9Spatrick #define  GMAC_BUS_MODE_SWR		(1 << 0)
158305ac5f9Spatrick #define GMAC_SYS_BUS_MODE	0x1004
159305ac5f9Spatrick #define  GMAC_SYS_BUS_MODE_EN_LPI		(1U << 31)
160305ac5f9Spatrick #define  GMAC_SYS_BUS_MODE_LPI_XIT_FRM		(1 << 30)
161305ac5f9Spatrick #define  GMAC_SYS_BUS_MODE_WR_OSR_LMT_MASK	(0xf << 24)
162305ac5f9Spatrick #define  GMAC_SYS_BUS_MODE_WR_OSR_LMT_SHIFT	24
163305ac5f9Spatrick #define  GMAC_SYS_BUS_MODE_RD_OSR_LMT_MASK	(0xf << 16)
164305ac5f9Spatrick #define  GMAC_SYS_BUS_MODE_RD_OSR_LMT_SHIFT	16
165305ac5f9Spatrick #define  GMAC_SYS_BUS_MODE_MB			(1 << 14)
166305ac5f9Spatrick #define  GMAC_SYS_BUS_MODE_AAL			(1 << 12)
167305ac5f9Spatrick #define  GMAC_SYS_BUS_MODE_EAME			(1 << 11)
168305ac5f9Spatrick #define  GMAC_SYS_BUS_MODE_BLEN_256		(1 << 7)
169305ac5f9Spatrick #define  GMAC_SYS_BUS_MODE_BLEN_128		(1 << 6)
170305ac5f9Spatrick #define  GMAC_SYS_BUS_MODE_BLEN_64		(1 << 5)
171305ac5f9Spatrick #define  GMAC_SYS_BUS_MODE_BLEN_32		(1 << 4)
172305ac5f9Spatrick #define  GMAC_SYS_BUS_MODE_BLEN_16		(1 << 3)
173305ac5f9Spatrick #define  GMAC_SYS_BUS_MODE_BLEN_8		(1 << 2)
174305ac5f9Spatrick #define  GMAC_SYS_BUS_MODE_BLEN_4		(1 << 1)
175305ac5f9Spatrick #define  GMAC_SYS_BUS_MODE_FB			(1 << 0)
176305ac5f9Spatrick 
177305ac5f9Spatrick #define GMAC_CHAN_BASE_ADDR(x)		(0x1100 + (x) * 0x80)
178305ac5f9Spatrick #define GMAC_CHAN_CONTROL(x)		(GMAC_CHAN_BASE_ADDR(x) + 0x0)
179305ac5f9Spatrick #define  GMAC_CHAN_CONTROL_8XPBL		(1 << 16)
180305ac5f9Spatrick #define GMAC_CHAN_TX_CONTROL(x)		(GMAC_CHAN_BASE_ADDR(x) + 0x4)
1812fc5c81eSstsp #define  GMAC_CHAN_TX_CONTROL_PBL_MASK		(0x3f << 16)
1822fc5c81eSstsp #define  GMAC_CHAN_TX_CONTROL_PBL_SHIFT		16
183305ac5f9Spatrick #define  GMAC_CHAN_TX_CONTROL_OSP		(1 << 4)
184305ac5f9Spatrick #define  GMAC_CHAN_TX_CONTROL_ST		(1 << 0)
185305ac5f9Spatrick #define GMAC_CHAN_RX_CONTROL(x)		(GMAC_CHAN_BASE_ADDR(x) + 0x8)
1862fc5c81eSstsp #define  GMAC_CHAN_RX_CONTROL_RPBL_MASK		(0x3f << 16)
1872fc5c81eSstsp #define  GMAC_CHAN_RX_CONTROL_RPBL_SHIFT	16
188305ac5f9Spatrick #define  GMAC_CHAN_RX_CONTROL_SR		(1 << 0)
189305ac5f9Spatrick #define GMAC_CHAN_TX_BASE_ADDR_HI(x)	(GMAC_CHAN_BASE_ADDR(x) + 0x10)
190305ac5f9Spatrick #define GMAC_CHAN_TX_BASE_ADDR(x)	(GMAC_CHAN_BASE_ADDR(x) + 0x14)
191305ac5f9Spatrick #define GMAC_CHAN_RX_BASE_ADDR_HI(x)	(GMAC_CHAN_BASE_ADDR(x) + 0x18)
192305ac5f9Spatrick #define GMAC_CHAN_RX_BASE_ADDR(x)	(GMAC_CHAN_BASE_ADDR(x) + 0x1c)
193305ac5f9Spatrick #define GMAC_CHAN_TX_END_ADDR(x)	(GMAC_CHAN_BASE_ADDR(x) + 0x20)
194305ac5f9Spatrick #define GMAC_CHAN_RX_END_ADDR(x)	(GMAC_CHAN_BASE_ADDR(x) + 0x28)
195305ac5f9Spatrick #define GMAC_CHAN_TX_RING_LEN(x)	(GMAC_CHAN_BASE_ADDR(x) + 0x2c)
196305ac5f9Spatrick #define GMAC_CHAN_RX_RING_LEN(x)	(GMAC_CHAN_BASE_ADDR(x) + 0x30)
197305ac5f9Spatrick #define GMAC_CHAN_INTR_ENA(x)		(GMAC_CHAN_BASE_ADDR(x) + 0x34)
198305ac5f9Spatrick #define  GMAC_CHAN_INTR_ENA_NIE			(1 << 15)
199305ac5f9Spatrick #define  GMAC_CHAN_INTR_ENA_AIE			(1 << 14)
200305ac5f9Spatrick #define  GMAC_CHAN_INTR_ENA_CDE			(1 << 13)
201305ac5f9Spatrick #define  GMAC_CHAN_INTR_ENA_FBE			(1 << 12)
202305ac5f9Spatrick #define  GMAC_CHAN_INTR_ENA_ERE			(1 << 11)
203305ac5f9Spatrick #define  GMAC_CHAN_INTR_ENA_ETE			(1 << 10)
204305ac5f9Spatrick #define  GMAC_CHAN_INTR_ENA_RWE			(1 << 9)
205305ac5f9Spatrick #define  GMAC_CHAN_INTR_ENA_RSE			(1 << 8)
206305ac5f9Spatrick #define  GMAC_CHAN_INTR_ENA_RBUE		(1 << 7)
207305ac5f9Spatrick #define  GMAC_CHAN_INTR_ENA_RIE			(1 << 6)
208305ac5f9Spatrick #define  GMAC_CHAN_INTR_ENA_TBUE		(1 << 2)
209305ac5f9Spatrick #define  GMAC_CHAN_INTR_ENA_TSE			(1 << 1)
210305ac5f9Spatrick #define  GMAC_CHAN_INTR_ENA_TIE			(1 << 0)
211305ac5f9Spatrick #define GMAC_CHAN_RX_WATCHDOG(x)	(GMAC_CHAN_CONTROL(x) + 0x38)
212305ac5f9Spatrick #define GMAC_CHAN_SLOT_CTRL_STATUS(x)	(GMAC_CHAN_CONTROL(x) + 0x3c)
213305ac5f9Spatrick #define GMAC_CHAN_CUR_TX_DESC(x)	(GMAC_CHAN_CONTROL(x) + 0x44)
214305ac5f9Spatrick #define GMAC_CHAN_CUR_RX_DESC(x)	(GMAC_CHAN_CONTROL(x) + 0x4c)
215305ac5f9Spatrick #define GMAC_CHAN_CUR_TX_BUF_ADDR(x)	(GMAC_CHAN_CONTROL(x) + 0x54)
216305ac5f9Spatrick #define GMAC_CHAN_CUR_RX_BUF_ADDR(x)	(GMAC_CHAN_CONTROL(x) + 0x5c)
217305ac5f9Spatrick #define GMAC_CHAN_STATUS(x)		(GMAC_CHAN_CONTROL(x) + 0x60)
218305ac5f9Spatrick #define  GMAC_CHAN_STATUS_REB_MASK		0x7
219305ac5f9Spatrick #define  GMAC_CHAN_STATUS_REB_SHIFT		19
220305ac5f9Spatrick #define  GMAC_CHAN_STATUS_TEB_MASK		0x7
221305ac5f9Spatrick #define  GMAC_CHAN_STATUS_TEB_SHIFT		16
222305ac5f9Spatrick #define  GMAC_CHAN_STATUS_NIS			(1 << 15)
223305ac5f9Spatrick #define  GMAC_CHAN_STATUS_AIS			(1 << 14)
224305ac5f9Spatrick #define  GMAC_CHAN_STATUS_CDE			(1 << 13)
225305ac5f9Spatrick #define  GMAC_CHAN_STATUS_FBE			(1 << 12)
226305ac5f9Spatrick #define  GMAC_CHAN_STATUS_ERI			(1 << 11)
227305ac5f9Spatrick #define  GMAC_CHAN_STATUS_ETI			(1 << 10)
228305ac5f9Spatrick #define  GMAC_CHAN_STATUS_RWT			(1 << 9)
229305ac5f9Spatrick #define  GMAC_CHAN_STATUS_RPS			(1 << 8)
230305ac5f9Spatrick #define  GMAC_CHAN_STATUS_RBU			(1 << 7)
231305ac5f9Spatrick #define  GMAC_CHAN_STATUS_RI			(1 << 6)
232305ac5f9Spatrick #define  GMAC_CHAN_STATUS_TBU			(1 << 2)
233305ac5f9Spatrick #define  GMAC_CHAN_STATUS_TPS			(1 << 1)
234305ac5f9Spatrick #define  GMAC_CHAN_STATUS_TI			(1 << 0)
235305ac5f9Spatrick 
236305ac5f9Spatrick /*
237305ac5f9Spatrick  * DWQE descriptors.
238305ac5f9Spatrick  */
239305ac5f9Spatrick 
240305ac5f9Spatrick struct dwqe_desc {
241305ac5f9Spatrick 	uint32_t sd_tdes0;
242305ac5f9Spatrick 	uint32_t sd_tdes1;
243305ac5f9Spatrick 	uint32_t sd_tdes2;
244305ac5f9Spatrick 	uint32_t sd_tdes3;
245305ac5f9Spatrick };
246305ac5f9Spatrick 
247*84a278ffSstsp /* Tx context descriptor bits (host to device); precedes regular descriptor */
248*84a278ffSstsp #define TDES3_CTXT		(1 << 30)
249*84a278ffSstsp #define TDES3_VLAN_TAG_VALID	(1 << 16)
250*84a278ffSstsp #define TDES3_VLAN_TAG		0xffff
251*84a278ffSstsp /* Bit 31 is the OWN bit, as in regular Tx descriptor. */
252*84a278ffSstsp 
25371083937Sstsp /* Tx bits (read format; host to device) */
25471083937Sstsp #define TDES2_HDR_LEN		0x000003ff	/* if TSO is enabled */
25571083937Sstsp #define TDES2_BUF1_LEN		0x00003fff	/* if TSO is disabled */
25671083937Sstsp #define TDES2_VLAN_TIR		0x0000c000
25771083937Sstsp #define   TDES2_NO_VLAN_TAGGING		(0x0 << 14)
25871083937Sstsp #define   TDES2_VLAN_TAG_STRIP		(0x1 << 14)
25971083937Sstsp #define   TDES2_VLAN_TAG_INSERT		(0x2 << 14)
26071083937Sstsp #define   TDES2_VLAN_TAG_REPLACE	(0x3 << 14)
26171083937Sstsp #define TDES2_BUF2_LEN		0x3fff0000
26271083937Sstsp #define TDES2_TX_TIMESTAMP_EN	(1 << 30)	/* if TSO is disabled */
26371083937Sstsp #define TDES2_TSO_EXTMEM_DIS	(1 << 30)	/* if TSO is enabled */
264305ac5f9Spatrick #define TDES2_IC		(1U << 31)
26571083937Sstsp #define TDES3_TCP_PAYLOAD_LEN	0x0003ffff	/* if TSO is enabled */
26671083937Sstsp #define TDES3_FRAME_LEN		0x00007fff	/* if TSO is disabled */
26771083937Sstsp #define TDES3_CIC		0x00030000	/* if TSO is disabled */
26871083937Sstsp #define   TDES3_CSUM_DISABLE			(0x0 << 16)
26971083937Sstsp #define   TDES3_CSUM_IPHDR			(0x1 << 16)
27071083937Sstsp #define   TDES3_CSUM_IPHDR_PAYLOAD		(0x2 << 16)
27171083937Sstsp #define   TDES3_CSUM_IPHDR_PAYLOAD_PSEUDOHDR	(0x3 << 16)
27271083937Sstsp #define TDES3_TSO_EN		(1 << 18)
273*84a278ffSstsp #define TDES3_CPC		((1 << 26) | (1 << 27)) /* if TSO is disabled */
274*84a278ffSstsp #define   TDES3_CPC_CRC_AND_PAD		(0x0 << 26)
275*84a278ffSstsp #define   TDES3_CPC_CRC_NO_PAD		(0x1 << 26)
276*84a278ffSstsp #define   TDES3_CPC_DISABLE		(0x2 << 26)
277*84a278ffSstsp #define   TDES3_CPC_CRC_REPLACE		(0x3 << 26)
278305ac5f9Spatrick #define TDES3_LS		(1 << 28)
279305ac5f9Spatrick #define TDES3_FS		(1 << 29)
280305ac5f9Spatrick #define TDES3_OWN		(1U << 31)
281305ac5f9Spatrick 
28271083937Sstsp /* Tx bits (writeback format; device to host) */
28371083937Sstsp #define TDES3_ES		(1 << 15)
28471083937Sstsp #define TDES3_DE		(1 << 23)
28571083937Sstsp /* Bit 28 is the LS bit, as in "read" format. */
28671083937Sstsp /* Bit 29 is the FS bit, as in "read" format. */
28771083937Sstsp /* Bit 31 is the OWN bit, as in "read" format. */
28871083937Sstsp 
2898fa0fb92Sstsp /* Rx bits (read format; host to device) */
2908fa0fb92Sstsp #define RDES3_BUF1V		(1 << 24)
2918fa0fb92Sstsp #define RDES3_BUF2V		(1 << 25)
2928fa0fb92Sstsp #define RDES3_IC		(1 << 30)
2938fa0fb92Sstsp #define RDES3_OWN		(1U << 31)
2948fa0fb92Sstsp 
2958fa0fb92Sstsp /* Rx bits (writeback format; device to host) */
296*84a278ffSstsp #define RDES0_IVT		0xffff0000
297*84a278ffSstsp #define RDES0_OVT		0x0000ffff
2988fa0fb92Sstsp #define RDES1_IP_PAYLOAD_TYPE	0x7
2998fa0fb92Sstsp #define   RDES1_IP_PAYLOAD_UNKNOWN	0x0
3008fa0fb92Sstsp #define   RDES1_IP_PAYLOAD_UDP		0x1
3018fa0fb92Sstsp #define   RDES1_IP_PAYLOAD_TCP		0x2
3028fa0fb92Sstsp #define   RDES1_IP_PAYLOAD_ICMP		0x3
3038fa0fb92Sstsp #define RDES1_IP_HDR_ERROR	(1 << 3)
3048fa0fb92Sstsp #define RDES1_IPV4_HDR		(1 << 4)
3058fa0fb92Sstsp #define RDES1_IPV6_HDR		(1 << 5)
3068fa0fb92Sstsp #define RDES1_IP_CSUM_BYPASS	(1 << 6)
3078fa0fb92Sstsp #define RDES1_IP_PAYLOAD_ERROR	(1 << 7)
3088fa0fb92Sstsp #define RDES3_LENGTH		(0x7fff << 0)
309305ac5f9Spatrick #define RDES3_ES		(1 << 15)
3108fa0fb92Sstsp #define RDES3_LENTYPE		0x70000
3118fa0fb92Sstsp #define   RDES3_LENTYPE_LENGTH	(0x0 << 16)
3128fa0fb92Sstsp #define   RDES3_LENTYPE_TYPE	(0x1 << 16)
3138fa0fb92Sstsp 				/* 0x2 is reserved */
3148fa0fb92Sstsp #define   RDES3_LENTYPE_ARP	(0x3 << 16)
3158fa0fb92Sstsp #define   RDES3_LENTYPE_VLAN	(0x4 << 16)
3168fa0fb92Sstsp #define   RDES3_LENTYPE_2VLAN	(0x5 << 16)
3178fa0fb92Sstsp #define   RDES3_LENTYPE_MACCTL	(0x6 << 16)
3188fa0fb92Sstsp #define   RDES3_LENTYPE_OAM	(0x7 << 16)
319305ac5f9Spatrick #define RDES3_DE		(1 << 19)
320305ac5f9Spatrick #define RDES3_RE		(1 << 20)
321305ac5f9Spatrick #define RDES3_OE		(1 << 21)
322305ac5f9Spatrick #define RDES3_RWT		(1 << 22)
3238fa0fb92Sstsp #define RDES3_GP		(1 << 23)
324305ac5f9Spatrick #define RDES3_CE		(1 << 24)
3258fa0fb92Sstsp #define RDES3_RDES0_VALID	(1 << 25)
3268fa0fb92Sstsp #define RDES3_RDES1_VALID	(1 << 26)
3278fa0fb92Sstsp #define RDES3_RDES2_VALID	(1 << 27)
3288fa0fb92Sstsp #define RDES3_LD		(1 << 28)
3298fa0fb92Sstsp #define RDES3_FD		(1 << 29)
3308fa0fb92Sstsp #define RDES3_CTXT		(1 << 30)
3318fa0fb92Sstsp /* Bit 31 is the OWN bit, as in "read" format. */
332