1
2
3
4
5
6
7
8
9
10
11#ifndef __XILINX_AXI_MRMAC_H
12#define __XILINX_AXI_MRMAC_H
13
14#define MIN_PKT_SIZE 60
15
16
17
18
19
20#define TX_DESC 2
21#define RX_DESC 2
22
23
24struct axi_mrmac_plat {
25 struct eth_pdata eth_pdata;
26 struct mcdma_common_regs *mm2s_cmn;
27 u32 mrmac_rate;
28};
29
30
31struct axi_mrmac_priv {
32 struct mrmac_regs *iobase;
33 struct mcdma_common_regs *mm2s_cmn;
34 struct mcdma_common_regs *s2mm_cmn;
35 struct mcdma_chan_reg *mcdma_tx;
36 struct mcdma_chan_reg *mcdma_rx;
37 struct mcdma_bd *tx_bd[TX_DESC];
38 struct mcdma_bd *rx_bd[RX_DESC];
39 u8 *txminframe;
40 u32 mrmac_rate;
41};
42
43
44struct mrmac_regs {
45 u32 revision;
46 u32 reset;
47 u32 mode;
48 u32 tx_config;
49 u32 rx_config;
50 u32 reserved[6];
51 u32 tick_reg;
52};
53
54#define TX_BD_TOTAL_SIZE (TX_DESC * sizeof(struct mcdma_bd))
55#define RX_BD_TOTAL_SIZE (RX_DESC * sizeof(struct mcdma_bd))
56
57#define RX_BUFF_TOTAL_SIZE (RX_DESC * PKTSIZE_ALIGN)
58
59
60#define MRMAC_TX_STS_OFFSET 0x740
61#define MRMAC_RX_STS_OFFSET 0x744
62#define MRMAC_TX_RT_STS_OFFSET 0x748
63#define MRMAC_RX_RT_STS_OFFSET 0x74c
64#define MRMAC_STATRX_BLKLCK_OFFSET 0x754
65
66
67#define MRMAC_RX_SERDES_RST_MASK (BIT(3) | BIT(2) | BIT(1) | BIT(0))
68#define MRMAC_TX_SERDES_RST_MASK BIT(4)
69#define MRMAC_RX_RST_MASK BIT(5)
70#define MRMAC_TX_RST_MASK BIT(6)
71#define MRMAC_RX_AXI_RST_MASK BIT(8)
72#define MRMAC_TX_AXI_RST_MASK BIT(9)
73#define MRMAC_STS_ALL_MASK 0xffffffff
74
75#define MRMAC_RX_EN_MASK BIT(0)
76#define MRMAC_RX_DEL_FCS_MASK BIT(1)
77
78#define MRMAC_TX_EN_MASK BIT(0)
79#define MRMAC_TX_INS_FCS_MASK BIT(1)
80
81#define MRMAC_RX_BLKLCK_MASK BIT(0)
82
83#define MRMAC_TICK_TRIGGER BIT(0)
84
85#define MRMAC_RESET_DELAY 1
86#define MRMAC_BLKLCK_TIMEOUT 100
87#define MRMAC_DMARST_TIMEOUT 500
88
89#define XMCDMA_RX_OFFSET 0x500
90#define XMCDMA_CHAN_OFFSET 0x40
91
92
93#define XMCDMA_CHANNEL_1 BIT(0)
94#define XMCDMA_CHANNEL_2 BIT(1)
95
96#define XMCDMA_CR_RUNSTOP BIT(0)
97#define XMCDMA_CR_RESET BIT(2)
98
99#define XMCDMA_BD_CTRL_TXSOF_MASK BIT(31)
100#define XMCDMA_BD_CTRL_TXEOF_MASK BIT(30)
101#define XMCDMA_BD_CTRL_ALL_MASK GENMASK(31, 30)
102#define XMCDMA_BD_STS_ALL_MASK GENMASK(31, 28)
103
104
105#define XMCDMA_CR_RUNSTOP_MASK BIT(0)
106#define XMCDMA_CR_RESET_MASK BIT(2)
107
108#define XMCDMA_SR_HALTED_MASK BIT(0)
109#define XMCDMA_SR_IDLE_MASK BIT(1)
110
111#define XMCDMA_CH_IDLE BIT(0)
112
113#define XMCDMA_BD_STS_COMPLETE BIT(31)
114#define XMCDMA_BD_STS_DEC_ERR BIT(20)
115#define XMCDMA_BD_STS_SLV_ERR BIT(29)
116#define XMCDMA_BD_STS_INT_ERR BIT(28)
117#define XMCDMA_BD_STS_ALL_ERR GENMASK(30, 28)
118
119#define XMCDMA_IRQ_ERRON_OTHERQ_MASK BIT(3)
120#define XMCDMA_IRQ_PKTDROP_MASK BIT(4)
121#define XMCDMA_IRQ_IOC_MASK BIT(5)
122#define XMCDMA_IRQ_DELAY_MASK BIT(6)
123#define XMCDMA_IRQ_ERR_MASK BIT(7)
124#define XMCDMA_IRQ_ALL_MASK GENMASK(7, 5)
125#define XMCDMA_PKTDROP_COALESCE_MASK GENMASK(15, 8)
126#define XMCDMA_COALESCE_MASK GENMASK(23, 16)
127#define XMCDMA_DELAY_MASK GENMASK(31, 24)
128
129#define MRMAC_CTL_DATA_RATE_MASK GENMASK(2, 0)
130#define MRMAC_CTL_DATA_RATE_10G 0
131#define MRMAC_CTL_DATA_RATE_25G 1
132#define MRMAC_CTL_DATA_RATE_40G 2
133#define MRMAC_CTL_DATA_RATE_50G 3
134#define MRMAC_CTL_DATA_RATE_100G 4
135
136#define MRMAC_CTL_AXIS_CFG_MASK GENMASK(11, 9)
137#define MRMAC_CTL_AXIS_CFG_SHIFT 9
138#define MRMAC_CTL_AXIS_CFG_10G_IND 1
139#define MRMAC_CTL_AXIS_CFG_25G_IND 1
140
141#define MRMAC_CTL_SERDES_WIDTH_MASK GENMASK(6, 4)
142#define MRMAC_CTL_SERDES_WIDTH_SHIFT 4
143#define MRMAC_CTL_SERDES_WIDTH_10G 4
144#define MRMAC_CTL_SERDES_WIDTH_25G 6
145
146#define MRMAC_CTL_RATE_CFG_MASK (MRMAC_CTL_DATA_RATE_MASK | \
147 MRMAC_CTL_AXIS_CFG_MASK | \
148 MRMAC_CTL_SERDES_WIDTH_MASK)
149
150#define MRMAC_CTL_PM_TICK_MASK BIT(30)
151#define MRMAC_TICK_TRIGGER BIT(0)
152
153#define XMCDMA_BD_STS_ACTUAL_LEN_MASK 0x007fffff
154
155
156struct mcdma_common_regs {
157 u32 control;
158 u32 status;
159 u32 chen;
160 u32 chser;
161 u32 err;
162 u32 ch_schd_type;
163 u32 wrr_reg1;
164 u32 wrr_reg2;
165 u32 ch_serviced;
166 u32 arcache_aruser;
167 u32 intr_status;
168 u32 reserved[5];
169};
170
171
172struct mcdma_chan_reg {
173 u32 control;
174 u32 status;
175 u32 current;
176 u32 current_hi;
177 u32 tail;
178 u32 tail_hi;
179 u32 pktcnt;
180};
181
182
183struct mcdma_bd {
184 u32 next_desc;
185 u32 next_desc_msb;
186 u32 buf_addr;
187 u32 buf_addr_msb;
188 u32 reserved1;
189 u32 cntrl;
190 u32 status;
191 u32 sband_stats;
192 u32 app0;
193 u32 app1;
194 u32 app2;
195 u32 app3;
196 u32 app4;
197 u32 sw_id_offset;
198 u32 reserved2;
199 u32 reserved3;
200 u32 reserved4[16];
201};
202
203#endif
204