Lines Matching refs:priv

127 static noinline void gfar_update_link_state(struct gfar_private *priv);
131 static void free_skb_resources(struct gfar_private *priv);
146 static void gfar_halt_nodisable(struct gfar_private *priv);
174 struct gfar_private *priv = netdev_priv(ndev); in gfar_init_bds() local
175 struct gfar __iomem *regs = priv->gfargrp[0].regs; in gfar_init_bds()
184 for (i = 0; i < priv->num_tx_queues; i++) { in gfar_init_bds()
185 tx_queue = priv->tx_queue[i]; in gfar_init_bds()
208 for (i = 0; i < priv->num_rx_queues; i++) { in gfar_init_bds()
209 rx_queue = priv->rx_queue[i]; in gfar_init_bds()
244 struct gfar_private *priv = netdev_priv(ndev); in gfar_alloc_skb_resources() local
245 struct device *dev = priv->dev; in gfar_alloc_skb_resources()
249 priv->total_tx_ring_size = 0; in gfar_alloc_skb_resources()
250 for (i = 0; i < priv->num_tx_queues; i++) in gfar_alloc_skb_resources()
251 priv->total_tx_ring_size += priv->tx_queue[i]->tx_ring_size; in gfar_alloc_skb_resources()
253 priv->total_rx_ring_size = 0; in gfar_alloc_skb_resources()
254 for (i = 0; i < priv->num_rx_queues; i++) in gfar_alloc_skb_resources()
255 priv->total_rx_ring_size += priv->rx_queue[i]->rx_ring_size; in gfar_alloc_skb_resources()
259 (priv->total_tx_ring_size * in gfar_alloc_skb_resources()
261 (priv->total_rx_ring_size * in gfar_alloc_skb_resources()
267 for (i = 0; i < priv->num_tx_queues; i++) { in gfar_alloc_skb_resources()
268 tx_queue = priv->tx_queue[i]; in gfar_alloc_skb_resources()
278 for (i = 0; i < priv->num_rx_queues; i++) { in gfar_alloc_skb_resources()
279 rx_queue = priv->rx_queue[i]; in gfar_alloc_skb_resources()
288 for (i = 0; i < priv->num_tx_queues; i++) { in gfar_alloc_skb_resources()
289 tx_queue = priv->tx_queue[i]; in gfar_alloc_skb_resources()
301 for (i = 0; i < priv->num_rx_queues; i++) { in gfar_alloc_skb_resources()
302 rx_queue = priv->rx_queue[i]; in gfar_alloc_skb_resources()
320 free_skb_resources(priv); in gfar_alloc_skb_resources()
324 static void gfar_init_tx_rx_base(struct gfar_private *priv) in gfar_init_tx_rx_base() argument
326 struct gfar __iomem *regs = priv->gfargrp[0].regs; in gfar_init_tx_rx_base()
331 for (i = 0; i < priv->num_tx_queues; i++) { in gfar_init_tx_rx_base()
332 gfar_write(baddr, priv->tx_queue[i]->tx_bd_dma_base); in gfar_init_tx_rx_base()
337 for (i = 0; i < priv->num_rx_queues; i++) { in gfar_init_tx_rx_base()
338 gfar_write(baddr, priv->rx_queue[i]->rx_bd_dma_base); in gfar_init_tx_rx_base()
343 static void gfar_init_rqprm(struct gfar_private *priv) in gfar_init_rqprm() argument
345 struct gfar __iomem *regs = priv->gfargrp[0].regs; in gfar_init_rqprm()
350 for (i = 0; i < priv->num_rx_queues; i++) { in gfar_init_rqprm()
351 gfar_write(baddr, priv->rx_queue[i]->rx_ring_size | in gfar_init_rqprm()
357 static void gfar_rx_buff_size_config(struct gfar_private *priv) in gfar_rx_buff_size_config() argument
359 int frame_size = priv->ndev->mtu + ETH_HLEN + ETH_FCS_LEN; in gfar_rx_buff_size_config()
362 priv->uses_rxfcb = 0; in gfar_rx_buff_size_config()
364 if (priv->ndev->features & (NETIF_F_RXCSUM | NETIF_F_HW_VLAN_CTAG_RX)) in gfar_rx_buff_size_config()
365 priv->uses_rxfcb = 1; in gfar_rx_buff_size_config()
367 if (priv->hwts_rx_en) in gfar_rx_buff_size_config()
368 priv->uses_rxfcb = 1; in gfar_rx_buff_size_config()
370 if (priv->uses_rxfcb) in gfar_rx_buff_size_config()
373 frame_size += priv->padding; in gfar_rx_buff_size_config()
378 priv->rx_buffer_size = frame_size; in gfar_rx_buff_size_config()
381 static void gfar_mac_rx_config(struct gfar_private *priv) in gfar_mac_rx_config() argument
383 struct gfar __iomem *regs = priv->gfargrp[0].regs; in gfar_mac_rx_config()
386 if (priv->rx_filer_enable) { in gfar_mac_rx_config()
389 if (priv->poll_mode == GFAR_SQ_POLLING) in gfar_mac_rx_config()
396 if (priv->ndev->flags & IFF_PROMISC) in gfar_mac_rx_config()
399 if (priv->ndev->features & NETIF_F_RXCSUM) in gfar_mac_rx_config()
402 if (priv->extended_hash) in gfar_mac_rx_config()
405 if (priv->padding) { in gfar_mac_rx_config()
407 rctrl |= RCTRL_PADDING(priv->padding); in gfar_mac_rx_config()
411 if (priv->hwts_rx_en) in gfar_mac_rx_config()
414 if (priv->ndev->features & NETIF_F_HW_VLAN_CTAG_RX) in gfar_mac_rx_config()
420 gfar_init_rqprm(priv); in gfar_mac_rx_config()
428 static void gfar_mac_tx_config(struct gfar_private *priv) in gfar_mac_tx_config() argument
430 struct gfar __iomem *regs = priv->gfargrp[0].regs; in gfar_mac_tx_config()
433 if (priv->ndev->features & NETIF_F_IP_CSUM) in gfar_mac_tx_config()
436 if (priv->prio_sched_en) in gfar_mac_tx_config()
444 if (priv->ndev->features & NETIF_F_HW_VLAN_CTAG_TX) in gfar_mac_tx_config()
450 static void gfar_configure_coalescing(struct gfar_private *priv, in gfar_configure_coalescing() argument
453 struct gfar __iomem *regs = priv->gfargrp[0].regs; in gfar_configure_coalescing()
456 if (priv->mode == MQ_MG_MODE) { in gfar_configure_coalescing()
460 for_each_set_bit(i, &tx_mask, priv->num_tx_queues) { in gfar_configure_coalescing()
462 if (likely(priv->tx_queue[i]->txcoalescing)) in gfar_configure_coalescing()
463 gfar_write(baddr + i, priv->tx_queue[i]->txic); in gfar_configure_coalescing()
467 for_each_set_bit(i, &rx_mask, priv->num_rx_queues) { in gfar_configure_coalescing()
469 if (likely(priv->rx_queue[i]->rxcoalescing)) in gfar_configure_coalescing()
470 gfar_write(baddr + i, priv->rx_queue[i]->rxic); in gfar_configure_coalescing()
477 if (likely(priv->tx_queue[0]->txcoalescing)) in gfar_configure_coalescing()
478 gfar_write(&regs->txic, priv->tx_queue[0]->txic); in gfar_configure_coalescing()
481 if (unlikely(priv->rx_queue[0]->rxcoalescing)) in gfar_configure_coalescing()
482 gfar_write(&regs->rxic, priv->rx_queue[0]->rxic); in gfar_configure_coalescing()
486 void gfar_configure_coalescing_all(struct gfar_private *priv) in gfar_configure_coalescing_all() argument
488 gfar_configure_coalescing(priv, 0xFF, 0xFF); in gfar_configure_coalescing_all()
493 struct gfar_private *priv = netdev_priv(dev); in gfar_get_stats() local
498 for (i = 0; i < priv->num_rx_queues; i++) { in gfar_get_stats()
499 rx_packets += priv->rx_queue[i]->stats.rx_packets; in gfar_get_stats()
500 rx_bytes += priv->rx_queue[i]->stats.rx_bytes; in gfar_get_stats()
501 rx_dropped += priv->rx_queue[i]->stats.rx_dropped; in gfar_get_stats()
508 for (i = 0; i < priv->num_tx_queues; i++) { in gfar_get_stats()
509 tx_bytes += priv->tx_queue[i]->stats.tx_bytes; in gfar_get_stats()
510 tx_packets += priv->tx_queue[i]->stats.tx_packets; in gfar_get_stats()
536 static void gfar_ints_disable(struct gfar_private *priv) in gfar_ints_disable() argument
539 for (i = 0; i < priv->num_grps; i++) { in gfar_ints_disable()
540 struct gfar __iomem *regs = priv->gfargrp[i].regs; in gfar_ints_disable()
549 static void gfar_ints_enable(struct gfar_private *priv) in gfar_ints_enable() argument
552 for (i = 0; i < priv->num_grps; i++) { in gfar_ints_enable()
553 struct gfar __iomem *regs = priv->gfargrp[i].regs; in gfar_ints_enable()
559 static void lock_tx_qs(struct gfar_private *priv) in lock_tx_qs() argument
563 for (i = 0; i < priv->num_tx_queues; i++) in lock_tx_qs()
564 spin_lock(&priv->tx_queue[i]->txlock); in lock_tx_qs()
567 static void unlock_tx_qs(struct gfar_private *priv) in unlock_tx_qs() argument
571 for (i = 0; i < priv->num_tx_queues; i++) in unlock_tx_qs()
572 spin_unlock(&priv->tx_queue[i]->txlock); in unlock_tx_qs()
575 static int gfar_alloc_tx_queues(struct gfar_private *priv) in gfar_alloc_tx_queues() argument
579 for (i = 0; i < priv->num_tx_queues; i++) { in gfar_alloc_tx_queues()
580 priv->tx_queue[i] = kzalloc(sizeof(struct gfar_priv_tx_q), in gfar_alloc_tx_queues()
582 if (!priv->tx_queue[i]) in gfar_alloc_tx_queues()
585 priv->tx_queue[i]->tx_skbuff = NULL; in gfar_alloc_tx_queues()
586 priv->tx_queue[i]->qindex = i; in gfar_alloc_tx_queues()
587 priv->tx_queue[i]->dev = priv->ndev; in gfar_alloc_tx_queues()
588 spin_lock_init(&(priv->tx_queue[i]->txlock)); in gfar_alloc_tx_queues()
593 static int gfar_alloc_rx_queues(struct gfar_private *priv) in gfar_alloc_rx_queues() argument
597 for (i = 0; i < priv->num_rx_queues; i++) { in gfar_alloc_rx_queues()
598 priv->rx_queue[i] = kzalloc(sizeof(struct gfar_priv_rx_q), in gfar_alloc_rx_queues()
600 if (!priv->rx_queue[i]) in gfar_alloc_rx_queues()
603 priv->rx_queue[i]->rx_skbuff = NULL; in gfar_alloc_rx_queues()
604 priv->rx_queue[i]->qindex = i; in gfar_alloc_rx_queues()
605 priv->rx_queue[i]->dev = priv->ndev; in gfar_alloc_rx_queues()
610 static void gfar_free_tx_queues(struct gfar_private *priv) in gfar_free_tx_queues() argument
614 for (i = 0; i < priv->num_tx_queues; i++) in gfar_free_tx_queues()
615 kfree(priv->tx_queue[i]); in gfar_free_tx_queues()
618 static void gfar_free_rx_queues(struct gfar_private *priv) in gfar_free_rx_queues() argument
622 for (i = 0; i < priv->num_rx_queues; i++) in gfar_free_rx_queues()
623 kfree(priv->rx_queue[i]); in gfar_free_rx_queues()
626 static void unmap_group_regs(struct gfar_private *priv) in unmap_group_regs() argument
631 if (priv->gfargrp[i].regs) in unmap_group_regs()
632 iounmap(priv->gfargrp[i].regs); in unmap_group_regs()
635 static void free_gfar_dev(struct gfar_private *priv) in free_gfar_dev() argument
639 for (i = 0; i < priv->num_grps; i++) in free_gfar_dev()
641 kfree(priv->gfargrp[i].irqinfo[j]); in free_gfar_dev()
642 priv->gfargrp[i].irqinfo[j] = NULL; in free_gfar_dev()
645 free_netdev(priv->ndev); in free_gfar_dev()
648 static void disable_napi(struct gfar_private *priv) in disable_napi() argument
652 for (i = 0; i < priv->num_grps; i++) { in disable_napi()
653 napi_disable(&priv->gfargrp[i].napi_rx); in disable_napi()
654 napi_disable(&priv->gfargrp[i].napi_tx); in disable_napi()
658 static void enable_napi(struct gfar_private *priv) in enable_napi() argument
662 for (i = 0; i < priv->num_grps; i++) { in enable_napi()
663 napi_enable(&priv->gfargrp[i].napi_rx); in enable_napi()
664 napi_enable(&priv->gfargrp[i].napi_tx); in enable_napi()
669 struct gfar_private *priv, const char *model) in gfar_parse_group() argument
671 struct gfar_priv_grp *grp = &priv->gfargrp[priv->num_grps]; in gfar_parse_group()
697 grp->priv = priv; in gfar_parse_group()
699 if (priv->mode == MQ_MG_MODE) { in gfar_parse_group()
703 grp->rx_bit_map = (DEFAULT_MAPPING >> priv->num_grps); in gfar_parse_group()
704 grp->tx_bit_map = (DEFAULT_MAPPING >> priv->num_grps); in gfar_parse_group()
709 rxq_mask : (DEFAULT_MAPPING >> priv->num_grps); in gfar_parse_group()
715 txq_mask : (DEFAULT_MAPPING >> priv->num_grps); in gfar_parse_group()
718 if (priv->poll_mode == GFAR_SQ_POLLING) { in gfar_parse_group()
720 grp->rx_bit_map = (DEFAULT_MAPPING >> priv->num_grps); in gfar_parse_group()
721 grp->tx_bit_map = (DEFAULT_MAPPING >> priv->num_grps); in gfar_parse_group()
737 for_each_set_bit(i, &grp->rx_bit_map, priv->num_rx_queues) { in gfar_parse_group()
739 grp->rx_queue = priv->rx_queue[i]; in gfar_parse_group()
742 priv->rqueue |= ((RQUEUE_EN0 | RQUEUE_EX0) >> i); in gfar_parse_group()
743 priv->rx_queue[i]->grp = grp; in gfar_parse_group()
746 for_each_set_bit(i, &grp->tx_bit_map, priv->num_tx_queues) { in gfar_parse_group()
748 grp->tx_queue = priv->tx_queue[i]; in gfar_parse_group()
751 priv->tqueue |= (TQUEUE_EN0 >> i); in gfar_parse_group()
752 priv->tx_queue[i]->grp = grp; in gfar_parse_group()
755 priv->num_grps++; in gfar_parse_group()
779 struct gfar_private *priv = NULL; in gfar_of_init() local
845 *pdev = alloc_etherdev_mq(sizeof(*priv), num_tx_qs); in gfar_of_init()
850 priv = netdev_priv(dev); in gfar_of_init()
851 priv->ndev = dev; in gfar_of_init()
853 priv->mode = mode; in gfar_of_init()
854 priv->poll_mode = poll_mode; in gfar_of_init()
856 priv->num_tx_queues = num_tx_qs; in gfar_of_init()
858 priv->num_rx_queues = num_rx_qs; in gfar_of_init()
860 err = gfar_alloc_tx_queues(priv); in gfar_of_init()
864 err = gfar_alloc_rx_queues(priv); in gfar_of_init()
875 INIT_LIST_HEAD(&priv->rx_list.list); in gfar_of_init()
876 priv->rx_list.count = 0; in gfar_of_init()
877 mutex_init(&priv->rx_queue_access); in gfar_of_init()
880 priv->gfargrp[i].regs = NULL; in gfar_of_init()
883 if (priv->mode == MQ_MG_MODE) { in gfar_of_init()
888 err = gfar_parse_group(child, priv, model); in gfar_of_init()
893 err = gfar_parse_group(np, priv, model); in gfar_of_init()
901 priv->device_flags |= FSL_GIANFAR_DEV_HAS_BD_STASHING; in gfar_of_init()
902 priv->bd_stash_en = 1; in gfar_of_init()
908 priv->rx_stash_size = stash_len; in gfar_of_init()
913 priv->rx_stash_index = stash_idx; in gfar_of_init()
916 priv->device_flags |= FSL_GIANFAR_DEV_HAS_BUF_STASHING; in gfar_of_init()
924 priv->device_flags |= FSL_GIANFAR_DEV_HAS_GIGABIT | in gfar_of_init()
930 priv->device_flags |= FSL_GIANFAR_DEV_HAS_GIGABIT | in gfar_of_init()
944 priv->interface = PHY_INTERFACE_MODE_RGMII_ID; in gfar_of_init()
946 priv->interface = PHY_INTERFACE_MODE_MII; in gfar_of_init()
949 priv->device_flags |= FSL_GIANFAR_DEV_HAS_MAGIC_PACKET; in gfar_of_init()
951 priv->phy_node = of_parse_phandle(np, "phy-handle", 0); in gfar_of_init()
956 if (!priv->phy_node && of_phy_is_fixed_link(np)) { in gfar_of_init()
961 priv->phy_node = of_node_get(np); in gfar_of_init()
965 priv->tbi_node = of_parse_phandle(np, "tbi-handle", 0); in gfar_of_init()
970 unmap_group_regs(priv); in gfar_of_init()
972 gfar_free_rx_queues(priv); in gfar_of_init()
974 gfar_free_tx_queues(priv); in gfar_of_init()
975 free_gfar_dev(priv); in gfar_of_init()
982 struct gfar_private *priv = netdev_priv(netdev); in gfar_hwtstamp_set() local
993 priv->hwts_tx_en = 0; in gfar_hwtstamp_set()
996 if (!(priv->device_flags & FSL_GIANFAR_DEV_HAS_TIMER)) in gfar_hwtstamp_set()
998 priv->hwts_tx_en = 1; in gfar_hwtstamp_set()
1006 if (priv->hwts_rx_en) { in gfar_hwtstamp_set()
1007 priv->hwts_rx_en = 0; in gfar_hwtstamp_set()
1012 if (!(priv->device_flags & FSL_GIANFAR_DEV_HAS_TIMER)) in gfar_hwtstamp_set()
1014 if (!priv->hwts_rx_en) { in gfar_hwtstamp_set()
1015 priv->hwts_rx_en = 1; in gfar_hwtstamp_set()
1029 struct gfar_private *priv = netdev_priv(netdev); in gfar_hwtstamp_get() local
1032 config.tx_type = priv->hwts_tx_en ? HWTSTAMP_TX_ON : HWTSTAMP_TX_OFF; in gfar_hwtstamp_get()
1033 config.rx_filter = (priv->hwts_rx_en ? in gfar_hwtstamp_get()
1042 struct gfar_private *priv = netdev_priv(dev); in gfar_ioctl() local
1052 if (!priv->phydev) in gfar_ioctl()
1055 return phy_mii_ioctl(priv->phydev, rq, cmd); in gfar_ioctl()
1058 static u32 cluster_entry_per_class(struct gfar_private *priv, u32 rqfar, in cluster_entry_per_class() argument
1066 priv->ftp_rqfpr[rqfar] = rqfpr; in cluster_entry_per_class()
1067 priv->ftp_rqfcr[rqfar] = rqfcr; in cluster_entry_per_class()
1068 gfar_write_filer(priv, rqfar, rqfcr, rqfpr); in cluster_entry_per_class()
1072 priv->ftp_rqfpr[rqfar] = rqfpr; in cluster_entry_per_class()
1073 priv->ftp_rqfcr[rqfar] = rqfcr; in cluster_entry_per_class()
1074 gfar_write_filer(priv, rqfar, rqfcr, rqfpr); in cluster_entry_per_class()
1079 priv->ftp_rqfcr[rqfar] = rqfcr; in cluster_entry_per_class()
1080 priv->ftp_rqfpr[rqfar] = rqfpr; in cluster_entry_per_class()
1081 gfar_write_filer(priv, rqfar, rqfcr, rqfpr); in cluster_entry_per_class()
1086 priv->ftp_rqfcr[rqfar] = rqfcr; in cluster_entry_per_class()
1087 priv->ftp_rqfpr[rqfar] = rqfpr; in cluster_entry_per_class()
1088 gfar_write_filer(priv, rqfar, rqfcr, rqfpr); in cluster_entry_per_class()
1093 static void gfar_init_filer_table(struct gfar_private *priv) in gfar_init_filer_table() argument
1102 priv->ftp_rqfcr[rqfar] = rqfcr; in gfar_init_filer_table()
1103 priv->ftp_rqfpr[rqfar] = rqfpr; in gfar_init_filer_table()
1104 gfar_write_filer(priv, rqfar, rqfcr, rqfpr); in gfar_init_filer_table()
1106 rqfar = cluster_entry_per_class(priv, rqfar, RQFPR_IPV6); in gfar_init_filer_table()
1107 rqfar = cluster_entry_per_class(priv, rqfar, RQFPR_IPV6 | RQFPR_UDP); in gfar_init_filer_table()
1108 rqfar = cluster_entry_per_class(priv, rqfar, RQFPR_IPV6 | RQFPR_TCP); in gfar_init_filer_table()
1109 rqfar = cluster_entry_per_class(priv, rqfar, RQFPR_IPV4); in gfar_init_filer_table()
1110 rqfar = cluster_entry_per_class(priv, rqfar, RQFPR_IPV4 | RQFPR_UDP); in gfar_init_filer_table()
1111 rqfar = cluster_entry_per_class(priv, rqfar, RQFPR_IPV4 | RQFPR_TCP); in gfar_init_filer_table()
1114 priv->cur_filer_idx = rqfar; in gfar_init_filer_table()
1119 priv->ftp_rqfcr[i] = rqfcr; in gfar_init_filer_table()
1120 priv->ftp_rqfpr[i] = rqfpr; in gfar_init_filer_table()
1121 gfar_write_filer(priv, i, rqfcr, rqfpr); in gfar_init_filer_table()
1126 static void __gfar_detect_errata_83xx(struct gfar_private *priv) in __gfar_detect_errata_83xx() argument
1136 priv->errata |= GFAR_ERRATA_74; in __gfar_detect_errata_83xx()
1141 priv->errata |= GFAR_ERRATA_76; in __gfar_detect_errata_83xx()
1145 priv->errata |= GFAR_ERRATA_12; in __gfar_detect_errata_83xx()
1148 static void __gfar_detect_errata_85xx(struct gfar_private *priv) in __gfar_detect_errata_85xx() argument
1153 priv->errata |= GFAR_ERRATA_12; in __gfar_detect_errata_85xx()
1156 priv->errata |= GFAR_ERRATA_76; /* aka eTSEC 20 */ in __gfar_detect_errata_85xx()
1160 static void gfar_detect_errata(struct gfar_private *priv) in gfar_detect_errata() argument
1162 struct device *dev = &priv->ofdev->dev; in gfar_detect_errata()
1165 priv->errata |= GFAR_ERRATA_A002; in gfar_detect_errata()
1169 __gfar_detect_errata_85xx(priv); in gfar_detect_errata()
1171 __gfar_detect_errata_83xx(priv); in gfar_detect_errata()
1174 if (priv->errata) in gfar_detect_errata()
1176 priv->errata); in gfar_detect_errata()
1179 void gfar_mac_reset(struct gfar_private *priv) in gfar_mac_reset() argument
1181 struct gfar __iomem *regs = priv->gfargrp[0].regs; in gfar_mac_reset()
1198 gfar_rx_buff_size_config(priv); in gfar_mac_reset()
1201 gfar_write(&regs->maxfrm, priv->rx_buffer_size); in gfar_mac_reset()
1202 gfar_write(&regs->mrblr, priv->rx_buffer_size); in gfar_mac_reset()
1214 if (priv->rx_buffer_size > DEFAULT_RX_BUFFER_SIZE || in gfar_mac_reset()
1215 gfar_has_errata(priv, GFAR_ERRATA_74)) in gfar_mac_reset()
1239 if (priv->extended_hash) in gfar_mac_reset()
1240 gfar_clear_exact_match(priv->ndev); in gfar_mac_reset()
1242 gfar_mac_rx_config(priv); in gfar_mac_reset()
1244 gfar_mac_tx_config(priv); in gfar_mac_reset()
1246 gfar_set_mac_address(priv->ndev); in gfar_mac_reset()
1248 gfar_set_multi(priv->ndev); in gfar_mac_reset()
1251 gfar_ints_disable(priv); in gfar_mac_reset()
1254 gfar_configure_coalescing_all(priv); in gfar_mac_reset()
1257 static void gfar_hw_init(struct gfar_private *priv) in gfar_hw_init() argument
1259 struct gfar __iomem *regs = priv->gfargrp[0].regs; in gfar_hw_init()
1265 gfar_halt(priv); in gfar_hw_init()
1267 gfar_mac_reset(priv); in gfar_hw_init()
1270 if (priv->device_flags & FSL_GIANFAR_DEV_HAS_RMON) { in gfar_hw_init()
1282 attrs = ATTRELI_EL(priv->rx_stash_size) | in gfar_hw_init()
1283 ATTRELI_EI(priv->rx_stash_index); in gfar_hw_init()
1292 if (priv->bd_stash_en) in gfar_hw_init()
1295 if (priv->rx_stash_size != 0) in gfar_hw_init()
1306 if (priv->num_grps > 1) in gfar_hw_init()
1307 gfar_write_isrg(priv); in gfar_hw_init()
1310 static void gfar_init_addr_hash_table(struct gfar_private *priv) in gfar_init_addr_hash_table() argument
1312 struct gfar __iomem *regs = priv->gfargrp[0].regs; in gfar_init_addr_hash_table()
1314 if (priv->device_flags & FSL_GIANFAR_DEV_HAS_EXTENDED_HASH) { in gfar_init_addr_hash_table()
1315 priv->extended_hash = 1; in gfar_init_addr_hash_table()
1316 priv->hash_width = 9; in gfar_init_addr_hash_table()
1318 priv->hash_regs[0] = &regs->igaddr0; in gfar_init_addr_hash_table()
1319 priv->hash_regs[1] = &regs->igaddr1; in gfar_init_addr_hash_table()
1320 priv->hash_regs[2] = &regs->igaddr2; in gfar_init_addr_hash_table()
1321 priv->hash_regs[3] = &regs->igaddr3; in gfar_init_addr_hash_table()
1322 priv->hash_regs[4] = &regs->igaddr4; in gfar_init_addr_hash_table()
1323 priv->hash_regs[5] = &regs->igaddr5; in gfar_init_addr_hash_table()
1324 priv->hash_regs[6] = &regs->igaddr6; in gfar_init_addr_hash_table()
1325 priv->hash_regs[7] = &regs->igaddr7; in gfar_init_addr_hash_table()
1326 priv->hash_regs[8] = &regs->gaddr0; in gfar_init_addr_hash_table()
1327 priv->hash_regs[9] = &regs->gaddr1; in gfar_init_addr_hash_table()
1328 priv->hash_regs[10] = &regs->gaddr2; in gfar_init_addr_hash_table()
1329 priv->hash_regs[11] = &regs->gaddr3; in gfar_init_addr_hash_table()
1330 priv->hash_regs[12] = &regs->gaddr4; in gfar_init_addr_hash_table()
1331 priv->hash_regs[13] = &regs->gaddr5; in gfar_init_addr_hash_table()
1332 priv->hash_regs[14] = &regs->gaddr6; in gfar_init_addr_hash_table()
1333 priv->hash_regs[15] = &regs->gaddr7; in gfar_init_addr_hash_table()
1336 priv->extended_hash = 0; in gfar_init_addr_hash_table()
1337 priv->hash_width = 8; in gfar_init_addr_hash_table()
1339 priv->hash_regs[0] = &regs->gaddr0; in gfar_init_addr_hash_table()
1340 priv->hash_regs[1] = &regs->gaddr1; in gfar_init_addr_hash_table()
1341 priv->hash_regs[2] = &regs->gaddr2; in gfar_init_addr_hash_table()
1342 priv->hash_regs[3] = &regs->gaddr3; in gfar_init_addr_hash_table()
1343 priv->hash_regs[4] = &regs->gaddr4; in gfar_init_addr_hash_table()
1344 priv->hash_regs[5] = &regs->gaddr5; in gfar_init_addr_hash_table()
1345 priv->hash_regs[6] = &regs->gaddr6; in gfar_init_addr_hash_table()
1346 priv->hash_regs[7] = &regs->gaddr7; in gfar_init_addr_hash_table()
1356 struct gfar_private *priv = NULL; in gfar_probe() local
1364 priv = netdev_priv(dev); in gfar_probe()
1365 priv->ndev = dev; in gfar_probe()
1366 priv->ofdev = ofdev; in gfar_probe()
1367 priv->dev = &ofdev->dev; in gfar_probe()
1370 spin_lock_init(&priv->bflock); in gfar_probe()
1371 INIT_WORK(&priv->reset_task, gfar_reset_task); in gfar_probe()
1373 platform_set_drvdata(ofdev, priv); in gfar_probe()
1375 gfar_detect_errata(priv); in gfar_probe()
1378 dev->base_addr = (unsigned long) priv->gfargrp[0].regs; in gfar_probe()
1387 for (i = 0; i < priv->num_grps; i++) { in gfar_probe()
1388 if (priv->poll_mode == GFAR_SQ_POLLING) { in gfar_probe()
1389 netif_napi_add(dev, &priv->gfargrp[i].napi_rx, in gfar_probe()
1391 netif_napi_add(dev, &priv->gfargrp[i].napi_tx, in gfar_probe()
1394 netif_napi_add(dev, &priv->gfargrp[i].napi_rx, in gfar_probe()
1396 netif_napi_add(dev, &priv->gfargrp[i].napi_tx, in gfar_probe()
1401 if (priv->device_flags & FSL_GIANFAR_DEV_HAS_CSUM) { in gfar_probe()
1408 if (priv->device_flags & FSL_GIANFAR_DEV_HAS_VLAN) { in gfar_probe()
1414 gfar_init_addr_hash_table(priv); in gfar_probe()
1417 if (priv->device_flags & FSL_GIANFAR_DEV_HAS_TIMER) in gfar_probe()
1418 priv->padding = 8; in gfar_probe()
1421 priv->device_flags & FSL_GIANFAR_DEV_HAS_TIMER) in gfar_probe()
1424 priv->rx_buffer_size = DEFAULT_RX_BUFFER_SIZE; in gfar_probe()
1427 for (i = 0; i < priv->num_tx_queues; i++) { in gfar_probe()
1428 priv->tx_queue[i]->tx_ring_size = DEFAULT_TX_RING_SIZE; in gfar_probe()
1429 priv->tx_queue[i]->num_txbdfree = DEFAULT_TX_RING_SIZE; in gfar_probe()
1430 priv->tx_queue[i]->txcoalescing = DEFAULT_TX_COALESCE; in gfar_probe()
1431 priv->tx_queue[i]->txic = DEFAULT_TXIC; in gfar_probe()
1434 for (i = 0; i < priv->num_rx_queues; i++) { in gfar_probe()
1435 priv->rx_queue[i]->rx_ring_size = DEFAULT_RX_RING_SIZE; in gfar_probe()
1436 priv->rx_queue[i]->rxcoalescing = DEFAULT_RX_COALESCE; in gfar_probe()
1437 priv->rx_queue[i]->rxic = DEFAULT_RXIC; in gfar_probe()
1441 priv->rx_filer_enable = 1; in gfar_probe()
1443 priv->msg_enable = (NETIF_MSG_IFUP << 1 ) - 1; in gfar_probe()
1445 if (priv->num_tx_queues == 1) in gfar_probe()
1446 priv->prio_sched_en = 1; in gfar_probe()
1448 set_bit(GFAR_DOWN, &priv->state); in gfar_probe()
1450 gfar_hw_init(priv); in gfar_probe()
1463 priv->device_flags & in gfar_probe()
1467 for (i = 0; i < priv->num_grps; i++) { in gfar_probe()
1468 struct gfar_priv_grp *grp = &priv->gfargrp[i]; in gfar_probe()
1469 if (priv->device_flags & FSL_GIANFAR_DEV_HAS_MULTI_INTR) { in gfar_probe()
1481 gfar_init_filer_table(priv); in gfar_probe()
1490 for (i = 0; i < priv->num_rx_queues; i++) in gfar_probe()
1492 i, priv->rx_queue[i]->rx_ring_size); in gfar_probe()
1493 for (i = 0; i < priv->num_tx_queues; i++) in gfar_probe()
1495 i, priv->tx_queue[i]->tx_ring_size); in gfar_probe()
1500 unmap_group_regs(priv); in gfar_probe()
1501 gfar_free_rx_queues(priv); in gfar_probe()
1502 gfar_free_tx_queues(priv); in gfar_probe()
1503 of_node_put(priv->phy_node); in gfar_probe()
1504 of_node_put(priv->tbi_node); in gfar_probe()
1505 free_gfar_dev(priv); in gfar_probe()
1511 struct gfar_private *priv = platform_get_drvdata(ofdev); in gfar_remove() local
1513 of_node_put(priv->phy_node); in gfar_remove()
1514 of_node_put(priv->tbi_node); in gfar_remove()
1516 unregister_netdev(priv->ndev); in gfar_remove()
1517 unmap_group_regs(priv); in gfar_remove()
1518 gfar_free_rx_queues(priv); in gfar_remove()
1519 gfar_free_tx_queues(priv); in gfar_remove()
1520 free_gfar_dev(priv); in gfar_remove()
1529 struct gfar_private *priv = dev_get_drvdata(dev); in gfar_suspend() local
1530 struct net_device *ndev = priv->ndev; in gfar_suspend()
1531 struct gfar __iomem *regs = priv->gfargrp[0].regs; in gfar_suspend()
1535 int magic_packet = priv->wol_en && in gfar_suspend()
1536 (priv->device_flags & in gfar_suspend()
1544 lock_tx_qs(priv); in gfar_suspend()
1546 gfar_halt_nodisable(priv); in gfar_suspend()
1558 unlock_tx_qs(priv); in gfar_suspend()
1561 disable_napi(priv); in gfar_suspend()
1572 phy_stop(priv->phydev); in gfar_suspend()
1581 struct gfar_private *priv = dev_get_drvdata(dev); in gfar_resume() local
1582 struct net_device *ndev = priv->ndev; in gfar_resume()
1583 struct gfar __iomem *regs = priv->gfargrp[0].regs; in gfar_resume()
1586 int magic_packet = priv->wol_en && in gfar_resume()
1587 (priv->device_flags & in gfar_resume()
1595 if (!magic_packet && priv->phydev) in gfar_resume()
1596 phy_start(priv->phydev); in gfar_resume()
1602 lock_tx_qs(priv); in gfar_resume()
1608 gfar_start(priv); in gfar_resume()
1610 unlock_tx_qs(priv); in gfar_resume()
1615 enable_napi(priv); in gfar_resume()
1622 struct gfar_private *priv = dev_get_drvdata(dev); in gfar_restore() local
1623 struct net_device *ndev = priv->ndev; in gfar_restore()
1632 free_skb_resources(priv); in gfar_restore()
1636 gfar_mac_reset(priv); in gfar_restore()
1638 gfar_init_tx_rx_base(priv); in gfar_restore()
1640 gfar_start(priv); in gfar_restore()
1642 priv->oldlink = 0; in gfar_restore()
1643 priv->oldspeed = 0; in gfar_restore()
1644 priv->oldduplex = -1; in gfar_restore()
1646 if (priv->phydev) in gfar_restore()
1647 phy_start(priv->phydev); in gfar_restore()
1650 enable_napi(priv); in gfar_restore()
1676 struct gfar_private *priv = netdev_priv(dev); in gfar_get_interface() local
1677 struct gfar __iomem *regs = priv->gfargrp[0].regs; in gfar_get_interface()
1697 phy_interface_t interface = priv->interface; in gfar_get_interface()
1709 if (priv->device_flags & FSL_GIANFAR_DEV_HAS_GIGABIT) in gfar_get_interface()
1721 struct gfar_private *priv = netdev_priv(dev); in init_phy() local
1723 priv->device_flags & FSL_GIANFAR_DEV_HAS_GIGABIT ? in init_phy()
1727 priv->oldlink = 0; in init_phy()
1728 priv->oldspeed = 0; in init_phy()
1729 priv->oldduplex = -1; in init_phy()
1733 priv->phydev = of_phy_connect(dev, priv->phy_node, &adjust_link, 0, in init_phy()
1735 if (!priv->phydev) { in init_phy()
1744 priv->phydev->supported &= (GFAR_SUPPORTED | gigabit_support); in init_phy()
1745 priv->phydev->advertising = priv->phydev->supported; in init_phy()
1748 priv->phydev->supported |= (SUPPORTED_Pause | SUPPORTED_Asym_Pause); in init_phy()
1763 struct gfar_private *priv = netdev_priv(dev); in gfar_configure_serdes() local
1766 if (!priv->tbi_node) { in gfar_configure_serdes()
1772 tbiphy = of_phy_find_device(priv->tbi_node); in gfar_configure_serdes()
1798 static int __gfar_is_rx_idle(struct gfar_private *priv) in __gfar_is_rx_idle() argument
1805 if (!gfar_has_errata(priv, GFAR_ERRATA_A002)) in __gfar_is_rx_idle()
1812 res = gfar_read((void __iomem *)priv->gfargrp[0].regs + 0xd1c); in __gfar_is_rx_idle()
1821 static void gfar_halt_nodisable(struct gfar_private *priv) in gfar_halt_nodisable() argument
1823 struct gfar __iomem *regs = priv->gfargrp[0].regs; in gfar_halt_nodisable()
1828 gfar_ints_disable(priv); in gfar_halt_nodisable()
1830 if (gfar_is_dma_stopped(priv)) in gfar_halt_nodisable()
1840 while (!(stopped = gfar_is_dma_stopped(priv)) && timeout) { in gfar_halt_nodisable()
1846 stopped = gfar_is_dma_stopped(priv); in gfar_halt_nodisable()
1848 if (!stopped && !gfar_is_rx_dma_stopped(priv) && in gfar_halt_nodisable()
1849 !__gfar_is_rx_idle(priv)) in gfar_halt_nodisable()
1854 void gfar_halt(struct gfar_private *priv) in gfar_halt() argument
1856 struct gfar __iomem *regs = priv->gfargrp[0].regs; in gfar_halt()
1865 gfar_halt_nodisable(priv); in gfar_halt()
1875 struct gfar_private *priv = netdev_priv(dev); in stop_gfar() local
1880 set_bit(GFAR_DOWN, &priv->state); in stop_gfar()
1883 disable_napi(priv); in stop_gfar()
1886 gfar_halt(priv); in stop_gfar()
1888 phy_stop(priv->phydev); in stop_gfar()
1890 free_skb_resources(priv); in stop_gfar()
1896 struct gfar_private *priv = netdev_priv(tx_queue->dev); in free_skb_tx_queue() local
1905 dma_unmap_single(priv->dev, be32_to_cpu(txbdp->bufPtr), in free_skb_tx_queue()
1911 dma_unmap_page(priv->dev, be32_to_cpu(txbdp->bufPtr), in free_skb_tx_queue()
1926 struct gfar_private *priv = netdev_priv(rx_queue->dev); in free_skb_rx_queue() local
1933 dma_unmap_single(priv->dev, be32_to_cpu(rxbdp->bufPtr), in free_skb_rx_queue()
1934 priv->rx_buffer_size, in free_skb_rx_queue()
1950 static void free_skb_resources(struct gfar_private *priv) in free_skb_resources() argument
1957 for (i = 0; i < priv->num_tx_queues; i++) { in free_skb_resources()
1960 tx_queue = priv->tx_queue[i]; in free_skb_resources()
1967 for (i = 0; i < priv->num_rx_queues; i++) { in free_skb_resources()
1968 rx_queue = priv->rx_queue[i]; in free_skb_resources()
1973 dma_free_coherent(priv->dev, in free_skb_resources()
1974 sizeof(struct txbd8) * priv->total_tx_ring_size + in free_skb_resources()
1975 sizeof(struct rxbd8) * priv->total_rx_ring_size, in free_skb_resources()
1976 priv->tx_queue[0]->tx_bd_base, in free_skb_resources()
1977 priv->tx_queue[0]->tx_bd_dma_base); in free_skb_resources()
1980 void gfar_start(struct gfar_private *priv) in gfar_start() argument
1982 struct gfar __iomem *regs = priv->gfargrp[0].regs; in gfar_start()
1987 gfar_write(&regs->rqueue, priv->rqueue); in gfar_start()
1988 gfar_write(&regs->tqueue, priv->tqueue); in gfar_start()
2000 for (i = 0; i < priv->num_grps; i++) { in gfar_start()
2001 regs = priv->gfargrp[i].regs; in gfar_start()
2003 gfar_write(&regs->tstat, priv->gfargrp[i].tstat); in gfar_start()
2004 gfar_write(&regs->rstat, priv->gfargrp[i].rstat); in gfar_start()
2012 gfar_ints_enable(priv); in gfar_start()
2014 priv->ndev->trans_start = jiffies; /* prevent tx timeout */ in gfar_start()
2026 struct gfar_private *priv = grp->priv; in register_grp_irqs() local
2027 struct net_device *dev = priv->ndev; in register_grp_irqs()
2033 if (priv->device_flags & FSL_GIANFAR_DEV_HAS_MULTI_INTR) { in register_grp_irqs()
2040 netif_err(priv, intr, dev, "Can't get IRQ %d\n", in register_grp_irqs()
2048 netif_err(priv, intr, dev, "Can't get IRQ %d\n", in register_grp_irqs()
2055 netif_err(priv, intr, dev, "Can't get IRQ %d\n", in register_grp_irqs()
2063 netif_err(priv, intr, dev, "Can't get IRQ %d\n", in register_grp_irqs()
2080 static void gfar_free_irq(struct gfar_private *priv) in gfar_free_irq() argument
2085 if (priv->device_flags & FSL_GIANFAR_DEV_HAS_MULTI_INTR) { in gfar_free_irq()
2086 for (i = 0; i < priv->num_grps; i++) in gfar_free_irq()
2087 free_grp_irqs(&priv->gfargrp[i]); in gfar_free_irq()
2089 for (i = 0; i < priv->num_grps; i++) in gfar_free_irq()
2090 free_irq(gfar_irq(&priv->gfargrp[i], TX)->irq, in gfar_free_irq()
2091 &priv->gfargrp[i]); in gfar_free_irq()
2095 static int gfar_request_irq(struct gfar_private *priv) in gfar_request_irq() argument
2099 for (i = 0; i < priv->num_grps; i++) { in gfar_request_irq()
2100 err = register_grp_irqs(&priv->gfargrp[i]); in gfar_request_irq()
2103 free_grp_irqs(&priv->gfargrp[j]); in gfar_request_irq()
2114 struct gfar_private *priv = netdev_priv(ndev); in startup_gfar() local
2117 gfar_mac_reset(priv); in startup_gfar()
2123 gfar_init_tx_rx_base(priv); in startup_gfar()
2126 clear_bit(GFAR_DOWN, &priv->state); in startup_gfar()
2130 gfar_start(priv); in startup_gfar()
2132 phy_start(priv->phydev); in startup_gfar()
2134 enable_napi(priv); in startup_gfar()
2146 struct gfar_private *priv = netdev_priv(dev); in gfar_enet_open() local
2153 err = gfar_request_irq(priv); in gfar_enet_open()
2161 device_set_wakeup_enable(&dev->dev, priv->wol_en); in gfar_enet_open()
2225 static inline bool gfar_csum_errata_12(struct gfar_private *priv, in gfar_csum_errata_12() argument
2228 return (gfar_has_errata(priv, GFAR_ERRATA_12) && in gfar_csum_errata_12()
2235 static inline bool gfar_csum_errata_76(struct gfar_private *priv, in gfar_csum_errata_76() argument
2238 return (gfar_has_errata(priv, GFAR_ERRATA_76) && in gfar_csum_errata_76()
2247 struct gfar_private *priv = netdev_priv(dev); in gfar_start_xmit() local
2261 tx_queue = priv->tx_queue[rq]; in gfar_start_xmit()
2269 priv->hwts_tx_en; in gfar_start_xmit()
2352 bufaddr = skb_frag_dma_map(priv->dev, in gfar_start_xmit()
2357 if (unlikely(dma_mapping_error(priv->dev, bufaddr))) in gfar_start_xmit()
2384 if (unlikely(gfar_csum_errata_12(priv, (unsigned long)fcb)) || in gfar_start_xmit()
2385 unlikely(gfar_csum_errata_76(priv, skb->len))) { in gfar_start_xmit()
2408 bufaddr = dma_map_single(priv->dev, skb->data, skb_headlen(skb), in gfar_start_xmit()
2410 if (unlikely(dma_mapping_error(priv->dev, bufaddr))) in gfar_start_xmit()
2498 dma_unmap_page(priv->dev, bufaddr, be16_to_cpu(txbdp->length), in gfar_start_xmit()
2510 struct gfar_private *priv = netdev_priv(dev); in gfar_close() local
2512 cancel_work_sync(&priv->reset_task); in gfar_close()
2516 phy_disconnect(priv->phydev); in gfar_close()
2517 priv->phydev = NULL; in gfar_close()
2519 gfar_free_irq(priv); in gfar_close()
2534 struct gfar_private *priv = netdev_priv(dev); in gfar_change_mtu() local
2538 netif_err(priv, drv, dev, "Invalid MTU setting\n"); in gfar_change_mtu()
2542 while (test_and_set_bit_lock(GFAR_RESETTING, &priv->state)) in gfar_change_mtu()
2553 clear_bit_unlock(GFAR_RESETTING, &priv->state); in gfar_change_mtu()
2560 struct gfar_private *priv = netdev_priv(ndev); in reset_gfar() local
2562 while (test_and_set_bit_lock(GFAR_RESETTING, &priv->state)) in reset_gfar()
2568 clear_bit_unlock(GFAR_RESETTING, &priv->state); in reset_gfar()
2578 struct gfar_private *priv = container_of(work, struct gfar_private, in gfar_reset_task() local
2580 reset_gfar(priv->ndev); in gfar_reset_task()
2585 struct gfar_private *priv = netdev_priv(dev); in gfar_timeout() local
2588 schedule_work(&priv->reset_task); in gfar_timeout()
2605 struct gfar_private *priv = netdev_priv(dev); in gfar_clean_tx_ring() local
2653 dma_unmap_single(priv->dev, be32_to_cpu(bdp->bufPtr), in gfar_clean_tx_ring()
2672 dma_unmap_page(priv->dev, be32_to_cpu(bdp->bufPtr), in gfar_clean_tx_ring()
2697 !(test_bit(GFAR_DOWN, &priv->state))) in gfar_clean_tx_ring()
2698 netif_wake_subqueue(priv->ndev, tqi); in gfar_clean_tx_ring()
2709 struct gfar_private *priv = netdev_priv(dev); in gfar_alloc_skb() local
2712 skb = netdev_alloc_skb(dev, priv->rx_buffer_size + RXBUF_ALIGNMENT); in gfar_alloc_skb()
2723 struct gfar_private *priv = netdev_priv(dev); in gfar_new_skb() local
2731 addr = dma_map_single(priv->dev, skb->data, in gfar_new_skb()
2732 priv->rx_buffer_size, DMA_FROM_DEVICE); in gfar_new_skb()
2733 if (unlikely(dma_mapping_error(priv->dev, addr))) { in gfar_new_skb()
2744 struct gfar_private *priv = netdev_priv(dev); in count_errors() local
2746 struct gfar_extra_stats *estats = &priv->extra_stats; in count_errors()
2843 struct gfar_private *priv = netdev_priv(dev); in gfar_process_frame() local
2858 if (priv->hwts_rx_en) { in gfar_process_frame()
2866 if (priv->padding) in gfar_process_frame()
2867 skb_pull(skb, priv->padding); in gfar_process_frame()
2901 struct gfar_private *priv = netdev_priv(dev); in gfar_clean_rx_ring() local
2907 amount_pull = priv->uses_rxfcb ? GMAC_FCB_LEN : 0; in gfar_clean_rx_ring()
2920 dma_unmap_single(priv->dev, be32_to_cpu(bdp->bufPtr), in gfar_clean_rx_ring()
2921 priv->rx_buffer_size, DMA_FROM_DEVICE); in gfar_clean_rx_ring()
2924 be16_to_cpu(bdp->length) > priv->rx_buffer_size)) in gfar_clean_rx_ring()
2954 netif_warn(priv, rx_err, dev, "Missing skb!\n"); in gfar_clean_rx_ring()
2956 atomic64_inc(&priv->extra_stats.rx_skbmissing); in gfar_clean_rx_ring()
2967 if (unlikely(rx_queue->rfbptr && priv->tx_actual_en)) in gfar_clean_rx_ring()
3047 struct gfar_private *priv = gfargrp->priv; in gfar_poll_rx() local
3066 for_each_set_bit(i, &gfargrp->rx_bit_map, priv->num_rx_queues) { in gfar_poll_rx()
3071 rx_queue = priv->rx_queue[i]; in gfar_poll_rx()
3109 struct gfar_private *priv = gfargrp->priv; in gfar_poll_tx() local
3120 for_each_set_bit(i, &gfargrp->tx_bit_map, priv->num_tx_queues) { in gfar_poll_tx()
3121 tx_queue = priv->tx_queue[i]; in gfar_poll_tx()
3151 struct gfar_private *priv = netdev_priv(dev); in gfar_netpoll() local
3155 if (priv->device_flags & FSL_GIANFAR_DEV_HAS_MULTI_INTR) { in gfar_netpoll()
3156 for (i = 0; i < priv->num_grps; i++) { in gfar_netpoll()
3157 struct gfar_priv_grp *grp = &priv->gfargrp[i]; in gfar_netpoll()
3168 for (i = 0; i < priv->num_grps; i++) { in gfar_netpoll()
3169 struct gfar_priv_grp *grp = &priv->gfargrp[i]; in gfar_netpoll()
3210 struct gfar_private *priv = netdev_priv(dev); in adjust_link() local
3211 struct phy_device *phydev = priv->phydev; in adjust_link()
3213 if (unlikely(phydev->link != priv->oldlink || in adjust_link()
3214 (phydev->link && (phydev->duplex != priv->oldduplex || in adjust_link()
3215 phydev->speed != priv->oldspeed)))) in adjust_link()
3216 gfar_update_link_state(priv); in adjust_link()
3227 struct gfar_private *priv = netdev_priv(dev); in gfar_set_multi() local
3228 struct gfar __iomem *regs = priv->gfargrp[0].regs; in gfar_set_multi()
3287 if (priv->extended_hash) { in gfar_set_multi()
3340 struct gfar_private *priv = netdev_priv(dev); in gfar_set_hash_for_addr() local
3342 int width = priv->hash_width; in gfar_set_hash_for_addr()
3347 tempval = gfar_read(priv->hash_regs[whichreg]); in gfar_set_hash_for_addr()
3349 gfar_write(priv->hash_regs[whichreg], tempval); in gfar_set_hash_for_addr()
3359 struct gfar_private *priv = netdev_priv(dev); in gfar_set_mac_for_addr() local
3360 struct gfar __iomem *regs = priv->gfargrp[0].regs; in gfar_set_mac_for_addr()
3385 struct gfar_private *priv= gfargrp->priv; in gfar_error() local
3386 struct net_device *dev = priv->ndev; in gfar_error()
3395 if ((priv->device_flags & FSL_GIANFAR_DEV_HAS_MAGIC_PACKET) && in gfar_error()
3400 if (netif_msg_rx_err(priv) || netif_msg_tx_err(priv)) in gfar_error()
3416 netif_dbg(priv, tx_err, dev, in gfar_error()
3419 atomic64_inc(&priv->extra_stats.tx_underrun); in gfar_error()
3422 lock_tx_qs(priv); in gfar_error()
3427 unlock_tx_qs(priv); in gfar_error()
3430 netif_dbg(priv, tx_err, dev, "Transmit Error\n"); in gfar_error()
3434 atomic64_inc(&priv->extra_stats.rx_bsy); in gfar_error()
3438 netif_dbg(priv, rx_err, dev, "busy error (rstat: %x)\n", in gfar_error()
3443 atomic64_inc(&priv->extra_stats.rx_babr); in gfar_error()
3445 netif_dbg(priv, rx_err, dev, "babbling RX error\n"); in gfar_error()
3448 atomic64_inc(&priv->extra_stats.eberr); in gfar_error()
3449 netif_dbg(priv, rx_err, dev, "bus error\n"); in gfar_error()
3452 netif_dbg(priv, rx_status, dev, "control frame\n"); in gfar_error()
3455 atomic64_inc(&priv->extra_stats.tx_babt); in gfar_error()
3456 netif_dbg(priv, tx_err, dev, "babbling TX error\n"); in gfar_error()
3461 static u32 gfar_get_flowctrl_cfg(struct gfar_private *priv) in gfar_get_flowctrl_cfg() argument
3463 struct phy_device *phydev = priv->phydev; in gfar_get_flowctrl_cfg()
3469 if (!priv->pause_aneg_en) { in gfar_get_flowctrl_cfg()
3470 if (priv->tx_pause_en) in gfar_get_flowctrl_cfg()
3472 if (priv->rx_pause_en) in gfar_get_flowctrl_cfg()
3500 static noinline void gfar_update_link_state(struct gfar_private *priv) in gfar_update_link_state() argument
3502 struct gfar __iomem *regs = priv->gfargrp[0].regs; in gfar_update_link_state()
3503 struct phy_device *phydev = priv->phydev; in gfar_update_link_state()
3508 if (unlikely(test_bit(GFAR_RESETTING, &priv->state))) in gfar_update_link_state()
3517 if (phydev->duplex != priv->oldduplex) { in gfar_update_link_state()
3523 priv->oldduplex = phydev->duplex; in gfar_update_link_state()
3526 if (phydev->speed != priv->oldspeed) { in gfar_update_link_state()
3548 netif_warn(priv, link, priv->ndev, in gfar_update_link_state()
3554 priv->oldspeed = phydev->speed; in gfar_update_link_state()
3558 tempval1 |= gfar_get_flowctrl_cfg(priv); in gfar_update_link_state()
3562 for (i = 0; i < priv->num_rx_queues; i++) { in gfar_update_link_state()
3563 rx_queue = priv->rx_queue[i]; in gfar_update_link_state()
3574 priv->tx_actual_en = 1; in gfar_update_link_state()
3578 priv->tx_actual_en = 0; in gfar_update_link_state()
3584 if (!priv->oldlink) in gfar_update_link_state()
3585 priv->oldlink = 1; in gfar_update_link_state()
3587 } else if (priv->oldlink) { in gfar_update_link_state()
3588 priv->oldlink = 0; in gfar_update_link_state()
3589 priv->oldspeed = 0; in gfar_update_link_state()
3590 priv->oldduplex = -1; in gfar_update_link_state()
3593 if (netif_msg_link(priv)) in gfar_update_link_state()