linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jakub Kicinski <kuba@kernel.org>
To: Alex Elder <elder@linaro.org>
Cc: davem@davemloft.net, evgreen@chromium.org,
	cpratapa@codeaurora.org, bjorn.andersson@linaro.org,
	subashab@codeaurora.org, netdev@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH net-next 2/2] net: ipa: add support for inline checksum offload
Date: Tue, 1 Dec 2020 18:13:19 -0800	[thread overview]
Message-ID: <20201201181319.41091a37@kicinski-fedora-pc1c0hjn.DHCP.thefacebook.com> (raw)
In-Reply-To: <20201201004143.27569-3-elder@linaro.org>

On Mon, 30 Nov 2020 18:41:43 -0600 Alex Elder wrote:
> Starting with IPA v4.5, IP payload checksum offload is implemented
> differently.
> 
> Prior to v4.5, the IPA hardware appends an rmnet_map_dl_csum_trailer
> structure to each packet if checksum offload is enabled in the
> download direction (modem->AP).  In the upload direction (AP->modem)
> a rmnet_map_ul_csum_header structure is prepended before each sent
> packet.
> 
> Starting with IPA v4.5, checksum offload is implemented using a
> single new rmnet_map_v5_csum_header structure which sits between
> the QMAP header and the packet data.  The same header structure
> is used in both directions.
> 
> The new header contains a header type (CSUM_OFFLOAD); a checksum
> flag; and a flag indicating whether any other headers follow this
> one.  The checksum flag indicates whether the hardware should
> compute (and insert) the checksum on a sent packet.  On a received
> packet the checksum flag indicates whether the hardware confirms the
> checksum value in the payload is correct.
> 
> To function, the rmnet driver must also add support for this new
> "inline" checksum offload.  The changes implementing this will be
> submitted soon.

We don't usually merge half of a feature. Why not wait until all
support is in place?

Do I understand right that it's rmnet that will push the csum header?
This change seems to only reserve space for it and request the feature
at init..

> diff --git a/drivers/net/ipa/ipa_endpoint.c b/drivers/net/ipa/ipa_endpoint.c
> index 27f543b6780b1..1a4749f7f03e6 100644
> --- a/drivers/net/ipa/ipa_endpoint.c
> +++ b/drivers/net/ipa/ipa_endpoint.c
> @@ -434,33 +434,63 @@ int ipa_endpoint_modem_exception_reset_all(struct ipa *ipa)
>  static void ipa_endpoint_init_cfg(struct ipa_endpoint *endpoint)
>  {
>  	u32 offset = IPA_REG_ENDP_INIT_CFG_N_OFFSET(endpoint->endpoint_id);
> +	enum ipa_cs_offload_en enabled;
>  	u32 val = 0;
>  
>  	/* FRAG_OFFLOAD_EN is 0 */
>  	if (endpoint->data->checksum) {
> +		enum ipa_version version = endpoint->ipa->version;
> +
>  		if (endpoint->toward_ipa) {
>  			u32 checksum_offset;
>  
> -			val |= u32_encode_bits(IPA_CS_OFFLOAD_UL,
> -					       CS_OFFLOAD_EN_FMASK);
>  			/* Checksum header offset is in 4-byte units */
>  			checksum_offset = sizeof(struct rmnet_map_header);
>  			checksum_offset /= sizeof(u32);
>  			val |= u32_encode_bits(checksum_offset,
>  					       CS_METADATA_HDR_OFFSET_FMASK);
> +
> +			enabled = version < IPA_VERSION_4_5
> +					? IPA_CS_OFFLOAD_UL
> +					: IPA_CS_OFFLOAD_INLINE;
>  		} else {
> -			val |= u32_encode_bits(IPA_CS_OFFLOAD_DL,
> -					       CS_OFFLOAD_EN_FMASK);
> +			enabled = version < IPA_VERSION_4_5
> +					? IPA_CS_OFFLOAD_DL
> +					: IPA_CS_OFFLOAD_INLINE;
>  		}
>  	} else {
> -		val |= u32_encode_bits(IPA_CS_OFFLOAD_NONE,
> -				       CS_OFFLOAD_EN_FMASK);
> +		enabled = IPA_CS_OFFLOAD_NONE;
>  	}
> +	val |= u32_encode_bits(enabled, CS_OFFLOAD_EN_FMASK);
>  	/* CS_GEN_QMB_MASTER_SEL is 0 */
>  
>  	iowrite32(val, endpoint->ipa->reg_virt + offset);
>  }
>  
> +static u32
> +ipa_qmap_header_size(enum ipa_version version, struct ipa_endpoint *endpoint)
> +{
> +	u32 header_size = sizeof(struct rmnet_map_header);
> +
> +	/* ipa_assert(endpoint->data->qmap); */
> +
> +	/* We might supply a checksum header after the QMAP header */
> +	if (endpoint->data->checksum) {
> +		if (version < IPA_VERSION_4_5) {
> +			size_t size = sizeof(struct rmnet_map_ul_csum_header);
> +
> +			/* Checksum header inserted for AP TX endpoints */
> +			if (endpoint->toward_ipa)
> +				header_size += size;
> +		} else {
> +			/* Checksum header is used in both directions */
> +			header_size += sizeof(struct rmnet_map_v5_csum_header);
> +		}
> +	}
> +
> +	return header_size;
> +}

  reply	other threads:[~2020-12-02  2:14 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-01  0:41 [PATCH net-next 0/2] net: ipa: IPA v4.5 inline checksum offload Alex Elder
2020-12-01  0:41 ` [PATCH net-next 1/2] if_rmnet.h: define struct rmnet_map_v5_csum_header Alex Elder
2020-12-01  0:41 ` [PATCH net-next 2/2] net: ipa: add support for inline checksum offload Alex Elder
2020-12-02  2:13   ` Jakub Kicinski [this message]
2020-12-02 13:24     ` Alex Elder

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20201201181319.41091a37@kicinski-fedora-pc1c0hjn.DHCP.thefacebook.com \
    --to=kuba@kernel.org \
    --cc=bjorn.andersson@linaro.org \
    --cc=cpratapa@codeaurora.org \
    --cc=davem@davemloft.net \
    --cc=elder@linaro.org \
    --cc=evgreen@chromium.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=subashab@codeaurora.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).