diff options
| -rw-r--r-- | drivers/net/ethernet/broadcom/bgmac.c | 31 | ||||
| -rw-r--r-- | drivers/net/ethernet/broadcom/bgmac.h | 1 |
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 | ||
| 1116 | static void bgmac_chip_intrs_on(struct bgmac *bgmac) | 1114 | static 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) | |||
| 1241 | static int bgmac_poll(struct napi_struct *napi, int weight) | 1238 | static 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; |
