aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c98
1 files changed, 97 insertions, 1 deletions
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 {
45 int size; 45 int size;
46 int remove_sa; 46 int remove_sa;
47 u8 id; 47 u8 id;
48 int sarc;
48}; 49};
49 50
50static u8 stmmac_test_next_id; 51static u8 stmmac_test_next_id;
@@ -230,7 +231,10 @@ static int stmmac_test_loopback_validate(struct sk_buff *skb,
230 if (!ether_addr_equal(ehdr->h_dest, tpriv->packet->dst)) 231 if (!ether_addr_equal(ehdr->h_dest, tpriv->packet->dst))
231 goto out; 232 goto out;
232 } 233 }
233 if (tpriv->packet->src) { 234 if (tpriv->packet->sarc) {
235 if (!ether_addr_equal(ehdr->h_source, ehdr->h_dest))
236 goto out;
237 } else if (tpriv->packet->src) {
234 if (!ether_addr_equal(ehdr->h_source, tpriv->packet->src)) 238 if (!ether_addr_equal(ehdr->h_source, tpriv->packet->src))
235 goto out; 239 goto out;
236 } 240 }
@@ -1004,6 +1008,82 @@ static int stmmac_test_rxp(struct stmmac_priv *priv)
1004} 1008}
1005#endif 1009#endif
1006 1010
1011static int stmmac_test_desc_sai(struct stmmac_priv *priv)
1012{
1013 unsigned char src[ETH_ALEN] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
1014 struct stmmac_packet_attrs attr = { };
1015 int ret;
1016
1017 attr.remove_sa = true;
1018 attr.sarc = true;
1019 attr.src = src;
1020 attr.dst = priv->dev->dev_addr;
1021
1022 priv->sarc_type = 0x1;
1023
1024 ret = __stmmac_test_loopback(priv, &attr);
1025
1026 priv->sarc_type = 0x0;
1027 return ret;
1028}
1029
1030static int stmmac_test_desc_sar(struct stmmac_priv *priv)
1031{
1032 unsigned char src[ETH_ALEN] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
1033 struct stmmac_packet_attrs attr = { };
1034 int ret;
1035
1036 attr.sarc = true;
1037 attr.src = src;
1038 attr.dst = priv->dev->dev_addr;
1039
1040 priv->sarc_type = 0x2;
1041
1042 ret = __stmmac_test_loopback(priv, &attr);
1043
1044 priv->sarc_type = 0x0;
1045 return ret;
1046}
1047
1048static int stmmac_test_reg_sai(struct stmmac_priv *priv)
1049{
1050 unsigned char src[ETH_ALEN] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
1051 struct stmmac_packet_attrs attr = { };
1052 int ret;
1053
1054 attr.remove_sa = true;
1055 attr.sarc = true;
1056 attr.src = src;
1057 attr.dst = priv->dev->dev_addr;
1058
1059 if (stmmac_sarc_configure(priv, priv->ioaddr, 0x2))
1060 return -EOPNOTSUPP;
1061
1062 ret = __stmmac_test_loopback(priv, &attr);
1063
1064 stmmac_sarc_configure(priv, priv->ioaddr, 0x0);
1065 return ret;
1066}
1067
1068static int stmmac_test_reg_sar(struct stmmac_priv *priv)
1069{
1070 unsigned char src[ETH_ALEN] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
1071 struct stmmac_packet_attrs attr = { };
1072 int ret;
1073
1074 attr.sarc = true;
1075 attr.src = src;
1076 attr.dst = priv->dev->dev_addr;
1077
1078 if (stmmac_sarc_configure(priv, priv->ioaddr, 0x3))
1079 return -EOPNOTSUPP;
1080
1081 ret = __stmmac_test_loopback(priv, &attr);
1082
1083 stmmac_sarc_configure(priv, priv->ioaddr, 0x0);
1084 return ret;
1085}
1086
1007#define STMMAC_LOOPBACK_NONE 0 1087#define STMMAC_LOOPBACK_NONE 0
1008#define STMMAC_LOOPBACK_MAC 1 1088#define STMMAC_LOOPBACK_MAC 1
1009#define STMMAC_LOOPBACK_PHY 2 1089#define STMMAC_LOOPBACK_PHY 2
@@ -1065,6 +1145,22 @@ static const struct stmmac_test {
1065 .name = "Flexible RX Parser ", 1145 .name = "Flexible RX Parser ",
1066 .lb = STMMAC_LOOPBACK_PHY, 1146 .lb = STMMAC_LOOPBACK_PHY,
1067 .fn = stmmac_test_rxp, 1147 .fn = stmmac_test_rxp,
1148 }, {
1149 .name = "SA Insertion (desc) ",
1150 .lb = STMMAC_LOOPBACK_PHY,
1151 .fn = stmmac_test_desc_sai,
1152 }, {
1153 .name = "SA Replacement (desc)",
1154 .lb = STMMAC_LOOPBACK_PHY,
1155 .fn = stmmac_test_desc_sar,
1156 }, {
1157 .name = "SA Insertion (reg) ",
1158 .lb = STMMAC_LOOPBACK_PHY,
1159 .fn = stmmac_test_reg_sai,
1160 }, {
1161 .name = "SA Replacement (reg)",
1162 .lb = STMMAC_LOOPBACK_PHY,
1163 .fn = stmmac_test_reg_sar,
1068 }, 1164 },
1069}; 1165};
1070 1166