aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/fec.c
diff options
context:
space:
mode:
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>2011-01-20 03:26:38 -0500
committerUwe Kleine-König <u.kleine-koenig@pengutronix.de>2011-02-15 03:26:30 -0500
commitd1ab1f54a1b0fb0ae6479fad6e26983f09fd263a (patch)
tree29a01abd508b85dacc5c60c46e83575559f90e1b /drivers/net/fec.c
parent45993653bd5935dbf975bc26a834f2ff23c9f914 (diff)
net/fec: provide device for dma functions and matching sizes for map and unmap
This fixes warnings when CONFIG_DMA_API_DEBUG=y: NULL NULL: DMA-API: device driver tries to free DMA memory it has not allocated [device address=0x000000004781a020] [size=64 bytes] net eth0: DMA-API: device driver frees DMA memory with different size [device address=0x000000004781a020] [map size=2048 bytes] [unmap size=64 bytes] Moreover pass the platform device to dma_{,un}map_single which makes more sense because the logical network device doesn't know anything about dma. Passing the platform device was a suggestion by Lothar Waßmann. Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Diffstat (limited to 'drivers/net/fec.c')
-rw-r--r--drivers/net/fec.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/drivers/net/fec.c b/drivers/net/fec.c
index 3f5dfe2e41ac..0c984d6b25f6 100644
--- a/drivers/net/fec.c
+++ b/drivers/net/fec.c
@@ -297,7 +297,7 @@ fec_enet_start_xmit(struct sk_buff *skb, struct net_device *ndev)
297 /* Push the data cache so the CPM does not get stale memory 297 /* Push the data cache so the CPM does not get stale memory
298 * data. 298 * data.
299 */ 299 */
300 bdp->cbd_bufaddr = dma_map_single(&ndev->dev, bufaddr, 300 bdp->cbd_bufaddr = dma_map_single(&fep->pdev->dev, bufaddr,
301 FEC_ENET_TX_FRSIZE, DMA_TO_DEVICE); 301 FEC_ENET_TX_FRSIZE, DMA_TO_DEVICE);
302 302
303 /* Send it on its way. Tell FEC it's ready, interrupt when done, 303 /* Send it on its way. Tell FEC it's ready, interrupt when done,
@@ -497,7 +497,8 @@ fec_enet_tx(struct net_device *ndev)
497 if (bdp == fep->cur_tx && fep->tx_full == 0) 497 if (bdp == fep->cur_tx && fep->tx_full == 0)
498 break; 498 break;
499 499
500 dma_unmap_single(&ndev->dev, bdp->cbd_bufaddr, FEC_ENET_TX_FRSIZE, DMA_TO_DEVICE); 500 dma_unmap_single(&fep->pdev->dev, bdp->cbd_bufaddr,
501 FEC_ENET_TX_FRSIZE, DMA_TO_DEVICE);
501 bdp->cbd_bufaddr = 0; 502 bdp->cbd_bufaddr = 0;
502 503
503 skb = fep->tx_skbuff[fep->skb_dirty]; 504 skb = fep->tx_skbuff[fep->skb_dirty];
@@ -624,8 +625,8 @@ fec_enet_rx(struct net_device *ndev)
624 ndev->stats.rx_bytes += pkt_len; 625 ndev->stats.rx_bytes += pkt_len;
625 data = (__u8*)__va(bdp->cbd_bufaddr); 626 data = (__u8*)__va(bdp->cbd_bufaddr);
626 627
627 dma_unmap_single(NULL, bdp->cbd_bufaddr, bdp->cbd_datlen, 628 dma_unmap_single(&fep->pdev->dev, bdp->cbd_bufaddr,
628 DMA_FROM_DEVICE); 629 FEC_ENET_TX_FRSIZE, DMA_FROM_DEVICE);
629 630
630 if (id_entry->driver_data & FEC_QUIRK_SWAP_FRAME) 631 if (id_entry->driver_data & FEC_QUIRK_SWAP_FRAME)
631 swap_buffer(data, pkt_len); 632 swap_buffer(data, pkt_len);
@@ -649,8 +650,8 @@ fec_enet_rx(struct net_device *ndev)
649 netif_rx(skb); 650 netif_rx(skb);
650 } 651 }
651 652
652 bdp->cbd_bufaddr = dma_map_single(NULL, data, bdp->cbd_datlen, 653 bdp->cbd_bufaddr = dma_map_single(&fep->pdev->dev, data,
653 DMA_FROM_DEVICE); 654 FEC_ENET_TX_FRSIZE, DMA_FROM_DEVICE);
654rx_processing_done: 655rx_processing_done:
655 /* Clear the status flags for this buffer */ 656 /* Clear the status flags for this buffer */
656 status &= ~BD_ENET_RX_STATS; 657 status &= ~BD_ENET_RX_STATS;
@@ -1075,7 +1076,7 @@ static void fec_enet_free_buffers(struct net_device *ndev)
1075 skb = fep->rx_skbuff[i]; 1076 skb = fep->rx_skbuff[i];
1076 1077
1077 if (bdp->cbd_bufaddr) 1078 if (bdp->cbd_bufaddr)
1078 dma_unmap_single(&ndev->dev, bdp->cbd_bufaddr, 1079 dma_unmap_single(&fep->pdev->dev, bdp->cbd_bufaddr,
1079 FEC_ENET_RX_FRSIZE, DMA_FROM_DEVICE); 1080 FEC_ENET_RX_FRSIZE, DMA_FROM_DEVICE);
1080 if (skb) 1081 if (skb)
1081 dev_kfree_skb(skb); 1082 dev_kfree_skb(skb);
@@ -1103,7 +1104,7 @@ static int fec_enet_alloc_buffers(struct net_device *ndev)
1103 } 1104 }
1104 fep->rx_skbuff[i] = skb; 1105 fep->rx_skbuff[i] = skb;
1105 1106
1106 bdp->cbd_bufaddr = dma_map_single(&ndev->dev, skb->data, 1107 bdp->cbd_bufaddr = dma_map_single(&fep->pdev->dev, skb->data,
1107 FEC_ENET_RX_FRSIZE, DMA_FROM_DEVICE); 1108 FEC_ENET_RX_FRSIZE, DMA_FROM_DEVICE);
1108 bdp->cbd_sc = BD_ENET_RX_EMPTY; 1109 bdp->cbd_sc = BD_ENET_RX_EMPTY;
1109 bdp++; 1110 bdp++;