hc
2023-12-11 6778948f9de86c3cfaf36725a7c87dcff9ba247f
kernel/drivers/net/ethernet/i825xx/lasi_82596.c
....@@ -96,22 +96,13 @@
9696
9797 #define OPT_SWAP_PORT 0x0001 /* Need to wordswp on the MPU port */
9898
99
-#define LIB82596_DMA_ATTR DMA_ATTR_NON_CONSISTENT
100
-
101
-#define DMA_WBACK(ndev, addr, len) \
102
- do { dma_cache_sync((ndev)->dev.parent, (void *)addr, len, DMA_TO_DEVICE); } while (0)
103
-
104
-#define DMA_INV(ndev, addr, len) \
105
- do { dma_cache_sync((ndev)->dev.parent, (void *)addr, len, DMA_FROM_DEVICE); } while (0)
106
-
107
-#define DMA_WBACK_INV(ndev, addr, len) \
108
- do { dma_cache_sync((ndev)->dev.parent, (void *)addr, len, DMA_BIDIRECTIONAL); } while (0)
109
-
110
-#define SYSBUS 0x0000006c;
99
+#define SYSBUS 0x0000006c
111100
112101 /* big endian CPU, 82596 "big" endian mode */
113102 #define SWAP32(x) (((u32)(x)<<16) | ((((u32)(x)))>>16))
114103 #define SWAP16(x) (x)
104
+
105
+#define NONCOHERENT_DMA 1
115106
116107 #include "lib82596.c"
117108
....@@ -143,7 +134,8 @@
143134 }
144135
145136 gsc_writel(a, dev->base_addr + PA_CPU_PORT_L_ACCESS);
146
- udelay(1);
137
+ if (!running_on_qemu)
138
+ udelay(1);
147139 gsc_writel(b, dev->base_addr + PA_CPU_PORT_L_ACCESS);
148140 }
149141
....@@ -154,7 +146,7 @@
154146 {
155147 struct net_device *netdevice;
156148 struct i596_private *lp;
157
- int retval;
149
+ int retval = -ENOMEM;
158150 int i;
159151
160152 if (!dev->irq) {
....@@ -185,12 +177,22 @@
185177
186178 lp = netdev_priv(netdevice);
187179 lp->options = dev->id.sversion == 0x72 ? OPT_SWAP_PORT : 0;
180
+ lp->dma = dma_alloc_noncoherent(&dev->dev,
181
+ sizeof(struct i596_dma), &lp->dma_addr,
182
+ DMA_BIDIRECTIONAL, GFP_KERNEL);
183
+ if (!lp->dma)
184
+ goto out_free_netdev;
188185
189186 retval = i82596_probe(netdevice);
190
- if (retval) {
191
- free_netdev(netdevice);
192
- return -ENODEV;
193
- }
187
+ if (retval)
188
+ goto out_free_dma;
189
+ return 0;
190
+
191
+out_free_dma:
192
+ dma_free_noncoherent(&dev->dev, sizeof(struct i596_dma),
193
+ lp->dma, lp->dma_addr, DMA_BIDIRECTIONAL);
194
+out_free_netdev:
195
+ free_netdev(netdevice);
194196 return retval;
195197 }
196198
....@@ -200,8 +202,8 @@
200202 struct i596_private *lp = netdev_priv(dev);
201203
202204 unregister_netdev (dev);
203
- dma_free_attrs(&pdev->dev, sizeof(struct i596_private), lp->dma,
204
- lp->dma_addr, LIB82596_DMA_ATTR);
205
+ dma_free_noncoherent(&pdev->dev, sizeof(struct i596_private), lp->dma,
206
+ lp->dma_addr, DMA_BIDIRECTIONAL);
205207 free_netdev (dev);
206208 return 0;
207209 }