1cf1ff59eb0b0932a89de7bfa81343aa83f52559
[oweals/u-boot.git] / drivers / net / dwc_eth_qos.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (c) 2016, NVIDIA CORPORATION.
4  *
5  * Portions based on U-Boot's rtl8169.c.
6  */
7
8 /*
9  * This driver supports the Synopsys Designware Ethernet QOS (Quality Of
10  * Service) IP block. The IP supports multiple options for bus type, clocking/
11  * reset structure, and feature list.
12  *
13  * The driver is written such that generic core logic is kept separate from
14  * configuration-specific logic. Code that interacts with configuration-
15  * specific resources is split out into separate functions to avoid polluting
16  * common code. If/when this driver is enhanced to support multiple
17  * configurations, the core code should be adapted to call all configuration-
18  * specific functions through function pointers, with the definition of those
19  * function pointers being supplied by struct udevice_id eqos_ids[]'s .data
20  * field.
21  *
22  * The following configurations are currently supported:
23  * tegra186:
24  *    NVIDIA's Tegra186 chip. This configuration uses an AXI master/DMA bus, an
25  *    AHB slave/register bus, contains the DMA, MTL, and MAC sub-blocks, and
26  *    supports a single RGMII PHY. This configuration also has SW control over
27  *    all clock and reset signals to the HW block.
28  */
29 #include <common.h>
30 #include <clk.h>
31 #include <cpu_func.h>
32 #include <dm.h>
33 #include <errno.h>
34 #include <log.h>
35 #include <malloc.h>
36 #include <memalign.h>
37 #include <miiphy.h>
38 #include <net.h>
39 #include <netdev.h>
40 #include <phy.h>
41 #include <reset.h>
42 #include <wait_bit.h>
43 #include <asm/cache.h>
44 #include <asm/gpio.h>
45 #include <asm/io.h>
46 #include <eth_phy.h>
47 #ifdef CONFIG_ARCH_IMX8M
48 #include <asm/arch/clock.h>
49 #include <asm/mach-imx/sys_proto.h>
50 #endif
51
52 /* Core registers */
53
54 #define EQOS_MAC_REGS_BASE 0x000
55 struct eqos_mac_regs {
56         uint32_t configuration;                         /* 0x000 */
57         uint32_t unused_004[(0x070 - 0x004) / 4];       /* 0x004 */
58         uint32_t q0_tx_flow_ctrl;                       /* 0x070 */
59         uint32_t unused_070[(0x090 - 0x074) / 4];       /* 0x074 */
60         uint32_t rx_flow_ctrl;                          /* 0x090 */
61         uint32_t unused_094;                            /* 0x094 */
62         uint32_t txq_prty_map0;                         /* 0x098 */
63         uint32_t unused_09c;                            /* 0x09c */
64         uint32_t rxq_ctrl0;                             /* 0x0a0 */
65         uint32_t unused_0a4;                            /* 0x0a4 */
66         uint32_t rxq_ctrl2;                             /* 0x0a8 */
67         uint32_t unused_0ac[(0x0dc - 0x0ac) / 4];       /* 0x0ac */
68         uint32_t us_tic_counter;                        /* 0x0dc */
69         uint32_t unused_0e0[(0x11c - 0x0e0) / 4];       /* 0x0e0 */
70         uint32_t hw_feature0;                           /* 0x11c */
71         uint32_t hw_feature1;                           /* 0x120 */
72         uint32_t hw_feature2;                           /* 0x124 */
73         uint32_t unused_128[(0x200 - 0x128) / 4];       /* 0x128 */
74         uint32_t mdio_address;                          /* 0x200 */
75         uint32_t mdio_data;                             /* 0x204 */
76         uint32_t unused_208[(0x300 - 0x208) / 4];       /* 0x208 */
77         uint32_t address0_high;                         /* 0x300 */
78         uint32_t address0_low;                          /* 0x304 */
79 };
80
81 #define EQOS_MAC_CONFIGURATION_GPSLCE                   BIT(23)
82 #define EQOS_MAC_CONFIGURATION_CST                      BIT(21)
83 #define EQOS_MAC_CONFIGURATION_ACS                      BIT(20)
84 #define EQOS_MAC_CONFIGURATION_WD                       BIT(19)
85 #define EQOS_MAC_CONFIGURATION_JD                       BIT(17)
86 #define EQOS_MAC_CONFIGURATION_JE                       BIT(16)
87 #define EQOS_MAC_CONFIGURATION_PS                       BIT(15)
88 #define EQOS_MAC_CONFIGURATION_FES                      BIT(14)
89 #define EQOS_MAC_CONFIGURATION_DM                       BIT(13)
90 #define EQOS_MAC_CONFIGURATION_LM                       BIT(12)
91 #define EQOS_MAC_CONFIGURATION_TE                       BIT(1)
92 #define EQOS_MAC_CONFIGURATION_RE                       BIT(0)
93
94 #define EQOS_MAC_Q0_TX_FLOW_CTRL_PT_SHIFT               16
95 #define EQOS_MAC_Q0_TX_FLOW_CTRL_PT_MASK                0xffff
96 #define EQOS_MAC_Q0_TX_FLOW_CTRL_TFE                    BIT(1)
97
98 #define EQOS_MAC_RX_FLOW_CTRL_RFE                       BIT(0)
99
100 #define EQOS_MAC_TXQ_PRTY_MAP0_PSTQ0_SHIFT              0
101 #define EQOS_MAC_TXQ_PRTY_MAP0_PSTQ0_MASK               0xff
102
103 #define EQOS_MAC_RXQ_CTRL0_RXQ0EN_SHIFT                 0
104 #define EQOS_MAC_RXQ_CTRL0_RXQ0EN_MASK                  3
105 #define EQOS_MAC_RXQ_CTRL0_RXQ0EN_NOT_ENABLED           0
106 #define EQOS_MAC_RXQ_CTRL0_RXQ0EN_ENABLED_DCB           2
107 #define EQOS_MAC_RXQ_CTRL0_RXQ0EN_ENABLED_AV            1
108
109 #define EQOS_MAC_RXQ_CTRL2_PSRQ0_SHIFT                  0
110 #define EQOS_MAC_RXQ_CTRL2_PSRQ0_MASK                   0xff
111
112 #define EQOS_MAC_HW_FEATURE0_MMCSEL_SHIFT               8
113 #define EQOS_MAC_HW_FEATURE0_HDSEL_SHIFT                2
114 #define EQOS_MAC_HW_FEATURE0_GMIISEL_SHIFT              1
115 #define EQOS_MAC_HW_FEATURE0_MIISEL_SHIFT               0
116
117 #define EQOS_MAC_HW_FEATURE1_TXFIFOSIZE_SHIFT           6
118 #define EQOS_MAC_HW_FEATURE1_TXFIFOSIZE_MASK            0x1f
119 #define EQOS_MAC_HW_FEATURE1_RXFIFOSIZE_SHIFT           0
120 #define EQOS_MAC_HW_FEATURE1_RXFIFOSIZE_MASK            0x1f
121
122 #define EQOS_MAC_HW_FEATURE3_ASP_SHIFT                  28
123 #define EQOS_MAC_HW_FEATURE3_ASP_MASK                   0x3
124
125 #define EQOS_MAC_MDIO_ADDRESS_PA_SHIFT                  21
126 #define EQOS_MAC_MDIO_ADDRESS_RDA_SHIFT                 16
127 #define EQOS_MAC_MDIO_ADDRESS_CR_SHIFT                  8
128 #define EQOS_MAC_MDIO_ADDRESS_CR_20_35                  2
129 #define EQOS_MAC_MDIO_ADDRESS_CR_250_300                5
130 #define EQOS_MAC_MDIO_ADDRESS_SKAP                      BIT(4)
131 #define EQOS_MAC_MDIO_ADDRESS_GOC_SHIFT                 2
132 #define EQOS_MAC_MDIO_ADDRESS_GOC_READ                  3
133 #define EQOS_MAC_MDIO_ADDRESS_GOC_WRITE                 1
134 #define EQOS_MAC_MDIO_ADDRESS_C45E                      BIT(1)
135 #define EQOS_MAC_MDIO_ADDRESS_GB                        BIT(0)
136
137 #define EQOS_MAC_MDIO_DATA_GD_MASK                      0xffff
138
139 #define EQOS_MTL_REGS_BASE 0xd00
140 struct eqos_mtl_regs {
141         uint32_t txq0_operation_mode;                   /* 0xd00 */
142         uint32_t unused_d04;                            /* 0xd04 */
143         uint32_t txq0_debug;                            /* 0xd08 */
144         uint32_t unused_d0c[(0xd18 - 0xd0c) / 4];       /* 0xd0c */
145         uint32_t txq0_quantum_weight;                   /* 0xd18 */
146         uint32_t unused_d1c[(0xd30 - 0xd1c) / 4];       /* 0xd1c */
147         uint32_t rxq0_operation_mode;                   /* 0xd30 */
148         uint32_t unused_d34;                            /* 0xd34 */
149         uint32_t rxq0_debug;                            /* 0xd38 */
150 };
151
152 #define EQOS_MTL_TXQ0_OPERATION_MODE_TQS_SHIFT          16
153 #define EQOS_MTL_TXQ0_OPERATION_MODE_TQS_MASK           0x1ff
154 #define EQOS_MTL_TXQ0_OPERATION_MODE_TXQEN_SHIFT        2
155 #define EQOS_MTL_TXQ0_OPERATION_MODE_TXQEN_MASK         3
156 #define EQOS_MTL_TXQ0_OPERATION_MODE_TXQEN_ENABLED      2
157 #define EQOS_MTL_TXQ0_OPERATION_MODE_TSF                BIT(1)
158 #define EQOS_MTL_TXQ0_OPERATION_MODE_FTQ                BIT(0)
159
160 #define EQOS_MTL_TXQ0_DEBUG_TXQSTS                      BIT(4)
161 #define EQOS_MTL_TXQ0_DEBUG_TRCSTS_SHIFT                1
162 #define EQOS_MTL_TXQ0_DEBUG_TRCSTS_MASK                 3
163
164 #define EQOS_MTL_RXQ0_OPERATION_MODE_RQS_SHIFT          20
165 #define EQOS_MTL_RXQ0_OPERATION_MODE_RQS_MASK           0x3ff
166 #define EQOS_MTL_RXQ0_OPERATION_MODE_RFD_SHIFT          14
167 #define EQOS_MTL_RXQ0_OPERATION_MODE_RFD_MASK           0x3f
168 #define EQOS_MTL_RXQ0_OPERATION_MODE_RFA_SHIFT          8
169 #define EQOS_MTL_RXQ0_OPERATION_MODE_RFA_MASK           0x3f
170 #define EQOS_MTL_RXQ0_OPERATION_MODE_EHFC               BIT(7)
171 #define EQOS_MTL_RXQ0_OPERATION_MODE_RSF                BIT(5)
172 #define EQOS_MTL_RXQ0_OPERATION_MODE_FEP                BIT(4)
173 #define EQOS_MTL_RXQ0_OPERATION_MODE_FUP                BIT(3)
174
175 #define EQOS_MTL_RXQ0_DEBUG_PRXQ_SHIFT                  16
176 #define EQOS_MTL_RXQ0_DEBUG_PRXQ_MASK                   0x7fff
177 #define EQOS_MTL_RXQ0_DEBUG_RXQSTS_SHIFT                4
178 #define EQOS_MTL_RXQ0_DEBUG_RXQSTS_MASK                 3
179
180 #define EQOS_DMA_REGS_BASE 0x1000
181 struct eqos_dma_regs {
182         uint32_t mode;                                  /* 0x1000 */
183         uint32_t sysbus_mode;                           /* 0x1004 */
184         uint32_t unused_1008[(0x1100 - 0x1008) / 4];    /* 0x1008 */
185         uint32_t ch0_control;                           /* 0x1100 */
186         uint32_t ch0_tx_control;                        /* 0x1104 */
187         uint32_t ch0_rx_control;                        /* 0x1108 */
188         uint32_t unused_110c;                           /* 0x110c */
189         uint32_t ch0_txdesc_list_haddress;              /* 0x1110 */
190         uint32_t ch0_txdesc_list_address;               /* 0x1114 */
191         uint32_t ch0_rxdesc_list_haddress;              /* 0x1118 */
192         uint32_t ch0_rxdesc_list_address;               /* 0x111c */
193         uint32_t ch0_txdesc_tail_pointer;               /* 0x1120 */
194         uint32_t unused_1124;                           /* 0x1124 */
195         uint32_t ch0_rxdesc_tail_pointer;               /* 0x1128 */
196         uint32_t ch0_txdesc_ring_length;                /* 0x112c */
197         uint32_t ch0_rxdesc_ring_length;                /* 0x1130 */
198 };
199
200 #define EQOS_DMA_MODE_SWR                               BIT(0)
201
202 #define EQOS_DMA_SYSBUS_MODE_RD_OSR_LMT_SHIFT           16
203 #define EQOS_DMA_SYSBUS_MODE_RD_OSR_LMT_MASK            0xf
204 #define EQOS_DMA_SYSBUS_MODE_EAME                       BIT(11)
205 #define EQOS_DMA_SYSBUS_MODE_BLEN16                     BIT(3)
206 #define EQOS_DMA_SYSBUS_MODE_BLEN8                      BIT(2)
207 #define EQOS_DMA_SYSBUS_MODE_BLEN4                      BIT(1)
208
209 #define EQOS_DMA_CH0_CONTROL_PBLX8                      BIT(16)
210
211 #define EQOS_DMA_CH0_TX_CONTROL_TXPBL_SHIFT             16
212 #define EQOS_DMA_CH0_TX_CONTROL_TXPBL_MASK              0x3f
213 #define EQOS_DMA_CH0_TX_CONTROL_OSP                     BIT(4)
214 #define EQOS_DMA_CH0_TX_CONTROL_ST                      BIT(0)
215
216 #define EQOS_DMA_CH0_RX_CONTROL_RXPBL_SHIFT             16
217 #define EQOS_DMA_CH0_RX_CONTROL_RXPBL_MASK              0x3f
218 #define EQOS_DMA_CH0_RX_CONTROL_RBSZ_SHIFT              1
219 #define EQOS_DMA_CH0_RX_CONTROL_RBSZ_MASK               0x3fff
220 #define EQOS_DMA_CH0_RX_CONTROL_SR                      BIT(0)
221
222 /* These registers are Tegra186-specific */
223 #define EQOS_TEGRA186_REGS_BASE 0x8800
224 struct eqos_tegra186_regs {
225         uint32_t sdmemcomppadctrl;                      /* 0x8800 */
226         uint32_t auto_cal_config;                       /* 0x8804 */
227         uint32_t unused_8808;                           /* 0x8808 */
228         uint32_t auto_cal_status;                       /* 0x880c */
229 };
230
231 #define EQOS_SDMEMCOMPPADCTRL_PAD_E_INPUT_OR_E_PWRD     BIT(31)
232
233 #define EQOS_AUTO_CAL_CONFIG_START                      BIT(31)
234 #define EQOS_AUTO_CAL_CONFIG_ENABLE                     BIT(29)
235
236 #define EQOS_AUTO_CAL_STATUS_ACTIVE                     BIT(31)
237
238 /* Descriptors */
239
240 #define EQOS_DESCRIPTOR_WORDS   4
241 #define EQOS_DESCRIPTOR_SIZE    (EQOS_DESCRIPTOR_WORDS * 4)
242 /* We assume ARCH_DMA_MINALIGN >= 16; 16 is the EQOS HW minimum */
243 #define EQOS_DESCRIPTOR_ALIGN   ARCH_DMA_MINALIGN
244 #define EQOS_DESCRIPTORS_TX     4
245 #define EQOS_DESCRIPTORS_RX     4
246 #define EQOS_DESCRIPTORS_NUM    (EQOS_DESCRIPTORS_TX + EQOS_DESCRIPTORS_RX)
247 #define EQOS_DESCRIPTORS_SIZE   ALIGN(EQOS_DESCRIPTORS_NUM * \
248                                       EQOS_DESCRIPTOR_SIZE, ARCH_DMA_MINALIGN)
249 #define EQOS_BUFFER_ALIGN       ARCH_DMA_MINALIGN
250 #define EQOS_MAX_PACKET_SIZE    ALIGN(1568, ARCH_DMA_MINALIGN)
251 #define EQOS_RX_BUFFER_SIZE     (EQOS_DESCRIPTORS_RX * EQOS_MAX_PACKET_SIZE)
252
253 /*
254  * Warn if the cache-line size is larger than the descriptor size. In such
255  * cases the driver will likely fail because the CPU needs to flush the cache
256  * when requeuing RX buffers, therefore descriptors written by the hardware
257  * may be discarded. Architectures with full IO coherence, such as x86, do not
258  * experience this issue, and hence are excluded from this condition.
259  *
260  * This can be fixed by defining CONFIG_SYS_NONCACHED_MEMORY which will cause
261  * the driver to allocate descriptors from a pool of non-cached memory.
262  */
263 #if EQOS_DESCRIPTOR_SIZE < ARCH_DMA_MINALIGN
264 #if !defined(CONFIG_SYS_NONCACHED_MEMORY) && \
265         !CONFIG_IS_ENABLED(SYS_DCACHE_OFF) && !defined(CONFIG_X86)
266 #warning Cache line size is larger than descriptor size
267 #endif
268 #endif
269
270 struct eqos_desc {
271         u32 des0;
272         u32 des1;
273         u32 des2;
274         u32 des3;
275 };
276
277 #define EQOS_DESC3_OWN          BIT(31)
278 #define EQOS_DESC3_FD           BIT(29)
279 #define EQOS_DESC3_LD           BIT(28)
280 #define EQOS_DESC3_BUF1V        BIT(24)
281
282 struct eqos_config {
283         bool reg_access_always_ok;
284         int mdio_wait;
285         int swr_wait;
286         int config_mac;
287         int config_mac_mdio;
288         phy_interface_t (*interface)(struct udevice *dev);
289         struct eqos_ops *ops;
290 };
291
292 struct eqos_ops {
293         void (*eqos_inval_desc)(void *desc);
294         void (*eqos_flush_desc)(void *desc);
295         void (*eqos_inval_buffer)(void *buf, size_t size);
296         void (*eqos_flush_buffer)(void *buf, size_t size);
297         int (*eqos_probe_resources)(struct udevice *dev);
298         int (*eqos_remove_resources)(struct udevice *dev);
299         int (*eqos_stop_resets)(struct udevice *dev);
300         int (*eqos_start_resets)(struct udevice *dev);
301         void (*eqos_stop_clks)(struct udevice *dev);
302         int (*eqos_start_clks)(struct udevice *dev);
303         int (*eqos_calibrate_pads)(struct udevice *dev);
304         int (*eqos_disable_calibration)(struct udevice *dev);
305         int (*eqos_set_tx_clk_speed)(struct udevice *dev);
306         ulong (*eqos_get_tick_clk_rate)(struct udevice *dev);
307 };
308
309 struct eqos_priv {
310         struct udevice *dev;
311         const struct eqos_config *config;
312         fdt_addr_t regs;
313         struct eqos_mac_regs *mac_regs;
314         struct eqos_mtl_regs *mtl_regs;
315         struct eqos_dma_regs *dma_regs;
316         struct eqos_tegra186_regs *tegra186_regs;
317         struct reset_ctl reset_ctl;
318         struct gpio_desc phy_reset_gpio;
319         struct clk clk_master_bus;
320         struct clk clk_rx;
321         struct clk clk_ptp_ref;
322         struct clk clk_tx;
323         struct clk clk_ck;
324         struct clk clk_slave_bus;
325         struct mii_dev *mii;
326         struct phy_device *phy;
327         int phyaddr;
328         u32 max_speed;
329         void *descs;
330         struct eqos_desc *tx_descs;
331         struct eqos_desc *rx_descs;
332         int tx_desc_idx, rx_desc_idx;
333         void *tx_dma_buf;
334         void *rx_dma_buf;
335         void *rx_pkt;
336         bool started;
337         bool reg_access_ok;
338 };
339
340 /*
341  * TX and RX descriptors are 16 bytes. This causes problems with the cache
342  * maintenance on CPUs where the cache-line size exceeds the size of these
343  * descriptors. What will happen is that when the driver receives a packet
344  * it will be immediately requeued for the hardware to reuse. The CPU will
345  * therefore need to flush the cache-line containing the descriptor, which
346  * will cause all other descriptors in the same cache-line to be flushed
347  * along with it. If one of those descriptors had been written to by the
348  * device those changes (and the associated packet) will be lost.
349  *
350  * To work around this, we make use of non-cached memory if available. If
351  * descriptors are mapped uncached there's no need to manually flush them
352  * or invalidate them.
353  *
354  * Note that this only applies to descriptors. The packet data buffers do
355  * not have the same constraints since they are 1536 bytes large, so they
356  * are unlikely to share cache-lines.
357  */
358 static void *eqos_alloc_descs(unsigned int num)
359 {
360 #ifdef CONFIG_SYS_NONCACHED_MEMORY
361         return (void *)noncached_alloc(EQOS_DESCRIPTORS_SIZE,
362                                       EQOS_DESCRIPTOR_ALIGN);
363 #else
364         return memalign(EQOS_DESCRIPTOR_ALIGN, EQOS_DESCRIPTORS_SIZE);
365 #endif
366 }
367
368 static void eqos_free_descs(void *descs)
369 {
370 #ifdef CONFIG_SYS_NONCACHED_MEMORY
371         /* FIXME: noncached_alloc() has no opposite */
372 #else
373         free(descs);
374 #endif
375 }
376
377 static void eqos_inval_desc_tegra186(void *desc)
378 {
379 #ifndef CONFIG_SYS_NONCACHED_MEMORY
380         unsigned long start = (unsigned long)desc & ~(ARCH_DMA_MINALIGN - 1);
381         unsigned long end = ALIGN(start + EQOS_DESCRIPTOR_SIZE,
382                                   ARCH_DMA_MINALIGN);
383
384         invalidate_dcache_range(start, end);
385 #endif
386 }
387
388 static void eqos_inval_desc_generic(void *desc)
389 {
390 #ifndef CONFIG_SYS_NONCACHED_MEMORY
391         unsigned long start = rounddown((unsigned long)desc, ARCH_DMA_MINALIGN);
392         unsigned long end = roundup((unsigned long)desc + EQOS_DESCRIPTOR_SIZE,
393                                     ARCH_DMA_MINALIGN);
394
395         invalidate_dcache_range(start, end);
396 #endif
397 }
398
399 static void eqos_flush_desc_tegra186(void *desc)
400 {
401 #ifndef CONFIG_SYS_NONCACHED_MEMORY
402         flush_cache((unsigned long)desc, EQOS_DESCRIPTOR_SIZE);
403 #endif
404 }
405
406 static void eqos_flush_desc_generic(void *desc)
407 {
408 #ifndef CONFIG_SYS_NONCACHED_MEMORY
409         unsigned long start = rounddown((unsigned long)desc, ARCH_DMA_MINALIGN);
410         unsigned long end = roundup((unsigned long)desc + EQOS_DESCRIPTOR_SIZE,
411                                     ARCH_DMA_MINALIGN);
412
413         flush_dcache_range(start, end);
414 #endif
415 }
416
417 static void eqos_inval_buffer_tegra186(void *buf, size_t size)
418 {
419         unsigned long start = (unsigned long)buf & ~(ARCH_DMA_MINALIGN - 1);
420         unsigned long end = ALIGN(start + size, ARCH_DMA_MINALIGN);
421
422         invalidate_dcache_range(start, end);
423 }
424
425 static void eqos_inval_buffer_generic(void *buf, size_t size)
426 {
427         unsigned long start = rounddown((unsigned long)buf, ARCH_DMA_MINALIGN);
428         unsigned long end = roundup((unsigned long)buf + size,
429                                     ARCH_DMA_MINALIGN);
430
431         invalidate_dcache_range(start, end);
432 }
433
434 static void eqos_flush_buffer_tegra186(void *buf, size_t size)
435 {
436         flush_cache((unsigned long)buf, size);
437 }
438
439 static void eqos_flush_buffer_generic(void *buf, size_t size)
440 {
441         unsigned long start = rounddown((unsigned long)buf, ARCH_DMA_MINALIGN);
442         unsigned long end = roundup((unsigned long)buf + size,
443                                     ARCH_DMA_MINALIGN);
444
445         flush_dcache_range(start, end);
446 }
447
448 static int eqos_mdio_wait_idle(struct eqos_priv *eqos)
449 {
450         return wait_for_bit_le32(&eqos->mac_regs->mdio_address,
451                                  EQOS_MAC_MDIO_ADDRESS_GB, false,
452                                  1000000, true);
453 }
454
455 static int eqos_mdio_read(struct mii_dev *bus, int mdio_addr, int mdio_devad,
456                           int mdio_reg)
457 {
458         struct eqos_priv *eqos = bus->priv;
459         u32 val;
460         int ret;
461
462         debug("%s(dev=%p, addr=%x, reg=%d):\n", __func__, eqos->dev, mdio_addr,
463               mdio_reg);
464
465         ret = eqos_mdio_wait_idle(eqos);
466         if (ret) {
467                 pr_err("MDIO not idle at entry");
468                 return ret;
469         }
470
471         val = readl(&eqos->mac_regs->mdio_address);
472         val &= EQOS_MAC_MDIO_ADDRESS_SKAP |
473                 EQOS_MAC_MDIO_ADDRESS_C45E;
474         val |= (mdio_addr << EQOS_MAC_MDIO_ADDRESS_PA_SHIFT) |
475                 (mdio_reg << EQOS_MAC_MDIO_ADDRESS_RDA_SHIFT) |
476                 (eqos->config->config_mac_mdio <<
477                  EQOS_MAC_MDIO_ADDRESS_CR_SHIFT) |
478                 (EQOS_MAC_MDIO_ADDRESS_GOC_READ <<
479                  EQOS_MAC_MDIO_ADDRESS_GOC_SHIFT) |
480                 EQOS_MAC_MDIO_ADDRESS_GB;
481         writel(val, &eqos->mac_regs->mdio_address);
482
483         udelay(eqos->config->mdio_wait);
484
485         ret = eqos_mdio_wait_idle(eqos);
486         if (ret) {
487                 pr_err("MDIO read didn't complete");
488                 return ret;
489         }
490
491         val = readl(&eqos->mac_regs->mdio_data);
492         val &= EQOS_MAC_MDIO_DATA_GD_MASK;
493
494         debug("%s: val=%x\n", __func__, val);
495
496         return val;
497 }
498
499 static int eqos_mdio_write(struct mii_dev *bus, int mdio_addr, int mdio_devad,
500                            int mdio_reg, u16 mdio_val)
501 {
502         struct eqos_priv *eqos = bus->priv;
503         u32 val;
504         int ret;
505
506         debug("%s(dev=%p, addr=%x, reg=%d, val=%x):\n", __func__, eqos->dev,
507               mdio_addr, mdio_reg, mdio_val);
508
509         ret = eqos_mdio_wait_idle(eqos);
510         if (ret) {
511                 pr_err("MDIO not idle at entry");
512                 return ret;
513         }
514
515         writel(mdio_val, &eqos->mac_regs->mdio_data);
516
517         val = readl(&eqos->mac_regs->mdio_address);
518         val &= EQOS_MAC_MDIO_ADDRESS_SKAP |
519                 EQOS_MAC_MDIO_ADDRESS_C45E;
520         val |= (mdio_addr << EQOS_MAC_MDIO_ADDRESS_PA_SHIFT) |
521                 (mdio_reg << EQOS_MAC_MDIO_ADDRESS_RDA_SHIFT) |
522                 (eqos->config->config_mac_mdio <<
523                  EQOS_MAC_MDIO_ADDRESS_CR_SHIFT) |
524                 (EQOS_MAC_MDIO_ADDRESS_GOC_WRITE <<
525                  EQOS_MAC_MDIO_ADDRESS_GOC_SHIFT) |
526                 EQOS_MAC_MDIO_ADDRESS_GB;
527         writel(val, &eqos->mac_regs->mdio_address);
528
529         udelay(eqos->config->mdio_wait);
530
531         ret = eqos_mdio_wait_idle(eqos);
532         if (ret) {
533                 pr_err("MDIO read didn't complete");
534                 return ret;
535         }
536
537         return 0;
538 }
539
540 static int eqos_start_clks_tegra186(struct udevice *dev)
541 {
542 #ifdef CONFIG_CLK
543         struct eqos_priv *eqos = dev_get_priv(dev);
544         int ret;
545
546         debug("%s(dev=%p):\n", __func__, dev);
547
548         ret = clk_enable(&eqos->clk_slave_bus);
549         if (ret < 0) {
550                 pr_err("clk_enable(clk_slave_bus) failed: %d", ret);
551                 goto err;
552         }
553
554         ret = clk_enable(&eqos->clk_master_bus);
555         if (ret < 0) {
556                 pr_err("clk_enable(clk_master_bus) failed: %d", ret);
557                 goto err_disable_clk_slave_bus;
558         }
559
560         ret = clk_enable(&eqos->clk_rx);
561         if (ret < 0) {
562                 pr_err("clk_enable(clk_rx) failed: %d", ret);
563                 goto err_disable_clk_master_bus;
564         }
565
566         ret = clk_enable(&eqos->clk_ptp_ref);
567         if (ret < 0) {
568                 pr_err("clk_enable(clk_ptp_ref) failed: %d", ret);
569                 goto err_disable_clk_rx;
570         }
571
572         ret = clk_set_rate(&eqos->clk_ptp_ref, 125 * 1000 * 1000);
573         if (ret < 0) {
574                 pr_err("clk_set_rate(clk_ptp_ref) failed: %d", ret);
575                 goto err_disable_clk_ptp_ref;
576         }
577
578         ret = clk_enable(&eqos->clk_tx);
579         if (ret < 0) {
580                 pr_err("clk_enable(clk_tx) failed: %d", ret);
581                 goto err_disable_clk_ptp_ref;
582         }
583 #endif
584
585         debug("%s: OK\n", __func__);
586         return 0;
587
588 #ifdef CONFIG_CLK
589 err_disable_clk_ptp_ref:
590         clk_disable(&eqos->clk_ptp_ref);
591 err_disable_clk_rx:
592         clk_disable(&eqos->clk_rx);
593 err_disable_clk_master_bus:
594         clk_disable(&eqos->clk_master_bus);
595 err_disable_clk_slave_bus:
596         clk_disable(&eqos->clk_slave_bus);
597 err:
598         debug("%s: FAILED: %d\n", __func__, ret);
599         return ret;
600 #endif
601 }
602
603 static int eqos_start_clks_stm32(struct udevice *dev)
604 {
605 #ifdef CONFIG_CLK
606         struct eqos_priv *eqos = dev_get_priv(dev);
607         int ret;
608
609         debug("%s(dev=%p):\n", __func__, dev);
610
611         ret = clk_enable(&eqos->clk_master_bus);
612         if (ret < 0) {
613                 pr_err("clk_enable(clk_master_bus) failed: %d", ret);
614                 goto err;
615         }
616
617         ret = clk_enable(&eqos->clk_rx);
618         if (ret < 0) {
619                 pr_err("clk_enable(clk_rx) failed: %d", ret);
620                 goto err_disable_clk_master_bus;
621         }
622
623         ret = clk_enable(&eqos->clk_tx);
624         if (ret < 0) {
625                 pr_err("clk_enable(clk_tx) failed: %d", ret);
626                 goto err_disable_clk_rx;
627         }
628
629         if (clk_valid(&eqos->clk_ck)) {
630                 ret = clk_enable(&eqos->clk_ck);
631                 if (ret < 0) {
632                         pr_err("clk_enable(clk_ck) failed: %d", ret);
633                         goto err_disable_clk_tx;
634                 }
635         }
636 #endif
637
638         debug("%s: OK\n", __func__);
639         return 0;
640
641 #ifdef CONFIG_CLK
642 err_disable_clk_tx:
643         clk_disable(&eqos->clk_tx);
644 err_disable_clk_rx:
645         clk_disable(&eqos->clk_rx);
646 err_disable_clk_master_bus:
647         clk_disable(&eqos->clk_master_bus);
648 err:
649         debug("%s: FAILED: %d\n", __func__, ret);
650         return ret;
651 #endif
652 }
653
654 static int eqos_start_clks_imx(struct udevice *dev)
655 {
656         return 0;
657 }
658
659 static void eqos_stop_clks_tegra186(struct udevice *dev)
660 {
661 #ifdef CONFIG_CLK
662         struct eqos_priv *eqos = dev_get_priv(dev);
663
664         debug("%s(dev=%p):\n", __func__, dev);
665
666         clk_disable(&eqos->clk_tx);
667         clk_disable(&eqos->clk_ptp_ref);
668         clk_disable(&eqos->clk_rx);
669         clk_disable(&eqos->clk_master_bus);
670         clk_disable(&eqos->clk_slave_bus);
671 #endif
672
673         debug("%s: OK\n", __func__);
674 }
675
676 static void eqos_stop_clks_stm32(struct udevice *dev)
677 {
678 #ifdef CONFIG_CLK
679         struct eqos_priv *eqos = dev_get_priv(dev);
680
681         debug("%s(dev=%p):\n", __func__, dev);
682
683         clk_disable(&eqos->clk_tx);
684         clk_disable(&eqos->clk_rx);
685         clk_disable(&eqos->clk_master_bus);
686         if (clk_valid(&eqos->clk_ck))
687                 clk_disable(&eqos->clk_ck);
688 #endif
689
690         debug("%s: OK\n", __func__);
691 }
692
693 static void eqos_stop_clks_imx(struct udevice *dev)
694 {
695         /* empty */
696 }
697
698 static int eqos_start_resets_tegra186(struct udevice *dev)
699 {
700         struct eqos_priv *eqos = dev_get_priv(dev);
701         int ret;
702
703         debug("%s(dev=%p):\n", __func__, dev);
704
705         ret = dm_gpio_set_value(&eqos->phy_reset_gpio, 1);
706         if (ret < 0) {
707                 pr_err("dm_gpio_set_value(phy_reset, assert) failed: %d", ret);
708                 return ret;
709         }
710
711         udelay(2);
712
713         ret = dm_gpio_set_value(&eqos->phy_reset_gpio, 0);
714         if (ret < 0) {
715                 pr_err("dm_gpio_set_value(phy_reset, deassert) failed: %d", ret);
716                 return ret;
717         }
718
719         ret = reset_assert(&eqos->reset_ctl);
720         if (ret < 0) {
721                 pr_err("reset_assert() failed: %d", ret);
722                 return ret;
723         }
724
725         udelay(2);
726
727         ret = reset_deassert(&eqos->reset_ctl);
728         if (ret < 0) {
729                 pr_err("reset_deassert() failed: %d", ret);
730                 return ret;
731         }
732
733         debug("%s: OK\n", __func__);
734         return 0;
735 }
736
737 static int eqos_start_resets_stm32(struct udevice *dev)
738 {
739         struct eqos_priv *eqos = dev_get_priv(dev);
740         int ret;
741
742         debug("%s(dev=%p):\n", __func__, dev);
743         if (dm_gpio_is_valid(&eqos->phy_reset_gpio)) {
744                 ret = dm_gpio_set_value(&eqos->phy_reset_gpio, 1);
745                 if (ret < 0) {
746                         pr_err("dm_gpio_set_value(phy_reset, assert) failed: %d",
747                                ret);
748                         return ret;
749                 }
750
751                 udelay(2);
752
753                 ret = dm_gpio_set_value(&eqos->phy_reset_gpio, 0);
754                 if (ret < 0) {
755                         pr_err("dm_gpio_set_value(phy_reset, deassert) failed: %d",
756                                ret);
757                         return ret;
758                 }
759         }
760         debug("%s: OK\n", __func__);
761
762         return 0;
763 }
764
765 static int eqos_start_resets_imx(struct udevice *dev)
766 {
767         return 0;
768 }
769
770 static int eqos_stop_resets_tegra186(struct udevice *dev)
771 {
772         struct eqos_priv *eqos = dev_get_priv(dev);
773
774         reset_assert(&eqos->reset_ctl);
775         dm_gpio_set_value(&eqos->phy_reset_gpio, 1);
776
777         return 0;
778 }
779
780 static int eqos_stop_resets_stm32(struct udevice *dev)
781 {
782         struct eqos_priv *eqos = dev_get_priv(dev);
783         int ret;
784
785         if (dm_gpio_is_valid(&eqos->phy_reset_gpio)) {
786                 ret = dm_gpio_set_value(&eqos->phy_reset_gpio, 1);
787                 if (ret < 0) {
788                         pr_err("dm_gpio_set_value(phy_reset, assert) failed: %d",
789                                ret);
790                         return ret;
791                 }
792         }
793
794         return 0;
795 }
796
797 static int eqos_stop_resets_imx(struct udevice *dev)
798 {
799         return 0;
800 }
801
802 static int eqos_calibrate_pads_tegra186(struct udevice *dev)
803 {
804         struct eqos_priv *eqos = dev_get_priv(dev);
805         int ret;
806
807         debug("%s(dev=%p):\n", __func__, dev);
808
809         setbits_le32(&eqos->tegra186_regs->sdmemcomppadctrl,
810                      EQOS_SDMEMCOMPPADCTRL_PAD_E_INPUT_OR_E_PWRD);
811
812         udelay(1);
813
814         setbits_le32(&eqos->tegra186_regs->auto_cal_config,
815                      EQOS_AUTO_CAL_CONFIG_START | EQOS_AUTO_CAL_CONFIG_ENABLE);
816
817         ret = wait_for_bit_le32(&eqos->tegra186_regs->auto_cal_status,
818                                 EQOS_AUTO_CAL_STATUS_ACTIVE, true, 10, false);
819         if (ret) {
820                 pr_err("calibrate didn't start");
821                 goto failed;
822         }
823
824         ret = wait_for_bit_le32(&eqos->tegra186_regs->auto_cal_status,
825                                 EQOS_AUTO_CAL_STATUS_ACTIVE, false, 10, false);
826         if (ret) {
827                 pr_err("calibrate didn't finish");
828                 goto failed;
829         }
830
831         ret = 0;
832
833 failed:
834         clrbits_le32(&eqos->tegra186_regs->sdmemcomppadctrl,
835                      EQOS_SDMEMCOMPPADCTRL_PAD_E_INPUT_OR_E_PWRD);
836
837         debug("%s: returns %d\n", __func__, ret);
838
839         return ret;
840 }
841
842 static int eqos_disable_calibration_tegra186(struct udevice *dev)
843 {
844         struct eqos_priv *eqos = dev_get_priv(dev);
845
846         debug("%s(dev=%p):\n", __func__, dev);
847
848         clrbits_le32(&eqos->tegra186_regs->auto_cal_config,
849                      EQOS_AUTO_CAL_CONFIG_ENABLE);
850
851         return 0;
852 }
853
854 static ulong eqos_get_tick_clk_rate_tegra186(struct udevice *dev)
855 {
856 #ifdef CONFIG_CLK
857         struct eqos_priv *eqos = dev_get_priv(dev);
858
859         return clk_get_rate(&eqos->clk_slave_bus);
860 #else
861         return 0;
862 #endif
863 }
864
865 static ulong eqos_get_tick_clk_rate_stm32(struct udevice *dev)
866 {
867 #ifdef CONFIG_CLK
868         struct eqos_priv *eqos = dev_get_priv(dev);
869
870         return clk_get_rate(&eqos->clk_master_bus);
871 #else
872         return 0;
873 #endif
874 }
875
876 __weak u32 imx_get_eqos_csr_clk(void)
877 {
878         return 100 * 1000000;
879 }
880 __weak int imx_eqos_txclk_set_rate(unsigned long rate)
881 {
882         return 0;
883 }
884
885 static ulong eqos_get_tick_clk_rate_imx(struct udevice *dev)
886 {
887         return imx_get_eqos_csr_clk();
888 }
889
890 static int eqos_calibrate_pads_stm32(struct udevice *dev)
891 {
892         return 0;
893 }
894
895 static int eqos_calibrate_pads_imx(struct udevice *dev)
896 {
897         return 0;
898 }
899
900 static int eqos_disable_calibration_stm32(struct udevice *dev)
901 {
902         return 0;
903 }
904
905 static int eqos_disable_calibration_imx(struct udevice *dev)
906 {
907         return 0;
908 }
909
910 static int eqos_set_full_duplex(struct udevice *dev)
911 {
912         struct eqos_priv *eqos = dev_get_priv(dev);
913
914         debug("%s(dev=%p):\n", __func__, dev);
915
916         setbits_le32(&eqos->mac_regs->configuration, EQOS_MAC_CONFIGURATION_DM);
917
918         return 0;
919 }
920
921 static int eqos_set_half_duplex(struct udevice *dev)
922 {
923         struct eqos_priv *eqos = dev_get_priv(dev);
924
925         debug("%s(dev=%p):\n", __func__, dev);
926
927         clrbits_le32(&eqos->mac_regs->configuration, EQOS_MAC_CONFIGURATION_DM);
928
929         /* WAR: Flush TX queue when switching to half-duplex */
930         setbits_le32(&eqos->mtl_regs->txq0_operation_mode,
931                      EQOS_MTL_TXQ0_OPERATION_MODE_FTQ);
932
933         return 0;
934 }
935
936 static int eqos_set_gmii_speed(struct udevice *dev)
937 {
938         struct eqos_priv *eqos = dev_get_priv(dev);
939
940         debug("%s(dev=%p):\n", __func__, dev);
941
942         clrbits_le32(&eqos->mac_regs->configuration,
943                      EQOS_MAC_CONFIGURATION_PS | EQOS_MAC_CONFIGURATION_FES);
944
945         return 0;
946 }
947
948 static int eqos_set_mii_speed_100(struct udevice *dev)
949 {
950         struct eqos_priv *eqos = dev_get_priv(dev);
951
952         debug("%s(dev=%p):\n", __func__, dev);
953
954         setbits_le32(&eqos->mac_regs->configuration,
955                      EQOS_MAC_CONFIGURATION_PS | EQOS_MAC_CONFIGURATION_FES);
956
957         return 0;
958 }
959
960 static int eqos_set_mii_speed_10(struct udevice *dev)
961 {
962         struct eqos_priv *eqos = dev_get_priv(dev);
963
964         debug("%s(dev=%p):\n", __func__, dev);
965
966         clrsetbits_le32(&eqos->mac_regs->configuration,
967                         EQOS_MAC_CONFIGURATION_FES, EQOS_MAC_CONFIGURATION_PS);
968
969         return 0;
970 }
971
972 static int eqos_set_tx_clk_speed_tegra186(struct udevice *dev)
973 {
974 #ifdef CONFIG_CLK
975         struct eqos_priv *eqos = dev_get_priv(dev);
976         ulong rate;
977         int ret;
978
979         debug("%s(dev=%p):\n", __func__, dev);
980
981         switch (eqos->phy->speed) {
982         case SPEED_1000:
983                 rate = 125 * 1000 * 1000;
984                 break;
985         case SPEED_100:
986                 rate = 25 * 1000 * 1000;
987                 break;
988         case SPEED_10:
989                 rate = 2.5 * 1000 * 1000;
990                 break;
991         default:
992                 pr_err("invalid speed %d", eqos->phy->speed);
993                 return -EINVAL;
994         }
995
996         ret = clk_set_rate(&eqos->clk_tx, rate);
997         if (ret < 0) {
998                 pr_err("clk_set_rate(tx_clk, %lu) failed: %d", rate, ret);
999                 return ret;
1000         }
1001 #endif
1002
1003         return 0;
1004 }
1005
1006 static int eqos_set_tx_clk_speed_stm32(struct udevice *dev)
1007 {
1008         return 0;
1009 }
1010
1011 static int eqos_set_tx_clk_speed_imx(struct udevice *dev)
1012 {
1013         struct eqos_priv *eqos = dev_get_priv(dev);
1014         ulong rate;
1015         int ret;
1016
1017         debug("%s(dev=%p):\n", __func__, dev);
1018
1019         switch (eqos->phy->speed) {
1020         case SPEED_1000:
1021                 rate = 125 * 1000 * 1000;
1022                 break;
1023         case SPEED_100:
1024                 rate = 25 * 1000 * 1000;
1025                 break;
1026         case SPEED_10:
1027                 rate = 2.5 * 1000 * 1000;
1028                 break;
1029         default:
1030                 pr_err("invalid speed %d", eqos->phy->speed);
1031                 return -EINVAL;
1032         }
1033
1034         ret = imx_eqos_txclk_set_rate(rate);
1035         if (ret < 0) {
1036                 pr_err("imx (tx_clk, %lu) failed: %d", rate, ret);
1037                 return ret;
1038         }
1039
1040         return 0;
1041 }
1042
1043 static int eqos_adjust_link(struct udevice *dev)
1044 {
1045         struct eqos_priv *eqos = dev_get_priv(dev);
1046         int ret;
1047         bool en_calibration;
1048
1049         debug("%s(dev=%p):\n", __func__, dev);
1050
1051         if (eqos->phy->duplex)
1052                 ret = eqos_set_full_duplex(dev);
1053         else
1054                 ret = eqos_set_half_duplex(dev);
1055         if (ret < 0) {
1056                 pr_err("eqos_set_*_duplex() failed: %d", ret);
1057                 return ret;
1058         }
1059
1060         switch (eqos->phy->speed) {
1061         case SPEED_1000:
1062                 en_calibration = true;
1063                 ret = eqos_set_gmii_speed(dev);
1064                 break;
1065         case SPEED_100:
1066                 en_calibration = true;
1067                 ret = eqos_set_mii_speed_100(dev);
1068                 break;
1069         case SPEED_10:
1070                 en_calibration = false;
1071                 ret = eqos_set_mii_speed_10(dev);
1072                 break;
1073         default:
1074                 pr_err("invalid speed %d", eqos->phy->speed);
1075                 return -EINVAL;
1076         }
1077         if (ret < 0) {
1078                 pr_err("eqos_set_*mii_speed*() failed: %d", ret);
1079                 return ret;
1080         }
1081
1082         if (en_calibration) {
1083                 ret = eqos->config->ops->eqos_calibrate_pads(dev);
1084                 if (ret < 0) {
1085                         pr_err("eqos_calibrate_pads() failed: %d",
1086                                ret);
1087                         return ret;
1088                 }
1089         } else {
1090                 ret = eqos->config->ops->eqos_disable_calibration(dev);
1091                 if (ret < 0) {
1092                         pr_err("eqos_disable_calibration() failed: %d",
1093                                ret);
1094                         return ret;
1095                 }
1096         }
1097         ret = eqos->config->ops->eqos_set_tx_clk_speed(dev);
1098         if (ret < 0) {
1099                 pr_err("eqos_set_tx_clk_speed() failed: %d", ret);
1100                 return ret;
1101         }
1102
1103         return 0;
1104 }
1105
1106 static int eqos_write_hwaddr(struct udevice *dev)
1107 {
1108         struct eth_pdata *plat = dev_get_platdata(dev);
1109         struct eqos_priv *eqos = dev_get_priv(dev);
1110         uint32_t val;
1111
1112         /*
1113          * This function may be called before start() or after stop(). At that
1114          * time, on at least some configurations of the EQoS HW, all clocks to
1115          * the EQoS HW block will be stopped, and a reset signal applied. If
1116          * any register access is attempted in this state, bus timeouts or CPU
1117          * hangs may occur. This check prevents that.
1118          *
1119          * A simple solution to this problem would be to not implement
1120          * write_hwaddr(), since start() always writes the MAC address into HW
1121          * anyway. However, it is desirable to implement write_hwaddr() to
1122          * support the case of SW that runs subsequent to U-Boot which expects
1123          * the MAC address to already be programmed into the EQoS registers,
1124          * which must happen irrespective of whether the U-Boot user (or
1125          * scripts) actually made use of the EQoS device, and hence
1126          * irrespective of whether start() was ever called.
1127          *
1128          * Note that this requirement by subsequent SW is not valid for
1129          * Tegra186, and is likely not valid for any non-PCI instantiation of
1130          * the EQoS HW block. This function is implemented solely as
1131          * future-proofing with the expectation the driver will eventually be
1132          * ported to some system where the expectation above is true.
1133          */
1134         if (!eqos->config->reg_access_always_ok && !eqos->reg_access_ok)
1135                 return 0;
1136
1137         /* Update the MAC address */
1138         val = (plat->enetaddr[5] << 8) |
1139                 (plat->enetaddr[4]);
1140         writel(val, &eqos->mac_regs->address0_high);
1141         val = (plat->enetaddr[3] << 24) |
1142                 (plat->enetaddr[2] << 16) |
1143                 (plat->enetaddr[1] << 8) |
1144                 (plat->enetaddr[0]);
1145         writel(val, &eqos->mac_regs->address0_low);
1146
1147         return 0;
1148 }
1149
1150 static int eqos_read_rom_hwaddr(struct udevice *dev)
1151 {
1152         struct eth_pdata *pdata = dev_get_platdata(dev);
1153
1154 #ifdef CONFIG_ARCH_IMX8M
1155         imx_get_mac_from_fuse(dev->req_seq, pdata->enetaddr);
1156 #endif
1157         return !is_valid_ethaddr(pdata->enetaddr);
1158 }
1159
1160 static int eqos_start(struct udevice *dev)
1161 {
1162         struct eqos_priv *eqos = dev_get_priv(dev);
1163         int ret, i;
1164         ulong rate;
1165         u32 val, tx_fifo_sz, rx_fifo_sz, tqs, rqs, pbl;
1166         ulong last_rx_desc;
1167
1168         debug("%s(dev=%p):\n", __func__, dev);
1169
1170         eqos->tx_desc_idx = 0;
1171         eqos->rx_desc_idx = 0;
1172
1173         ret = eqos->config->ops->eqos_start_clks(dev);
1174         if (ret < 0) {
1175                 pr_err("eqos_start_clks() failed: %d", ret);
1176                 goto err;
1177         }
1178
1179         ret = eqos->config->ops->eqos_start_resets(dev);
1180         if (ret < 0) {
1181                 pr_err("eqos_start_resets() failed: %d", ret);
1182                 goto err_stop_clks;
1183         }
1184
1185         udelay(10);
1186
1187         eqos->reg_access_ok = true;
1188
1189         ret = wait_for_bit_le32(&eqos->dma_regs->mode,
1190                                 EQOS_DMA_MODE_SWR, false,
1191                                 eqos->config->swr_wait, false);
1192         if (ret) {
1193                 pr_err("EQOS_DMA_MODE_SWR stuck");
1194                 goto err_stop_resets;
1195         }
1196
1197         ret = eqos->config->ops->eqos_calibrate_pads(dev);
1198         if (ret < 0) {
1199                 pr_err("eqos_calibrate_pads() failed: %d", ret);
1200                 goto err_stop_resets;
1201         }
1202         rate = eqos->config->ops->eqos_get_tick_clk_rate(dev);
1203
1204         val = (rate / 1000000) - 1;
1205         writel(val, &eqos->mac_regs->us_tic_counter);
1206
1207         /*
1208          * if PHY was already connected and configured,
1209          * don't need to reconnect/reconfigure again
1210          */
1211         if (!eqos->phy) {
1212                 int addr = -1;
1213 #ifdef CONFIG_DM_ETH_PHY
1214                 addr = eth_phy_get_addr(dev);
1215 #endif
1216 #ifdef DWC_NET_PHYADDR
1217                 addr = DWC_NET_PHYADDR;
1218 #endif
1219                 eqos->phy = phy_connect(eqos->mii, addr, dev,
1220                                         eqos->config->interface(dev));
1221                 if (!eqos->phy) {
1222                         pr_err("phy_connect() failed");
1223                         goto err_stop_resets;
1224                 }
1225
1226                 if (eqos->max_speed) {
1227                         ret = phy_set_supported(eqos->phy, eqos->max_speed);
1228                         if (ret) {
1229                                 pr_err("phy_set_supported() failed: %d", ret);
1230                                 goto err_shutdown_phy;
1231                         }
1232                 }
1233
1234                 ret = phy_config(eqos->phy);
1235                 if (ret < 0) {
1236                         pr_err("phy_config() failed: %d", ret);
1237                         goto err_shutdown_phy;
1238                 }
1239         }
1240
1241         ret = phy_startup(eqos->phy);
1242         if (ret < 0) {
1243                 pr_err("phy_startup() failed: %d", ret);
1244                 goto err_shutdown_phy;
1245         }
1246
1247         if (!eqos->phy->link) {
1248                 pr_err("No link");
1249                 goto err_shutdown_phy;
1250         }
1251
1252         ret = eqos_adjust_link(dev);
1253         if (ret < 0) {
1254                 pr_err("eqos_adjust_link() failed: %d", ret);
1255                 goto err_shutdown_phy;
1256         }
1257
1258         /* Configure MTL */
1259         writel(0x60, &eqos->mtl_regs->txq0_quantum_weight - 0x100);
1260
1261         /* Enable Store and Forward mode for TX */
1262         /* Program Tx operating mode */
1263         setbits_le32(&eqos->mtl_regs->txq0_operation_mode,
1264                      EQOS_MTL_TXQ0_OPERATION_MODE_TSF |
1265                      (EQOS_MTL_TXQ0_OPERATION_MODE_TXQEN_ENABLED <<
1266                       EQOS_MTL_TXQ0_OPERATION_MODE_TXQEN_SHIFT));
1267
1268         /* Transmit Queue weight */
1269         writel(0x10, &eqos->mtl_regs->txq0_quantum_weight);
1270
1271         /* Enable Store and Forward mode for RX, since no jumbo frame */
1272         setbits_le32(&eqos->mtl_regs->rxq0_operation_mode,
1273                      EQOS_MTL_RXQ0_OPERATION_MODE_RSF |
1274                      EQOS_MTL_RXQ0_OPERATION_MODE_FEP |
1275                      EQOS_MTL_RXQ0_OPERATION_MODE_FUP);
1276
1277         /* Transmit/Receive queue fifo size; use all RAM for 1 queue */
1278         val = readl(&eqos->mac_regs->hw_feature1);
1279         tx_fifo_sz = (val >> EQOS_MAC_HW_FEATURE1_TXFIFOSIZE_SHIFT) &
1280                 EQOS_MAC_HW_FEATURE1_TXFIFOSIZE_MASK;
1281         rx_fifo_sz = (val >> EQOS_MAC_HW_FEATURE1_RXFIFOSIZE_SHIFT) &
1282                 EQOS_MAC_HW_FEATURE1_RXFIFOSIZE_MASK;
1283
1284         /*
1285          * r/tx_fifo_sz is encoded as log2(n / 128). Undo that by shifting.
1286          * r/tqs is encoded as (n / 256) - 1.
1287          */
1288         tqs = (128 << tx_fifo_sz) / 256 - 1;
1289         rqs = (128 << rx_fifo_sz) / 256 - 1;
1290
1291         clrsetbits_le32(&eqos->mtl_regs->txq0_operation_mode,
1292                         EQOS_MTL_TXQ0_OPERATION_MODE_TQS_MASK <<
1293                         EQOS_MTL_TXQ0_OPERATION_MODE_TQS_SHIFT,
1294                         tqs << EQOS_MTL_TXQ0_OPERATION_MODE_TQS_SHIFT);
1295         clrsetbits_le32(&eqos->mtl_regs->rxq0_operation_mode,
1296                         EQOS_MTL_RXQ0_OPERATION_MODE_RQS_MASK <<
1297                         EQOS_MTL_RXQ0_OPERATION_MODE_RQS_SHIFT,
1298                         rqs << EQOS_MTL_RXQ0_OPERATION_MODE_RQS_SHIFT);
1299
1300         /* Flow control used only if each channel gets 4KB or more FIFO */
1301         if (rqs >= ((4096 / 256) - 1)) {
1302                 u32 rfd, rfa;
1303
1304                 setbits_le32(&eqos->mtl_regs->rxq0_operation_mode,
1305                              EQOS_MTL_RXQ0_OPERATION_MODE_EHFC);
1306
1307                 /*
1308                  * Set Threshold for Activating Flow Contol space for min 2
1309                  * frames ie, (1500 * 1) = 1500 bytes.
1310                  *
1311                  * Set Threshold for Deactivating Flow Contol for space of
1312                  * min 1 frame (frame size 1500bytes) in receive fifo
1313                  */
1314                 if (rqs == ((4096 / 256) - 1)) {
1315                         /*
1316                          * This violates the above formula because of FIFO size
1317                          * limit therefore overflow may occur inspite of this.
1318                          */
1319                         rfd = 0x3;      /* Full-3K */
1320                         rfa = 0x1;      /* Full-1.5K */
1321                 } else if (rqs == ((8192 / 256) - 1)) {
1322                         rfd = 0x6;      /* Full-4K */
1323                         rfa = 0xa;      /* Full-6K */
1324                 } else if (rqs == ((16384 / 256) - 1)) {
1325                         rfd = 0x6;      /* Full-4K */
1326                         rfa = 0x12;     /* Full-10K */
1327                 } else {
1328                         rfd = 0x6;      /* Full-4K */
1329                         rfa = 0x1E;     /* Full-16K */
1330                 }
1331
1332                 clrsetbits_le32(&eqos->mtl_regs->rxq0_operation_mode,
1333                                 (EQOS_MTL_RXQ0_OPERATION_MODE_RFD_MASK <<
1334                                  EQOS_MTL_RXQ0_OPERATION_MODE_RFD_SHIFT) |
1335                                 (EQOS_MTL_RXQ0_OPERATION_MODE_RFA_MASK <<
1336                                  EQOS_MTL_RXQ0_OPERATION_MODE_RFA_SHIFT),
1337                                 (rfd <<
1338                                  EQOS_MTL_RXQ0_OPERATION_MODE_RFD_SHIFT) |
1339                                 (rfa <<
1340                                  EQOS_MTL_RXQ0_OPERATION_MODE_RFA_SHIFT));
1341         }
1342
1343         /* Configure MAC */
1344
1345         clrsetbits_le32(&eqos->mac_regs->rxq_ctrl0,
1346                         EQOS_MAC_RXQ_CTRL0_RXQ0EN_MASK <<
1347                         EQOS_MAC_RXQ_CTRL0_RXQ0EN_SHIFT,
1348                         eqos->config->config_mac <<
1349                         EQOS_MAC_RXQ_CTRL0_RXQ0EN_SHIFT);
1350
1351         clrsetbits_le32(&eqos->mac_regs->rxq_ctrl0,
1352                         EQOS_MAC_RXQ_CTRL0_RXQ0EN_MASK <<
1353                         EQOS_MAC_RXQ_CTRL0_RXQ0EN_SHIFT,
1354                         0x2 <<
1355                         EQOS_MAC_RXQ_CTRL0_RXQ0EN_SHIFT);
1356
1357         /* Multicast and Broadcast Queue Enable */
1358         setbits_le32(&eqos->mac_regs->unused_0a4,
1359                      0x00100000);
1360         /* enable promise mode */
1361         setbits_le32(&eqos->mac_regs->unused_004[1],
1362                      0x1);
1363
1364         /* Set TX flow control parameters */
1365         /* Set Pause Time */
1366         setbits_le32(&eqos->mac_regs->q0_tx_flow_ctrl,
1367                      0xffff << EQOS_MAC_Q0_TX_FLOW_CTRL_PT_SHIFT);
1368         /* Assign priority for TX flow control */
1369         clrbits_le32(&eqos->mac_regs->txq_prty_map0,
1370                      EQOS_MAC_TXQ_PRTY_MAP0_PSTQ0_MASK <<
1371                      EQOS_MAC_TXQ_PRTY_MAP0_PSTQ0_SHIFT);
1372         /* Assign priority for RX flow control */
1373         clrbits_le32(&eqos->mac_regs->rxq_ctrl2,
1374                      EQOS_MAC_RXQ_CTRL2_PSRQ0_MASK <<
1375                      EQOS_MAC_RXQ_CTRL2_PSRQ0_SHIFT);
1376         /* Enable flow control */
1377         setbits_le32(&eqos->mac_regs->q0_tx_flow_ctrl,
1378                      EQOS_MAC_Q0_TX_FLOW_CTRL_TFE);
1379         setbits_le32(&eqos->mac_regs->rx_flow_ctrl,
1380                      EQOS_MAC_RX_FLOW_CTRL_RFE);
1381
1382         clrsetbits_le32(&eqos->mac_regs->configuration,
1383                         EQOS_MAC_CONFIGURATION_GPSLCE |
1384                         EQOS_MAC_CONFIGURATION_WD |
1385                         EQOS_MAC_CONFIGURATION_JD |
1386                         EQOS_MAC_CONFIGURATION_JE,
1387                         EQOS_MAC_CONFIGURATION_CST |
1388                         EQOS_MAC_CONFIGURATION_ACS);
1389
1390         eqos_write_hwaddr(dev);
1391
1392         /* Configure DMA */
1393
1394         /* Enable OSP mode */
1395         setbits_le32(&eqos->dma_regs->ch0_tx_control,
1396                      EQOS_DMA_CH0_TX_CONTROL_OSP);
1397
1398         /* RX buffer size. Must be a multiple of bus width */
1399         clrsetbits_le32(&eqos->dma_regs->ch0_rx_control,
1400                         EQOS_DMA_CH0_RX_CONTROL_RBSZ_MASK <<
1401                         EQOS_DMA_CH0_RX_CONTROL_RBSZ_SHIFT,
1402                         EQOS_MAX_PACKET_SIZE <<
1403                         EQOS_DMA_CH0_RX_CONTROL_RBSZ_SHIFT);
1404
1405         setbits_le32(&eqos->dma_regs->ch0_control,
1406                      EQOS_DMA_CH0_CONTROL_PBLX8);
1407
1408         /*
1409          * Burst length must be < 1/2 FIFO size.
1410          * FIFO size in tqs is encoded as (n / 256) - 1.
1411          * Each burst is n * 8 (PBLX8) * 16 (AXI width) == 128 bytes.
1412          * Half of n * 256 is n * 128, so pbl == tqs, modulo the -1.
1413          */
1414         pbl = tqs + 1;
1415         if (pbl > 32)
1416                 pbl = 32;
1417         clrsetbits_le32(&eqos->dma_regs->ch0_tx_control,
1418                         EQOS_DMA_CH0_TX_CONTROL_TXPBL_MASK <<
1419                         EQOS_DMA_CH0_TX_CONTROL_TXPBL_SHIFT,
1420                         pbl << EQOS_DMA_CH0_TX_CONTROL_TXPBL_SHIFT);
1421
1422         clrsetbits_le32(&eqos->dma_regs->ch0_rx_control,
1423                         EQOS_DMA_CH0_RX_CONTROL_RXPBL_MASK <<
1424                         EQOS_DMA_CH0_RX_CONTROL_RXPBL_SHIFT,
1425                         8 << EQOS_DMA_CH0_RX_CONTROL_RXPBL_SHIFT);
1426
1427         /* DMA performance configuration */
1428         val = (2 << EQOS_DMA_SYSBUS_MODE_RD_OSR_LMT_SHIFT) |
1429                 EQOS_DMA_SYSBUS_MODE_EAME | EQOS_DMA_SYSBUS_MODE_BLEN16 |
1430                 EQOS_DMA_SYSBUS_MODE_BLEN8 | EQOS_DMA_SYSBUS_MODE_BLEN4;
1431         writel(val, &eqos->dma_regs->sysbus_mode);
1432
1433         /* Set up descriptors */
1434
1435         memset(eqos->descs, 0, EQOS_DESCRIPTORS_SIZE);
1436         for (i = 0; i < EQOS_DESCRIPTORS_RX; i++) {
1437                 struct eqos_desc *rx_desc = &(eqos->rx_descs[i]);
1438                 rx_desc->des0 = (u32)(ulong)(eqos->rx_dma_buf +
1439                                              (i * EQOS_MAX_PACKET_SIZE));
1440                 rx_desc->des3 = EQOS_DESC3_OWN | EQOS_DESC3_BUF1V;
1441                 mb();
1442                 eqos->config->ops->eqos_flush_desc(rx_desc);
1443                 eqos->config->ops->eqos_inval_buffer(eqos->rx_dma_buf +
1444                                                 (i * EQOS_MAX_PACKET_SIZE),
1445                                                 EQOS_MAX_PACKET_SIZE);
1446         }
1447
1448         writel(0, &eqos->dma_regs->ch0_txdesc_list_haddress);
1449         writel((ulong)eqos->tx_descs, &eqos->dma_regs->ch0_txdesc_list_address);
1450         writel(EQOS_DESCRIPTORS_TX - 1,
1451                &eqos->dma_regs->ch0_txdesc_ring_length);
1452
1453         writel(0, &eqos->dma_regs->ch0_rxdesc_list_haddress);
1454         writel((ulong)eqos->rx_descs, &eqos->dma_regs->ch0_rxdesc_list_address);
1455         writel(EQOS_DESCRIPTORS_RX - 1,
1456                &eqos->dma_regs->ch0_rxdesc_ring_length);
1457
1458         /* Enable everything */
1459         setbits_le32(&eqos->dma_regs->ch0_tx_control,
1460                      EQOS_DMA_CH0_TX_CONTROL_ST);
1461         setbits_le32(&eqos->dma_regs->ch0_rx_control,
1462                      EQOS_DMA_CH0_RX_CONTROL_SR);
1463         setbits_le32(&eqos->mac_regs->configuration,
1464                      EQOS_MAC_CONFIGURATION_TE | EQOS_MAC_CONFIGURATION_RE);
1465
1466         /* TX tail pointer not written until we need to TX a packet */
1467         /*
1468          * Point RX tail pointer at last descriptor. Ideally, we'd point at the
1469          * first descriptor, implying all descriptors were available. However,
1470          * that's not distinguishable from none of the descriptors being
1471          * available.
1472          */
1473         last_rx_desc = (ulong)&(eqos->rx_descs[(EQOS_DESCRIPTORS_RX - 1)]);
1474         writel(last_rx_desc, &eqos->dma_regs->ch0_rxdesc_tail_pointer);
1475
1476         eqos->started = true;
1477
1478         debug("%s: OK\n", __func__);
1479         return 0;
1480
1481 err_shutdown_phy:
1482         phy_shutdown(eqos->phy);
1483 err_stop_resets:
1484         eqos->config->ops->eqos_stop_resets(dev);
1485 err_stop_clks:
1486         eqos->config->ops->eqos_stop_clks(dev);
1487 err:
1488         pr_err("FAILED: %d", ret);
1489         return ret;
1490 }
1491
1492 static void eqos_stop(struct udevice *dev)
1493 {
1494         struct eqos_priv *eqos = dev_get_priv(dev);
1495         int i;
1496
1497         debug("%s(dev=%p):\n", __func__, dev);
1498
1499         if (!eqos->started)
1500                 return;
1501         eqos->started = false;
1502         eqos->reg_access_ok = false;
1503
1504         /* Disable TX DMA */
1505         clrbits_le32(&eqos->dma_regs->ch0_tx_control,
1506                      EQOS_DMA_CH0_TX_CONTROL_ST);
1507
1508         /* Wait for TX all packets to drain out of MTL */
1509         for (i = 0; i < 1000000; i++) {
1510                 u32 val = readl(&eqos->mtl_regs->txq0_debug);
1511                 u32 trcsts = (val >> EQOS_MTL_TXQ0_DEBUG_TRCSTS_SHIFT) &
1512                         EQOS_MTL_TXQ0_DEBUG_TRCSTS_MASK;
1513                 u32 txqsts = val & EQOS_MTL_TXQ0_DEBUG_TXQSTS;
1514                 if ((trcsts != 1) && (!txqsts))
1515                         break;
1516         }
1517
1518         /* Turn off MAC TX and RX */
1519         clrbits_le32(&eqos->mac_regs->configuration,
1520                      EQOS_MAC_CONFIGURATION_TE | EQOS_MAC_CONFIGURATION_RE);
1521
1522         /* Wait for all RX packets to drain out of MTL */
1523         for (i = 0; i < 1000000; i++) {
1524                 u32 val = readl(&eqos->mtl_regs->rxq0_debug);
1525                 u32 prxq = (val >> EQOS_MTL_RXQ0_DEBUG_PRXQ_SHIFT) &
1526                         EQOS_MTL_RXQ0_DEBUG_PRXQ_MASK;
1527                 u32 rxqsts = (val >> EQOS_MTL_RXQ0_DEBUG_RXQSTS_SHIFT) &
1528                         EQOS_MTL_RXQ0_DEBUG_RXQSTS_MASK;
1529                 if ((!prxq) && (!rxqsts))
1530                         break;
1531         }
1532
1533         /* Turn off RX DMA */
1534         clrbits_le32(&eqos->dma_regs->ch0_rx_control,
1535                      EQOS_DMA_CH0_RX_CONTROL_SR);
1536
1537         if (eqos->phy) {
1538                 phy_shutdown(eqos->phy);
1539         }
1540         eqos->config->ops->eqos_stop_resets(dev);
1541         eqos->config->ops->eqos_stop_clks(dev);
1542
1543         debug("%s: OK\n", __func__);
1544 }
1545
1546 static int eqos_send(struct udevice *dev, void *packet, int length)
1547 {
1548         struct eqos_priv *eqos = dev_get_priv(dev);
1549         struct eqos_desc *tx_desc;
1550         int i;
1551
1552         debug("%s(dev=%p, packet=%p, length=%d):\n", __func__, dev, packet,
1553               length);
1554
1555         memcpy(eqos->tx_dma_buf, packet, length);
1556         eqos->config->ops->eqos_flush_buffer(eqos->tx_dma_buf, length);
1557
1558         tx_desc = &(eqos->tx_descs[eqos->tx_desc_idx]);
1559         eqos->tx_desc_idx++;
1560         eqos->tx_desc_idx %= EQOS_DESCRIPTORS_TX;
1561
1562         tx_desc->des0 = (ulong)eqos->tx_dma_buf;
1563         tx_desc->des1 = 0;
1564         tx_desc->des2 = length;
1565         /*
1566          * Make sure that if HW sees the _OWN write below, it will see all the
1567          * writes to the rest of the descriptor too.
1568          */
1569         mb();
1570         tx_desc->des3 = EQOS_DESC3_OWN | EQOS_DESC3_FD | EQOS_DESC3_LD | length;
1571         eqos->config->ops->eqos_flush_desc(tx_desc);
1572
1573         writel((ulong)(&(eqos->tx_descs[eqos->tx_desc_idx])),
1574                 &eqos->dma_regs->ch0_txdesc_tail_pointer);
1575
1576         for (i = 0; i < 1000000; i++) {
1577                 eqos->config->ops->eqos_inval_desc(tx_desc);
1578                 if (!(readl(&tx_desc->des3) & EQOS_DESC3_OWN))
1579                         return 0;
1580                 udelay(1);
1581         }
1582
1583         debug("%s: TX timeout\n", __func__);
1584
1585         return -ETIMEDOUT;
1586 }
1587
1588 static int eqos_recv(struct udevice *dev, int flags, uchar **packetp)
1589 {
1590         struct eqos_priv *eqos = dev_get_priv(dev);
1591         struct eqos_desc *rx_desc;
1592         int length;
1593
1594         debug("%s(dev=%p, flags=%x):\n", __func__, dev, flags);
1595
1596         rx_desc = &(eqos->rx_descs[eqos->rx_desc_idx]);
1597         eqos->config->ops->eqos_inval_desc(rx_desc);
1598         if (rx_desc->des3 & EQOS_DESC3_OWN) {
1599                 debug("%s: RX packet not available\n", __func__);
1600                 return -EAGAIN;
1601         }
1602
1603         *packetp = eqos->rx_dma_buf +
1604                 (eqos->rx_desc_idx * EQOS_MAX_PACKET_SIZE);
1605         length = rx_desc->des3 & 0x7fff;
1606         debug("%s: *packetp=%p, length=%d\n", __func__, *packetp, length);
1607
1608         eqos->config->ops->eqos_inval_buffer(*packetp, length);
1609
1610         return length;
1611 }
1612
1613 static int eqos_free_pkt(struct udevice *dev, uchar *packet, int length)
1614 {
1615         struct eqos_priv *eqos = dev_get_priv(dev);
1616         uchar *packet_expected;
1617         struct eqos_desc *rx_desc;
1618
1619         debug("%s(packet=%p, length=%d)\n", __func__, packet, length);
1620
1621         packet_expected = eqos->rx_dma_buf +
1622                 (eqos->rx_desc_idx * EQOS_MAX_PACKET_SIZE);
1623         if (packet != packet_expected) {
1624                 debug("%s: Unexpected packet (expected %p)\n", __func__,
1625                       packet_expected);
1626                 return -EINVAL;
1627         }
1628
1629         eqos->config->ops->eqos_inval_buffer(packet, length);
1630
1631         rx_desc = &(eqos->rx_descs[eqos->rx_desc_idx]);
1632
1633         rx_desc->des0 = 0;
1634         mb();
1635         eqos->config->ops->eqos_flush_desc(rx_desc);
1636         eqos->config->ops->eqos_inval_buffer(packet, length);
1637         rx_desc->des0 = (u32)(ulong)packet;
1638         rx_desc->des1 = 0;
1639         rx_desc->des2 = 0;
1640         /*
1641          * Make sure that if HW sees the _OWN write below, it will see all the
1642          * writes to the rest of the descriptor too.
1643          */
1644         mb();
1645         rx_desc->des3 = EQOS_DESC3_OWN | EQOS_DESC3_BUF1V;
1646         eqos->config->ops->eqos_flush_desc(rx_desc);
1647
1648         writel((ulong)rx_desc, &eqos->dma_regs->ch0_rxdesc_tail_pointer);
1649
1650         eqos->rx_desc_idx++;
1651         eqos->rx_desc_idx %= EQOS_DESCRIPTORS_RX;
1652
1653         return 0;
1654 }
1655
1656 static int eqos_probe_resources_core(struct udevice *dev)
1657 {
1658         struct eqos_priv *eqos = dev_get_priv(dev);
1659         int ret;
1660
1661         debug("%s(dev=%p):\n", __func__, dev);
1662
1663         eqos->descs = eqos_alloc_descs(EQOS_DESCRIPTORS_TX +
1664                                        EQOS_DESCRIPTORS_RX);
1665         if (!eqos->descs) {
1666                 debug("%s: eqos_alloc_descs() failed\n", __func__);
1667                 ret = -ENOMEM;
1668                 goto err;
1669         }
1670         eqos->tx_descs = (struct eqos_desc *)eqos->descs;
1671         eqos->rx_descs = (eqos->tx_descs + EQOS_DESCRIPTORS_TX);
1672         debug("%s: tx_descs=%p, rx_descs=%p\n", __func__, eqos->tx_descs,
1673               eqos->rx_descs);
1674
1675         eqos->tx_dma_buf = memalign(EQOS_BUFFER_ALIGN, EQOS_MAX_PACKET_SIZE);
1676         if (!eqos->tx_dma_buf) {
1677                 debug("%s: memalign(tx_dma_buf) failed\n", __func__);
1678                 ret = -ENOMEM;
1679                 goto err_free_descs;
1680         }
1681         debug("%s: tx_dma_buf=%p\n", __func__, eqos->tx_dma_buf);
1682
1683         eqos->rx_dma_buf = memalign(EQOS_BUFFER_ALIGN, EQOS_RX_BUFFER_SIZE);
1684         if (!eqos->rx_dma_buf) {
1685                 debug("%s: memalign(rx_dma_buf) failed\n", __func__);
1686                 ret = -ENOMEM;
1687                 goto err_free_tx_dma_buf;
1688         }
1689         debug("%s: rx_dma_buf=%p\n", __func__, eqos->rx_dma_buf);
1690
1691         eqos->rx_pkt = malloc(EQOS_MAX_PACKET_SIZE);
1692         if (!eqos->rx_pkt) {
1693                 debug("%s: malloc(rx_pkt) failed\n", __func__);
1694                 ret = -ENOMEM;
1695                 goto err_free_rx_dma_buf;
1696         }
1697         debug("%s: rx_pkt=%p\n", __func__, eqos->rx_pkt);
1698
1699         eqos->config->ops->eqos_inval_buffer(eqos->rx_dma_buf,
1700                         EQOS_MAX_PACKET_SIZE * EQOS_DESCRIPTORS_RX);
1701
1702         debug("%s: OK\n", __func__);
1703         return 0;
1704
1705 err_free_rx_dma_buf:
1706         free(eqos->rx_dma_buf);
1707 err_free_tx_dma_buf:
1708         free(eqos->tx_dma_buf);
1709 err_free_descs:
1710         eqos_free_descs(eqos->descs);
1711 err:
1712
1713         debug("%s: returns %d\n", __func__, ret);
1714         return ret;
1715 }
1716
1717 static int eqos_remove_resources_core(struct udevice *dev)
1718 {
1719         struct eqos_priv *eqos = dev_get_priv(dev);
1720
1721         debug("%s(dev=%p):\n", __func__, dev);
1722
1723         free(eqos->rx_pkt);
1724         free(eqos->rx_dma_buf);
1725         free(eqos->tx_dma_buf);
1726         eqos_free_descs(eqos->descs);
1727
1728         debug("%s: OK\n", __func__);
1729         return 0;
1730 }
1731
1732 static int eqos_probe_resources_tegra186(struct udevice *dev)
1733 {
1734         struct eqos_priv *eqos = dev_get_priv(dev);
1735         int ret;
1736
1737         debug("%s(dev=%p):\n", __func__, dev);
1738
1739         ret = reset_get_by_name(dev, "eqos", &eqos->reset_ctl);
1740         if (ret) {
1741                 pr_err("reset_get_by_name(rst) failed: %d", ret);
1742                 return ret;
1743         }
1744
1745         ret = gpio_request_by_name(dev, "phy-reset-gpios", 0,
1746                                    &eqos->phy_reset_gpio,
1747                                    GPIOD_IS_OUT | GPIOD_IS_OUT_ACTIVE);
1748         if (ret) {
1749                 pr_err("gpio_request_by_name(phy reset) failed: %d", ret);
1750                 goto err_free_reset_eqos;
1751         }
1752
1753         ret = clk_get_by_name(dev, "slave_bus", &eqos->clk_slave_bus);
1754         if (ret) {
1755                 pr_err("clk_get_by_name(slave_bus) failed: %d", ret);
1756                 goto err_free_gpio_phy_reset;
1757         }
1758
1759         ret = clk_get_by_name(dev, "master_bus", &eqos->clk_master_bus);
1760         if (ret) {
1761                 pr_err("clk_get_by_name(master_bus) failed: %d", ret);
1762                 goto err_free_clk_slave_bus;
1763         }
1764
1765         ret = clk_get_by_name(dev, "rx", &eqos->clk_rx);
1766         if (ret) {
1767                 pr_err("clk_get_by_name(rx) failed: %d", ret);
1768                 goto err_free_clk_master_bus;
1769         }
1770
1771         ret = clk_get_by_name(dev, "ptp_ref", &eqos->clk_ptp_ref);
1772         if (ret) {
1773                 pr_err("clk_get_by_name(ptp_ref) failed: %d", ret);
1774                 goto err_free_clk_rx;
1775                 return ret;
1776         }
1777
1778         ret = clk_get_by_name(dev, "tx", &eqos->clk_tx);
1779         if (ret) {
1780                 pr_err("clk_get_by_name(tx) failed: %d", ret);
1781                 goto err_free_clk_ptp_ref;
1782         }
1783
1784         debug("%s: OK\n", __func__);
1785         return 0;
1786
1787 err_free_clk_ptp_ref:
1788         clk_free(&eqos->clk_ptp_ref);
1789 err_free_clk_rx:
1790         clk_free(&eqos->clk_rx);
1791 err_free_clk_master_bus:
1792         clk_free(&eqos->clk_master_bus);
1793 err_free_clk_slave_bus:
1794         clk_free(&eqos->clk_slave_bus);
1795 err_free_gpio_phy_reset:
1796         dm_gpio_free(dev, &eqos->phy_reset_gpio);
1797 err_free_reset_eqos:
1798         reset_free(&eqos->reset_ctl);
1799
1800         debug("%s: returns %d\n", __func__, ret);
1801         return ret;
1802 }
1803
1804 /* board-specific Ethernet Interface initializations. */
1805 __weak int board_interface_eth_init(struct udevice *dev,
1806                                     phy_interface_t interface_type)
1807 {
1808         return 0;
1809 }
1810
1811 static int eqos_probe_resources_stm32(struct udevice *dev)
1812 {
1813         struct eqos_priv *eqos = dev_get_priv(dev);
1814         int ret;
1815         phy_interface_t interface;
1816         struct ofnode_phandle_args phandle_args;
1817
1818         debug("%s(dev=%p):\n", __func__, dev);
1819
1820         interface = eqos->config->interface(dev);
1821
1822         if (interface == PHY_INTERFACE_MODE_NONE) {
1823                 pr_err("Invalid PHY interface\n");
1824                 return -EINVAL;
1825         }
1826
1827         ret = board_interface_eth_init(dev, interface);
1828         if (ret)
1829                 return -EINVAL;
1830
1831         eqos->max_speed = dev_read_u32_default(dev, "max-speed", 0);
1832
1833         ret = clk_get_by_name(dev, "stmmaceth", &eqos->clk_master_bus);
1834         if (ret) {
1835                 pr_err("clk_get_by_name(master_bus) failed: %d", ret);
1836                 goto err_probe;
1837         }
1838
1839         ret = clk_get_by_name(dev, "mac-clk-rx", &eqos->clk_rx);
1840         if (ret) {
1841                 pr_err("clk_get_by_name(rx) failed: %d", ret);
1842                 goto err_free_clk_master_bus;
1843         }
1844
1845         ret = clk_get_by_name(dev, "mac-clk-tx", &eqos->clk_tx);
1846         if (ret) {
1847                 pr_err("clk_get_by_name(tx) failed: %d", ret);
1848                 goto err_free_clk_rx;
1849         }
1850
1851         /*  Get ETH_CLK clocks (optional) */
1852         ret = clk_get_by_name(dev, "eth-ck", &eqos->clk_ck);
1853         if (ret)
1854                 pr_warn("No phy clock provided %d", ret);
1855
1856         eqos->phyaddr = -1;
1857         ret = dev_read_phandle_with_args(dev, "phy-handle", NULL, 0, 0,
1858                                          &phandle_args);
1859         if (!ret) {
1860                 /* search "reset-gpios" in phy node */
1861                 ret = gpio_request_by_name_nodev(phandle_args.node,
1862                                                  "reset-gpios", 0,
1863                                                  &eqos->phy_reset_gpio,
1864                                                  GPIOD_IS_OUT |
1865                                                  GPIOD_IS_OUT_ACTIVE);
1866                 if (ret)
1867                         pr_warn("gpio_request_by_name(phy reset) not provided %d",
1868                                 ret);
1869
1870                 eqos->phyaddr = ofnode_read_u32_default(phandle_args.node,
1871                                                         "reg", -1);
1872         }
1873
1874         debug("%s: OK\n", __func__);
1875         return 0;
1876
1877 err_free_clk_rx:
1878         clk_free(&eqos->clk_rx);
1879 err_free_clk_master_bus:
1880         clk_free(&eqos->clk_master_bus);
1881 err_probe:
1882
1883         debug("%s: returns %d\n", __func__, ret);
1884         return ret;
1885 }
1886
1887 static phy_interface_t eqos_get_interface_stm32(struct udevice *dev)
1888 {
1889         const char *phy_mode;
1890         phy_interface_t interface = PHY_INTERFACE_MODE_NONE;
1891
1892         debug("%s(dev=%p):\n", __func__, dev);
1893
1894         phy_mode = fdt_getprop(gd->fdt_blob, dev_of_offset(dev), "phy-mode",
1895                                NULL);
1896         if (phy_mode)
1897                 interface = phy_get_interface_by_name(phy_mode);
1898
1899         return interface;
1900 }
1901
1902 static phy_interface_t eqos_get_interface_tegra186(struct udevice *dev)
1903 {
1904         return PHY_INTERFACE_MODE_MII;
1905 }
1906
1907 static int eqos_probe_resources_imx(struct udevice *dev)
1908 {
1909         struct eqos_priv *eqos = dev_get_priv(dev);
1910         phy_interface_t interface;
1911
1912         debug("%s(dev=%p):\n", __func__, dev);
1913
1914         interface = eqos->config->interface(dev);
1915
1916         if (interface == PHY_INTERFACE_MODE_NONE) {
1917                 pr_err("Invalid PHY interface\n");
1918                 return -EINVAL;
1919         }
1920
1921         debug("%s: OK\n", __func__);
1922         return 0;
1923 }
1924
1925 static phy_interface_t eqos_get_interface_imx(struct udevice *dev)
1926 {
1927         const char *phy_mode;
1928         phy_interface_t interface = PHY_INTERFACE_MODE_NONE;
1929
1930         debug("%s(dev=%p):\n", __func__, dev);
1931
1932         phy_mode = fdt_getprop(gd->fdt_blob, dev_of_offset(dev), "phy-mode",
1933                                NULL);
1934         if (phy_mode)
1935                 interface = phy_get_interface_by_name(phy_mode);
1936
1937         return interface;
1938 }
1939
1940 static int eqos_remove_resources_tegra186(struct udevice *dev)
1941 {
1942         struct eqos_priv *eqos = dev_get_priv(dev);
1943
1944         debug("%s(dev=%p):\n", __func__, dev);
1945
1946 #ifdef CONFIG_CLK
1947         clk_free(&eqos->clk_tx);
1948         clk_free(&eqos->clk_ptp_ref);
1949         clk_free(&eqos->clk_rx);
1950         clk_free(&eqos->clk_slave_bus);
1951         clk_free(&eqos->clk_master_bus);
1952 #endif
1953         dm_gpio_free(dev, &eqos->phy_reset_gpio);
1954         reset_free(&eqos->reset_ctl);
1955
1956         debug("%s: OK\n", __func__);
1957         return 0;
1958 }
1959
1960 static int eqos_remove_resources_stm32(struct udevice *dev)
1961 {
1962 #ifdef CONFIG_CLK
1963         struct eqos_priv *eqos = dev_get_priv(dev);
1964
1965         debug("%s(dev=%p):\n", __func__, dev);
1966
1967         clk_free(&eqos->clk_tx);
1968         clk_free(&eqos->clk_rx);
1969         clk_free(&eqos->clk_master_bus);
1970         if (clk_valid(&eqos->clk_ck))
1971                 clk_free(&eqos->clk_ck);
1972 #endif
1973
1974         if (dm_gpio_is_valid(&eqos->phy_reset_gpio))
1975                 dm_gpio_free(dev, &eqos->phy_reset_gpio);
1976
1977         debug("%s: OK\n", __func__);
1978         return 0;
1979 }
1980
1981 static int eqos_remove_resources_imx(struct udevice *dev)
1982 {
1983         return 0;
1984 }
1985
1986 static int eqos_probe(struct udevice *dev)
1987 {
1988         struct eqos_priv *eqos = dev_get_priv(dev);
1989         int ret;
1990
1991         debug("%s(dev=%p):\n", __func__, dev);
1992
1993         eqos->dev = dev;
1994         eqos->config = (void *)dev_get_driver_data(dev);
1995
1996         eqos->regs = devfdt_get_addr(dev);
1997         if (eqos->regs == FDT_ADDR_T_NONE) {
1998                 pr_err("devfdt_get_addr() failed");
1999                 return -ENODEV;
2000         }
2001         eqos->mac_regs = (void *)(eqos->regs + EQOS_MAC_REGS_BASE);
2002         eqos->mtl_regs = (void *)(eqos->regs + EQOS_MTL_REGS_BASE);
2003         eqos->dma_regs = (void *)(eqos->regs + EQOS_DMA_REGS_BASE);
2004         eqos->tegra186_regs = (void *)(eqos->regs + EQOS_TEGRA186_REGS_BASE);
2005
2006         ret = eqos_probe_resources_core(dev);
2007         if (ret < 0) {
2008                 pr_err("eqos_probe_resources_core() failed: %d", ret);
2009                 return ret;
2010         }
2011
2012         ret = eqos->config->ops->eqos_probe_resources(dev);
2013         if (ret < 0) {
2014                 pr_err("eqos_probe_resources() failed: %d", ret);
2015                 goto err_remove_resources_core;
2016         }
2017
2018 #ifdef CONFIG_DM_ETH_PHY
2019         eqos->mii = eth_phy_get_mdio_bus(dev);
2020 #endif
2021         if (!eqos->mii) {
2022                 eqos->mii = mdio_alloc();
2023                 if (!eqos->mii) {
2024                         pr_err("mdio_alloc() failed");
2025                         ret = -ENOMEM;
2026                         goto err_remove_resources_tegra;
2027                 }
2028                 eqos->mii->read = eqos_mdio_read;
2029                 eqos->mii->write = eqos_mdio_write;
2030                 eqos->mii->priv = eqos;
2031                 strcpy(eqos->mii->name, dev->name);
2032
2033                 ret = mdio_register(eqos->mii);
2034                 if (ret < 0) {
2035                         pr_err("mdio_register() failed: %d", ret);
2036                         goto err_free_mdio;
2037                 }
2038         }
2039
2040 #ifdef CONFIG_DM_ETH_PHY
2041         eth_phy_set_mdio_bus(dev, eqos->mii);
2042 #endif
2043
2044         debug("%s: OK\n", __func__);
2045         return 0;
2046
2047 err_free_mdio:
2048         mdio_free(eqos->mii);
2049 err_remove_resources_tegra:
2050         eqos->config->ops->eqos_remove_resources(dev);
2051 err_remove_resources_core:
2052         eqos_remove_resources_core(dev);
2053
2054         debug("%s: returns %d\n", __func__, ret);
2055         return ret;
2056 }
2057
2058 static int eqos_remove(struct udevice *dev)
2059 {
2060         struct eqos_priv *eqos = dev_get_priv(dev);
2061
2062         debug("%s(dev=%p):\n", __func__, dev);
2063
2064         mdio_unregister(eqos->mii);
2065         mdio_free(eqos->mii);
2066         eqos->config->ops->eqos_remove_resources(dev);
2067
2068         eqos_probe_resources_core(dev);
2069
2070         debug("%s: OK\n", __func__);
2071         return 0;
2072 }
2073
2074 static const struct eth_ops eqos_ops = {
2075         .start = eqos_start,
2076         .stop = eqos_stop,
2077         .send = eqos_send,
2078         .recv = eqos_recv,
2079         .free_pkt = eqos_free_pkt,
2080         .write_hwaddr = eqos_write_hwaddr,
2081         .read_rom_hwaddr        = eqos_read_rom_hwaddr,
2082 };
2083
2084 static struct eqos_ops eqos_tegra186_ops = {
2085         .eqos_inval_desc = eqos_inval_desc_tegra186,
2086         .eqos_flush_desc = eqos_flush_desc_tegra186,
2087         .eqos_inval_buffer = eqos_inval_buffer_tegra186,
2088         .eqos_flush_buffer = eqos_flush_buffer_tegra186,
2089         .eqos_probe_resources = eqos_probe_resources_tegra186,
2090         .eqos_remove_resources = eqos_remove_resources_tegra186,
2091         .eqos_stop_resets = eqos_stop_resets_tegra186,
2092         .eqos_start_resets = eqos_start_resets_tegra186,
2093         .eqos_stop_clks = eqos_stop_clks_tegra186,
2094         .eqos_start_clks = eqos_start_clks_tegra186,
2095         .eqos_calibrate_pads = eqos_calibrate_pads_tegra186,
2096         .eqos_disable_calibration = eqos_disable_calibration_tegra186,
2097         .eqos_set_tx_clk_speed = eqos_set_tx_clk_speed_tegra186,
2098         .eqos_get_tick_clk_rate = eqos_get_tick_clk_rate_tegra186
2099 };
2100
2101 static const struct eqos_config eqos_tegra186_config = {
2102         .reg_access_always_ok = false,
2103         .mdio_wait = 10,
2104         .swr_wait = 10,
2105         .config_mac = EQOS_MAC_RXQ_CTRL0_RXQ0EN_ENABLED_DCB,
2106         .config_mac_mdio = EQOS_MAC_MDIO_ADDRESS_CR_20_35,
2107         .interface = eqos_get_interface_tegra186,
2108         .ops = &eqos_tegra186_ops
2109 };
2110
2111 static struct eqos_ops eqos_stm32_ops = {
2112         .eqos_inval_desc = eqos_inval_desc_generic,
2113         .eqos_flush_desc = eqos_flush_desc_generic,
2114         .eqos_inval_buffer = eqos_inval_buffer_generic,
2115         .eqos_flush_buffer = eqos_flush_buffer_generic,
2116         .eqos_probe_resources = eqos_probe_resources_stm32,
2117         .eqos_remove_resources = eqos_remove_resources_stm32,
2118         .eqos_stop_resets = eqos_stop_resets_stm32,
2119         .eqos_start_resets = eqos_start_resets_stm32,
2120         .eqos_stop_clks = eqos_stop_clks_stm32,
2121         .eqos_start_clks = eqos_start_clks_stm32,
2122         .eqos_calibrate_pads = eqos_calibrate_pads_stm32,
2123         .eqos_disable_calibration = eqos_disable_calibration_stm32,
2124         .eqos_set_tx_clk_speed = eqos_set_tx_clk_speed_stm32,
2125         .eqos_get_tick_clk_rate = eqos_get_tick_clk_rate_stm32
2126 };
2127
2128 static const struct eqos_config eqos_stm32_config = {
2129         .reg_access_always_ok = false,
2130         .mdio_wait = 10000,
2131         .swr_wait = 50,
2132         .config_mac = EQOS_MAC_RXQ_CTRL0_RXQ0EN_ENABLED_AV,
2133         .config_mac_mdio = EQOS_MAC_MDIO_ADDRESS_CR_250_300,
2134         .interface = eqos_get_interface_stm32,
2135         .ops = &eqos_stm32_ops
2136 };
2137
2138 static struct eqos_ops eqos_imx_ops = {
2139         .eqos_inval_desc = eqos_inval_desc_generic,
2140         .eqos_flush_desc = eqos_flush_desc_generic,
2141         .eqos_inval_buffer = eqos_inval_buffer_generic,
2142         .eqos_flush_buffer = eqos_flush_buffer_generic,
2143         .eqos_probe_resources = eqos_probe_resources_imx,
2144         .eqos_remove_resources = eqos_remove_resources_imx,
2145         .eqos_stop_resets = eqos_stop_resets_imx,
2146         .eqos_start_resets = eqos_start_resets_imx,
2147         .eqos_stop_clks = eqos_stop_clks_imx,
2148         .eqos_start_clks = eqos_start_clks_imx,
2149         .eqos_calibrate_pads = eqos_calibrate_pads_imx,
2150         .eqos_disable_calibration = eqos_disable_calibration_imx,
2151         .eqos_set_tx_clk_speed = eqos_set_tx_clk_speed_imx,
2152         .eqos_get_tick_clk_rate = eqos_get_tick_clk_rate_imx
2153 };
2154
2155 struct eqos_config eqos_imx_config = {
2156         .reg_access_always_ok = false,
2157         .mdio_wait = 10000,
2158         .swr_wait = 50,
2159         .config_mac = EQOS_MAC_RXQ_CTRL0_RXQ0EN_ENABLED_DCB,
2160         .config_mac_mdio = EQOS_MAC_MDIO_ADDRESS_CR_250_300,
2161         .interface = eqos_get_interface_imx,
2162         .ops = &eqos_imx_ops
2163 };
2164
2165 static const struct udevice_id eqos_ids[] = {
2166         {
2167                 .compatible = "nvidia,tegra186-eqos",
2168                 .data = (ulong)&eqos_tegra186_config
2169         },
2170         {
2171                 .compatible = "snps,dwmac-4.20a",
2172                 .data = (ulong)&eqos_stm32_config
2173         },
2174         {
2175                 .compatible = "fsl,imx-eqos",
2176                 .data = (ulong)&eqos_imx_config
2177         },
2178
2179         { }
2180 };
2181
2182 U_BOOT_DRIVER(eth_eqos) = {
2183         .name = "eth_eqos",
2184         .id = UCLASS_ETH,
2185         .of_match = of_match_ptr(eqos_ids),
2186         .probe = eqos_probe,
2187         .remove = eqos_remove,
2188         .ops = &eqos_ops,
2189         .priv_auto_alloc_size = sizeof(struct eqos_priv),
2190         .platdata_auto_alloc_size = sizeof(struct eth_pdata),
2191 };