Message ID | 20220429115807.2198448-1-tee.min.tan@linux.intel.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 47f753c1108e287edb3e27fad8a7511a9d55578e |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net,v2,1/1] net: stmmac: disable Split Header (SPH) for Intel platforms | expand |
Hello: This patch was applied to netdev/net.git (master) by David S. Miller <davem@davemloft.net>: On Fri, 29 Apr 2022 19:58:07 +0800 you 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. > > [...] Here is the summary with links: - [net,v2,1/1] net: stmmac: disable Split Header (SPH) for Intel platforms https://git.kernel.org/netdev/net/c/47f753c1108e You are awesome, thank you!
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