aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/ethernet/broadcom/bgmac.c31
-rw-r--r--drivers/net/ethernet/broadcom/bgmac.h1
2 files changed, 10 insertions, 22 deletions
diff --git a/drivers/net/ethernet/broadcom/bgmac.c b/drivers/net/ethernet/broadcom/bgmac.c
index b9e02e484d72..9c3b2ff33e63 100644
--- a/drivers/net/ethernet/broadcom/bgmac.c
+++ b/drivers/net/ethernet/broadcom/bgmac.c
@@ -1109,8 +1109,6 @@ static void bgmac_chip_reset(struct bgmac *bgmac)
1109 bgmac_phy_init(bgmac); 1109 bgmac_phy_init(bgmac);
1110 1110
1111 netdev_reset_queue(bgmac->net_dev); 1111 netdev_reset_queue(bgmac->net_dev);
1112
1113 bgmac->int_status = 0;
1114} 1112}
1115 1113
1116static void bgmac_chip_intrs_on(struct bgmac *bgmac) 1114static void bgmac_chip_intrs_on(struct bgmac *bgmac)
@@ -1225,14 +1223,13 @@ static irqreturn_t bgmac_interrupt(int irq, void *dev_id)
1225 if (!int_status) 1223 if (!int_status)
1226 return IRQ_NONE; 1224 return IRQ_NONE;
1227 1225
1228 /* Ack */ 1226 int_status &= ~(BGMAC_IS_TX0 | BGMAC_IS_RX);
1229 bgmac_write(bgmac, BGMAC_INT_STATUS, int_status); 1227 if (int_status)
1228 bgmac_err(bgmac, "Unknown IRQs: 0x%08X\n", int_status);
1230 1229
1231 /* Disable new interrupts until handling existing ones */ 1230 /* Disable new interrupts until handling existing ones */
1232 bgmac_chip_intrs_off(bgmac); 1231 bgmac_chip_intrs_off(bgmac);
1233 1232
1234 bgmac->int_status = int_status;
1235
1236 napi_schedule(&bgmac->napi); 1233 napi_schedule(&bgmac->napi);
1237 1234
1238 return IRQ_HANDLED; 1235 return IRQ_HANDLED;
@@ -1241,25 +1238,17 @@ static irqreturn_t bgmac_interrupt(int irq, void *dev_id)
1241static int bgmac_poll(struct napi_struct *napi, int weight) 1238static int bgmac_poll(struct napi_struct *napi, int weight)
1242{ 1239{
1243 struct bgmac *bgmac = container_of(napi, struct bgmac, napi); 1240 struct bgmac *bgmac = container_of(napi, struct bgmac, napi);
1244 struct bgmac_dma_ring *ring;
1245 int handled = 0; 1241 int handled = 0;
1246 1242
1247 if (bgmac->int_status & BGMAC_IS_TX0) { 1243 /* Ack */
1248 ring = &bgmac->tx_ring[0]; 1244 bgmac_write(bgmac, BGMAC_INT_STATUS, ~0);
1249 bgmac_dma_tx_free(bgmac, ring);
1250 bgmac->int_status &= ~BGMAC_IS_TX0;
1251 }
1252 1245
1253 if (bgmac->int_status & BGMAC_IS_RX) { 1246 bgmac_dma_tx_free(bgmac, &bgmac->tx_ring[0]);
1254 ring = &bgmac->rx_ring[0]; 1247 handled += bgmac_dma_rx_read(bgmac, &bgmac->rx_ring[0], weight);
1255 handled += bgmac_dma_rx_read(bgmac, ring, weight);
1256 bgmac->int_status &= ~BGMAC_IS_RX;
1257 }
1258 1248
1259 if (bgmac->int_status) { 1249 /* Poll again if more events arrived in the meantime */
1260 bgmac_err(bgmac, "Unknown IRQs: 0x%08X\n", bgmac->int_status); 1250 if (bgmac_read(bgmac, BGMAC_INT_STATUS) & (BGMAC_IS_TX0 | BGMAC_IS_RX))
1261 bgmac->int_status = 0; 1251 return handled;
1262 }
1263 1252
1264 if (handled < weight) { 1253 if (handled < weight) {
1265 napi_complete(napi); 1254 napi_complete(napi);
diff --git a/drivers/net/ethernet/broadcom/bgmac.h b/drivers/net/ethernet/broadcom/bgmac.h
index 5a198d56f3e7..abd50d128e6c 100644
--- a/drivers/net/ethernet/broadcom/bgmac.h
+++ b/drivers/net/ethernet/broadcom/bgmac.h
@@ -452,7 +452,6 @@ struct bgmac {
452 452
453 /* Int */ 453 /* Int */
454 u32 int_mask; 454 u32 int_mask;
455 u32 int_status;
456 455
457 /* Current MAC state */ 456 /* Current MAC state */
458 int mac_speed; 457 int mac_speed;