From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932794AbdCIPQo (ORCPT ); Thu, 9 Mar 2017 10:16:44 -0500 Received: from mail-sn1nam02on0065.outbound.protection.outlook.com ([104.47.36.65]:21711 "EHLO NAM02-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754526AbdCIPNM (ORCPT ); Thu, 9 Mar 2017 10:13:12 -0500 Authentication-Results: spf=fail (sender IP is 192.88.158.2) smtp.mailfrom=nxp.com; nxp.com; dkim=none (message not signed) header.d=none;nxp.com; dmarc=fail action=none header.from=nxp.com; From: Madalin Bucur To: CC: , , , , , Madalin Bucur Subject: [net-next v2 06/10] dpaa_eth: enable Rx checksum offload Date: Thu, 9 Mar 2017 16:37:01 +0200 Message-ID: <1489070225-7891-7-git-send-email-madalin.bucur@nxp.com> X-Mailer: git-send-email 2.1.0 In-Reply-To: <1489070225-7891-1-git-send-email-madalin.bucur@nxp.com> References: <1489070225-7891-1-git-send-email-madalin.bucur@nxp.com> Reply-To: X-EOPAttributedMessage: 0 X-Matching-Connectors: 131335438622415965;(91ab9b29-cfa4-454e-5278-08d120cd25b8);() X-Forefront-Antispam-Report: CIP:192.88.158.2;IPV:NLI;CTRY:US;EFV:NLI;SFV:NSPM;SFS:(10009020)(979002)(6009001)(336005)(2980300002)(1110001)(1109001)(339900001)(189002)(199003)(9170700003)(81166006)(8676002)(5003940100001)(47776003)(104016004)(48376002)(85426001)(356003)(4326008)(5660300001)(2950100002)(189998001)(50466002)(106466001)(6916009)(6666003)(54906002)(69596002)(8656002)(77096006)(305945005)(2906002)(3450700001)(50226002)(76176999)(110136004)(86362001)(2351001)(33646002)(38730400002)(105606002)(53936002)(36756003)(50986999)(8936002)(43066003)(969003)(989001)(999001)(1009001)(1019001);DIR:OUT;SFP:1101;SCL:1;SRVR:CH1PR03MB1945;H:az84smr01.freescale.net;FPR:;SPF:Fail;MLV:ovrnspm;MX:1;A:1;PTR:InfoDomainNonexistent;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BY2FFO11FD038;1:YpH+4x38KexWSPHvjSGvmKL8N7kOVLbeLFr0sUHznxdXXWYS4pEnvSJwNa4wWI43tUi2Vp+I772hjDPESXC3kc6X2CEM/qugIlpcCG0llGKZVVWoAPExr+X+55qHEKjHxxaUj2NRgxd51HqvTAR4xRxwQrSW51tmV6R+I3RONmS1Z5e0QJM82nD0ECMeXHMHlTVsjpGNpbWtwK8k6IE4LdfyqWYSepM2dvbeBvxZPVGug3H1Unf3bI6bM5xiU2/e5GUsABprVT7qsZznbuX7Qmbbdi/lBAJ1ONkzrZkzyuktzLlZ30n8A+5O1AFxgKavsl43P+L2YKJ+veRXpBNxM7NSWMz2UhGbcryc1ldeVQJG3tJ6iZG0BxQWEDPUQB3n0wd96BA5xnwYvj8CQqYkBWzWC9KrrOna1R7qTHBs4tV712arCPDRmycoVgACKmkvIgFjweNPpoImnipr3cWo8+LkxiKJmddRY4jggnXUb6bNlMEzkBON38GqCkOnoY8wJ/1ErehezDVwzFupEsJwxJDP7vb7dZbQo2di84H+T9w6eFQubcqQiglwG/K/MX7eghKU799h+IfeX4BOrWvPx+2JJ6asTZwLz++zDUrkv087SkfHP9F2b0m9hR3wGVrNwH0NuzK2CgusEX+yqZl2bjmtrkEoQmEH3X4pdIt541d1hNjqQKHBMGwa9mG6YBszLmzGYsPEknmVm1j/Y4bEBg== MIME-Version: 1.0 Content-Type: text/plain X-MS-Office365-Filtering-Correlation-Id: 3c6d5b44-7d22-416e-5c5d-08d466f9d7f9 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:CH1PR03MB1945; X-Microsoft-Exchange-Diagnostics: 1;CH1PR03MB1945;3:3iCkF+J96Ad/57cvVN3ooRHFq0gCQQX96NsPAR/4dsjtDN7riphsve6zuCv/tdzioaDcBBKWeHyBtEYAsPJdPT8OP2aLbqY4RJ4lm00Bp1ZnMNKoJWs9mI0F+oXVNoc12Aq6+hdcvVmGFL2TyS/V99GVH7k7LlYcr+dpybejmWqffox+jrdy+n8aGqSQ7rzHaFGbwyDb0efEvRpr9pmbn4IJyFkYgIkyUG4JNqWZqFTACtfH5AuugMWJMPsoc0ACeFWOdKNwaAIVo4xfeqEqk4+vAj+tWmzS+G1kdw+brPG+TLg3GC7PYVqqhJkgVPvx0kLqmPd7EtySUyDPJ4CzRzBCr3fXjsxFK+ysl19TCoreOAwQqnUJprjpDbKbMEQN;25:mCz0VuQ71v630JMeVZkG4B7lDI0FsK98s5UfJDyekDrk41uSPDSJOv28iMUOmrO6mu2I+pmAyL9AFtgspfjKOTuJmKX7UdtlkonWQ26FyJxXUwTP7JD9CA+3mvo2pMQmd1sAC9FLyXNjztwZbVPHCSs1TuF28wdknyjZT+kbcx7eP1VI9WxVmT2+K9IAMZNw5C1ll/fCvHRqI2VrUIiZ61TqWm0T4RGjMTxaB4YCxqTqblmoByLJH63gi0XS8pNMSTDfbfeIJWmgiLMsSLipJQ1K1tGbspgV8moxHAQD1sMf+Ua9dw352CS24l988mLI9aML0DutT2iA2tROK4jM50yfrsCtxFIoudE/OFAcUEszeXxSNDiunddDVZQQyWXANf05CylbuespiRUvFR99TBEwPRbJO/9Ma67Z3mUfIbooW51S88HAVvpuXLf4IdBZIolvsrN/pnIwPD2j2s2gOA== X-Microsoft-Exchange-Diagnostics: 1;CH1PR03MB1945;31:dHJxTVFHoxn/hUcJFB9Ko1K3/QEoOJ3iN+nUYdlZ6olJe/qcVaR5whMI8GPCbv79R+Q2ngJJd6wpfdT9IHp2pkDoGtJ5c/3vBz8cD7I0GlQz4dbmGAMo6MuAEcdb+j4PSER8nrgTKN4AQGRrI/4ZGsKXlV0nLHNENYrNekTawAvsjMunWW5uC9if0nAnEdtgShZu7bY2gRDP8r7KaCnOsxlCnKgJAllQ+17sxxamtskehftbsYie/qv8PAv1gZ4VFacl2KOZK1HFoeobuVaZUvCALnBd/cs88Hsiso8hAdc= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6095060)(601004)(2401047)(13017025)(13015025)(13023025)(5005006)(13018025)(13024025)(8121501046)(3002001)(10201501046)(6055026)(6096035)(20161123556025)(20161123561025)(20161123563025)(20161123565025)(20161123559025);SRVR:CH1PR03MB1945;BCL:0;PCL:0;RULEID:(400006);SRVR:CH1PR03MB1945; X-Microsoft-Exchange-Diagnostics: 1;CH1PR03MB1945;4:qYUP7jLnUc0zLuMLcNWSNGp+2l8DQegnZcuHsESGxm+Fh722Y5SEz6WbnG06tADjV24XdZiJ/L3CVdggNPKwPOW/AL4aVWQ+6HX0XbhUURQUiGzX9vHFaxudWiufvn9J3HtQe/7RLxXeVTpXH66YXAsKXoWZCx8U1nQ5thmaORvcwHbkHPSCmP3HPDuvcScIGUq0AoINLh2FaFOaNny34KfdlLZ4bxxZUKcgwW0ebon47VnGC3RCORqSj3CS38Li5J9TVSOq8aRfJb4O236njarsDesg1ske0HWkpotvOKjAnPbsP1BwZfBj2xgg9n+qPCp4ZEFzfg0v/aZ+n/9PYY5Sq3xkgz7hqkLNxFCFWaJ4P+ah7S6cRrYWDvFndsK9+X4axrfnGEdOvK+ZAy97YGzb3KL4ffMtLdjusDEu2AKAG0EqxseHMrPc3I65K679h0Ve6u6j0RrzHhflpGDDpdqS3O7+cUSxpfp+V1LfL8GW96mSkBjl7lzSMun+ZVQ7U4LmZehEIMUxVxkuB2S/zpQDi0imiz+xGU+TCAU9jFQJieIwaFcb3+zHzqy416KNpHbY4rjfijzAAOTn0Ugt5GFqYqNQu/dlJAaW7su26Z6//pjM4vMPTrd6181x8XAJbstS9aT+aJVZZDuEv7fZ8dTROuf/cvcRC7Sk4847x9KWDmoSmJnX412YHRo+jMDbA1aGcUTmua2QCUbJdOyRB0I0qzqKXjxxroGOWLWsM3Jj6wHzq27snJXq3RoiI6px X-Forefront-PRVS: 0241D5F98C X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;CH1PR03MB1945;23:6E7EJQLnyFbKVYTML7c8ofS/GhIWzs12r3M7iOjcl?= =?us-ascii?Q?glVmftfhclI7IX2doQgaWWnf59/+him35P5Jw6vjZZ0IVWnGWMDTsBJB1Qtq?= =?us-ascii?Q?DuS0ELE5Ooat69Dk7wDqKIrFyQfugsuDUZoyyc5vIvB7+lAMe2Rn0biPeUre?= =?us-ascii?Q?tO1kEXXwSUCJsgI6xWbkSUE2L84B8NDys0aPF+8VF80LMpPGCgvf0YzBHRGK?= =?us-ascii?Q?eK/gM6AC/xk1tP/yPDeYsioHlXys0u7sQfibIIgrx/3+aw11EQtuPO6xuOzO?= =?us-ascii?Q?K6VKSUTAED+7n9mXQaPyRbTRYGGeEwQNDHQ40ghKkn57xhRVKrTWRv5rRgCU?= =?us-ascii?Q?ng8emQC+kfSxLe8btQzLe3j98Z/oi6BOxIXpRKczVk/8svXRHUioFyK2pn6Q?= =?us-ascii?Q?P4nRxSmtTiEOUj7tvaltuCS0Q5PVQCUt4WDbJDGmU3FoO38/yi4wwrbf4zDY?= =?us-ascii?Q?yI/aIfIzoK/X2Fk/Jl8qnRET1OhEJRgDNrrMVuXKODCNpbivLLBgjCotWMEr?= =?us-ascii?Q?iO61yC77cx3bSK53GOKstMGwxNpVY82oX1U5hUinI5qEWc90hc8SCY9fOS5R?= =?us-ascii?Q?lgnt51WV7umrtcj0/Mh7887Zg7l8XSwftj0OPNCVWlT0Gk00V33/4gVT5Eo/?= =?us-ascii?Q?LfC26j73AMCX4Jj8S3csAXEJcnhS+8z3wSAYlG8ay0o9WNIWdcyV6Gsm5QO5?= =?us-ascii?Q?dpIyFA6mYp2DufXHq90M0RTLgmhFqAO8dyTbOmioITDbTexfG9l/Hw37YI5Y?= =?us-ascii?Q?cWSe/JcF724xqmOl34FlGMvbV+jRcw/ch0q3VavyeHFe/2vodSW9M8cdeoKb?= =?us-ascii?Q?L4ShSOv+4ZiTVu2JYZbtKTT587D735lkaZeHNgvbaJdzo3qGmLQ7fiYtZHyJ?= =?us-ascii?Q?HM73HyY81uzwenE6GOYU8TcGjOK/Luo7CXIMhliH5lVdzl2AYU53r5uWrlCL?= =?us-ascii?Q?Biv93327BHbOe5xf9K08jr61IGuyYcap8OYkV1LapST40HWXmSnbj2m7m76C?= =?us-ascii?Q?8nk9LVm5gze82rsdb03CkxX4LHkPwN1eoe4f7Tj3RURyFk0utCwUZQGIE5WR?= =?us-ascii?Q?j4PNZZtIliU78Pju84WC9rNkWKjppPBdGarsmNixFT98kWhhLpYtihVUSn/p?= =?us-ascii?Q?zmkCPVyhOr9ZQVl6u/6bs34cr7wvJvdxdgw6G/Tb5vZ38DXBO0S8Xy7zE/g9?= =?us-ascii?Q?tXiNLh8IxVdke4=3D?= X-Microsoft-Exchange-Diagnostics: 1;CH1PR03MB1945;6:vOA2ho4z5fRChXRumzJaeqLyTRDBbi4el9HUsaCEohO1iwq1kQVu1pA+DmeeBwHVtB4RLsstFazsXBwC4Jlx787n8XWCjVPczIkwOT5vY1GBa8b2qYFRWc7XLWgqJQ/j7Ej3c043h8AD7/HOQczjDyvpKI3EbVgHmy9hl7ePDRvupeSys/ZxB9c/AyKDueFoC98Gdy2SfojJiRE0+3O01a18qtvpSYOvFFArcyqQ5wM5uDk41pfBj1YnOx2uULUmtKoPbj8/wudrtHYFaBUhtj/lhbd7Qt+NbKYyoqHuvwnAxwTzUGBtvJFtJ0oK1ToxksBwPuyagS+o5Tmr+E3wegn/rmDGgvDiloEnom5zjQdmEhTRXyd4YZjk5ofG7XiT4kq2jdWqNJXdekKHPFK1oBk470lR0RUKGqrJM4WzYhk=;5:VRzCOLJOn5vY904Vo0eBVp69djxx3M04Iom8ZGCHCLvWem60KBJOD/3Lyd+I2XWuTDFTV+faRqXRjffAFna8hnu7LIRZwEW8gJopglIH6XJ+ZK+vGhbGRayMtgq+4IfAUth+mFjCeagQyWJ7SGRvUPe06XgbttdtpZgfXbMPwx2rFBVogHx7Tg68X7a2sofT;24:N6qlR4gBmVb0DSsPm+fHEiaHFzserufdXjtBpTt2hOOhlrGDFYUHku3jBb+XEFhVd+qMDij2cdkV0ijQBSeV63puFduixwX8EbWSA8oT1oM= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;CH1PR03MB1945;7:aJRqHZBhIoGIUZmH5hQiQqC7oU8SAE61DpsnW0mUDcCdYSgJ/7L/Ux3fxJjCmZrqQA64I9jIyKUlppx3t2fvOZv8aouSNUCzi+RWC2k4/iEfmgxhYkTl54yMncVtSRHpiL0pm5MFWKj5JMoiS4qrNiKdox0Td8w3lsszCXqi/MriMPVdch5wnph08bnHpb3cPzCzIx0uYmXQ2EquyTXLdl3lCkwQYl6SdrWT4pzIZZmu6MnBcy+C9rxSzrgzhW0OG7sni+8xMTO4138wgVKBTZ8mVzKVjg8jEkoosNbBTF5looYnp6VrSQK5/qH/nkqLHOnAh0DR/6ihlHwXMO6QJw== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Mar 2017 14:37:42.1167 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e;Ip=[192.88.158.2];Helo=[az84smr01.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH1PR03MB1945 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Use the FMan HW parser L4CV flag to offload Rx checksumming. Signed-off-by: Madalin Bucur --- drivers/net/ethernet/freescale/dpaa/dpaa_eth.c | 29 ++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c b/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c index e19181f..a7a595c 100644 --- a/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c +++ b/drivers/net/ethernet/freescale/dpaa/dpaa_eth.c @@ -137,6 +137,13 @@ MODULE_PARM_DESC(tx_timeout, "The Tx timeout in ms"); /* L4 Type field: TCP */ #define FM_L4_PARSE_RESULT_TCP 0x20 +/* FD status field indicating whether the FM Parser has attempted to validate + * the L4 csum of the frame. + * Note that having this bit set doesn't necessarily imply that the checksum + * is valid. One would have to check the parse results to find that out. + */ +#define FM_FD_STAT_L4CV 0x00000004 + #define DPAA_SGT_MAX_ENTRIES 16 /* maximum number of entries in SG Table */ #define DPAA_BUFF_RELEASE_MAX 8 /* maximum number of buffers released at once */ @@ -235,6 +242,7 @@ static int dpaa_netdev_init(struct net_device *net_dev, * For conformity, we'll still declare GSO explicitly. */ net_dev->features |= NETIF_F_GSO; + net_dev->features |= NETIF_F_RXCSUM; net_dev->priv_flags |= IFF_LIVE_ADDR_CHANGE; /* we do not want shared skbs on TX */ @@ -1526,6 +1534,23 @@ static struct sk_buff *dpaa_cleanup_tx_fd(const struct dpaa_priv *priv, return skb; } +static u8 rx_csum_offload(const struct dpaa_priv *priv, const struct qm_fd *fd) +{ + /* The parser has run and performed L4 checksum validation. + * We know there were no parser errors (and implicitly no + * L4 csum error), otherwise we wouldn't be here. + */ + if ((priv->net_dev->features & NETIF_F_RXCSUM) && + (be32_to_cpu(fd->status) & FM_FD_STAT_L4CV)) + return CHECKSUM_UNNECESSARY; + + /* We're here because either the parser didn't run or the L4 checksum + * was not verified. This may include the case of a UDP frame with + * checksum zero or an L4 proto other than TCP/UDP + */ + return CHECKSUM_NONE; +} + /* Build a linear skb around the received buffer. * We are guaranteed there is enough room at the end of the data buffer to * accommodate the shared info area of the skb. @@ -1556,7 +1581,7 @@ static struct sk_buff *contig_fd_to_skb(const struct dpaa_priv *priv, skb_reserve(skb, fd_off); skb_put(skb, qm_fd_get_length(fd)); - skb->ip_summed = CHECKSUM_NONE; + skb->ip_summed = rx_csum_offload(priv, fd); return skb; @@ -1616,7 +1641,7 @@ static struct sk_buff *sg_fd_to_skb(const struct dpaa_priv *priv, if (WARN_ON(unlikely(!skb))) goto free_buffers; - skb->ip_summed = CHECKSUM_NONE; + skb->ip_summed = rx_csum_offload(priv, fd); /* Make sure forwarded skbs will have enough space * on Tx, if extra headers are added. -- 2.1.0