Message ID | 20220426074531.4115683-1-tee.min.tan@linux.intel.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net,1/1] net: stmmac: disable Split Header (SPH) for Intel platforms | expand |
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
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
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
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