diff options
Diffstat (limited to 'drivers/net/ethernet/ti/cpsw.c')
| -rw-r--r-- | drivers/net/ethernet/ti/cpsw.c | 34 |
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) | |||
| 804 | static int cpsw_poll(struct napi_struct *napi, int budget) | 793 | static 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 | ||
