From 5bf5fcf8a52a0cfd09cd18565ddb41fccb0bade2 Mon Sep 17 00:00:00 2001 From: Russell King Date: Thu, 27 Mar 2014 14:50:28 +0000 Subject: net: fec: move transmit dma ring address calculation to fec_enet_init() Move the calculation of the transmit DMA ring address to fec_enet_init() so the CPU and DMA ring address calculations are localised. Signed-off-by: Russell King --- drivers/net/ethernet/freescale/fec.h | 3 ++- drivers/net/ethernet/freescale/fec_main.c | 26 +++++++++++++------------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/drivers/net/ethernet/freescale/fec.h b/drivers/net/ethernet/freescale/fec.h index 702fdae3d4f0..a1caee8fd648 100644 --- a/drivers/net/ethernet/freescale/fec.h +++ b/drivers/net/ethernet/freescale/fec.h @@ -285,7 +285,8 @@ struct fec_enet_private { struct sk_buff *rx_skbuff[RX_RING_SIZE]; /* CPM dual port RAM relative addresses */ - dma_addr_t bd_dma; + dma_addr_t rx_bd_dma; + dma_addr_t tx_bd_dma; /* Address of Rx and Tx buffers */ struct bufdesc *rx_bd_base; struct bufdesc *tx_bd_base; diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c index 6d4142d4ef39..30a48ff1f798 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c @@ -908,14 +908,8 @@ fec_restart(struct net_device *ndev) netdev_reset_queue(ndev); /* Set receive and transmit descriptor base. */ - writel(fep->bd_dma, fep->hwp + FEC_R_DES_START); - if (fep->bufdesc_ex) - writel((unsigned long)fep->bd_dma + sizeof(struct bufdesc_ex) - * fep->rx_ring_size, fep->hwp + FEC_X_DES_START); - else - writel((unsigned long)fep->bd_dma + sizeof(struct bufdesc) - * fep->rx_ring_size, fep->hwp + FEC_X_DES_START); - + writel(fep->rx_bd_dma, fep->hwp + FEC_R_DES_START); + writel(fep->tx_bd_dma, fep->hwp + FEC_X_DES_START); for (i = 0; i <= TX_RING_MOD_MASK; i++) { if (fep->tx_skbuff[i]) { @@ -2586,6 +2580,7 @@ static int fec_enet_init(struct net_device *ndev) const struct platform_device_id *id_entry = platform_get_device_id(fep->pdev); struct bufdesc *cbd_base; + dma_addr_t cbd_dma; int bd_size; /* init the tx & rx ring size */ @@ -2603,15 +2598,14 @@ static int fec_enet_init(struct net_device *ndev) fep->bufdesc_size; /* Allocate memory for buffer descriptors. */ - cbd_base = dma_alloc_coherent(NULL, bd_size, &fep->bd_dma, - GFP_KERNEL); + cbd_base = dma_alloc_coherent(NULL, bd_size, &cbd_dma, GFP_KERNEL); if (!cbd_base) return -ENOMEM; fep->tso_hdrs = dma_alloc_coherent(NULL, fep->tx_ring_size * TSO_HEADER_SIZE, &fep->tso_hdrs_dma, GFP_KERNEL); if (!fep->tso_hdrs) { - dma_free_coherent(NULL, bd_size, cbd_base, fep->bd_dma); + dma_free_coherent(NULL, bd_size, cbd_base, cbd_dma); return -ENOMEM; } @@ -2626,11 +2620,17 @@ static int fec_enet_init(struct net_device *ndev) /* Set receive and transmit descriptor base. */ fep->rx_bd_base = cbd_base; - if (fep->bufdesc_ex) + fep->rx_bd_dma = cbd_dma; + if (fep->bufdesc_ex) { fep->tx_bd_base = (struct bufdesc *) (((struct bufdesc_ex *)cbd_base) + fep->rx_ring_size); - else + fep->tx_bd_dma = cbd_dma + sizeof(struct bufdesc_ex) * + fep->rx_ring_size; + } else { fep->tx_bd_base = cbd_base + fep->rx_ring_size; + fep->tx_bd_dma = cbd_dma + sizeof(struct bufdesc) * + fep->rx_ring_size; + } /* The FEC Ethernet specific entries in the device structure */ ndev->watchdog_timeo = TX_TIMEOUT; -- cgit