2022-04-26 17:12:12

by Tan Tee Min

[permalink] [raw]
Subject: [PATCH net 1/1] net: stmmac: disable Split Header (SPH) for Intel platforms

Based on DesignWare Ethernet QoS datasheet, we are seeing the limitation
of Split Header (SPH) feature is not supported for Ipv4 fragmented packet.
This SPH limitation will cause ping failure when the packets size exceed
the MTU size. For example, the issue happens once the basic ping packet
size is larger than the configured MTU size and the data is lost inside
the fragmented packet, replaced by zeros/corrupted values, and leads to
ping fail.

So, disable the Split Header for Intel platforms.

Cc: <[email protected]> # 5.10.x
Suggested-by: Ong, Boon Leong <[email protected]>
Signed-off-by: Mohammad Athari Bin Ismail <[email protected]>
Signed-off-by: Wong Vee Khee <[email protected]>
Signed-off-by: Tan Tee Min <[email protected]>
---
drivers/net/ethernet/stmicro/stmmac/dwmac-intel.c | 1 +
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 2 +-
include/linux/stmmac.h | 1 +
3 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-intel.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-intel.c
index 63754a9c4ba7..0b0be0898ac5 100644
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-intel.c
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-intel.c
@@ -454,6 +454,7 @@ static int intel_mgbe_common_data(struct pci_dev *pdev,
plat->has_gmac4 = 1;
plat->force_sf_dma_mode = 0;
plat->tso_en = 1;
+ plat->sph_disable = 1;

/* Multiplying factor to the clk_eee_i clock time
* period to make it closer to 100 ns. This value
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index 4a4b3651ab3e..2525a80353b7 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -7021,7 +7021,7 @@ int stmmac_dvr_probe(struct device *device,
dev_info(priv->device, "TSO feature enabled\n");
}

- if (priv->dma_cap.sphen) {
+ if (priv->dma_cap.sphen && !priv->plat->sph_disable) {
ndev->hw_features |= NETIF_F_GRO;
priv->sph_cap = true;
priv->sph = priv->sph_cap;
diff --git a/include/linux/stmmac.h b/include/linux/stmmac.h
index 24eea1b05ca2..29917850f079 100644
--- a/include/linux/stmmac.h
+++ b/include/linux/stmmac.h
@@ -270,5 +270,6 @@ struct plat_stmmacenet_data {
int msi_rx_base_vec;
int msi_tx_base_vec;
bool use_phy_wol;
+ bool sph_disable;
};
#endif
--
2.25.1


2022-04-27 10:14:53

by Kurt Kanzenbach

[permalink] [raw]
Subject: Re: [PATCH net 1/1] net: stmmac: disable Split Header (SPH) for Intel platforms

Hi,

On Tue Apr 26 2022, Tan Tee Min wrote:
> Based on DesignWare Ethernet QoS datasheet, we are seeing the limitation
> of Split Header (SPH) feature is not supported for Ipv4 fragmented packet.
> This SPH limitation will cause ping failure when the packets size exceed
> the MTU size. For example, the issue happens once the basic ping packet
> size is larger than the configured MTU size and the data is lost inside
> the fragmented packet, replaced by zeros/corrupted values, and leads to
> ping fail.
>
> So, disable the Split Header for Intel platforms.

Does this issue only apply on Intel platforms?

Thanks,
Kurt


Attachments:
signature.asc (877.00 B)

2022-04-28 06:18:32

by Tan Tee Min

[permalink] [raw]
Subject: Re: [PATCH net 1/1] net: stmmac: disable Split Header (SPH) for Intel platforms

On Tue, Apr 26, 2022 at 03:58:56PM +0200, Kurt Kanzenbach wrote:
> Hi,
>
> On Tue Apr 26 2022, Tan Tee Min wrote:
> > Based on DesignWare Ethernet QoS datasheet, we are seeing the limitation
> > of Split Header (SPH) feature is not supported for Ipv4 fragmented packet.
> > This SPH limitation will cause ping failure when the packets size exceed
> > the MTU size. For example, the issue happens once the basic ping packet
> > size is larger than the configured MTU size and the data is lost inside
> > the fragmented packet, replaced by zeros/corrupted values, and leads to
> > ping fail.
> >
> > So, disable the Split Header for Intel platforms.
>
> Does this issue only apply on Intel platforms?

According to Synopsys IP support, they have confirmed the header-payload
splitting for IPv4 fragmented packets is not supported for the Synopsys
Ether IPs.

Intel platforms are integrating with GMAC EQoS IP which is impacted by the
limitation above, so we are changing the default SPH setting to disabled
for Intel Platforms only.

If anyone can confirm on their platform also having the same issues,
then we would change the SPH default to disable across the IPs.

Thanks,
Tee Min

2022-04-28 10:43:18

by Paolo Abeni

[permalink] [raw]
Subject: Re: [PATCH net 1/1] net: stmmac: disable Split Header (SPH) for Intel platforms

Hello,

On Thu, 2022-04-28 at 09:55 +0800, Tan Tee Min wrote:
> On Tue, Apr 26, 2022 at 03:58:56PM +0200, Kurt Kanzenbach wrote:
> > Hi,
> >
> > On Tue Apr 26 2022, Tan Tee Min wrote:
> > > Based on DesignWare Ethernet QoS datasheet, we are seeing the limitation
> > > of Split Header (SPH) feature is not supported for Ipv4 fragmented packet.
> > > This SPH limitation will cause ping failure when the packets size exceed
> > > the MTU size. For example, the issue happens once the basic ping packet
> > > size is larger than the configured MTU size and the data is lost inside
> > > the fragmented packet, replaced by zeros/corrupted values, and leads to
> > > ping fail.
> > >
> > > So, disable the Split Header for Intel platforms.
> >
> > Does this issue only apply on Intel platforms?
>
> According to Synopsys IP support, they have confirmed the header-payload
> splitting for IPv4 fragmented packets is not supported for the Synopsys
> Ether IPs.
>
> Intel platforms are integrating with GMAC EQoS IP which is impacted by the
> limitation above, so we are changing the default SPH setting to disabled
> for Intel Platforms only.
>
> If anyone can confirm on their platform also having the same issues,
> then we would change the SPH default to disable across the IPs.

Could you please provide a Fixes tag here?

Thanks!

Paolo