mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 17:13:52 +02:00
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:
parent
42b06fcc87
commit
d7735c6bb2
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
},
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -1246,6 +1246,7 @@ struct xgbe_prv_data {
|
|||
int rx_adapt_retries;
|
||||
bool rx_adapt_done;
|
||||
bool mode_set;
|
||||
bool sph;
|
||||
};
|
||||
|
||||
/* Function prototypes*/
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user