lantiq: copy target to kernel 5.4
[openwrt/staging/mkresin.git] / target / linux / lantiq / patches-5.4 / 0005-lantiq_etop-pass-struct-device-to-DMA-API-functions.patch
diff --git a/target/linux/lantiq/patches-5.4/0005-lantiq_etop-pass-struct-device-to-DMA-API-functions.patch b/target/linux/lantiq/patches-5.4/0005-lantiq_etop-pass-struct-device-to-DMA-API-functions.patch
new file mode 100644 (file)
index 0000000..ccde787
--- /dev/null
@@ -0,0 +1,43 @@
+From 74e0deb89a8ba27c132b1f0e08643e215b5c1f92 Mon Sep 17 00:00:00 2001
+From: Christoph Hellwig <hch@lst.de>
+Date: Mon, 11 Feb 2019 14:20:00 +0100
+Subject: [PATCH] lantiq_etop: pass struct device to DMA API functions
+
+The DMA API generally relies on a struct device to work properly, and
+only barely works without one for legacy reasons.  Pass the easily
+available struct device from the platform_device to remedy this.
+
+Note this driver seems to lack dma_unmap_* calls entirely, but fixing
+that is left for another time.
+
+Signed-off-by: Christoph Hellwig <hch@lst.de>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+---
+ drivers/net/ethernet/lantiq_etop.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+--- a/drivers/net/ethernet/lantiq_etop.c
++++ b/drivers/net/ethernet/lantiq_etop.c
+@@ -112,10 +112,12 @@ struct ltq_etop_priv {
+ static int
+ ltq_etop_alloc_skb(struct ltq_etop_chan *ch)
+ {
++      struct ltq_etop_priv *priv = netdev_priv(ch->netdev);
++
+       ch->skb[ch->dma.desc] = netdev_alloc_skb(ch->netdev, MAX_DMA_DATA_LEN);
+       if (!ch->skb[ch->dma.desc])
+               return -ENOMEM;
+-      ch->dma.desc_base[ch->dma.desc].addr = dma_map_single(NULL,
++      ch->dma.desc_base[ch->dma.desc].addr = dma_map_single(&priv->pdev->dev,
+               ch->skb[ch->dma.desc]->data, MAX_DMA_DATA_LEN,
+               DMA_FROM_DEVICE);
+       ch->dma.desc_base[ch->dma.desc].addr =
+@@ -493,7 +495,7 @@ ltq_etop_tx(struct sk_buff *skb, struct
+       netif_trans_update(dev);
+       spin_lock_irqsave(&priv->lock, flags);
+-      desc->addr = ((unsigned int) dma_map_single(NULL, skb->data, len,
++      desc->addr = ((unsigned int) dma_map_single(&priv->pdev->dev, skb->data, len,
+                                               DMA_TO_DEVICE)) - byte_offset;
+       wmb();
+       desc->ctl = LTQ_DMA_OWN | LTQ_DMA_SOP | LTQ_DMA_EOP |