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