aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLEROY Christophe <christophe.leroy@c-s.fr>2014-10-07 09:04:57 -0400
committerDavid S. Miller <davem@davemloft.net>2014-10-08 16:01:41 -0400
commit583d4a6885cfa75a3d189f6bb69b5c545e961c75 (patch)
treef91db118ccfb64a9b0dbc596aacb451b3e577f5a
parent935e2218d5a0fade1645982fb034eee37f100f11 (diff)
net: fs_enet: Remove non NAPI RX
In the probe function, use_napi is inconditionnaly set to 1. This patch removes all the code which is conditional to !use_napi, and removes use_napi which has then become useless. Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c164
-rw-r--r--include/linux/fs_enet_pd.h1
2 files changed, 15 insertions, 150 deletions
diff --git a/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c b/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c
index 748fd24d3d9e..71a25b4e2d5a 100644
--- a/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c
+++ b/drivers/net/ethernet/freescale/fs_enet/fs_enet-main.c
@@ -215,128 +215,6 @@ static int fs_enet_rx_napi(struct napi_struct *napi, int budget)
215 return received; 215 return received;
216} 216}
217 217
218/* non NAPI receive function */
219static int fs_enet_rx_non_napi(struct net_device *dev)
220{
221 struct fs_enet_private *fep = netdev_priv(dev);
222 const struct fs_platform_info *fpi = fep->fpi;
223 cbd_t __iomem *bdp;
224 struct sk_buff *skb, *skbn, *skbt;
225 int received = 0;
226 u16 pkt_len, sc;
227 int curidx;
228 /*
229 * First, grab all of the stats for the incoming packet.
230 * These get messed up if we get called due to a busy condition.
231 */
232 bdp = fep->cur_rx;
233
234 while (((sc = CBDR_SC(bdp)) & BD_ENET_RX_EMPTY) == 0) {
235
236 curidx = bdp - fep->rx_bd_base;
237
238 /*
239 * Since we have allocated space to hold a complete frame,
240 * the last indicator should be set.
241 */
242 if ((sc & BD_ENET_RX_LAST) == 0)
243 dev_warn(fep->dev, "rcv is not +last\n");
244
245 /*
246 * Check for errors.
247 */
248 if (sc & (BD_ENET_RX_LG | BD_ENET_RX_SH | BD_ENET_RX_CL |
249 BD_ENET_RX_NO | BD_ENET_RX_CR | BD_ENET_RX_OV)) {
250 fep->stats.rx_errors++;
251 /* Frame too long or too short. */
252 if (sc & (BD_ENET_RX_LG | BD_ENET_RX_SH))
253 fep->stats.rx_length_errors++;
254 /* Frame alignment */
255 if (sc & (BD_ENET_RX_NO | BD_ENET_RX_CL))
256 fep->stats.rx_frame_errors++;
257 /* CRC Error */
258 if (sc & BD_ENET_RX_CR)
259 fep->stats.rx_crc_errors++;
260 /* FIFO overrun */
261 if (sc & BD_ENET_RX_OV)
262 fep->stats.rx_crc_errors++;
263
264 skb = fep->rx_skbuff[curidx];
265
266 dma_unmap_single(fep->dev, CBDR_BUFADDR(bdp),
267 L1_CACHE_ALIGN(PKT_MAXBUF_SIZE),
268 DMA_FROM_DEVICE);
269
270 skbn = skb;
271
272 } else {
273
274 skb = fep->rx_skbuff[curidx];
275
276 dma_unmap_single(fep->dev, CBDR_BUFADDR(bdp),
277 L1_CACHE_ALIGN(PKT_MAXBUF_SIZE),
278 DMA_FROM_DEVICE);
279
280 /*
281 * Process the incoming frame.
282 */
283 fep->stats.rx_packets++;
284 pkt_len = CBDR_DATLEN(bdp) - 4; /* remove CRC */
285 fep->stats.rx_bytes += pkt_len + 4;
286
287 if (pkt_len <= fpi->rx_copybreak) {
288 /* +2 to make IP header L1 cache aligned */
289 skbn = netdev_alloc_skb(dev, pkt_len + 2);
290 if (skbn != NULL) {
291 skb_reserve(skbn, 2); /* align IP header */
292 skb_copy_from_linear_data(skb,
293 skbn->data, pkt_len);
294 /* swap */
295 skbt = skb;
296 skb = skbn;
297 skbn = skbt;
298 }
299 } else {
300 skbn = netdev_alloc_skb(dev, ENET_RX_FRSIZE);
301
302 if (skbn)
303 skb_align(skbn, ENET_RX_ALIGN);
304 }
305
306 if (skbn != NULL) {
307 skb_put(skb, pkt_len); /* Make room */
308 skb->protocol = eth_type_trans(skb, dev);
309 received++;
310 netif_rx(skb);
311 } else {
312 fep->stats.rx_dropped++;
313 skbn = skb;
314 }
315 }
316
317 fep->rx_skbuff[curidx] = skbn;
318 CBDW_BUFADDR(bdp, dma_map_single(fep->dev, skbn->data,
319 L1_CACHE_ALIGN(PKT_MAXBUF_SIZE),
320 DMA_FROM_DEVICE));
321 CBDW_DATLEN(bdp, 0);
322 CBDW_SC(bdp, (sc & ~BD_ENET_RX_STATS) | BD_ENET_RX_EMPTY);
323
324 /*
325 * Update BD pointer to next entry.
326 */
327 if ((sc & BD_ENET_RX_WRAP) == 0)
328 bdp++;
329 else
330 bdp = fep->rx_bd_base;
331
332 (*fep->ops->rx_bd_done)(dev);
333 }
334
335 fep->cur_rx = bdp;
336
337 return 0;
338}
339
340static void fs_enet_tx(struct net_device *dev) 218static void fs_enet_tx(struct net_device *dev)
341{ 219{
342 struct fs_enet_private *fep = netdev_priv(dev); 220 struct fs_enet_private *fep = netdev_priv(dev);
@@ -453,8 +331,7 @@ fs_enet_interrupt(int irq, void *dev_id)
453 nr++; 331 nr++;
454 332
455 int_clr_events = int_events; 333 int_clr_events = int_events;
456 if (fpi->use_napi) 334 int_clr_events &= ~fep->ev_napi_rx;
457 int_clr_events &= ~fep->ev_napi_rx;
458 335
459 (*fep->ops->clear_int_events)(dev, int_clr_events); 336 (*fep->ops->clear_int_events)(dev, int_clr_events);
460 337
@@ -462,19 +339,15 @@ fs_enet_interrupt(int irq, void *dev_id)
462 (*fep->ops->ev_error)(dev, int_events); 339 (*fep->ops->ev_error)(dev, int_events);
463 340
464 if (int_events & fep->ev_rx) { 341 if (int_events & fep->ev_rx) {
465 if (!fpi->use_napi) 342 napi_ok = napi_schedule_prep(&fep->napi);
466 fs_enet_rx_non_napi(dev); 343
467 else { 344 (*fep->ops->napi_disable_rx)(dev);
468 napi_ok = napi_schedule_prep(&fep->napi); 345 (*fep->ops->clear_int_events)(dev, fep->ev_napi_rx);
469 346
470 (*fep->ops->napi_disable_rx)(dev); 347 /* NOTE: it is possible for FCCs in NAPI mode */
471 (*fep->ops->clear_int_events)(dev, fep->ev_napi_rx); 348 /* to submit a spurious interrupt while in poll */
472 349 if (napi_ok)
473 /* NOTE: it is possible for FCCs in NAPI mode */ 350 __napi_schedule(&fep->napi);
474 /* to submit a spurious interrupt while in poll */
475 if (napi_ok)
476 __napi_schedule(&fep->napi);
477 }
478 } 351 }
479 352
480 if (int_events & fep->ev_tx) 353 if (int_events & fep->ev_tx)
@@ -811,24 +684,21 @@ static int fs_enet_open(struct net_device *dev)
811 /* not doing this, will cause a crash in fs_enet_rx_napi */ 684 /* not doing this, will cause a crash in fs_enet_rx_napi */
812 fs_init_bds(fep->ndev); 685 fs_init_bds(fep->ndev);
813 686
814 if (fep->fpi->use_napi) 687 napi_enable(&fep->napi);
815 napi_enable(&fep->napi);
816 688
817 /* Install our interrupt handler. */ 689 /* Install our interrupt handler. */
818 r = request_irq(fep->interrupt, fs_enet_interrupt, IRQF_SHARED, 690 r = request_irq(fep->interrupt, fs_enet_interrupt, IRQF_SHARED,
819 "fs_enet-mac", dev); 691 "fs_enet-mac", dev);
820 if (r != 0) { 692 if (r != 0) {
821 dev_err(fep->dev, "Could not allocate FS_ENET IRQ!"); 693 dev_err(fep->dev, "Could not allocate FS_ENET IRQ!");
822 if (fep->fpi->use_napi) 694 napi_disable(&fep->napi);
823 napi_disable(&fep->napi);
824 return -EINVAL; 695 return -EINVAL;
825 } 696 }
826 697
827 err = fs_init_phy(dev); 698 err = fs_init_phy(dev);
828 if (err) { 699 if (err) {
829 free_irq(fep->interrupt, dev); 700 free_irq(fep->interrupt, dev);
830 if (fep->fpi->use_napi) 701 napi_disable(&fep->napi);
831 napi_disable(&fep->napi);
832 return err; 702 return err;
833 } 703 }
834 phy_start(fep->phydev); 704 phy_start(fep->phydev);
@@ -845,8 +715,7 @@ static int fs_enet_close(struct net_device *dev)
845 715
846 netif_stop_queue(dev); 716 netif_stop_queue(dev);
847 netif_carrier_off(dev); 717 netif_carrier_off(dev);
848 if (fep->fpi->use_napi) 718 napi_disable(&fep->napi);
849 napi_disable(&fep->napi);
850 phy_stop(fep->phydev); 719 phy_stop(fep->phydev);
851 720
852 spin_lock_irqsave(&fep->lock, flags); 721 spin_lock_irqsave(&fep->lock, flags);
@@ -1022,7 +891,6 @@ static int fs_enet_probe(struct platform_device *ofdev)
1022 fpi->rx_ring = 32; 891 fpi->rx_ring = 32;
1023 fpi->tx_ring = 32; 892 fpi->tx_ring = 32;
1024 fpi->rx_copybreak = 240; 893 fpi->rx_copybreak = 240;
1025 fpi->use_napi = 1;
1026 fpi->napi_weight = 17; 894 fpi->napi_weight = 17;
1027 fpi->phy_node = of_parse_phandle(ofdev->dev.of_node, "phy-handle", 0); 895 fpi->phy_node = of_parse_phandle(ofdev->dev.of_node, "phy-handle", 0);
1028 if (!fpi->phy_node && of_phy_is_fixed_link(ofdev->dev.of_node)) { 896 if (!fpi->phy_node && of_phy_is_fixed_link(ofdev->dev.of_node)) {
@@ -1102,9 +970,7 @@ static int fs_enet_probe(struct platform_device *ofdev)
1102 970
1103 ndev->netdev_ops = &fs_enet_netdev_ops; 971 ndev->netdev_ops = &fs_enet_netdev_ops;
1104 ndev->watchdog_timeo = 2 * HZ; 972 ndev->watchdog_timeo = 2 * HZ;
1105 if (fpi->use_napi) 973 netif_napi_add(ndev, &fep->napi, fs_enet_rx_napi, fpi->napi_weight);
1106 netif_napi_add(ndev, &fep->napi, fs_enet_rx_napi,
1107 fpi->napi_weight);
1108 974
1109 ndev->ethtool_ops = &fs_ethtool_ops; 975 ndev->ethtool_ops = &fs_ethtool_ops;
1110 976
diff --git a/include/linux/fs_enet_pd.h b/include/linux/fs_enet_pd.h
index efb05961bdd8..77d783f71527 100644
--- a/include/linux/fs_enet_pd.h
+++ b/include/linux/fs_enet_pd.h
@@ -139,7 +139,6 @@ struct fs_platform_info {
139 int rx_ring, tx_ring; /* number of buffers on rx */ 139 int rx_ring, tx_ring; /* number of buffers on rx */
140 __u8 macaddr[ETH_ALEN]; /* mac address */ 140 __u8 macaddr[ETH_ALEN]; /* mac address */
141 int rx_copybreak; /* limit we copy small frames */ 141 int rx_copybreak; /* limit we copy small frames */
142 int use_napi; /* use NAPI */
143 int napi_weight; /* NAPI weight */ 142 int napi_weight; /* NAPI weight */
144 143
145 int use_rmii; /* use RMII mode */ 144 int use_rmii; /* use RMII mode */