From: Doug Berger <opendmb@gmail.com>
To: "David S. Miller" <davem@davemloft.net>
Cc: Florian Fainelli <f.fainelli@gmail.com>,
bcm-kernel-feedback-list@broadcom.com, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org, Doug Berger <opendmb@gmail.com>
Subject: [PATCH net-next 3/8] net: bcmgenet: use CHECKSUM_COMPLETE for NETIF_F_RXCSUM
Date: Tue, 17 Dec 2019 13:02:24 -0800 [thread overview]
Message-ID: <1576616549-39097-4-git-send-email-opendmb@gmail.com> (raw)
In-Reply-To: <1576616549-39097-1-git-send-email-opendmb@gmail.com>
This commit updates the Rx checksum offload behavior of the driver
to use the more generic CHECKSUM_COMPLETE method that supports all
protocols over the CHECKSUM_UNNECESSARY method that only applies
to some protocols known by the hardware.
This behavior is perceived to be superior.
Signed-off-by: Doug Berger <opendmb@gmail.com>
---
drivers/net/ethernet/broadcom/genet/bcmgenet.c | 13 +++++--------
drivers/net/ethernet/broadcom/genet/bcmgenet.h | 1 +
2 files changed, 6 insertions(+), 8 deletions(-)
diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
index cd07b3ad1d53..5674dc304032 100644
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
@@ -521,7 +521,7 @@ static int bcmgenet_set_rx_csum(struct net_device *dev,
/* enable rx checksumming */
if (rx_csum_en)
- rbuf_chk_ctrl |= RBUF_RXCHK_EN;
+ rbuf_chk_ctrl |= RBUF_RXCHK_EN | RBUF_L3_PARSE_DIS;
else
rbuf_chk_ctrl &= ~RBUF_RXCHK_EN;
priv->desc_rxchk_en = rx_csum_en;
@@ -1739,7 +1739,6 @@ static unsigned int bcmgenet_desc_rx(struct bcmgenet_rx_ring *ring,
unsigned int bytes_processed = 0;
unsigned int p_index, mask;
unsigned int discards;
- unsigned int chksum_ok = 0;
/* Clear status before servicing to reduce spurious interrupts */
if (ring->index == DESC_INDEX) {
@@ -1793,6 +1792,10 @@ static unsigned int bcmgenet_desc_rx(struct bcmgenet_rx_ring *ring,
status = (struct status_64 *)skb->data;
dma_length_status = status->length_status;
+ if (priv->desc_rxchk_en) {
+ skb->csum = ntohs(status->rx_csum & 0xffff);
+ skb->ip_summed = CHECKSUM_COMPLETE;
+ }
}
/* DMA flags and length are still valid no matter how
@@ -1835,18 +1838,12 @@ static unsigned int bcmgenet_desc_rx(struct bcmgenet_rx_ring *ring,
goto next;
} /* error packet */
- chksum_ok = (dma_flag & priv->dma_rx_chk_bit) &&
- priv->desc_rxchk_en;
-
skb_put(skb, len);
if (priv->desc_64b_en) {
skb_pull(skb, 64);
len -= 64;
}
- if (likely(chksum_ok))
- skb->ip_summed = CHECKSUM_UNNECESSARY;
-
/* remove hardware 2bytes added for IP alignment */
skb_pull(skb, 2);
len -= 2;
diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.h b/drivers/net/ethernet/broadcom/genet/bcmgenet.h
index a5659197598f..11645cccc207 100644
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.h
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.h
@@ -251,6 +251,7 @@ struct bcmgenet_mib_counters {
#define RBUF_CHK_CTRL 0x14
#define RBUF_RXCHK_EN (1 << 0)
#define RBUF_SKIP_FCS (1 << 4)
+#define RBUF_L3_PARSE_DIS (1 << 5)
#define RBUF_ENERGY_CTRL 0x9c
#define RBUF_EEE_EN (1 << 0)
--
2.7.4
next prev parent reply other threads:[~2019-12-17 21:03 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-12-17 21:02 [PATCH net-next 0/8] net: bcmgenet: Turn on offloads by default Doug Berger
2019-12-17 21:02 ` [PATCH net-next 1/8] net: bcmgenet: enable NETIF_F_HIGHDMA flag Doug Berger
2019-12-17 22:51 ` Florian Fainelli
2019-12-17 21:02 ` [PATCH net-next 2/8] net: bcmgenet: enable NETIF_F_HW_CSUM feature Doug Berger
2019-12-17 21:02 ` Doug Berger [this message]
2019-12-17 21:16 ` [PATCH net-next 3/8] net: bcmgenet: use CHECKSUM_COMPLETE for NETIF_F_RXCSUM David Miller
2019-12-17 22:52 ` Florian Fainelli
2019-12-17 23:21 ` David Miller
2019-12-17 22:52 ` Florian Fainelli
2019-12-17 23:36 ` Doug Berger
2019-12-17 23:08 ` Jakub Kicinski
2019-12-25 23:39 ` kbuild test robot
2019-12-17 21:02 ` [PATCH net-next 4/8] net: bcmgenet: Refactor bcmgenet_set_features() Doug Berger
2019-12-17 23:02 ` Florian Fainelli
2019-12-17 21:02 ` [PATCH net-next 5/8] net: bcmgenet: Utilize bcmgenet_set_features() during resume/open Doug Berger
2019-12-17 23:01 ` Florian Fainelli
2019-12-17 21:02 ` [PATCH net-next 6/8] net: bcmgenet: Turn on offloads by default Doug Berger
2019-12-17 23:02 ` Florian Fainelli
2019-12-17 21:02 ` [PATCH net-next 7/8] net: bcmgenet: Be drop monitor friendly while re-allocating headroom Doug Berger
2019-12-17 23:00 ` Florian Fainelli
2019-12-17 21:02 ` [PATCH net-next 8/8] net: bcmgenet: Add software counters to track reallocations Doug Berger
2019-12-17 23:00 ` Florian Fainelli
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=1576616549-39097-4-git-send-email-opendmb@gmail.com \
--to=opendmb@gmail.com \
--cc=bcm-kernel-feedback-list@broadcom.com \
--cc=davem@davemloft.net \
--cc=f.fainelli@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.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).