aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/ti/cpsw.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/ethernet/ti/cpsw.c')
-rw-r--r--drivers/net/ethernet/ti/cpsw.c34
1 files changed, 10 insertions, 24 deletions
diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c
index 462820514fae..d155bf2573cd 100644
--- a/drivers/net/ethernet/ti/cpsw.c
+++ b/drivers/net/ethernet/ti/cpsw.c
@@ -138,19 +138,6 @@ do { \
138#define CPSW_CMINTMAX_INTVL (1000 / CPSW_CMINTMIN_CNT) 138#define CPSW_CMINTMAX_INTVL (1000 / CPSW_CMINTMIN_CNT)
139#define CPSW_CMINTMIN_INTVL ((1000 / CPSW_CMINTMAX_CNT) + 1) 139#define CPSW_CMINTMIN_INTVL ((1000 / CPSW_CMINTMAX_CNT) + 1)
140 140
141#define cpsw_enable_irq(priv) \
142 do { \
143 u32 i; \
144 for (i = 0; i < priv->num_irqs; i++) \
145 enable_irq(priv->irqs_table[i]); \
146 } while (0)
147#define cpsw_disable_irq(priv) \
148 do { \
149 u32 i; \
150 for (i = 0; i < priv->num_irqs; i++) \
151 disable_irq_nosync(priv->irqs_table[i]); \
152 } while (0)
153
154#define cpsw_slave_index(priv) \ 141#define cpsw_slave_index(priv) \
155 ((priv->data.dual_emac) ? priv->emac_port : \ 142 ((priv->data.dual_emac) ? priv->emac_port : \
156 priv->data.active_slave) 143 priv->data.active_slave)
@@ -509,9 +496,11 @@ static const struct cpsw_stats cpsw_gstrings_stats[] = {
509 (func)(slave++, ##arg); \ 496 (func)(slave++, ##arg); \
510 } while (0) 497 } while (0)
511#define cpsw_get_slave_ndev(priv, __slave_no__) \ 498#define cpsw_get_slave_ndev(priv, __slave_no__) \
512 (priv->slaves[__slave_no__].ndev) 499 ((__slave_no__ < priv->data.slaves) ? \
500 priv->slaves[__slave_no__].ndev : NULL)
513#define cpsw_get_slave_priv(priv, __slave_no__) \ 501#define cpsw_get_slave_priv(priv, __slave_no__) \
514 ((priv->slaves[__slave_no__].ndev) ? \ 502 (((__slave_no__ < priv->data.slaves) && \
503 (priv->slaves[__slave_no__].ndev)) ? \
515 netdev_priv(priv->slaves[__slave_no__].ndev) : NULL) \ 504 netdev_priv(priv->slaves[__slave_no__].ndev) : NULL) \
516 505
517#define cpsw_dual_emac_src_port_detect(status, priv, ndev, skb) \ 506#define cpsw_dual_emac_src_port_detect(status, priv, ndev, skb) \
@@ -781,7 +770,7 @@ static irqreturn_t cpsw_rx_interrupt(int irq, void *dev_id)
781 770
782 cpsw_intr_disable(priv); 771 cpsw_intr_disable(priv);
783 if (priv->irq_enabled == true) { 772 if (priv->irq_enabled == true) {
784 cpsw_disable_irq(priv); 773 disable_irq_nosync(priv->irqs_table[0]);
785 priv->irq_enabled = false; 774 priv->irq_enabled = false;
786 } 775 }
787 776
@@ -804,9 +793,7 @@ static irqreturn_t cpsw_rx_interrupt(int irq, void *dev_id)
804static int cpsw_poll(struct napi_struct *napi, int budget) 793static int cpsw_poll(struct napi_struct *napi, int budget)
805{ 794{
806 struct cpsw_priv *priv = napi_to_priv(napi); 795 struct cpsw_priv *priv = napi_to_priv(napi);
807 int num_tx, num_rx; 796 int num_rx;
808
809 num_tx = cpdma_chan_process(priv->txch, 128);
810 797
811 num_rx = cpdma_chan_process(priv->rxch, budget); 798 num_rx = cpdma_chan_process(priv->rxch, budget);
812 if (num_rx < budget) { 799 if (num_rx < budget) {
@@ -817,13 +804,12 @@ static int cpsw_poll(struct napi_struct *napi, int budget)
817 prim_cpsw = cpsw_get_slave_priv(priv, 0); 804 prim_cpsw = cpsw_get_slave_priv(priv, 0);
818 if (prim_cpsw->irq_enabled == false) { 805 if (prim_cpsw->irq_enabled == false) {
819 prim_cpsw->irq_enabled = true; 806 prim_cpsw->irq_enabled = true;
820 cpsw_enable_irq(priv); 807 enable_irq(priv->irqs_table[0]);
821 } 808 }
822 } 809 }
823 810
824 if (num_rx || num_tx) 811 if (num_rx)
825 cpsw_dbg(priv, intr, "poll %d rx, %d tx pkts\n", 812 cpsw_dbg(priv, intr, "poll %d rx pkts\n", num_rx);
826 num_rx, num_tx);
827 813
828 return num_rx; 814 return num_rx;
829} 815}
@@ -1333,7 +1319,7 @@ static int cpsw_ndo_open(struct net_device *ndev)
1333 if (prim_cpsw->irq_enabled == false) { 1319 if (prim_cpsw->irq_enabled == false) {
1334 if ((priv == prim_cpsw) || !netif_running(prim_cpsw->ndev)) { 1320 if ((priv == prim_cpsw) || !netif_running(prim_cpsw->ndev)) {
1335 prim_cpsw->irq_enabled = true; 1321 prim_cpsw->irq_enabled = true;
1336 cpsw_enable_irq(prim_cpsw); 1322 enable_irq(prim_cpsw->irqs_table[0]);
1337 } 1323 }
1338 } 1324 }
1339 1325