net: stmmac: selftests: Add tests for SA Insertion/Replacement
authorJose Abreu <Jose.Abreu@synopsys.com>
Sat, 17 Aug 2019 18:54:48 +0000 (20:54 +0200)
committerDavid S. Miller <davem@davemloft.net>
Sat, 17 Aug 2019 19:43:59 +0000 (12:43 -0700)
Add 4 new tests:
- SA Insertion (register based)
- SA Insertion (descriptor based)
- SA Replacament (register based)
- SA Replacement (descriptor based)

Signed-off-by: Jose Abreu <joabreu@synopsys.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c

index abab84f..acfab86 100644 (file)
@@ -45,6 +45,7 @@ struct stmmac_packet_attrs {
        int size;
        int remove_sa;
        u8 id;
+       int sarc;
 };
 
 static u8 stmmac_test_next_id;
@@ -230,7 +231,10 @@ static int stmmac_test_loopback_validate(struct sk_buff *skb,
                if (!ether_addr_equal(ehdr->h_dest, tpriv->packet->dst))
                        goto out;
        }
-       if (tpriv->packet->src) {
+       if (tpriv->packet->sarc) {
+               if (!ether_addr_equal(ehdr->h_source, ehdr->h_dest))
+                       goto out;
+       } else if (tpriv->packet->src) {
                if (!ether_addr_equal(ehdr->h_source, tpriv->packet->src))
                        goto out;
        }
@@ -1004,6 +1008,82 @@ static int stmmac_test_rxp(struct stmmac_priv *priv)
 }
 #endif
 
+static int stmmac_test_desc_sai(struct stmmac_priv *priv)
+{
+       unsigned char src[ETH_ALEN] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+       struct stmmac_packet_attrs attr = { };
+       int ret;
+
+       attr.remove_sa = true;
+       attr.sarc = true;
+       attr.src = src;
+       attr.dst = priv->dev->dev_addr;
+
+       priv->sarc_type = 0x1;
+
+       ret = __stmmac_test_loopback(priv, &attr);
+
+       priv->sarc_type = 0x0;
+       return ret;
+}
+
+static int stmmac_test_desc_sar(struct stmmac_priv *priv)
+{
+       unsigned char src[ETH_ALEN] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+       struct stmmac_packet_attrs attr = { };
+       int ret;
+
+       attr.sarc = true;
+       attr.src = src;
+       attr.dst = priv->dev->dev_addr;
+
+       priv->sarc_type = 0x2;
+
+       ret = __stmmac_test_loopback(priv, &attr);
+
+       priv->sarc_type = 0x0;
+       return ret;
+}
+
+static int stmmac_test_reg_sai(struct stmmac_priv *priv)
+{
+       unsigned char src[ETH_ALEN] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+       struct stmmac_packet_attrs attr = { };
+       int ret;
+
+       attr.remove_sa = true;
+       attr.sarc = true;
+       attr.src = src;
+       attr.dst = priv->dev->dev_addr;
+
+       if (stmmac_sarc_configure(priv, priv->ioaddr, 0x2))
+               return -EOPNOTSUPP;
+
+       ret = __stmmac_test_loopback(priv, &attr);
+
+       stmmac_sarc_configure(priv, priv->ioaddr, 0x0);
+       return ret;
+}
+
+static int stmmac_test_reg_sar(struct stmmac_priv *priv)
+{
+       unsigned char src[ETH_ALEN] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+       struct stmmac_packet_attrs attr = { };
+       int ret;
+
+       attr.sarc = true;
+       attr.src = src;
+       attr.dst = priv->dev->dev_addr;
+
+       if (stmmac_sarc_configure(priv, priv->ioaddr, 0x3))
+               return -EOPNOTSUPP;
+
+       ret = __stmmac_test_loopback(priv, &attr);
+
+       stmmac_sarc_configure(priv, priv->ioaddr, 0x0);
+       return ret;
+}
+
 #define STMMAC_LOOPBACK_NONE   0
 #define STMMAC_LOOPBACK_MAC    1
 #define STMMAC_LOOPBACK_PHY    2
@@ -1065,6 +1145,22 @@ static const struct stmmac_test {
                .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,
        },
 };