> -----Original Message----- > From: Intel-wired-lan <[email protected]> On Behalf Of Paul > Greenwalt > Sent: Wednesday, September 18, 2024 3:16 AM > To: [email protected] > Cc: Joyner, Eric <[email protected]>; Lobakin, Aleksander > <[email protected]>; Michael, Alice <[email protected]>; > Nguyen, Anthony L <[email protected]>; Greenwalt, Paul > <[email protected]> > Subject: [Intel-wired-lan] [PATCH iwl-next v3] ice: Add E830 checksum offload > support > > E830 supports raw receive and generic transmit checksum offloads. > > Raw receive checksum support is provided by hardware calculating the checksum > over the whole packet, regardless of type. The calculated checksum is > provided to driver in the Rx flex descriptor. Then the driver assigns the > checksum to skb->csum and sets skb->ip_summed to CHECKSUM_COMPLETE. > > Generic transmit checksum support is provided by hardware calculating the > checksum given two offsets: the start offset to begin checksum calculation, > and the offset to insert the calculated checksum in the packet. Support is > advertised to the stack using NETIF_F_HW_CSUM feature. > > E830 has the following limitations when both generic transmit checksum > offload and TCP Segmentation Offload (TSO) are enabled: > > 1. Inner packet header modification is not supported. This restriction > includes the inability to alter TCP flags, such as the push flag. As a > result, this limitation can impact the receiver's ability to coalesce > packets, potentially degrading network throughput. > 2. The Maximum Segment Size (MSS) is limited to 1023 bytes, which prevents > support of Maximum Transmission Unit (MTU) greater than 1063 bytes. > > Therefore NETIF_F_HW_CSUM and NETIF_F_ALL_TSO features are mutually > exclusive. NETIF_F_HW_CSUM hardware feature support is indicated but is not > enabled by default. Instead, IP checksums and > NETIF_F_ALL_TSO are the > defaults. Enforcement of mutual exclusivity of NETIF_F_HW_CSUM and > NETIF_F_ALL_TSO is done in ice_fix_features_tso_gcs(). Mutual exclusivity of > IP checksums and > NETIF_F_HW_CSUM is handled by netdev_fix_features(). > > When NETIF_F_HW_CSUM is requested the provided skb->csum_start and > skb->csum_offset are passed to hardware in the Tx context descriptor > generic checksum (GCS) parameters. Hardware calculates the 1's complement > from skb->csum_start to the end of the packet, and inserts the result in the > packet at skb->csum_offset. > > Co-developed-by: Alice Michael <[email protected]> > Signed-off-by: Alice Michael <[email protected]> > Co-developed-by: Eric Joyner <[email protected]> > Signed-off-by: Eric Joyner <[email protected]> > Signed-off-by: Paul Greenwalt <[email protected]> > --- > v1->v2 > - Update commit message with additional details. > - Add newlines, and add params around > - Return early from ice_fix_features() to avoid extra indentation and > large if block. > - Move and change some defines. > - replace htons and le16_t_cpu with swap16. > - Use FIELD_PREP where possible. > - Removed checksum valid bit check STATUS1_L2TAG2P_S. This check is not > needed since there is no situation which will return an error. > v2->v3 > - Minor fixes in commit message. > - Removed unused register defines in ice_hw_autogen.h. > - Moved GCS and TSO feature fix to helper function > ice_fix_features_gcs(), and updated logic. > - Update to align naming with related flags. > --- > drivers/net/ethernet/intel/ice/ice.h | 1 + > .../net/ethernet/intel/ice/ice_lan_tx_rx.h | 9 +++- > drivers/net/ethernet/intel/ice/ice_lib.c | 12 +++++- > drivers/net/ethernet/intel/ice/ice_main.c | 43 +++++++++++++++++++ > drivers/net/ethernet/intel/ice/ice_txrx.c | 26 ++++++++++- > drivers/net/ethernet/intel/ice/ice_txrx.h | 3 ++ > drivers/net/ethernet/intel/ice/ice_txrx_lib.c | 26 +++++++++++ > 7 files changed, 116 insertions(+), 4 deletions(-) >
Tested-by: Pucha Himasekhar Reddy <[email protected]> (A Contingent worker at Intel)
