hc
2023-12-11 6778948f9de86c3cfaf36725a7c87dcff9ba247f
kernel/drivers/net/ethernet/seeq/sgiseeq.c
....@@ -1,3 +1,4 @@
1
+// SPDX-License-Identifier: GPL-2.0-only
12 /*
23 * sgiseeq.c: Seeq8003 ethernet driver for SGI machines.
34 *
....@@ -111,14 +112,18 @@
111112
112113 static inline void dma_sync_desc_cpu(struct net_device *dev, void *addr)
113114 {
114
- dma_cache_sync(dev->dev.parent, addr, sizeof(struct sgiseeq_rx_desc),
115
- DMA_FROM_DEVICE);
115
+ struct sgiseeq_private *sp = netdev_priv(dev);
116
+
117
+ dma_sync_single_for_cpu(dev->dev.parent, VIRT_TO_DMA(sp, addr),
118
+ sizeof(struct sgiseeq_rx_desc), DMA_BIDIRECTIONAL);
116119 }
117120
118121 static inline void dma_sync_desc_dev(struct net_device *dev, void *addr)
119122 {
120
- dma_cache_sync(dev->dev.parent, addr, sizeof(struct sgiseeq_rx_desc),
121
- DMA_TO_DEVICE);
123
+ struct sgiseeq_private *sp = netdev_priv(dev);
124
+
125
+ dma_sync_single_for_device(dev->dev.parent, VIRT_TO_DMA(sp, addr),
126
+ sizeof(struct sgiseeq_rx_desc), DMA_BIDIRECTIONAL);
122127 }
123128
124129 static inline void hpc3_eth_reset(struct hpc3_ethregs *hregs)
....@@ -402,6 +407,8 @@
402407 rd = &sp->rx_desc[sp->rx_new];
403408 dma_sync_desc_cpu(dev, rd);
404409 }
410
+ dma_sync_desc_dev(dev, rd);
411
+
405412 dma_sync_desc_cpu(dev, &sp->rx_desc[orig_end]);
406413 sp->rx_desc[orig_end].rdma.cntinfo &= ~(HPCDMA_EOR);
407414 dma_sync_desc_dev(dev, &sp->rx_desc[orig_end]);
....@@ -442,6 +449,7 @@
442449 dma_sync_desc_cpu(dev, td);
443450 }
444451 if (td->tdma.cntinfo & HPCDMA_XIU) {
452
+ dma_sync_desc_dev(dev, td);
445453 hregs->tx_ndptr = VIRT_TO_DMA(sp, td);
446454 hregs->tx_ctrl = HPC3_ETXCTRL_ACTIVE;
447455 }
....@@ -475,6 +483,7 @@
475483 if (!(td->tdma.cntinfo & (HPCDMA_XIU)))
476484 break;
477485 if (!(td->tdma.cntinfo & (HPCDMA_ETXD))) {
486
+ dma_sync_desc_dev(dev, td);
478487 if (!(status & HPC3_ETXCTRL_ACTIVE)) {
479488 hregs->tx_ndptr = VIRT_TO_DMA(sp, td);
480489 hregs->tx_ctrl = HPC3_ETXCTRL_ACTIVE;
....@@ -644,7 +653,7 @@
644653 return NETDEV_TX_OK;
645654 }
646655
647
-static void timeout(struct net_device *dev)
656
+static void timeout(struct net_device *dev, unsigned int txqueue)
648657 {
649658 printk(KERN_NOTICE "%s: transmit timed out, resetting\n", dev->name);
650659 sgiseeq_reset(dev);
....@@ -739,8 +748,8 @@
739748 sp = netdev_priv(dev);
740749
741750 /* Make private data page aligned */
742
- sr = dma_alloc_attrs(&pdev->dev, sizeof(*sp->srings), &sp->srings_dma,
743
- GFP_KERNEL, DMA_ATTR_NON_CONSISTENT);
751
+ sr = dma_alloc_noncoherent(&pdev->dev, sizeof(*sp->srings),
752
+ &sp->srings_dma, DMA_BIDIRECTIONAL, GFP_KERNEL);
744753 if (!sr) {
745754 printk(KERN_ERR "Sgiseeq: Page alloc failed, aborting.\n");
746755 err = -ENOMEM;
....@@ -801,8 +810,8 @@
801810 return 0;
802811
803812 err_out_free_attrs:
804
- dma_free_attrs(&pdev->dev, sizeof(*sp->srings), sp->srings,
805
- sp->srings_dma, DMA_ATTR_NON_CONSISTENT);
813
+ dma_free_noncoherent(&pdev->dev, sizeof(*sp->srings), sp->srings,
814
+ sp->srings_dma, DMA_BIDIRECTIONAL);
806815 err_out_free_dev:
807816 free_netdev(dev);
808817
....@@ -816,8 +825,8 @@
816825 struct sgiseeq_private *sp = netdev_priv(dev);
817826
818827 unregister_netdev(dev);
819
- dma_free_attrs(&pdev->dev, sizeof(*sp->srings), sp->srings,
820
- sp->srings_dma, DMA_ATTR_NON_CONSISTENT);
828
+ dma_free_noncoherent(&pdev->dev, sizeof(*sp->srings), sp->srings,
829
+ sp->srings_dma, DMA_BIDIRECTIONAL);
821830 free_netdev(dev);
822831
823832 return 0;