summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRussell King <rmk+kernel@arm.linux.org.uk>2014-03-27 14:50:28 +0000
committerRussell King <rmk+kernel@arm.linux.org.uk>2014-10-17 14:35:04 +0100
commit5bf5fcf8a52a0cfd09cd18565ddb41fccb0bade2 (patch)
treee0397041ff7bd42b94bfa913b248dec6894cf04a
parent87589a020fd976e17cf3d03b5c6edff64c0860f9 (diff)
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 <rmk+kernel@arm.linux.org.uk>
-rw-r--r--drivers/net/ethernet/freescale/fec.h3
-rw-r--r--drivers/net/ethernet/freescale/fec_main.c26
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;