amd-xgbe: add ethtool split header selftest

Adds support for ethtool split header selftest. Performs
UDP and TCP check to ensure split header selft test works
for both packet types.

Signed-off-by: Raju Rangoju <Raju.Rangoju@amd.com>
Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
Link: https://patch.msgid.link/20251031111555.774425-4-Raju.Rangoju@amd.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
Raju Rangoju 2025-10-31 16:45:57 +05:30 committed by Paolo Abeni
parent 42b06fcc87
commit d7735c6bb2
3 changed files with 49 additions and 0 deletions

View File

@ -211,6 +211,7 @@ static void xgbe_config_sph_mode(struct xgbe_prv_data *pdata)
}
XGMAC_IOWRITE_BITS(pdata, MAC_RCR, HDSMS, XGBE_SPH_HDSMS_SIZE);
pdata->sph = true;
}
static void xgbe_disable_sph_mode(struct xgbe_prv_data *pdata)
@ -223,6 +224,7 @@ static void xgbe_disable_sph_mode(struct xgbe_prv_data *pdata)
XGMAC_DMA_IOWRITE_BITS(pdata->channel[i], DMA_CH_CR, SPH, 0);
}
pdata->sph = false;
}
static int xgbe_write_rss_reg(struct xgbe_prv_data *pdata, unsigned int type,

View File

@ -173,6 +173,48 @@ static int xgbe_test_phy_loopback(struct xgbe_prv_data *pdata)
return ret;
}
static int xgbe_test_sph(struct xgbe_prv_data *pdata)
{
struct net_packet_attrs attr = {};
unsigned long cnt_end, cnt_start;
int ret;
cnt_start = pdata->ext_stats.rx_split_header_packets;
if (!pdata->sph) {
netdev_err(pdata->netdev, "Split Header not enabled\n");
return -EOPNOTSUPP;
}
/* UDP test */
attr.dst = pdata->netdev->dev_addr;
attr.tcp = false;
ret = __xgbe_test_loopback(pdata, &attr);
if (ret)
return ret;
cnt_end = pdata->ext_stats.rx_split_header_packets;
if (cnt_end <= cnt_start)
return -EINVAL;
/* TCP test */
cnt_start = cnt_end;
attr.dst = pdata->netdev->dev_addr;
attr.tcp = true;
ret = __xgbe_test_loopback(pdata, &attr);
if (ret)
return ret;
cnt_end = pdata->ext_stats.rx_split_header_packets;
if (cnt_end <= cnt_start)
return -EINVAL;
return 0;
}
static const struct xgbe_test xgbe_selftests[] = {
{
.name = "MAC Loopback ",
@ -182,6 +224,10 @@ static const struct xgbe_test xgbe_selftests[] = {
.name = "PHY Loopback ",
.lb = XGBE_LOOPBACK_NONE,
.fn = xgbe_test_phy_loopback,
}, {
.name = "Split Header ",
.lb = XGBE_LOOPBACK_PHY,
.fn = xgbe_test_sph,
},
};

View File

@ -1246,6 +1246,7 @@ struct xgbe_prv_data {
int rx_adapt_retries;
bool rx_adapt_done;
bool mode_set;
bool sph;
};
/* Function prototypes*/