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 <joab...@synopsys.com>

---
Cc: Giuseppe Cavallaro <peppe.cavall...@st.com>
Cc: Alexandre Torgue <alexandre.tor...@st.com>
Cc: Jose Abreu <joab...@synopsys.com>
Cc: "David S. Miller" <da...@davemloft.net>
Cc: Maxime Coquelin <mcoquelin.st...@gmail.com>
Cc: net...@vger.kernel.org
Cc: linux-st...@st-md-mailman.stormreply.com
Cc: linux-arm-ker...@lists.infradead.org
Cc: linux-kernel@vger.kernel.org
---
 .../net/ethernet/stmicro/stmmac/stmmac_selftests.c | 98 +++++++++++++++++++++-
 1 file changed, 97 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c 
b/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c
index abab84f2ef8b..acfab86431b1 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c
@@ -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,
        },
 };
 
-- 
2.7.4

Reply via email to