1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Xilinx Multirate Ethernet MAC(MRMAC) driver
4  *
5  * Author(s):   Ashok Reddy Soma <ashok.reddy.soma@xilinx.com>
6  *              Michal Simek <michal.simek@xilinx.com>
7  *
8  * Copyright (C) 2021 Xilinx, Inc. All rights reserved.
9  */
10 
11 #ifndef __XILINX_AXI_MRMAC_H
12 #define __XILINX_AXI_MRMAC_H
13 
14 #define MIN_PKT_SIZE	60
15 
16 /* MRMAC needs atleast two buffer descriptors for Tx/Rx to work.
17  * Otherwise MRMAC will drop the packets. So, have atleast two Tx and
18  * two Rx bd's.
19  */
20 #define TX_DESC		2
21 #define RX_DESC		2
22 
23 /* MRMAC platform data structure */
24 struct axi_mrmac_plat {
25 	struct eth_pdata eth_pdata;
26 	struct mcdma_common_regs *mm2s_cmn;
27 	u32 mrmac_rate; /* Hold the value from DT property "mrmac-rate" */
28 };
29 
30 /* MRMAC private driver structure */
31 struct 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;		/* Pointer to hold min length Tx frame(60) */
40 	u32 mrmac_rate;		/* Speed to configure(Read from DT 10G/25G..) */
41 };
42 
43 /* MRMAC Register Definitions */
44 struct mrmac_regs {
45 	u32 revision;	/* 0x0: Revision Register */
46 	u32 reset;	/* 0x4: Reset Register */
47 	u32 mode;	/* 0x8: Mode */
48 	u32 tx_config;	/* 0xc: Tx Configuration */
49 	u32 rx_config;	/* 0x10: Rx Configuration */
50 	u32 reserved[6];/* 0x14-0x28: Reserved */
51 	u32 tick_reg;	/* 0x2c: Tick Register */
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 /* Status Registers */
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 /* Register bit masks */
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   /* Delay in msecs */
86 #define MRMAC_BLKLCK_TIMEOUT		100 /* Block lock timeout in msecs */
87 #define MRMAC_DMARST_TIMEOUT		500 /* MCDMA reset timeout in msecs */
88 
89 #define XMCDMA_RX_OFFSET		0x500
90 #define XMCDMA_CHAN_OFFSET		0x40
91 
92 /* MCDMA Channel numbers are from 1-16 */
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)		/* First tx packet */
100 #define XMCDMA_BD_CTRL_TXEOF_MASK	BIT(30)		/* Last tx packet */
101 #define XMCDMA_BD_CTRL_ALL_MASK		GENMASK(31, 30)	/* All control bits */
102 #define XMCDMA_BD_STS_ALL_MASK		GENMASK(31, 28)	/* All status bits */
103 
104 /* MCDMA Mask registers */
105 #define XMCDMA_CR_RUNSTOP_MASK		BIT(0) /* Start/stop DMA channel */
106 #define XMCDMA_CR_RESET_MASK		BIT(2) /* Reset DMA engine */
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) /* Completed */
114 #define XMCDMA_BD_STS_DEC_ERR		BIT(20) /* Decode error */
115 #define XMCDMA_BD_STS_SLV_ERR		BIT(29) /* Slave error */
116 #define XMCDMA_BD_STS_INT_ERR		BIT(28) /* Internal err */
117 #define XMCDMA_BD_STS_ALL_ERR		GENMASK(30, 28) /* All errors */
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 /* Actual length */
154 
155 /* MCDMA common offsets */
156 struct mcdma_common_regs {
157 	u32 control;	/* Common control */
158 	u32 status;	/* Common status */
159 	u32 chen;	/* Channel enable/disable */
160 	u32 chser;	/* Channel in progress */
161 	u32 err;	/* Error */
162 	u32 ch_schd_type;	/* Channel Q scheduler type */
163 	u32 wrr_reg1;	/* Weight of each channel (ch1-8) */
164 	u32 wrr_reg2;	/* Weight of each channel (ch9-16) */
165 	u32 ch_serviced;	/* Channels completed */
166 	u32 arcache_aruser;	/* ARCACHE and ARUSER values for AXI4 read */
167 	u32 intr_status;	/* Interrupt monitor */
168 	u32 reserved[5];
169 };
170 
171 /* MCDMA per-channel registers */
172 struct mcdma_chan_reg {
173 	u32 control;	/* Control */
174 	u32 status;	/* Status */
175 	u32 current;	/* Current descriptor */
176 	u32 current_hi;	/* Current descriptor high 32bit */
177 	u32 tail;	/* Tail descriptor */
178 	u32 tail_hi;	/* Tail descriptor high 32bit */
179 	u32 pktcnt;	/* Packet processed count */
180 };
181 
182 /* MCDMA buffer descriptors */
183 struct mcdma_bd {
184 	u32 next_desc;	/* Next descriptor pointer */
185 	u32 next_desc_msb;
186 	u32 buf_addr;	/* Buffer address */
187 	u32 buf_addr_msb;
188 	u32 reserved1;
189 	u32 cntrl;	/* Control */
190 	u32 status;	/* Status */
191 	u32 sband_stats;
192 	u32 app0;
193 	u32 app1;	/* Tx start << 16 | insert */
194 	u32 app2;	/* Tx csum seed */
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	/* __XILINX_AXI_MRMAC_H */
204