GNU Linux-libre 4.4.299-gnu1
[releases.git] / drivers / net / ethernet / renesas / ravb_main.c
1 /* Renesas Ethernet AVB device driver
2  *
3  * Copyright (C) 2014-2019 Renesas Electronics Corporation
4  * Copyright (C) 2015 Renesas Solutions Corp.
5  * Copyright (C) 2015 Cogent Embedded, Inc. <source@cogentembedded.com>
6  *
7  * Based on the SuperH Ethernet driver
8  *
9  * This program is free software; you can redistribute it and/or modify it
10  * under the terms and conditions of the GNU General Public License version 2,
11  * as published by the Free Software Foundation.
12  */
13
14 #include <linux/cache.h>
15 #include <linux/clk.h>
16 #include <linux/delay.h>
17 #include <linux/dma-mapping.h>
18 #include <linux/err.h>
19 #include <linux/etherdevice.h>
20 #include <linux/ethtool.h>
21 #include <linux/if_vlan.h>
22 #include <linux/kernel.h>
23 #include <linux/list.h>
24 #include <linux/module.h>
25 #include <linux/net_tstamp.h>
26 #include <linux/of.h>
27 #include <linux/of_device.h>
28 #include <linux/of_irq.h>
29 #include <linux/of_mdio.h>
30 #include <linux/of_net.h>
31 #include <linux/pm_runtime.h>
32 #include <linux/slab.h>
33 #include <linux/spinlock.h>
34
35 #include "ravb.h"
36
37 #define RAVB_DEF_MSG_ENABLE \
38                 (NETIF_MSG_LINK   | \
39                  NETIF_MSG_TIMER  | \
40                  NETIF_MSG_RX_ERR | \
41                  NETIF_MSG_TX_ERR)
42
43 int ravb_wait(struct net_device *ndev, enum ravb_reg reg, u32 mask, u32 value)
44 {
45         int i;
46
47         for (i = 0; i < 10000; i++) {
48                 if ((ravb_read(ndev, reg) & mask) == value)
49                         return 0;
50                 udelay(10);
51         }
52         return -ETIMEDOUT;
53 }
54
55 static int ravb_config(struct net_device *ndev)
56 {
57         int error;
58
59         /* Set config mode */
60         ravb_write(ndev, (ravb_read(ndev, CCC) & ~CCC_OPC) | CCC_OPC_CONFIG,
61                    CCC);
62         /* Check if the operating mode is changed to the config mode */
63         error = ravb_wait(ndev, CSR, CSR_OPS, CSR_OPS_CONFIG);
64         if (error)
65                 netdev_err(ndev, "failed to switch device to config mode\n");
66
67         return error;
68 }
69
70 static void ravb_set_duplex(struct net_device *ndev)
71 {
72         struct ravb_private *priv = netdev_priv(ndev);
73         u32 ecmr = ravb_read(ndev, ECMR);
74
75         if (priv->duplex)       /* Full */
76                 ecmr |=  ECMR_DM;
77         else                    /* Half */
78                 ecmr &= ~ECMR_DM;
79         ravb_write(ndev, ecmr, ECMR);
80 }
81
82 static void ravb_set_rate(struct net_device *ndev)
83 {
84         struct ravb_private *priv = netdev_priv(ndev);
85
86         switch (priv->speed) {
87         case 100:               /* 100BASE */
88                 ravb_write(ndev, GECMR_SPEED_100, GECMR);
89                 break;
90         case 1000:              /* 1000BASE */
91                 ravb_write(ndev, GECMR_SPEED_1000, GECMR);
92                 break;
93         default:
94                 break;
95         }
96 }
97
98 static void ravb_set_buffer_align(struct sk_buff *skb)
99 {
100         u32 reserve = (unsigned long)skb->data & (RAVB_ALIGN - 1);
101
102         if (reserve)
103                 skb_reserve(skb, RAVB_ALIGN - reserve);
104 }
105
106 /* Get MAC address from the MAC address registers
107  *
108  * Ethernet AVB device doesn't have ROM for MAC address.
109  * This function gets the MAC address that was used by a bootloader.
110  */
111 static void ravb_read_mac_address(struct net_device *ndev, const u8 *mac)
112 {
113         if (mac) {
114                 ether_addr_copy(ndev->dev_addr, mac);
115         } else {
116                 ndev->dev_addr[0] = (ravb_read(ndev, MAHR) >> 24);
117                 ndev->dev_addr[1] = (ravb_read(ndev, MAHR) >> 16) & 0xFF;
118                 ndev->dev_addr[2] = (ravb_read(ndev, MAHR) >> 8) & 0xFF;
119                 ndev->dev_addr[3] = (ravb_read(ndev, MAHR) >> 0) & 0xFF;
120                 ndev->dev_addr[4] = (ravb_read(ndev, MALR) >> 8) & 0xFF;
121                 ndev->dev_addr[5] = (ravb_read(ndev, MALR) >> 0) & 0xFF;
122         }
123 }
124
125 static void ravb_mdio_ctrl(struct mdiobb_ctrl *ctrl, u32 mask, int set)
126 {
127         struct ravb_private *priv = container_of(ctrl, struct ravb_private,
128                                                  mdiobb);
129         u32 pir = ravb_read(priv->ndev, PIR);
130
131         if (set)
132                 pir |=  mask;
133         else
134                 pir &= ~mask;
135         ravb_write(priv->ndev, pir, PIR);
136 }
137
138 /* MDC pin control */
139 static void ravb_set_mdc(struct mdiobb_ctrl *ctrl, int level)
140 {
141         ravb_mdio_ctrl(ctrl, PIR_MDC, level);
142 }
143
144 /* Data I/O pin control */
145 static void ravb_set_mdio_dir(struct mdiobb_ctrl *ctrl, int output)
146 {
147         ravb_mdio_ctrl(ctrl, PIR_MMD, output);
148 }
149
150 /* Set data bit */
151 static void ravb_set_mdio_data(struct mdiobb_ctrl *ctrl, int value)
152 {
153         ravb_mdio_ctrl(ctrl, PIR_MDO, value);
154 }
155
156 /* Get data bit */
157 static int ravb_get_mdio_data(struct mdiobb_ctrl *ctrl)
158 {
159         struct ravb_private *priv = container_of(ctrl, struct ravb_private,
160                                                  mdiobb);
161
162         return (ravb_read(priv->ndev, PIR) & PIR_MDI) != 0;
163 }
164
165 /* MDIO bus control struct */
166 static struct mdiobb_ops bb_ops = {
167         .owner = THIS_MODULE,
168         .set_mdc = ravb_set_mdc,
169         .set_mdio_dir = ravb_set_mdio_dir,
170         .set_mdio_data = ravb_set_mdio_data,
171         .get_mdio_data = ravb_get_mdio_data,
172 };
173
174 /* Free TX skb function for AVB-IP */
175 static int ravb_tx_free(struct net_device *ndev, int q, bool free_txed_only)
176 {
177         struct ravb_private *priv = netdev_priv(ndev);
178         struct net_device_stats *stats = &priv->stats[q];
179         struct ravb_tx_desc *desc;
180         int free_num = 0;
181         int entry;
182         u32 size;
183
184         for (; priv->cur_tx[q] - priv->dirty_tx[q] > 0; priv->dirty_tx[q]++) {
185                 bool txed;
186
187                 entry = priv->dirty_tx[q] % (priv->num_tx_ring[q] *
188                                              NUM_TX_DESC);
189                 desc = &priv->tx_ring[q][entry];
190                 txed = desc->die_dt == DT_FEMPTY;
191                 if (free_txed_only && !txed)
192                         break;
193                 /* Descriptor type must be checked before all other reads */
194                 dma_rmb();
195                 size = le16_to_cpu(desc->ds_tagl) & TX_DS;
196                 /* Free the original skb. */
197                 if (priv->tx_skb[q][entry / NUM_TX_DESC]) {
198                         dma_unmap_single(ndev->dev.parent, le32_to_cpu(desc->dptr),
199                                          size, DMA_TO_DEVICE);
200                         /* Last packet descriptor? */
201                         if (entry % NUM_TX_DESC == NUM_TX_DESC - 1) {
202                                 entry /= NUM_TX_DESC;
203                                 dev_kfree_skb_any(priv->tx_skb[q][entry]);
204                                 priv->tx_skb[q][entry] = NULL;
205                                 if (txed)
206                                         stats->tx_packets++;
207                         }
208                         free_num++;
209                 }
210                 if (txed)
211                         stats->tx_bytes += size;
212                 desc->die_dt = DT_EEMPTY;
213         }
214         return free_num;
215 }
216
217 /* Free skb's and DMA buffers for Ethernet AVB */
218 static void ravb_ring_free(struct net_device *ndev, int q)
219 {
220         struct ravb_private *priv = netdev_priv(ndev);
221         int ring_size;
222         int i;
223
224         if (priv->rx_ring[q]) {
225                 for (i = 0; i < priv->num_rx_ring[q]; i++) {
226                         struct ravb_ex_rx_desc *desc = &priv->rx_ring[q][i];
227
228                         if (!dma_mapping_error(ndev->dev.parent,
229                                                le32_to_cpu(desc->dptr)))
230                                 dma_unmap_single(ndev->dev.parent,
231                                                  le32_to_cpu(desc->dptr),
232                                                  PKT_BUF_SZ,
233                                                  DMA_FROM_DEVICE);
234                 }
235                 ring_size = sizeof(struct ravb_ex_rx_desc) *
236                             (priv->num_rx_ring[q] + 1);
237                 dma_free_coherent(ndev->dev.parent, ring_size, priv->rx_ring[q],
238                                   priv->rx_desc_dma[q]);
239                 priv->rx_ring[q] = NULL;
240         }
241
242         if (priv->tx_ring[q]) {
243                 ravb_tx_free(ndev, q, false);
244
245                 ring_size = sizeof(struct ravb_tx_desc) *
246                             (priv->num_tx_ring[q] * NUM_TX_DESC + 1);
247                 dma_free_coherent(ndev->dev.parent, ring_size, priv->tx_ring[q],
248                                   priv->tx_desc_dma[q]);
249                 priv->tx_ring[q] = NULL;
250         }
251
252         /* Free RX skb ringbuffer */
253         if (priv->rx_skb[q]) {
254                 for (i = 0; i < priv->num_rx_ring[q]; i++)
255                         dev_kfree_skb(priv->rx_skb[q][i]);
256         }
257         kfree(priv->rx_skb[q]);
258         priv->rx_skb[q] = NULL;
259
260         /* Free aligned TX buffers */
261         kfree(priv->tx_align[q]);
262         priv->tx_align[q] = NULL;
263
264         /* Free TX skb ringbuffer.
265          * SKBs are freed by ravb_tx_free() call above.
266          */
267         kfree(priv->tx_skb[q]);
268         priv->tx_skb[q] = NULL;
269 }
270
271 /* Format skb and descriptor buffer for Ethernet AVB */
272 static void ravb_ring_format(struct net_device *ndev, int q)
273 {
274         struct ravb_private *priv = netdev_priv(ndev);
275         struct ravb_ex_rx_desc *rx_desc;
276         struct ravb_tx_desc *tx_desc;
277         struct ravb_desc *desc;
278         int rx_ring_size = sizeof(*rx_desc) * priv->num_rx_ring[q];
279         int tx_ring_size = sizeof(*tx_desc) * priv->num_tx_ring[q] *
280                            NUM_TX_DESC;
281         dma_addr_t dma_addr;
282         int i;
283
284         priv->cur_rx[q] = 0;
285         priv->cur_tx[q] = 0;
286         priv->dirty_rx[q] = 0;
287         priv->dirty_tx[q] = 0;
288
289         memset(priv->rx_ring[q], 0, rx_ring_size);
290         /* Build RX ring buffer */
291         for (i = 0; i < priv->num_rx_ring[q]; i++) {
292                 /* RX descriptor */
293                 rx_desc = &priv->rx_ring[q][i];
294                 /* The size of the buffer should be on 16-byte boundary. */
295                 rx_desc->ds_cc = cpu_to_le16(ALIGN(PKT_BUF_SZ, 16));
296                 dma_addr = dma_map_single(ndev->dev.parent, priv->rx_skb[q][i]->data,
297                                           ALIGN(PKT_BUF_SZ, 16),
298                                           DMA_FROM_DEVICE);
299                 /* We just set the data size to 0 for a failed mapping which
300                  * should prevent DMA from happening...
301                  */
302                 if (dma_mapping_error(ndev->dev.parent, dma_addr))
303                         rx_desc->ds_cc = cpu_to_le16(0);
304                 rx_desc->dptr = cpu_to_le32(dma_addr);
305                 rx_desc->die_dt = DT_FEMPTY;
306         }
307         rx_desc = &priv->rx_ring[q][i];
308         rx_desc->dptr = cpu_to_le32((u32)priv->rx_desc_dma[q]);
309         rx_desc->die_dt = DT_LINKFIX; /* type */
310
311         memset(priv->tx_ring[q], 0, tx_ring_size);
312         /* Build TX ring buffer */
313         for (i = 0, tx_desc = priv->tx_ring[q]; i < priv->num_tx_ring[q];
314              i++, tx_desc++) {
315                 tx_desc->die_dt = DT_EEMPTY;
316                 tx_desc++;
317                 tx_desc->die_dt = DT_EEMPTY;
318         }
319         tx_desc->dptr = cpu_to_le32((u32)priv->tx_desc_dma[q]);
320         tx_desc->die_dt = DT_LINKFIX; /* type */
321
322         /* RX descriptor base address for best effort */
323         desc = &priv->desc_bat[RX_QUEUE_OFFSET + q];
324         desc->die_dt = DT_LINKFIX; /* type */
325         desc->dptr = cpu_to_le32((u32)priv->rx_desc_dma[q]);
326
327         /* TX descriptor base address for best effort */
328         desc = &priv->desc_bat[q];
329         desc->die_dt = DT_LINKFIX; /* type */
330         desc->dptr = cpu_to_le32((u32)priv->tx_desc_dma[q]);
331 }
332
333 /* Init skb and descriptor buffer for Ethernet AVB */
334 static int ravb_ring_init(struct net_device *ndev, int q)
335 {
336         struct ravb_private *priv = netdev_priv(ndev);
337         struct sk_buff *skb;
338         int ring_size;
339         int i;
340
341         /* Allocate RX and TX skb rings */
342         priv->rx_skb[q] = kcalloc(priv->num_rx_ring[q],
343                                   sizeof(*priv->rx_skb[q]), GFP_KERNEL);
344         priv->tx_skb[q] = kcalloc(priv->num_tx_ring[q],
345                                   sizeof(*priv->tx_skb[q]), GFP_KERNEL);
346         if (!priv->rx_skb[q] || !priv->tx_skb[q])
347                 goto error;
348
349         for (i = 0; i < priv->num_rx_ring[q]; i++) {
350                 skb = netdev_alloc_skb(ndev, PKT_BUF_SZ + RAVB_ALIGN - 1);
351                 if (!skb)
352                         goto error;
353                 ravb_set_buffer_align(skb);
354                 priv->rx_skb[q][i] = skb;
355         }
356
357         /* Allocate rings for the aligned buffers */
358         priv->tx_align[q] = kmalloc(DPTR_ALIGN * priv->num_tx_ring[q] +
359                                     DPTR_ALIGN - 1, GFP_KERNEL);
360         if (!priv->tx_align[q])
361                 goto error;
362
363         /* Allocate all RX descriptors. */
364         ring_size = sizeof(struct ravb_ex_rx_desc) * (priv->num_rx_ring[q] + 1);
365         priv->rx_ring[q] = dma_alloc_coherent(ndev->dev.parent, ring_size,
366                                               &priv->rx_desc_dma[q],
367                                               GFP_KERNEL);
368         if (!priv->rx_ring[q])
369                 goto error;
370
371         priv->dirty_rx[q] = 0;
372
373         /* Allocate all TX descriptors. */
374         ring_size = sizeof(struct ravb_tx_desc) *
375                     (priv->num_tx_ring[q] * NUM_TX_DESC + 1);
376         priv->tx_ring[q] = dma_alloc_coherent(ndev->dev.parent, ring_size,
377                                               &priv->tx_desc_dma[q],
378                                               GFP_KERNEL);
379         if (!priv->tx_ring[q])
380                 goto error;
381
382         return 0;
383
384 error:
385         ravb_ring_free(ndev, q);
386
387         return -ENOMEM;
388 }
389
390 /* E-MAC init function */
391 static void ravb_emac_init(struct net_device *ndev)
392 {
393         struct ravb_private *priv = netdev_priv(ndev);
394         u32 ecmr;
395
396         /* Receive frame limit set register */
397         ravb_write(ndev, ndev->mtu + ETH_HLEN + VLAN_HLEN + ETH_FCS_LEN, RFLR);
398
399         /* PAUSE prohibition */
400         ecmr =  ravb_read(ndev, ECMR);
401         ecmr &= ECMR_DM;
402         ecmr |= ECMR_ZPF | (priv->duplex ? ECMR_DM : 0) | ECMR_TE | ECMR_RE;
403         ravb_write(ndev, ecmr, ECMR);
404
405         ravb_set_rate(ndev);
406
407         /* Set MAC address */
408         ravb_write(ndev,
409                    (ndev->dev_addr[0] << 24) | (ndev->dev_addr[1] << 16) |
410                    (ndev->dev_addr[2] << 8)  | (ndev->dev_addr[3]), MAHR);
411         ravb_write(ndev,
412                    (ndev->dev_addr[4] << 8)  | (ndev->dev_addr[5]), MALR);
413
414         ravb_write(ndev, 1, MPR);
415
416         /* E-MAC status register clear */
417         ravb_write(ndev, ECSR_ICD | ECSR_MPD, ECSR);
418
419         /* E-MAC interrupt enable register */
420         ravb_write(ndev, ECSIPR_ICDIP | ECSIPR_MPDIP | ECSIPR_LCHNGIP, ECSIPR);
421 }
422
423 /* Device init function for Ethernet AVB */
424 static int ravb_dmac_init(struct net_device *ndev)
425 {
426         int error;
427
428         /* Set CONFIG mode */
429         error = ravb_config(ndev);
430         if (error)
431                 return error;
432
433         error = ravb_ring_init(ndev, RAVB_BE);
434         if (error)
435                 return error;
436         error = ravb_ring_init(ndev, RAVB_NC);
437         if (error) {
438                 ravb_ring_free(ndev, RAVB_BE);
439                 return error;
440         }
441
442         /* Descriptor format */
443         ravb_ring_format(ndev, RAVB_BE);
444         ravb_ring_format(ndev, RAVB_NC);
445
446 #if defined(__LITTLE_ENDIAN)
447         ravb_write(ndev, ravb_read(ndev, CCC) & ~CCC_BOC, CCC);
448 #else
449         ravb_write(ndev, ravb_read(ndev, CCC) | CCC_BOC, CCC);
450 #endif
451
452         /* Set AVB RX */
453         ravb_write(ndev, RCR_EFFS | RCR_ENCF | RCR_ETS0 | 0x18000000, RCR);
454
455         /* Set FIFO size */
456         ravb_write(ndev, TGC_TQP_AVBMODE1 | 0x00112200, TGC);
457
458         /* Timestamp enable */
459         ravb_write(ndev, TCCR_TFEN, TCCR);
460
461         /* Interrupt enable: */
462         /* Frame receive */
463         ravb_write(ndev, RIC0_FRE0 | RIC0_FRE1, RIC0);
464         /* Receive FIFO full error, descriptor empty */
465         ravb_write(ndev, RIC2_QFE0 | RIC2_QFE1 | RIC2_RFFE, RIC2);
466         /* Frame transmitted, timestamp FIFO updated */
467         ravb_write(ndev, TIC_FTE0 | TIC_FTE1 | TIC_TFUE, TIC);
468
469         /* Setting the control will start the AVB-DMAC process. */
470         ravb_write(ndev, (ravb_read(ndev, CCC) & ~CCC_OPC) | CCC_OPC_OPERATION,
471                    CCC);
472
473         return 0;
474 }
475
476 static void ravb_get_tx_tstamp(struct net_device *ndev)
477 {
478         struct ravb_private *priv = netdev_priv(ndev);
479         struct ravb_tstamp_skb *ts_skb, *ts_skb2;
480         struct skb_shared_hwtstamps shhwtstamps;
481         struct sk_buff *skb;
482         struct timespec64 ts;
483         u16 tag, tfa_tag;
484         int count;
485         u32 tfa2;
486
487         count = (ravb_read(ndev, TSR) & TSR_TFFL) >> 8;
488         while (count--) {
489                 tfa2 = ravb_read(ndev, TFA2);
490                 tfa_tag = (tfa2 & TFA2_TST) >> 16;
491                 ts.tv_nsec = (u64)ravb_read(ndev, TFA0);
492                 ts.tv_sec = ((u64)(tfa2 & TFA2_TSV) << 32) |
493                             ravb_read(ndev, TFA1);
494                 memset(&shhwtstamps, 0, sizeof(shhwtstamps));
495                 shhwtstamps.hwtstamp = timespec64_to_ktime(ts);
496                 list_for_each_entry_safe(ts_skb, ts_skb2, &priv->ts_skb_list,
497                                          list) {
498                         skb = ts_skb->skb;
499                         tag = ts_skb->tag;
500                         list_del(&ts_skb->list);
501                         kfree(ts_skb);
502                         if (tag == tfa_tag) {
503                                 skb_tstamp_tx(skb, &shhwtstamps);
504                                 dev_consume_skb_any(skb);
505                                 break;
506                         } else {
507                                 dev_kfree_skb_any(skb);
508                         }
509                 }
510                 ravb_write(ndev, ravb_read(ndev, TCCR) | TCCR_TFR, TCCR);
511         }
512 }
513
514 /* Packet receive function for Ethernet AVB */
515 static bool ravb_rx(struct net_device *ndev, int *quota, int q)
516 {
517         struct ravb_private *priv = netdev_priv(ndev);
518         int entry = priv->cur_rx[q] % priv->num_rx_ring[q];
519         int boguscnt = (priv->dirty_rx[q] + priv->num_rx_ring[q]) -
520                         priv->cur_rx[q];
521         struct net_device_stats *stats = &priv->stats[q];
522         struct ravb_ex_rx_desc *desc;
523         struct sk_buff *skb;
524         dma_addr_t dma_addr;
525         struct timespec64 ts;
526         u8  desc_status;
527         u16 pkt_len;
528         int limit;
529
530         boguscnt = min(boguscnt, *quota);
531         limit = boguscnt;
532         desc = &priv->rx_ring[q][entry];
533         while (desc->die_dt != DT_FEMPTY) {
534                 /* Descriptor type must be checked before all other reads */
535                 dma_rmb();
536                 desc_status = desc->msc;
537                 pkt_len = le16_to_cpu(desc->ds_cc) & RX_DS;
538
539                 if (--boguscnt < 0)
540                         break;
541
542                 /* We use 0-byte descriptors to mark the DMA mapping errors */
543                 if (!pkt_len)
544                         continue;
545
546                 if (desc_status & MSC_MC)
547                         stats->multicast++;
548
549                 if (desc_status & (MSC_CRC | MSC_RFE | MSC_RTSF | MSC_RTLF |
550                                    MSC_CEEF)) {
551                         stats->rx_errors++;
552                         if (desc_status & MSC_CRC)
553                                 stats->rx_crc_errors++;
554                         if (desc_status & MSC_RFE)
555                                 stats->rx_frame_errors++;
556                         if (desc_status & (MSC_RTLF | MSC_RTSF))
557                                 stats->rx_length_errors++;
558                         if (desc_status & MSC_CEEF)
559                                 stats->rx_missed_errors++;
560                 } else {
561                         u32 get_ts = priv->tstamp_rx_ctrl & RAVB_RXTSTAMP_TYPE;
562
563                         skb = priv->rx_skb[q][entry];
564                         priv->rx_skb[q][entry] = NULL;
565                         dma_unmap_single(ndev->dev.parent, le32_to_cpu(desc->dptr),
566                                          ALIGN(PKT_BUF_SZ, 16),
567                                          DMA_FROM_DEVICE);
568                         get_ts &= (q == RAVB_NC) ?
569                                         RAVB_RXTSTAMP_TYPE_V2_L2_EVENT :
570                                         ~RAVB_RXTSTAMP_TYPE_V2_L2_EVENT;
571                         if (get_ts) {
572                                 struct skb_shared_hwtstamps *shhwtstamps;
573
574                                 shhwtstamps = skb_hwtstamps(skb);
575                                 memset(shhwtstamps, 0, sizeof(*shhwtstamps));
576                                 ts.tv_sec = ((u64) le16_to_cpu(desc->ts_sh) <<
577                                              32) | le32_to_cpu(desc->ts_sl);
578                                 ts.tv_nsec = le32_to_cpu(desc->ts_n);
579                                 shhwtstamps->hwtstamp = timespec64_to_ktime(ts);
580                         }
581                         skb_put(skb, pkt_len);
582                         skb->protocol = eth_type_trans(skb, ndev);
583                         napi_gro_receive(&priv->napi[q], skb);
584                         stats->rx_packets++;
585                         stats->rx_bytes += pkt_len;
586                 }
587
588                 entry = (++priv->cur_rx[q]) % priv->num_rx_ring[q];
589                 desc = &priv->rx_ring[q][entry];
590         }
591
592         /* Refill the RX ring buffers. */
593         for (; priv->cur_rx[q] - priv->dirty_rx[q] > 0; priv->dirty_rx[q]++) {
594                 entry = priv->dirty_rx[q] % priv->num_rx_ring[q];
595                 desc = &priv->rx_ring[q][entry];
596                 /* The size of the buffer should be on 16-byte boundary. */
597                 desc->ds_cc = cpu_to_le16(ALIGN(PKT_BUF_SZ, 16));
598
599                 if (!priv->rx_skb[q][entry]) {
600                         skb = netdev_alloc_skb(ndev,
601                                                PKT_BUF_SZ + RAVB_ALIGN - 1);
602                         if (!skb)
603                                 break;  /* Better luck next round. */
604                         ravb_set_buffer_align(skb);
605                         dma_addr = dma_map_single(ndev->dev.parent, skb->data,
606                                                   le16_to_cpu(desc->ds_cc),
607                                                   DMA_FROM_DEVICE);
608                         skb_checksum_none_assert(skb);
609                         /* We just set the data size to 0 for a failed mapping
610                          * which should prevent DMA  from happening...
611                          */
612                         if (dma_mapping_error(ndev->dev.parent, dma_addr))
613                                 desc->ds_cc = cpu_to_le16(0);
614                         desc->dptr = cpu_to_le32(dma_addr);
615                         priv->rx_skb[q][entry] = skb;
616                 }
617                 /* Descriptor type must be set after all the above writes */
618                 dma_wmb();
619                 desc->die_dt = DT_FEMPTY;
620         }
621
622         *quota -= limit - (++boguscnt);
623
624         return boguscnt <= 0;
625 }
626
627 static void ravb_rcv_snd_disable(struct net_device *ndev)
628 {
629         /* Disable TX and RX */
630         ravb_write(ndev, ravb_read(ndev, ECMR) & ~(ECMR_RE | ECMR_TE), ECMR);
631 }
632
633 static void ravb_rcv_snd_enable(struct net_device *ndev)
634 {
635         /* Enable TX and RX */
636         ravb_write(ndev, ravb_read(ndev, ECMR) | ECMR_RE | ECMR_TE, ECMR);
637 }
638
639 /* function for waiting dma process finished */
640 static int ravb_stop_dma(struct net_device *ndev)
641 {
642         int error;
643
644         /* Wait for stopping the hardware TX process */
645         error = ravb_wait(ndev, TCCR,
646                           TCCR_TSRQ0 | TCCR_TSRQ1 | TCCR_TSRQ2 | TCCR_TSRQ3, 0);
647         if (error)
648                 return error;
649
650         error = ravb_wait(ndev, CSR, CSR_TPO0 | CSR_TPO1 | CSR_TPO2 | CSR_TPO3,
651                           0);
652         if (error)
653                 return error;
654
655         /* Stop the E-MAC's RX/TX processes. */
656         ravb_rcv_snd_disable(ndev);
657
658         /* Wait for stopping the RX DMA process */
659         error = ravb_wait(ndev, CSR, CSR_RPO, 0);
660         if (error)
661                 return error;
662
663         /* Stop AVB-DMAC process */
664         return ravb_config(ndev);
665 }
666
667 /* E-MAC interrupt handler */
668 static void ravb_emac_interrupt(struct net_device *ndev)
669 {
670         struct ravb_private *priv = netdev_priv(ndev);
671         u32 ecsr, psr;
672
673         ecsr = ravb_read(ndev, ECSR);
674         ravb_write(ndev, ecsr, ECSR);   /* clear interrupt */
675         if (ecsr & ECSR_ICD)
676                 ndev->stats.tx_carrier_errors++;
677         if (ecsr & ECSR_LCHNG) {
678                 /* Link changed */
679                 if (priv->no_avb_link)
680                         return;
681                 psr = ravb_read(ndev, PSR);
682                 if (priv->avb_link_active_low)
683                         psr ^= PSR_LMON;
684                 if (!(psr & PSR_LMON)) {
685                         /* DIsable RX and TX */
686                         ravb_rcv_snd_disable(ndev);
687                 } else {
688                         /* Enable RX and TX */
689                         ravb_rcv_snd_enable(ndev);
690                 }
691         }
692 }
693
694 /* Error interrupt handler */
695 static void ravb_error_interrupt(struct net_device *ndev)
696 {
697         struct ravb_private *priv = netdev_priv(ndev);
698         u32 eis, ris2;
699
700         eis = ravb_read(ndev, EIS);
701         ravb_write(ndev, ~EIS_QFS, EIS);
702         if (eis & EIS_QFS) {
703                 ris2 = ravb_read(ndev, RIS2);
704                 ravb_write(ndev, ~(RIS2_QFF0 | RIS2_RFFF), RIS2);
705
706                 /* Receive Descriptor Empty int */
707                 if (ris2 & RIS2_QFF0)
708                         priv->stats[RAVB_BE].rx_over_errors++;
709
710                     /* Receive Descriptor Empty int */
711                 if (ris2 & RIS2_QFF1)
712                         priv->stats[RAVB_NC].rx_over_errors++;
713
714                 /* Receive FIFO Overflow int */
715                 if (ris2 & RIS2_RFFF)
716                         priv->rx_fifo_errors++;
717         }
718 }
719
720 static irqreturn_t ravb_interrupt(int irq, void *dev_id)
721 {
722         struct net_device *ndev = dev_id;
723         struct ravb_private *priv = netdev_priv(ndev);
724         irqreturn_t result = IRQ_NONE;
725         u32 iss;
726
727         spin_lock(&priv->lock);
728         /* Get interrupt status */
729         iss = ravb_read(ndev, ISS);
730
731         /* Received and transmitted interrupts */
732         if (iss & (ISS_FRS | ISS_FTS | ISS_TFUS)) {
733                 u32 ris0 = ravb_read(ndev, RIS0);
734                 u32 ric0 = ravb_read(ndev, RIC0);
735                 u32 tis  = ravb_read(ndev, TIS);
736                 u32 tic  = ravb_read(ndev, TIC);
737                 int q;
738
739                 /* Timestamp updated */
740                 if (tis & TIS_TFUF) {
741                         ravb_write(ndev, ~TIS_TFUF, TIS);
742                         ravb_get_tx_tstamp(ndev);
743                         result = IRQ_HANDLED;
744                 }
745
746                 /* Network control and best effort queue RX/TX */
747                 for (q = RAVB_NC; q >= RAVB_BE; q--) {
748                         if (((ris0 & ric0) & BIT(q)) ||
749                             ((tis  & tic)  & BIT(q))) {
750                                 if (napi_schedule_prep(&priv->napi[q])) {
751                                         /* Mask RX and TX interrupts */
752                                         ric0 &= ~BIT(q);
753                                         tic &= ~BIT(q);
754                                         ravb_write(ndev, ric0, RIC0);
755                                         ravb_write(ndev, tic, TIC);
756                                         __napi_schedule(&priv->napi[q]);
757                                 } else {
758                                         netdev_warn(ndev,
759                                                     "ignoring interrupt, rx status 0x%08x, rx mask 0x%08x,\n",
760                                                     ris0, ric0);
761                                         netdev_warn(ndev,
762                                                     "                    tx status 0x%08x, tx mask 0x%08x.\n",
763                                                     tis, tic);
764                                 }
765                                 result = IRQ_HANDLED;
766                         }
767                 }
768         }
769
770         /* E-MAC status summary */
771         if (iss & ISS_MS) {
772                 ravb_emac_interrupt(ndev);
773                 result = IRQ_HANDLED;
774         }
775
776         /* Error status summary */
777         if (iss & ISS_ES) {
778                 ravb_error_interrupt(ndev);
779                 result = IRQ_HANDLED;
780         }
781
782         if (iss & ISS_CGIS)
783                 result = ravb_ptp_interrupt(ndev);
784
785         mmiowb();
786         spin_unlock(&priv->lock);
787         return result;
788 }
789
790 static int ravb_poll(struct napi_struct *napi, int budget)
791 {
792         struct net_device *ndev = napi->dev;
793         struct ravb_private *priv = netdev_priv(ndev);
794         unsigned long flags;
795         int q = napi - priv->napi;
796         int mask = BIT(q);
797         int quota = budget;
798         u32 ris0, tis;
799
800         for (;;) {
801                 tis = ravb_read(ndev, TIS);
802                 ris0 = ravb_read(ndev, RIS0);
803                 if (!((ris0 & mask) || (tis & mask)))
804                         break;
805
806                 /* Processing RX Descriptor Ring */
807                 if (ris0 & mask) {
808                         /* Clear RX interrupt */
809                         ravb_write(ndev, ~mask, RIS0);
810                         if (ravb_rx(ndev, &quota, q))
811                                 goto out;
812                 }
813                 /* Processing TX Descriptor Ring */
814                 if (tis & mask) {
815                         spin_lock_irqsave(&priv->lock, flags);
816                         /* Clear TX interrupt */
817                         ravb_write(ndev, ~mask, TIS);
818                         ravb_tx_free(ndev, q, true);
819                         netif_wake_subqueue(ndev, q);
820                         mmiowb();
821                         spin_unlock_irqrestore(&priv->lock, flags);
822                 }
823         }
824
825         napi_complete(napi);
826
827         /* Re-enable RX/TX interrupts */
828         spin_lock_irqsave(&priv->lock, flags);
829         ravb_write(ndev, ravb_read(ndev, RIC0) | mask, RIC0);
830         ravb_write(ndev, ravb_read(ndev, TIC)  | mask,  TIC);
831         mmiowb();
832         spin_unlock_irqrestore(&priv->lock, flags);
833
834         /* Receive error message handling */
835         priv->rx_over_errors =  priv->stats[RAVB_BE].rx_over_errors;
836         priv->rx_over_errors += priv->stats[RAVB_NC].rx_over_errors;
837         if (priv->rx_over_errors != ndev->stats.rx_over_errors)
838                 ndev->stats.rx_over_errors = priv->rx_over_errors;
839         if (priv->rx_fifo_errors != ndev->stats.rx_fifo_errors)
840                 ndev->stats.rx_fifo_errors = priv->rx_fifo_errors;
841 out:
842         return budget - quota;
843 }
844
845 /* PHY state control function */
846 static void ravb_adjust_link(struct net_device *ndev)
847 {
848         struct ravb_private *priv = netdev_priv(ndev);
849         struct phy_device *phydev = priv->phydev;
850         bool new_state = false;
851
852         if (phydev->link) {
853                 if (phydev->duplex != priv->duplex) {
854                         new_state = true;
855                         priv->duplex = phydev->duplex;
856                         ravb_set_duplex(ndev);
857                 }
858
859                 if (phydev->speed != priv->speed) {
860                         new_state = true;
861                         priv->speed = phydev->speed;
862                         ravb_set_rate(ndev);
863                 }
864                 if (!priv->link) {
865                         ravb_write(ndev, ravb_read(ndev, ECMR) & ~ECMR_TXF,
866                                    ECMR);
867                         new_state = true;
868                         priv->link = phydev->link;
869                         if (priv->no_avb_link)
870                                 ravb_rcv_snd_enable(ndev);
871                 }
872         } else if (priv->link) {
873                 new_state = true;
874                 priv->link = 0;
875                 priv->speed = 0;
876                 priv->duplex = -1;
877                 if (priv->no_avb_link)
878                         ravb_rcv_snd_disable(ndev);
879         }
880
881         if (new_state && netif_msg_link(priv))
882                 phy_print_status(phydev);
883 }
884
885 /* PHY init function */
886 static int ravb_phy_init(struct net_device *ndev)
887 {
888         struct device_node *np = ndev->dev.parent->of_node;
889         struct ravb_private *priv = netdev_priv(ndev);
890         struct phy_device *phydev;
891         struct device_node *pn;
892
893         priv->link = 0;
894         priv->speed = 0;
895         priv->duplex = -1;
896
897         /* Try connecting to PHY */
898         pn = of_parse_phandle(np, "phy-handle", 0);
899         phydev = of_phy_connect(ndev, pn, ravb_adjust_link, 0,
900                                 priv->phy_interface);
901         if (!phydev) {
902                 netdev_err(ndev, "failed to connect PHY\n");
903                 return -ENOENT;
904         }
905
906         /* This driver only support 10/100Mbit speeds on Gen3
907          * at this time.
908          */
909         if (priv->chip_id == RCAR_GEN3) {
910                 int err;
911
912                 err = phy_set_max_speed(phydev, SPEED_100);
913                 if (err) {
914                         netdev_err(ndev, "failed to limit PHY to 100Mbit/s\n");
915                         phy_disconnect(phydev);
916                         return err;
917                 }
918
919                 netdev_info(ndev, "limited PHY to 100Mbit/s\n");
920         }
921
922         /* 10BASE is not supported */
923         phydev->supported &= ~PHY_10BT_FEATURES;
924
925         netdev_info(ndev, "attached PHY %d (IRQ %d) to driver %s\n",
926                     phydev->addr, phydev->irq, phydev->drv->name);
927
928         priv->phydev = phydev;
929
930         return 0;
931 }
932
933 /* PHY control start function */
934 static int ravb_phy_start(struct net_device *ndev)
935 {
936         struct ravb_private *priv = netdev_priv(ndev);
937         int error;
938
939         error = ravb_phy_init(ndev);
940         if (error)
941                 return error;
942
943         phy_start(priv->phydev);
944
945         return 0;
946 }
947
948 static int ravb_get_settings(struct net_device *ndev, struct ethtool_cmd *ecmd)
949 {
950         struct ravb_private *priv = netdev_priv(ndev);
951         int error = -ENODEV;
952         unsigned long flags;
953
954         if (priv->phydev) {
955                 spin_lock_irqsave(&priv->lock, flags);
956                 error = phy_ethtool_gset(priv->phydev, ecmd);
957                 spin_unlock_irqrestore(&priv->lock, flags);
958         }
959
960         return error;
961 }
962
963 static int ravb_set_settings(struct net_device *ndev, struct ethtool_cmd *ecmd)
964 {
965         struct ravb_private *priv = netdev_priv(ndev);
966         unsigned long flags;
967         int error;
968
969         if (!priv->phydev)
970                 return -ENODEV;
971
972         spin_lock_irqsave(&priv->lock, flags);
973
974         /* Disable TX and RX */
975         ravb_rcv_snd_disable(ndev);
976
977         error = phy_ethtool_sset(priv->phydev, ecmd);
978         if (error)
979                 goto error_exit;
980
981         if (ecmd->duplex == DUPLEX_FULL)
982                 priv->duplex = 1;
983         else
984                 priv->duplex = 0;
985
986         ravb_set_duplex(ndev);
987
988 error_exit:
989         mdelay(1);
990
991         /* Enable TX and RX */
992         ravb_rcv_snd_enable(ndev);
993
994         mmiowb();
995         spin_unlock_irqrestore(&priv->lock, flags);
996
997         return error;
998 }
999
1000 static int ravb_nway_reset(struct net_device *ndev)
1001 {
1002         struct ravb_private *priv = netdev_priv(ndev);
1003         int error = -ENODEV;
1004         unsigned long flags;
1005
1006         if (priv->phydev) {
1007                 spin_lock_irqsave(&priv->lock, flags);
1008                 error = phy_start_aneg(priv->phydev);
1009                 spin_unlock_irqrestore(&priv->lock, flags);
1010         }
1011
1012         return error;
1013 }
1014
1015 static u32 ravb_get_msglevel(struct net_device *ndev)
1016 {
1017         struct ravb_private *priv = netdev_priv(ndev);
1018
1019         return priv->msg_enable;
1020 }
1021
1022 static void ravb_set_msglevel(struct net_device *ndev, u32 value)
1023 {
1024         struct ravb_private *priv = netdev_priv(ndev);
1025
1026         priv->msg_enable = value;
1027 }
1028
1029 static const char ravb_gstrings_stats[][ETH_GSTRING_LEN] = {
1030         "rx_queue_0_current",
1031         "tx_queue_0_current",
1032         "rx_queue_0_dirty",
1033         "tx_queue_0_dirty",
1034         "rx_queue_0_packets",
1035         "tx_queue_0_packets",
1036         "rx_queue_0_bytes",
1037         "tx_queue_0_bytes",
1038         "rx_queue_0_mcast_packets",
1039         "rx_queue_0_errors",
1040         "rx_queue_0_crc_errors",
1041         "rx_queue_0_frame_errors",
1042         "rx_queue_0_length_errors",
1043         "rx_queue_0_missed_errors",
1044         "rx_queue_0_over_errors",
1045
1046         "rx_queue_1_current",
1047         "tx_queue_1_current",
1048         "rx_queue_1_dirty",
1049         "tx_queue_1_dirty",
1050         "rx_queue_1_packets",
1051         "tx_queue_1_packets",
1052         "rx_queue_1_bytes",
1053         "tx_queue_1_bytes",
1054         "rx_queue_1_mcast_packets",
1055         "rx_queue_1_errors",
1056         "rx_queue_1_crc_errors",
1057         "rx_queue_1_frame_errors",
1058         "rx_queue_1_length_errors",
1059         "rx_queue_1_missed_errors",
1060         "rx_queue_1_over_errors",
1061 };
1062
1063 #define RAVB_STATS_LEN  ARRAY_SIZE(ravb_gstrings_stats)
1064
1065 static int ravb_get_sset_count(struct net_device *netdev, int sset)
1066 {
1067         switch (sset) {
1068         case ETH_SS_STATS:
1069                 return RAVB_STATS_LEN;
1070         default:
1071                 return -EOPNOTSUPP;
1072         }
1073 }
1074
1075 static void ravb_get_ethtool_stats(struct net_device *ndev,
1076                                    struct ethtool_stats *stats, u64 *data)
1077 {
1078         struct ravb_private *priv = netdev_priv(ndev);
1079         int i = 0;
1080         int q;
1081
1082         /* Device-specific stats */
1083         for (q = RAVB_BE; q < NUM_RX_QUEUE; q++) {
1084                 struct net_device_stats *stats = &priv->stats[q];
1085
1086                 data[i++] = priv->cur_rx[q];
1087                 data[i++] = priv->cur_tx[q];
1088                 data[i++] = priv->dirty_rx[q];
1089                 data[i++] = priv->dirty_tx[q];
1090                 data[i++] = stats->rx_packets;
1091                 data[i++] = stats->tx_packets;
1092                 data[i++] = stats->rx_bytes;
1093                 data[i++] = stats->tx_bytes;
1094                 data[i++] = stats->multicast;
1095                 data[i++] = stats->rx_errors;
1096                 data[i++] = stats->rx_crc_errors;
1097                 data[i++] = stats->rx_frame_errors;
1098                 data[i++] = stats->rx_length_errors;
1099                 data[i++] = stats->rx_missed_errors;
1100                 data[i++] = stats->rx_over_errors;
1101         }
1102 }
1103
1104 static void ravb_get_strings(struct net_device *ndev, u32 stringset, u8 *data)
1105 {
1106         switch (stringset) {
1107         case ETH_SS_STATS:
1108                 memcpy(data, *ravb_gstrings_stats, sizeof(ravb_gstrings_stats));
1109                 break;
1110         }
1111 }
1112
1113 static void ravb_get_ringparam(struct net_device *ndev,
1114                                struct ethtool_ringparam *ring)
1115 {
1116         struct ravb_private *priv = netdev_priv(ndev);
1117
1118         ring->rx_max_pending = BE_RX_RING_MAX;
1119         ring->tx_max_pending = BE_TX_RING_MAX;
1120         ring->rx_pending = priv->num_rx_ring[RAVB_BE];
1121         ring->tx_pending = priv->num_tx_ring[RAVB_BE];
1122 }
1123
1124 static int ravb_set_ringparam(struct net_device *ndev,
1125                               struct ethtool_ringparam *ring)
1126 {
1127         struct ravb_private *priv = netdev_priv(ndev);
1128         int error;
1129
1130         if (ring->tx_pending > BE_TX_RING_MAX ||
1131             ring->rx_pending > BE_RX_RING_MAX ||
1132             ring->tx_pending < BE_TX_RING_MIN ||
1133             ring->rx_pending < BE_RX_RING_MIN)
1134                 return -EINVAL;
1135         if (ring->rx_mini_pending || ring->rx_jumbo_pending)
1136                 return -EINVAL;
1137
1138         if (netif_running(ndev)) {
1139                 netif_device_detach(ndev);
1140                 /* Stop PTP Clock driver */
1141                 ravb_ptp_stop(ndev);
1142                 /* Wait for DMA stopping */
1143                 error = ravb_stop_dma(ndev);
1144                 if (error) {
1145                         netdev_err(ndev,
1146                                    "cannot set ringparam! Any AVB processes are still running?\n");
1147                         return error;
1148                 }
1149                 synchronize_irq(ndev->irq);
1150
1151                 /* Free all the skb's in the RX queue and the DMA buffers. */
1152                 ravb_ring_free(ndev, RAVB_BE);
1153                 ravb_ring_free(ndev, RAVB_NC);
1154         }
1155
1156         /* Set new parameters */
1157         priv->num_rx_ring[RAVB_BE] = ring->rx_pending;
1158         priv->num_tx_ring[RAVB_BE] = ring->tx_pending;
1159
1160         if (netif_running(ndev)) {
1161                 error = ravb_dmac_init(ndev);
1162                 if (error) {
1163                         netdev_err(ndev,
1164                                    "%s: ravb_dmac_init() failed, error %d\n",
1165                                    __func__, error);
1166                         return error;
1167                 }
1168
1169                 ravb_emac_init(ndev);
1170
1171                 /* Initialise PTP Clock driver */
1172                 ravb_ptp_init(ndev, priv->pdev);
1173
1174                 netif_device_attach(ndev);
1175         }
1176
1177         return 0;
1178 }
1179
1180 static int ravb_get_ts_info(struct net_device *ndev,
1181                             struct ethtool_ts_info *info)
1182 {
1183         struct ravb_private *priv = netdev_priv(ndev);
1184
1185         info->so_timestamping =
1186                 SOF_TIMESTAMPING_TX_SOFTWARE |
1187                 SOF_TIMESTAMPING_RX_SOFTWARE |
1188                 SOF_TIMESTAMPING_SOFTWARE |
1189                 SOF_TIMESTAMPING_TX_HARDWARE |
1190                 SOF_TIMESTAMPING_RX_HARDWARE |
1191                 SOF_TIMESTAMPING_RAW_HARDWARE;
1192         info->tx_types = (1 << HWTSTAMP_TX_OFF) | (1 << HWTSTAMP_TX_ON);
1193         info->rx_filters =
1194                 (1 << HWTSTAMP_FILTER_NONE) |
1195                 (1 << HWTSTAMP_FILTER_PTP_V2_L2_EVENT) |
1196                 (1 << HWTSTAMP_FILTER_ALL);
1197         info->phc_index = ptp_clock_index(priv->ptp.clock);
1198
1199         return 0;
1200 }
1201
1202 static const struct ethtool_ops ravb_ethtool_ops = {
1203         .get_settings           = ravb_get_settings,
1204         .set_settings           = ravb_set_settings,
1205         .nway_reset             = ravb_nway_reset,
1206         .get_msglevel           = ravb_get_msglevel,
1207         .set_msglevel           = ravb_set_msglevel,
1208         .get_link               = ethtool_op_get_link,
1209         .get_strings            = ravb_get_strings,
1210         .get_ethtool_stats      = ravb_get_ethtool_stats,
1211         .get_sset_count         = ravb_get_sset_count,
1212         .get_ringparam          = ravb_get_ringparam,
1213         .set_ringparam          = ravb_set_ringparam,
1214         .get_ts_info            = ravb_get_ts_info,
1215 };
1216
1217 /* Network device open function for Ethernet AVB */
1218 static int ravb_open(struct net_device *ndev)
1219 {
1220         struct ravb_private *priv = netdev_priv(ndev);
1221         int error;
1222
1223         napi_enable(&priv->napi[RAVB_BE]);
1224         napi_enable(&priv->napi[RAVB_NC]);
1225
1226         error = request_irq(ndev->irq, ravb_interrupt, IRQF_SHARED, ndev->name,
1227                             ndev);
1228         if (error) {
1229                 netdev_err(ndev, "cannot request IRQ\n");
1230                 goto out_napi_off;
1231         }
1232
1233         if (priv->chip_id == RCAR_GEN3) {
1234                 error = request_irq(priv->emac_irq, ravb_interrupt,
1235                                     IRQF_SHARED, ndev->name, ndev);
1236                 if (error) {
1237                         netdev_err(ndev, "cannot request IRQ\n");
1238                         goto out_free_irq;
1239                 }
1240         }
1241
1242         /* Device init */
1243         error = ravb_dmac_init(ndev);
1244         if (error)
1245                 goto out_free_irq2;
1246         ravb_emac_init(ndev);
1247
1248         /* Initialise PTP Clock driver */
1249         ravb_ptp_init(ndev, priv->pdev);
1250
1251         netif_tx_start_all_queues(ndev);
1252
1253         /* PHY control start */
1254         error = ravb_phy_start(ndev);
1255         if (error)
1256                 goto out_ptp_stop;
1257
1258         return 0;
1259
1260 out_ptp_stop:
1261         /* Stop PTP Clock driver */
1262         ravb_ptp_stop(ndev);
1263 out_free_irq2:
1264         if (priv->chip_id == RCAR_GEN3)
1265                 free_irq(priv->emac_irq, ndev);
1266 out_free_irq:
1267         free_irq(ndev->irq, ndev);
1268 out_napi_off:
1269         napi_disable(&priv->napi[RAVB_NC]);
1270         napi_disable(&priv->napi[RAVB_BE]);
1271         return error;
1272 }
1273
1274 /* Timeout function for Ethernet AVB */
1275 static void ravb_tx_timeout(struct net_device *ndev)
1276 {
1277         struct ravb_private *priv = netdev_priv(ndev);
1278
1279         netif_err(priv, tx_err, ndev,
1280                   "transmit timed out, status %08x, resetting...\n",
1281                   ravb_read(ndev, ISS));
1282
1283         /* tx_errors count up */
1284         ndev->stats.tx_errors++;
1285
1286         schedule_work(&priv->work);
1287 }
1288
1289 static void ravb_tx_timeout_work(struct work_struct *work)
1290 {
1291         struct ravb_private *priv = container_of(work, struct ravb_private,
1292                                                  work);
1293         struct net_device *ndev = priv->ndev;
1294         int error;
1295
1296         netif_tx_stop_all_queues(ndev);
1297
1298         /* Stop PTP Clock driver */
1299         ravb_ptp_stop(ndev);
1300
1301         /* Wait for DMA stopping */
1302         if (ravb_stop_dma(ndev)) {
1303                 /* If ravb_stop_dma() fails, the hardware is still operating
1304                  * for TX and/or RX. So, this should not call the following
1305                  * functions because ravb_dmac_init() is possible to fail too.
1306                  * Also, this should not retry ravb_stop_dma() again and again
1307                  * here because it's possible to wait forever. So, this just
1308                  * re-enables the TX and RX and skip the following
1309                  * re-initialization procedure.
1310                  */
1311                 ravb_rcv_snd_enable(ndev);
1312                 goto out;
1313         }
1314
1315         ravb_ring_free(ndev, RAVB_BE);
1316         ravb_ring_free(ndev, RAVB_NC);
1317
1318         /* Device init */
1319         error = ravb_dmac_init(ndev);
1320         if (error) {
1321                 /* If ravb_dmac_init() fails, descriptors are freed. So, this
1322                  * should return here to avoid re-enabling the TX and RX in
1323                  * ravb_emac_init().
1324                  */
1325                 netdev_err(ndev, "%s: ravb_dmac_init() failed, error %d\n",
1326                            __func__, error);
1327                 return;
1328         }
1329         ravb_emac_init(ndev);
1330
1331 out:
1332         /* Initialise PTP Clock driver */
1333         ravb_ptp_init(ndev, priv->pdev);
1334
1335         netif_tx_start_all_queues(ndev);
1336 }
1337
1338 /* Packet transmit function for Ethernet AVB */
1339 static netdev_tx_t ravb_start_xmit(struct sk_buff *skb, struct net_device *ndev)
1340 {
1341         struct ravb_private *priv = netdev_priv(ndev);
1342         u16 q = skb_get_queue_mapping(skb);
1343         struct ravb_tstamp_skb *ts_skb;
1344         struct ravb_tx_desc *desc;
1345         unsigned long flags;
1346         u32 dma_addr;
1347         void *buffer;
1348         u32 entry;
1349         u32 len;
1350
1351         spin_lock_irqsave(&priv->lock, flags);
1352         if (priv->cur_tx[q] - priv->dirty_tx[q] > (priv->num_tx_ring[q] - 1) *
1353             NUM_TX_DESC) {
1354                 netif_err(priv, tx_queued, ndev,
1355                           "still transmitting with the full ring!\n");
1356                 netif_stop_subqueue(ndev, q);
1357                 spin_unlock_irqrestore(&priv->lock, flags);
1358                 return NETDEV_TX_BUSY;
1359         }
1360         entry = priv->cur_tx[q] % (priv->num_tx_ring[q] * NUM_TX_DESC);
1361         priv->tx_skb[q][entry / NUM_TX_DESC] = skb;
1362
1363         if (skb_put_padto(skb, ETH_ZLEN))
1364                 goto drop;
1365
1366         buffer = PTR_ALIGN(priv->tx_align[q], DPTR_ALIGN) +
1367                  entry / NUM_TX_DESC * DPTR_ALIGN;
1368         len = PTR_ALIGN(skb->data, DPTR_ALIGN) - skb->data;
1369         /* Zero length DMA descriptors are problematic as they seem to
1370          * terminate DMA transfers. Avoid them by simply using a length of
1371          * DPTR_ALIGN (4) when skb data is aligned to DPTR_ALIGN.
1372          *
1373          * As skb is guaranteed to have at least ETH_ZLEN (60) bytes of
1374          * data by the call to skb_put_padto() above this is safe with
1375          * respect to both the length of the first DMA descriptor (len)
1376          * overflowing the available data and the length of the second DMA
1377          * descriptor (skb->len - len) being negative.
1378          */
1379         if (len == 0)
1380                 len = DPTR_ALIGN;
1381
1382         memcpy(buffer, skb->data, len);
1383         dma_addr = dma_map_single(ndev->dev.parent, buffer, len, DMA_TO_DEVICE);
1384         if (dma_mapping_error(ndev->dev.parent, dma_addr))
1385                 goto drop;
1386
1387         desc = &priv->tx_ring[q][entry];
1388         desc->ds_tagl = cpu_to_le16(len);
1389         desc->dptr = cpu_to_le32(dma_addr);
1390
1391         buffer = skb->data + len;
1392         len = skb->len - len;
1393         dma_addr = dma_map_single(ndev->dev.parent, buffer, len, DMA_TO_DEVICE);
1394         if (dma_mapping_error(ndev->dev.parent, dma_addr))
1395                 goto unmap;
1396
1397         desc++;
1398         desc->ds_tagl = cpu_to_le16(len);
1399         desc->dptr = cpu_to_le32(dma_addr);
1400
1401         /* TX timestamp required */
1402         if (q == RAVB_NC) {
1403                 ts_skb = kmalloc(sizeof(*ts_skb), GFP_ATOMIC);
1404                 if (!ts_skb) {
1405                         desc--;
1406                         dma_unmap_single(ndev->dev.parent, dma_addr, len,
1407                                          DMA_TO_DEVICE);
1408                         goto unmap;
1409                 }
1410                 ts_skb->skb = skb_get(skb);
1411                 ts_skb->tag = priv->ts_skb_tag++;
1412                 priv->ts_skb_tag &= 0x3ff;
1413                 list_add_tail(&ts_skb->list, &priv->ts_skb_list);
1414
1415                 /* TAG and timestamp required flag */
1416                 skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
1417                 skb_tx_timestamp(skb);
1418                 desc->tagh_tsr = (ts_skb->tag >> 4) | TX_TSR;
1419                 desc->ds_tagl |= le16_to_cpu(ts_skb->tag << 12);
1420         }
1421
1422         /* Descriptor type must be set after all the above writes */
1423         dma_wmb();
1424         desc->die_dt = DT_FEND;
1425         desc--;
1426         desc->die_dt = DT_FSTART;
1427
1428         ravb_write(ndev, ravb_read(ndev, TCCR) | (TCCR_TSRQ0 << q), TCCR);
1429
1430         priv->cur_tx[q] += NUM_TX_DESC;
1431         if (priv->cur_tx[q] - priv->dirty_tx[q] >
1432             (priv->num_tx_ring[q] - 1) * NUM_TX_DESC &&
1433             !ravb_tx_free(ndev, q, true))
1434                 netif_stop_subqueue(ndev, q);
1435
1436 exit:
1437         mmiowb();
1438         spin_unlock_irqrestore(&priv->lock, flags);
1439         return NETDEV_TX_OK;
1440
1441 unmap:
1442         dma_unmap_single(ndev->dev.parent, le32_to_cpu(desc->dptr),
1443                          le16_to_cpu(desc->ds_tagl), DMA_TO_DEVICE);
1444 drop:
1445         dev_kfree_skb_any(skb);
1446         priv->tx_skb[q][entry / NUM_TX_DESC] = NULL;
1447         goto exit;
1448 }
1449
1450 static u16 ravb_select_queue(struct net_device *ndev, struct sk_buff *skb,
1451                              void *accel_priv, select_queue_fallback_t fallback)
1452 {
1453         /* If skb needs TX timestamp, it is handled in network control queue */
1454         return (skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) ? RAVB_NC :
1455                                                                RAVB_BE;
1456
1457 }
1458
1459 static struct net_device_stats *ravb_get_stats(struct net_device *ndev)
1460 {
1461         struct ravb_private *priv = netdev_priv(ndev);
1462         struct net_device_stats *nstats, *stats0, *stats1;
1463
1464         nstats = &ndev->stats;
1465         stats0 = &priv->stats[RAVB_BE];
1466         stats1 = &priv->stats[RAVB_NC];
1467
1468         nstats->tx_dropped += ravb_read(ndev, TROCR);
1469         ravb_write(ndev, 0, TROCR);     /* (write clear) */
1470         nstats->collisions += ravb_read(ndev, CDCR);
1471         ravb_write(ndev, 0, CDCR);      /* (write clear) */
1472         nstats->tx_carrier_errors += ravb_read(ndev, LCCR);
1473         ravb_write(ndev, 0, LCCR);      /* (write clear) */
1474
1475         nstats->tx_carrier_errors += ravb_read(ndev, CERCR);
1476         ravb_write(ndev, 0, CERCR);     /* (write clear) */
1477         nstats->tx_carrier_errors += ravb_read(ndev, CEECR);
1478         ravb_write(ndev, 0, CEECR);     /* (write clear) */
1479
1480         nstats->rx_packets = stats0->rx_packets + stats1->rx_packets;
1481         nstats->tx_packets = stats0->tx_packets + stats1->tx_packets;
1482         nstats->rx_bytes = stats0->rx_bytes + stats1->rx_bytes;
1483         nstats->tx_bytes = stats0->tx_bytes + stats1->tx_bytes;
1484         nstats->multicast = stats0->multicast + stats1->multicast;
1485         nstats->rx_errors = stats0->rx_errors + stats1->rx_errors;
1486         nstats->rx_crc_errors = stats0->rx_crc_errors + stats1->rx_crc_errors;
1487         nstats->rx_frame_errors =
1488                 stats0->rx_frame_errors + stats1->rx_frame_errors;
1489         nstats->rx_length_errors =
1490                 stats0->rx_length_errors + stats1->rx_length_errors;
1491         nstats->rx_missed_errors =
1492                 stats0->rx_missed_errors + stats1->rx_missed_errors;
1493         nstats->rx_over_errors =
1494                 stats0->rx_over_errors + stats1->rx_over_errors;
1495
1496         return nstats;
1497 }
1498
1499 /* Update promiscuous bit */
1500 static void ravb_set_rx_mode(struct net_device *ndev)
1501 {
1502         struct ravb_private *priv = netdev_priv(ndev);
1503         unsigned long flags;
1504         u32 ecmr;
1505
1506         spin_lock_irqsave(&priv->lock, flags);
1507         ecmr = ravb_read(ndev, ECMR);
1508         if (ndev->flags & IFF_PROMISC)
1509                 ecmr |=  ECMR_PRM;
1510         else
1511                 ecmr &= ~ECMR_PRM;
1512         ravb_write(ndev, ecmr, ECMR);
1513         mmiowb();
1514         spin_unlock_irqrestore(&priv->lock, flags);
1515 }
1516
1517 /* Device close function for Ethernet AVB */
1518 static int ravb_close(struct net_device *ndev)
1519 {
1520         struct ravb_private *priv = netdev_priv(ndev);
1521         struct ravb_tstamp_skb *ts_skb, *ts_skb2;
1522
1523         netif_tx_stop_all_queues(ndev);
1524
1525         /* Disable interrupts by clearing the interrupt masks. */
1526         ravb_write(ndev, 0, RIC0);
1527         ravb_write(ndev, 0, RIC1);
1528         ravb_write(ndev, 0, RIC2);
1529         ravb_write(ndev, 0, TIC);
1530
1531         /* Stop PTP Clock driver */
1532         ravb_ptp_stop(ndev);
1533
1534         /* Set the config mode to stop the AVB-DMAC's processes */
1535         if (ravb_stop_dma(ndev) < 0)
1536                 netdev_err(ndev,
1537                            "device will be stopped after h/w processes are done.\n");
1538
1539         /* Clear the timestamp list */
1540         list_for_each_entry_safe(ts_skb, ts_skb2, &priv->ts_skb_list, list) {
1541                 list_del(&ts_skb->list);
1542                 kfree_skb(ts_skb->skb);
1543                 kfree(ts_skb);
1544         }
1545
1546         /* PHY disconnect */
1547         if (priv->phydev) {
1548                 phy_stop(priv->phydev);
1549                 phy_disconnect(priv->phydev);
1550                 priv->phydev = NULL;
1551         }
1552
1553         if (priv->chip_id == RCAR_GEN3)
1554                 free_irq(priv->emac_irq, ndev);
1555         free_irq(ndev->irq, ndev);
1556
1557         napi_disable(&priv->napi[RAVB_NC]);
1558         napi_disable(&priv->napi[RAVB_BE]);
1559
1560         /* Free all the skb's in the RX queue and the DMA buffers. */
1561         ravb_ring_free(ndev, RAVB_BE);
1562         ravb_ring_free(ndev, RAVB_NC);
1563
1564         return 0;
1565 }
1566
1567 static int ravb_hwtstamp_get(struct net_device *ndev, struct ifreq *req)
1568 {
1569         struct ravb_private *priv = netdev_priv(ndev);
1570         struct hwtstamp_config config;
1571
1572         config.flags = 0;
1573         config.tx_type = priv->tstamp_tx_ctrl ? HWTSTAMP_TX_ON :
1574                                                 HWTSTAMP_TX_OFF;
1575         switch (priv->tstamp_rx_ctrl & RAVB_RXTSTAMP_TYPE) {
1576         case RAVB_RXTSTAMP_TYPE_V2_L2_EVENT:
1577                 config.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_EVENT;
1578                 break;
1579         case RAVB_RXTSTAMP_TYPE_ALL:
1580                 config.rx_filter = HWTSTAMP_FILTER_ALL;
1581                 break;
1582         default:
1583                 config.rx_filter = HWTSTAMP_FILTER_NONE;
1584         }
1585
1586         return copy_to_user(req->ifr_data, &config, sizeof(config)) ?
1587                 -EFAULT : 0;
1588 }
1589
1590 /* Control hardware time stamping */
1591 static int ravb_hwtstamp_set(struct net_device *ndev, struct ifreq *req)
1592 {
1593         struct ravb_private *priv = netdev_priv(ndev);
1594         struct hwtstamp_config config;
1595         u32 tstamp_rx_ctrl = RAVB_RXTSTAMP_ENABLED;
1596         u32 tstamp_tx_ctrl;
1597
1598         if (copy_from_user(&config, req->ifr_data, sizeof(config)))
1599                 return -EFAULT;
1600
1601         /* Reserved for future extensions */
1602         if (config.flags)
1603                 return -EINVAL;
1604
1605         switch (config.tx_type) {
1606         case HWTSTAMP_TX_OFF:
1607                 tstamp_tx_ctrl = 0;
1608                 break;
1609         case HWTSTAMP_TX_ON:
1610                 tstamp_tx_ctrl = RAVB_TXTSTAMP_ENABLED;
1611                 break;
1612         default:
1613                 return -ERANGE;
1614         }
1615
1616         switch (config.rx_filter) {
1617         case HWTSTAMP_FILTER_NONE:
1618                 tstamp_rx_ctrl = 0;
1619                 break;
1620         case HWTSTAMP_FILTER_PTP_V2_L2_EVENT:
1621                 tstamp_rx_ctrl |= RAVB_RXTSTAMP_TYPE_V2_L2_EVENT;
1622                 break;
1623         default:
1624                 config.rx_filter = HWTSTAMP_FILTER_ALL;
1625                 tstamp_rx_ctrl |= RAVB_RXTSTAMP_TYPE_ALL;
1626         }
1627
1628         priv->tstamp_tx_ctrl = tstamp_tx_ctrl;
1629         priv->tstamp_rx_ctrl = tstamp_rx_ctrl;
1630
1631         return copy_to_user(req->ifr_data, &config, sizeof(config)) ?
1632                 -EFAULT : 0;
1633 }
1634
1635 /* ioctl to device function */
1636 static int ravb_do_ioctl(struct net_device *ndev, struct ifreq *req, int cmd)
1637 {
1638         struct ravb_private *priv = netdev_priv(ndev);
1639         struct phy_device *phydev = priv->phydev;
1640
1641         if (!netif_running(ndev))
1642                 return -EINVAL;
1643
1644         if (!phydev)
1645                 return -ENODEV;
1646
1647         switch (cmd) {
1648         case SIOCGHWTSTAMP:
1649                 return ravb_hwtstamp_get(ndev, req);
1650         case SIOCSHWTSTAMP:
1651                 return ravb_hwtstamp_set(ndev, req);
1652         }
1653
1654         return phy_mii_ioctl(phydev, req, cmd);
1655 }
1656
1657 static const struct net_device_ops ravb_netdev_ops = {
1658         .ndo_open               = ravb_open,
1659         .ndo_stop               = ravb_close,
1660         .ndo_start_xmit         = ravb_start_xmit,
1661         .ndo_select_queue       = ravb_select_queue,
1662         .ndo_get_stats          = ravb_get_stats,
1663         .ndo_set_rx_mode        = ravb_set_rx_mode,
1664         .ndo_tx_timeout         = ravb_tx_timeout,
1665         .ndo_do_ioctl           = ravb_do_ioctl,
1666         .ndo_validate_addr      = eth_validate_addr,
1667         .ndo_set_mac_address    = eth_mac_addr,
1668         .ndo_change_mtu         = eth_change_mtu,
1669 };
1670
1671 /* MDIO bus init function */
1672 static int ravb_mdio_init(struct ravb_private *priv)
1673 {
1674         struct platform_device *pdev = priv->pdev;
1675         struct device *dev = &pdev->dev;
1676         int error;
1677
1678         /* Bitbang init */
1679         priv->mdiobb.ops = &bb_ops;
1680
1681         /* MII controller setting */
1682         priv->mii_bus = alloc_mdio_bitbang(&priv->mdiobb);
1683         if (!priv->mii_bus)
1684                 return -ENOMEM;
1685
1686         /* Hook up MII support for ethtool */
1687         priv->mii_bus->name = "ravb_mii";
1688         priv->mii_bus->parent = dev;
1689         snprintf(priv->mii_bus->id, MII_BUS_ID_SIZE, "%s-%x",
1690                  pdev->name, pdev->id);
1691
1692         /* Register MDIO bus */
1693         error = of_mdiobus_register(priv->mii_bus, dev->of_node);
1694         if (error)
1695                 goto out_free_bus;
1696
1697         return 0;
1698
1699 out_free_bus:
1700         free_mdio_bitbang(priv->mii_bus);
1701         return error;
1702 }
1703
1704 /* MDIO bus release function */
1705 static int ravb_mdio_release(struct ravb_private *priv)
1706 {
1707         /* Unregister mdio bus */
1708         mdiobus_unregister(priv->mii_bus);
1709
1710         /* Free bitbang info */
1711         free_mdio_bitbang(priv->mii_bus);
1712
1713         return 0;
1714 }
1715
1716 static const struct of_device_id ravb_match_table[] = {
1717         { .compatible = "renesas,etheravb-r8a7790", .data = (void *)RCAR_GEN2 },
1718         { .compatible = "renesas,etheravb-r8a7794", .data = (void *)RCAR_GEN2 },
1719         { .compatible = "renesas,etheravb-r8a7795", .data = (void *)RCAR_GEN3 },
1720         { }
1721 };
1722 MODULE_DEVICE_TABLE(of, ravb_match_table);
1723
1724 static int ravb_probe(struct platform_device *pdev)
1725 {
1726         struct device_node *np = pdev->dev.of_node;
1727         const struct of_device_id *match;
1728         struct ravb_private *priv;
1729         enum ravb_chip_id chip_id;
1730         struct net_device *ndev;
1731         int error, irq, q;
1732         struct resource *res;
1733
1734         if (!np) {
1735                 dev_err(&pdev->dev,
1736                         "this driver is required to be instantiated from device tree\n");
1737                 return -EINVAL;
1738         }
1739
1740         /* Get base address */
1741         res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1742         if (!res) {
1743                 dev_err(&pdev->dev, "invalid resource\n");
1744                 return -EINVAL;
1745         }
1746
1747         ndev = alloc_etherdev_mqs(sizeof(struct ravb_private),
1748                                   NUM_TX_QUEUE, NUM_RX_QUEUE);
1749         if (!ndev)
1750                 return -ENOMEM;
1751
1752         pm_runtime_enable(&pdev->dev);
1753         pm_runtime_get_sync(&pdev->dev);
1754
1755         /* The Ether-specific entries in the device structure. */
1756         ndev->base_addr = res->start;
1757         ndev->dma = -1;
1758
1759         match = of_match_device(of_match_ptr(ravb_match_table), &pdev->dev);
1760         chip_id = (enum ravb_chip_id)match->data;
1761
1762         if (chip_id == RCAR_GEN3)
1763                 irq = platform_get_irq_byname(pdev, "ch22");
1764         else
1765                 irq = platform_get_irq(pdev, 0);
1766         if (irq < 0) {
1767                 error = irq;
1768                 goto out_release;
1769         }
1770         ndev->irq = irq;
1771
1772         SET_NETDEV_DEV(ndev, &pdev->dev);
1773
1774         priv = netdev_priv(ndev);
1775         priv->ndev = ndev;
1776         priv->pdev = pdev;
1777         priv->num_tx_ring[RAVB_BE] = BE_TX_RING_SIZE;
1778         priv->num_rx_ring[RAVB_BE] = BE_RX_RING_SIZE;
1779         priv->num_tx_ring[RAVB_NC] = NC_TX_RING_SIZE;
1780         priv->num_rx_ring[RAVB_NC] = NC_RX_RING_SIZE;
1781         priv->addr = devm_ioremap_resource(&pdev->dev, res);
1782         if (IS_ERR(priv->addr)) {
1783                 error = PTR_ERR(priv->addr);
1784                 goto out_release;
1785         }
1786
1787         spin_lock_init(&priv->lock);
1788         INIT_WORK(&priv->work, ravb_tx_timeout_work);
1789
1790         priv->phy_interface = of_get_phy_mode(np);
1791
1792         priv->no_avb_link = of_property_read_bool(np, "renesas,no-ether-link");
1793         priv->avb_link_active_low =
1794                 of_property_read_bool(np, "renesas,ether-link-active-low");
1795
1796         if (chip_id == RCAR_GEN3) {
1797                 irq = platform_get_irq_byname(pdev, "ch24");
1798                 if (irq < 0) {
1799                         error = irq;
1800                         goto out_release;
1801                 }
1802                 priv->emac_irq = irq;
1803         }
1804
1805         priv->chip_id = chip_id;
1806
1807         /* Set function */
1808         ndev->netdev_ops = &ravb_netdev_ops;
1809         ndev->ethtool_ops = &ravb_ethtool_ops;
1810
1811         /* Set AVB config mode */
1812         ravb_write(ndev, (ravb_read(ndev, CCC) & ~CCC_OPC) | CCC_OPC_CONFIG,
1813                    CCC);
1814
1815         /* Set CSEL value */
1816         ravb_write(ndev, (ravb_read(ndev, CCC) & ~CCC_CSEL) | CCC_CSEL_HPB,
1817                    CCC);
1818
1819         /* Set GTI value */
1820         ravb_write(ndev, ((1000 << 20) / 130) & GTI_TIV, GTI);
1821
1822         /* Request GTI loading */
1823         ravb_write(ndev, ravb_read(ndev, GCCR) | GCCR_LTI, GCCR);
1824
1825         /* Allocate descriptor base address table */
1826         priv->desc_bat_size = sizeof(struct ravb_desc) * DBAT_ENTRY_NUM;
1827         priv->desc_bat = dma_alloc_coherent(ndev->dev.parent, priv->desc_bat_size,
1828                                             &priv->desc_bat_dma, GFP_KERNEL);
1829         if (!priv->desc_bat) {
1830                 dev_err(&pdev->dev,
1831                         "Cannot allocate desc base address table (size %d bytes)\n",
1832                         priv->desc_bat_size);
1833                 error = -ENOMEM;
1834                 goto out_release;
1835         }
1836         for (q = RAVB_BE; q < DBAT_ENTRY_NUM; q++)
1837                 priv->desc_bat[q].die_dt = DT_EOS;
1838         ravb_write(ndev, priv->desc_bat_dma, DBAT);
1839
1840         /* Initialise HW timestamp list */
1841         INIT_LIST_HEAD(&priv->ts_skb_list);
1842
1843         /* Debug message level */
1844         priv->msg_enable = RAVB_DEF_MSG_ENABLE;
1845
1846         /* Read and set MAC address */
1847         ravb_read_mac_address(ndev, of_get_mac_address(np));
1848         if (!is_valid_ether_addr(ndev->dev_addr)) {
1849                 dev_warn(&pdev->dev,
1850                          "no valid MAC address supplied, using a random one\n");
1851                 eth_hw_addr_random(ndev);
1852         }
1853
1854         /* MDIO bus init */
1855         error = ravb_mdio_init(priv);
1856         if (error) {
1857                 dev_err(&pdev->dev, "failed to initialize MDIO\n");
1858                 goto out_dma_free;
1859         }
1860
1861         netif_napi_add(ndev, &priv->napi[RAVB_BE], ravb_poll, 64);
1862         netif_napi_add(ndev, &priv->napi[RAVB_NC], ravb_poll, 64);
1863
1864         /* Network device register */
1865         error = register_netdev(ndev);
1866         if (error)
1867                 goto out_napi_del;
1868
1869         /* Print device information */
1870         netdev_info(ndev, "Base address at %#x, %pM, IRQ %d.\n",
1871                     (u32)ndev->base_addr, ndev->dev_addr, ndev->irq);
1872
1873         platform_set_drvdata(pdev, ndev);
1874
1875         return 0;
1876
1877 out_napi_del:
1878         netif_napi_del(&priv->napi[RAVB_NC]);
1879         netif_napi_del(&priv->napi[RAVB_BE]);
1880         ravb_mdio_release(priv);
1881 out_dma_free:
1882         dma_free_coherent(ndev->dev.parent, priv->desc_bat_size, priv->desc_bat,
1883                           priv->desc_bat_dma);
1884 out_release:
1885         if (ndev)
1886                 free_netdev(ndev);
1887
1888         pm_runtime_put(&pdev->dev);
1889         pm_runtime_disable(&pdev->dev);
1890         return error;
1891 }
1892
1893 static int ravb_remove(struct platform_device *pdev)
1894 {
1895         struct net_device *ndev = platform_get_drvdata(pdev);
1896         struct ravb_private *priv = netdev_priv(ndev);
1897
1898         dma_free_coherent(ndev->dev.parent, priv->desc_bat_size, priv->desc_bat,
1899                           priv->desc_bat_dma);
1900         /* Set reset mode */
1901         ravb_write(ndev, CCC_OPC_RESET, CCC);
1902         pm_runtime_put_sync(&pdev->dev);
1903         unregister_netdev(ndev);
1904         netif_napi_del(&priv->napi[RAVB_NC]);
1905         netif_napi_del(&priv->napi[RAVB_BE]);
1906         ravb_mdio_release(priv);
1907         pm_runtime_disable(&pdev->dev);
1908         free_netdev(ndev);
1909         platform_set_drvdata(pdev, NULL);
1910
1911         return 0;
1912 }
1913
1914 #ifdef CONFIG_PM
1915 static int ravb_runtime_nop(struct device *dev)
1916 {
1917         /* Runtime PM callback shared between ->runtime_suspend()
1918          * and ->runtime_resume(). Simply returns success.
1919          *
1920          * This driver re-initializes all registers after
1921          * pm_runtime_get_sync() anyway so there is no need
1922          * to save and restore registers here.
1923          */
1924         return 0;
1925 }
1926
1927 static const struct dev_pm_ops ravb_dev_pm_ops = {
1928         .runtime_suspend = ravb_runtime_nop,
1929         .runtime_resume = ravb_runtime_nop,
1930 };
1931
1932 #define RAVB_PM_OPS (&ravb_dev_pm_ops)
1933 #else
1934 #define RAVB_PM_OPS NULL
1935 #endif
1936
1937 static struct platform_driver ravb_driver = {
1938         .probe          = ravb_probe,
1939         .remove         = ravb_remove,
1940         .driver = {
1941                 .name   = "ravb",
1942                 .pm     = RAVB_PM_OPS,
1943                 .of_match_table = ravb_match_table,
1944         },
1945 };
1946
1947 module_platform_driver(ravb_driver);
1948
1949 MODULE_AUTHOR("Mitsuhiro Kimura, Masaru Nagai");
1950 MODULE_DESCRIPTION("Renesas Ethernet AVB driver");
1951 MODULE_LICENSE("GPL v2");