Lines Matching full:mac
214 struct mtk_mac *mac = container_of(config, struct mtk_mac, in mtk_mac_config() local
216 struct mtk_eth *eth = mac->hw; in mtk_mac_config()
220 /* MT76x8 has no hardware settings between for the MAC */ in mtk_mac_config()
222 mac->interface != state->interface) { in mtk_mac_config()
226 if (mac->id) in mtk_mac_config()
228 if (!MTK_HAS_CAPS(mac->hw->soc->caps, in mtk_mac_config()
240 err = mtk_gmac_rgmii_path_setup(eth, mac->id); in mtk_mac_config()
249 err = mtk_gmac_sgmii_path_setup(eth, mac->id); in mtk_mac_config()
256 err = mtk_gmac_gephy_path_setup(eth, mac->id); in mtk_mac_config()
266 if (!mac->id && state->interface != PHY_INTERFACE_MODE_SGMII && in mtk_mac_config()
268 MTK_HAS_CAPS(mac->hw->soc->caps, MTK_GMAC1_TRGMII)) { in mtk_mac_config()
269 if (MTK_HAS_CAPS(mac->hw->soc->caps, in mtk_mac_config()
271 if (mt7621_gmac0_rgmii_adjust(mac->hw, in mtk_mac_config()
275 mtk_gmac0_rgmii_adjust(mac->hw, in mtk_mac_config()
281 mtk_w32(mac->hw, in mtk_mac_config()
286 mtk_m32(mac->hw, 0, RXC_RST | RXC_DQSISEL, in mtk_mac_config()
288 mtk_m32(mac->hw, RXC_RST, 0, TRGMII_RCK_CTRL); in mtk_mac_config()
302 if (mac->id) in mtk_mac_config()
312 val &= ~SYSCFG0_GE_MODE(SYSCFG0_GE_MASK, mac->id); in mtk_mac_config()
313 val |= SYSCFG0_GE_MODE(ge_mode, mac->id); in mtk_mac_config()
316 mac->interface = state->interface; in mtk_mac_config()
333 0 : mac->id; in mtk_mac_config()
354 mcr_cur = mtk_r32(mac->hw, MTK_MAC_MCR(mac->id)); in mtk_mac_config()
361 mtk_w32(mac->hw, mcr_new, MTK_MAC_MCR(mac->id)); in mtk_mac_config()
367 mac->id, phy_modes(state->interface)); in mtk_mac_config()
372 mac->id, phy_modes(state->interface), err); in mtk_mac_config()
378 struct mtk_mac *mac = container_of(config, struct mtk_mac, in mtk_mac_pcs_get_state() local
380 u32 pmsr = mtk_r32(mac->hw, MTK_MAC_MSR(mac->id)); in mtk_mac_pcs_get_state()
409 struct mtk_mac *mac = container_of(config, struct mtk_mac, in mtk_mac_an_restart() local
412 mtk_sgmii_restart_an(mac->hw, mac->id); in mtk_mac_an_restart()
418 struct mtk_mac *mac = container_of(config, struct mtk_mac, in mtk_mac_link_down() local
420 u32 mcr = mtk_r32(mac->hw, MTK_MAC_MCR(mac->id)); in mtk_mac_link_down()
423 mtk_w32(mac->hw, mcr, MTK_MAC_MCR(mac->id)); in mtk_mac_link_down()
431 struct mtk_mac *mac = container_of(config, struct mtk_mac, in mtk_mac_link_up() local
433 u32 mcr = mtk_r32(mac->hw, MTK_MAC_MCR(mac->id)); in mtk_mac_link_up()
461 mtk_w32(mac->hw, mcr, MTK_MAC_MCR(mac->id)); in mtk_mac_link_up()
468 struct mtk_mac *mac = container_of(config, struct mtk_mac, in mtk_validate() local
475 !(MTK_HAS_CAPS(mac->hw->soc->caps, MTK_RGMII) && in mtk_validate()
477 !(MTK_HAS_CAPS(mac->hw->soc->caps, MTK_TRGMII) && in mtk_validate()
478 !mac->id && state->interface == PHY_INTERFACE_MODE_TRGMII) && in mtk_validate()
479 !(MTK_HAS_CAPS(mac->hw->soc->caps, MTK_SGMII) && in mtk_validate()
522 if (MTK_HAS_CAPS(mac->hw->soc->caps, MTK_SGMII)) { in mtk_validate()
527 if (MTK_HAS_CAPS(mac->hw->soc->caps, MTK_RGMII)) { in mtk_validate()
532 if (MTK_HAS_CAPS(mac->hw->soc->caps, MTK_GEPHY)) { in mtk_validate()
650 struct mtk_mac *mac = netdev_priv(dev); in mtk_set_mac_address() local
651 struct mtk_eth *eth = mac->hw; in mtk_set_mac_address()
657 if (unlikely(test_bit(MTK_RESETTING, &mac->hw->state))) in mtk_set_mac_address()
660 spin_lock_bh(&mac->hw->page_lock); in mtk_set_mac_address()
662 mtk_w32(mac->hw, (macaddr[0] << 8) | macaddr[1], in mtk_set_mac_address()
664 mtk_w32(mac->hw, (macaddr[2] << 24) | (macaddr[3] << 16) | in mtk_set_mac_address()
668 mtk_w32(mac->hw, (macaddr[0] << 8) | macaddr[1], in mtk_set_mac_address()
669 MTK_GDMA_MAC_ADRH(mac->id)); in mtk_set_mac_address()
670 mtk_w32(mac->hw, (macaddr[2] << 24) | (macaddr[3] << 16) | in mtk_set_mac_address()
672 MTK_GDMA_MAC_ADRL(mac->id)); in mtk_set_mac_address()
674 spin_unlock_bh(&mac->hw->page_lock); in mtk_set_mac_address()
679 void mtk_stats_update_mac(struct mtk_mac *mac) in mtk_stats_update_mac() argument
681 struct mtk_hw_stats *hw_stats = mac->hw_stats; in mtk_stats_update_mac()
689 hw_stats->rx_bytes += mtk_r32(mac->hw, base); in mtk_stats_update_mac()
690 stats = mtk_r32(mac->hw, base + 0x04); in mtk_stats_update_mac()
693 hw_stats->rx_packets += mtk_r32(mac->hw, base + 0x08); in mtk_stats_update_mac()
694 hw_stats->rx_overflow += mtk_r32(mac->hw, base + 0x10); in mtk_stats_update_mac()
695 hw_stats->rx_fcs_errors += mtk_r32(mac->hw, base + 0x14); in mtk_stats_update_mac()
696 hw_stats->rx_short_errors += mtk_r32(mac->hw, base + 0x18); in mtk_stats_update_mac()
697 hw_stats->rx_long_errors += mtk_r32(mac->hw, base + 0x1c); in mtk_stats_update_mac()
698 hw_stats->rx_checksum_errors += mtk_r32(mac->hw, base + 0x20); in mtk_stats_update_mac()
700 mtk_r32(mac->hw, base + 0x24); in mtk_stats_update_mac()
701 hw_stats->tx_skip += mtk_r32(mac->hw, base + 0x28); in mtk_stats_update_mac()
702 hw_stats->tx_collisions += mtk_r32(mac->hw, base + 0x2c); in mtk_stats_update_mac()
703 hw_stats->tx_bytes += mtk_r32(mac->hw, base + 0x30); in mtk_stats_update_mac()
704 stats = mtk_r32(mac->hw, base + 0x34); in mtk_stats_update_mac()
707 hw_stats->tx_packets += mtk_r32(mac->hw, base + 0x38); in mtk_stats_update_mac()
716 if (!eth->mac[i] || !eth->mac[i]->hw_stats) in mtk_stats_update()
718 if (spin_trylock(ð->mac[i]->hw_stats->stats_lock)) { in mtk_stats_update()
719 mtk_stats_update_mac(eth->mac[i]); in mtk_stats_update()
720 spin_unlock(ð->mac[i]->hw_stats->stats_lock); in mtk_stats_update()
728 struct mtk_mac *mac = netdev_priv(dev); in mtk_get_stats64() local
729 struct mtk_hw_stats *hw_stats = mac->hw_stats; in mtk_get_stats64()
734 mtk_stats_update_mac(mac); in mtk_get_stats64()
923 struct mtk_mac *mac = netdev_priv(dev); in mtk_tx_map() local
924 struct mtk_eth *eth = mac->hw; in mtk_tx_map()
940 fport = (mac->id + 1) << TX_DMA_FPORT_SHIFT; in mtk_tx_map()
964 itx_buf->flags |= (!mac->id) ? MTK_TX_FLAGS_FPORT0 : in mtk_tx_map()
1019 tx_buf->flags |= (!mac->id) ? MTK_TX_FLAGS_FPORT0 : in mtk_tx_map()
1141 struct mtk_mac *mac = netdev_priv(dev); in mtk_start_xmit() local
1142 struct mtk_eth *eth = mac->hw; in mtk_start_xmit()
1252 int mac; in mtk_poll_rx() local
1266 /* find out which mac the packet come from. values start at 1 */ in mtk_poll_rx()
1268 mac = 0; in mtk_poll_rx()
1270 mac = (trxd.rxd4 >> RX_DMA_FPORT_SHIFT) & in mtk_poll_rx()
1272 mac--; in mtk_poll_rx()
1275 if (unlikely(mac < 0 || mac >= MTK_MAC_COUNT || in mtk_poll_rx()
1276 !eth->netdev[mac])) in mtk_poll_rx()
1279 netdev = eth->netdev[mac]; in mtk_poll_rx()
1370 int mac = 0; in mtk_poll_tx_qdma() local
1378 mac = 1; in mtk_poll_tx_qdma()
1385 bytes[mac] += skb->len; in mtk_poll_tx_qdma()
1386 done[mac]++; in mtk_poll_tx_qdma()
1866 static int mtk_hwlro_get_ip_cnt(struct mtk_mac *mac) in mtk_hwlro_get_ip_cnt() argument
1872 if (mac->hwlro_ip[i]) in mtk_hwlro_get_ip_cnt()
1884 struct mtk_mac *mac = netdev_priv(dev); in mtk_hwlro_add_ipaddr() local
1885 struct mtk_eth *eth = mac->hw; in mtk_hwlro_add_ipaddr()
1893 mac->hwlro_ip[fsp->location] = htonl(fsp->h_u.tcp_ip4_spec.ip4dst); in mtk_hwlro_add_ipaddr()
1894 hwlro_idx = (mac->id * MTK_MAX_LRO_IP_CNT) + fsp->location; in mtk_hwlro_add_ipaddr()
1896 mac->hwlro_ip_cnt = mtk_hwlro_get_ip_cnt(mac); in mtk_hwlro_add_ipaddr()
1898 mtk_hwlro_val_ipaddr(eth, hwlro_idx, mac->hwlro_ip[fsp->location]); in mtk_hwlro_add_ipaddr()
1908 struct mtk_mac *mac = netdev_priv(dev); in mtk_hwlro_del_ipaddr() local
1909 struct mtk_eth *eth = mac->hw; in mtk_hwlro_del_ipaddr()
1915 mac->hwlro_ip[fsp->location] = 0; in mtk_hwlro_del_ipaddr()
1916 hwlro_idx = (mac->id * MTK_MAX_LRO_IP_CNT) + fsp->location; in mtk_hwlro_del_ipaddr()
1918 mac->hwlro_ip_cnt = mtk_hwlro_get_ip_cnt(mac); in mtk_hwlro_del_ipaddr()
1927 struct mtk_mac *mac = netdev_priv(dev); in mtk_hwlro_netdev_disable() local
1928 struct mtk_eth *eth = mac->hw; in mtk_hwlro_netdev_disable()
1932 mac->hwlro_ip[i] = 0; in mtk_hwlro_netdev_disable()
1933 hwlro_idx = (mac->id * MTK_MAX_LRO_IP_CNT) + i; in mtk_hwlro_netdev_disable()
1938 mac->hwlro_ip_cnt = 0; in mtk_hwlro_netdev_disable()
1944 struct mtk_mac *mac = netdev_priv(dev); in mtk_hwlro_get_fdir_entry() local
1950 fsp->h_u.tcp_ip4_spec.ip4dst = ntohl(mac->hwlro_ip[fsp->location]); in mtk_hwlro_get_fdir_entry()
1969 struct mtk_mac *mac = netdev_priv(dev); in mtk_hwlro_get_fdir_all() local
1974 if (mac->hwlro_ip[i]) { in mtk_hwlro_get_fdir_all()
1989 struct mtk_mac *mac = netdev_priv(dev); in mtk_fix_features() local
1990 int ip_cnt = mtk_hwlro_get_ip_cnt(mac); in mtk_fix_features()
2123 struct mtk_mac *mac = netdev_priv(dev); in mtk_tx_timeout() local
2124 struct mtk_eth *eth = mac->hw; in mtk_tx_timeout()
2126 eth->netdev[mac->id]->stats.tx_errors++; in mtk_tx_timeout()
2175 struct mtk_mac *mac = netdev_priv(dev); in mtk_poll_controller() local
2176 struct mtk_eth *eth = mac->hw; in mtk_poll_controller()
2245 struct mtk_mac *mac = netdev_priv(dev); in mtk_open() local
2246 struct mtk_eth *eth = mac->hw; in mtk_open()
2249 err = phylink_of_phy_connect(mac->phylink, mac->of_node, 0); in mtk_open()
2274 phylink_start(mac->phylink); in mtk_open()
2304 struct mtk_mac *mac = netdev_priv(dev); in mtk_stop() local
2305 struct mtk_eth *eth = mac->hw; in mtk_stop()
2307 phylink_stop(mac->phylink); in mtk_stop()
2311 phylink_disconnect_phy(mac->phylink); in mtk_stop()
2390 dev_err(eth->dev, "MAC reset failed!\n"); in mtk_hw_init()
2474 struct mtk_mac *mac = netdev_priv(dev); in mtk_init() local
2475 struct mtk_eth *eth = mac->hw; in mtk_init()
2478 mac_addr = of_get_mac_address(mac->of_node); in mtk_init()
2482 /* If the mac address is invalid, use random mac address */ in mtk_init()
2485 dev_err(eth->dev, "generated random MAC address %pM\n", in mtk_init()
2494 struct mtk_mac *mac = netdev_priv(dev); in mtk_uninit() local
2495 struct mtk_eth *eth = mac->hw; in mtk_uninit()
2497 phylink_disconnect_phy(mac->phylink); in mtk_uninit()
2504 struct mtk_mac *mac = netdev_priv(dev); in mtk_do_ioctl() local
2510 return phylink_mii_ioctl(mac->phylink, ifr, cmd); in mtk_do_ioctl()
2608 struct mtk_mac *mac = netdev_priv(ndev); in mtk_get_link_ksettings() local
2610 if (unlikely(test_bit(MTK_RESETTING, &mac->hw->state))) in mtk_get_link_ksettings()
2613 return phylink_ethtool_ksettings_get(mac->phylink, cmd); in mtk_get_link_ksettings()
2619 struct mtk_mac *mac = netdev_priv(ndev); in mtk_set_link_ksettings() local
2621 if (unlikely(test_bit(MTK_RESETTING, &mac->hw->state))) in mtk_set_link_ksettings()
2624 return phylink_ethtool_ksettings_set(mac->phylink, cmd); in mtk_set_link_ksettings()
2630 struct mtk_mac *mac = netdev_priv(dev); in mtk_get_drvinfo() local
2632 strlcpy(info->driver, mac->hw->dev->driver->name, sizeof(info->driver)); in mtk_get_drvinfo()
2633 strlcpy(info->bus_info, dev_name(mac->hw->dev), sizeof(info->bus_info)); in mtk_get_drvinfo()
2639 struct mtk_mac *mac = netdev_priv(dev); in mtk_get_msglevel() local
2641 return mac->hw->msg_enable; in mtk_get_msglevel()
2646 struct mtk_mac *mac = netdev_priv(dev); in mtk_set_msglevel() local
2648 mac->hw->msg_enable = value; in mtk_set_msglevel()
2653 struct mtk_mac *mac = netdev_priv(dev); in mtk_nway_reset() local
2655 if (unlikely(test_bit(MTK_RESETTING, &mac->hw->state))) in mtk_nway_reset()
2658 if (!mac->phylink) in mtk_nway_reset()
2661 return phylink_ethtool_nway_reset(mac->phylink); in mtk_nway_reset()
2691 struct mtk_mac *mac = netdev_priv(dev); in mtk_get_ethtool_stats() local
2692 struct mtk_hw_stats *hwstats = mac->hw_stats; in mtk_get_ethtool_stats()
2697 if (unlikely(test_bit(MTK_RESETTING, &mac->hw->state))) in mtk_get_ethtool_stats()
2702 mtk_stats_update_mac(mac); in mtk_get_ethtool_stats()
2732 struct mtk_mac *mac = netdev_priv(dev); in mtk_get_rxnfc() local
2734 cmd->rule_cnt = mac->hwlro_ip_cnt; in mtk_get_rxnfc()
2812 struct mtk_mac *mac; in mtk_add_mac() local
2816 dev_err(eth->dev, "missing mac id\n"); in mtk_add_mac()
2822 dev_err(eth->dev, "%d is not a valid mac id\n", id); in mtk_add_mac()
2827 dev_err(eth->dev, "duplicate mac id found: %d\n", id); in mtk_add_mac()
2831 eth->netdev[id] = alloc_etherdev(sizeof(*mac)); in mtk_add_mac()
2836 mac = netdev_priv(eth->netdev[id]); in mtk_add_mac()
2837 eth->mac[id] = mac; in mtk_add_mac()
2838 mac->id = id; in mtk_add_mac()
2839 mac->hw = eth; in mtk_add_mac()
2840 mac->of_node = np; in mtk_add_mac()
2842 memset(mac->hwlro_ip, 0, sizeof(mac->hwlro_ip)); in mtk_add_mac()
2843 mac->hwlro_ip_cnt = 0; in mtk_add_mac()
2845 mac->hw_stats = devm_kzalloc(eth->dev, in mtk_add_mac()
2846 sizeof(*mac->hw_stats), in mtk_add_mac()
2848 if (!mac->hw_stats) { in mtk_add_mac()
2853 spin_lock_init(&mac->hw_stats->stats_lock); in mtk_add_mac()
2854 u64_stats_init(&mac->hw_stats->syncp); in mtk_add_mac()
2855 mac->hw_stats->reg_offset = id * MTK_STAT_OFFSET; in mtk_add_mac()
2864 /* mac config is not set */ in mtk_add_mac()
2865 mac->interface = PHY_INTERFACE_MODE_NA; in mtk_add_mac()
2866 mac->mode = MLO_AN_PHY; in mtk_add_mac()
2867 mac->speed = SPEED_UNKNOWN; in mtk_add_mac()
2869 mac->phylink_config.dev = ð->netdev[id]->dev; in mtk_add_mac()
2870 mac->phylink_config.type = PHYLINK_NETDEV; in mtk_add_mac()
2872 phylink = phylink_create(&mac->phylink_config, in mtk_add_mac()
2873 of_fwnode_handle(mac->of_node), in mtk_add_mac()
2880 mac->phylink = phylink; in mtk_add_mac()
3020 "mediatek,eth-mac")) in mtk_probe()
3098 struct mtk_mac *mac; in mtk_remove() local
3106 mac = netdev_priv(eth->netdev[i]); in mtk_remove()
3107 phylink_disconnect_phy(mac->phylink); in mtk_remove()