diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c index 29e824bd90ca..c0e5dee86451 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c @@ -374,25 +374,6 @@ static int stmmac_test_mac_loopback(struct stmmac_priv *priv) return __stmmac_test_loopback(priv, &attr); } -static int stmmac_test_phy_loopback(struct stmmac_priv *priv) -{ - struct stmmac_packet_attrs attr = { }; - int ret; - - if (!priv->dev->phydev) - return -EOPNOTSUPP; - - ret = phy_loopback(priv->dev->phydev, true, 0); - if (ret) - return ret; - - attr.dst = priv->dev->dev_addr; - ret = __stmmac_test_loopback(priv, &attr); - - phy_loopback(priv->dev->phydev, false, 0); - return ret; -} - static int stmmac_test_mmc(struct stmmac_priv *priv) { struct stmmac_counters initial, final; @@ -1815,10 +1796,6 @@ static int stmmac_test_tbs(struct stmmac_priv *priv) return ret; } -#define STMMAC_LOOPBACK_NONE 0 -#define STMMAC_LOOPBACK_MAC 1 -#define STMMAC_LOOPBACK_PHY 2 - static const struct stmmac_test { char name[ETH_GSTRING_LEN]; int lb; @@ -1826,131 +1803,96 @@ static const struct stmmac_test { } stmmac_selftests[] = { { .name = "MAC Loopback ", - .lb = STMMAC_LOOPBACK_MAC, .fn = stmmac_test_mac_loopback, - }, { - .name = "PHY Loopback ", - .lb = STMMAC_LOOPBACK_NONE, /* Test will handle it */ - .fn = stmmac_test_phy_loopback, }, { .name = "MMC Counters ", - .lb = STMMAC_LOOPBACK_PHY, .fn = stmmac_test_mmc, }, { .name = "EEE ", - .lb = STMMAC_LOOPBACK_PHY, .fn = stmmac_test_eee, }, { .name = "Hash Filter MC ", - .lb = STMMAC_LOOPBACK_PHY, .fn = stmmac_test_hfilt, }, { .name = "Perfect Filter UC ", - .lb = STMMAC_LOOPBACK_PHY, .fn = stmmac_test_pfilt, }, { .name = "MC Filter ", - .lb = STMMAC_LOOPBACK_PHY, .fn = stmmac_test_mcfilt, }, { .name = "UC Filter ", - .lb = STMMAC_LOOPBACK_PHY, .fn = stmmac_test_ucfilt, }, { .name = "Flow Control ", - .lb = STMMAC_LOOPBACK_PHY, .fn = stmmac_test_flowctrl, }, { .name = "RSS ", - .lb = STMMAC_LOOPBACK_PHY, .fn = stmmac_test_rss, }, { .name = "VLAN Filtering ", - .lb = STMMAC_LOOPBACK_PHY, .fn = stmmac_test_vlanfilt, }, { .name = "VLAN Filtering (perf) ", - .lb = STMMAC_LOOPBACK_PHY, .fn = stmmac_test_vlanfilt_perfect, }, { .name = "Double VLAN Filter ", - .lb = STMMAC_LOOPBACK_PHY, .fn = stmmac_test_dvlanfilt, }, { .name = "Double VLAN Filter (perf) ", - .lb = STMMAC_LOOPBACK_PHY, .fn = stmmac_test_dvlanfilt_perfect, }, { .name = "Flexible RX Parser ", - .lb = STMMAC_LOOPBACK_PHY, .fn = stmmac_test_rxp, }, { .name = "SA Insertion (desc) ", - .lb = STMMAC_LOOPBACK_PHY, .fn = stmmac_test_desc_sai, }, { .name = "SA Replacement (desc) ", - .lb = STMMAC_LOOPBACK_PHY, .fn = stmmac_test_desc_sar, }, { .name = "SA Insertion (reg) ", - .lb = STMMAC_LOOPBACK_PHY, .fn = stmmac_test_reg_sai, }, { .name = "SA Replacement (reg) ", - .lb = STMMAC_LOOPBACK_PHY, .fn = stmmac_test_reg_sar, }, { .name = "VLAN TX Insertion ", - .lb = STMMAC_LOOPBACK_PHY, .fn = stmmac_test_vlanoff, }, { .name = "SVLAN TX Insertion ", - .lb = STMMAC_LOOPBACK_PHY, .fn = stmmac_test_svlanoff, }, { .name = "L3 DA Filtering ", - .lb = STMMAC_LOOPBACK_PHY, .fn = stmmac_test_l3filt_da, }, { .name = "L3 SA Filtering ", - .lb = STMMAC_LOOPBACK_PHY, .fn = stmmac_test_l3filt_sa, }, { .name = "L4 DA TCP Filtering ", - .lb = STMMAC_LOOPBACK_PHY, .fn = stmmac_test_l4filt_da_tcp, }, { .name = "L4 SA TCP Filtering ", - .lb = STMMAC_LOOPBACK_PHY, .fn = stmmac_test_l4filt_sa_tcp, }, { .name = "L4 DA UDP Filtering ", - .lb = STMMAC_LOOPBACK_PHY, .fn = stmmac_test_l4filt_da_udp, }, { .name = "L4 SA UDP Filtering ", - .lb = STMMAC_LOOPBACK_PHY, .fn = stmmac_test_l4filt_sa_udp, }, { .name = "ARP Offload ", - .lb = STMMAC_LOOPBACK_PHY, .fn = stmmac_test_arpoffload, }, { .name = "Jumbo Frame ", - .lb = STMMAC_LOOPBACK_PHY, .fn = stmmac_test_jumbo, }, { .name = "Multichannel Jumbo ", - .lb = STMMAC_LOOPBACK_PHY, .fn = stmmac_test_mjumbo, }, { .name = "Split Header ", - .lb = STMMAC_LOOPBACK_PHY, .fn = stmmac_test_sph, }, { .name = "TBS (ETF Scheduler) ", - .lb = STMMAC_LOOPBACK_PHY, .fn = stmmac_test_tbs, }, }; @@ -1978,57 +1920,21 @@ void stmmac_selftest_run(struct net_device *dev, /* Wait for queues drain */ msleep(200); + ret = stmmac_set_mac_loopback(priv, priv->ioaddr, true); + if (ret) { + netdev_err(priv->dev, "Loopback is not supported\n"); + etest->flags |= ETH_TEST_FL_FAILED; + return; + } + for (i = 0; i < count; i++) { - ret = 0; - - switch (stmmac_selftests[i].lb) { - case STMMAC_LOOPBACK_PHY: - ret = -EOPNOTSUPP; - if (dev->phydev) - ret = phy_loopback(dev->phydev, true, 0); - if (!ret) - break; - fallthrough; - case STMMAC_LOOPBACK_MAC: - ret = stmmac_set_mac_loopback(priv, priv->ioaddr, true); - break; - case STMMAC_LOOPBACK_NONE: - break; - default: - ret = -EOPNOTSUPP; - break; - } - - /* - * First tests will always be MAC / PHY loopback. If any of - * them is not supported we abort earlier. - */ - if (ret) { - netdev_err(priv->dev, "Loopback is not supported\n"); - etest->flags |= ETH_TEST_FL_FAILED; - break; - } - ret = stmmac_selftests[i].fn(priv); if (ret && (ret != -EOPNOTSUPP)) etest->flags |= ETH_TEST_FL_FAILED; buf[i] = ret; - - switch (stmmac_selftests[i].lb) { - case STMMAC_LOOPBACK_PHY: - ret = -EOPNOTSUPP; - if (dev->phydev) - ret = phy_loopback(dev->phydev, false, 0); - if (!ret) - break; - fallthrough; - case STMMAC_LOOPBACK_MAC: - stmmac_set_mac_loopback(priv, priv->ioaddr, false); - break; - default: - break; - } } + + stmmac_set_mac_loopback(priv, priv->ioaddr, false); } void stmmac_selftest_get_strings(struct stmmac_priv *priv, u8 *data)