From patchwork Fri Oct 21 11:34:29 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fabio Estevam X-Patchwork-Id: 685048 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3t0k9w5gmPz9srZ for ; Fri, 21 Oct 2016 22:35:00 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=H/ad94b4; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754641AbcJULe4 (ORCPT ); Fri, 21 Oct 2016 07:34:56 -0400 Received: from mail-qk0-f196.google.com ([209.85.220.196]:35405 "EHLO mail-qk0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753088AbcJULey (ORCPT ); Fri, 21 Oct 2016 07:34:54 -0400 Received: by mail-qk0-f196.google.com with SMTP id v138so6852262qka.2 for ; Fri, 21 Oct 2016 04:34:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=46OazL+vHJA3/ZboERHZhlQDrC6mpvOFnyA4WA0t7os=; b=H/ad94b4wZpnXVU6D5wFRJ102ZD1UFQZYbblhS5dOTKD6aNEwbX9f+mXrFTuA2QQXC Kg04+OH7c8WZtvYreqJBa4oQE3r6uk+tif4W2RVIF9DX0QsxkmqktQMOvdy7QUvYtjb4 dG+fMk+bCEHCxqO+Pg7KuaQOCuQuQygMxsQ+J5TNri931las6ytLQVLUEEcPr/rsAKpc I9DIexgHHoQ1EWuHO4qFFOAl5dljOgt6eHJhUIJ1JgvoBjfeT72/Q+67sho7rRcMvIKs /E07kgKemAbeRKvITe6ePfqV5ohjh5aluP43GCqQTGE5Rsucpr7fSJWiE5aX4zbO+Gs+ mW/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=46OazL+vHJA3/ZboERHZhlQDrC6mpvOFnyA4WA0t7os=; b=TAy1W1xbMlLcbHzHj8USLAvKV3JX9kFwgpnD2rfVW5m1NyWhSDKSFLADEauLs/aN6J nsBjGBoIRU5cduFz6WRhR+9nZ6mH9noKdf0lC255Vi9C0ekhPJeUBZHTUe+2InJF4VEm rTZ0UX386y/gXFr9oE44U2qNjKY+YE+B242Onj3DBzzvYJ63UaJ2xdqr+Ter738rzqSC 3gojdJMHa0NJ0MmL6xZFCE0Qw7/I8BBE66sXb1oY/1zLm9Umf9ovTQh1PmJjEm/oNVlM lBux9giWIN+Z0WP+doztA+MzobN+40fxOqmhIAOC4ENxTKRSN5+wRuISX9L0GpHmw3Hx G8DA== X-Gm-Message-State: ABUngvdPBEngx8Y27NG7HSjZVqpxiurVPz03eptM9Gy3xnNOXd5WKz0yPOv3/ULcs5FAUg== X-Received: by 10.55.122.71 with SMTP id v68mr545649qkc.176.1477049693551; Fri, 21 Oct 2016 04:34:53 -0700 (PDT) Received: from localhost.localdomain ([187.180.185.182]) by smtp.gmail.com with ESMTPSA id g10sm1093627qkb.17.2016.10.21.04.34.50 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 21 Oct 2016 04:34:53 -0700 (PDT) From: Fabio Estevam To: davem@davemloft.net Cc: fugang.duan@nxp.com, henri.roosen@ginzinger.com, eric@nelint.com, kernel@pengutronix.de, rmk@armlinux.org.uk, netdev@vger.kernel.org, Fabio Estevam Subject: [PATCH net] net: fec: Call swap_buffer() prior to IP header alignment Date: Fri, 21 Oct 2016 09:34:29 -0200 Message-Id: <1477049669-25101-1-git-send-email-festevam@gmail.com> X-Mailer: git-send-email 2.7.4 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Fabio Estevam Commit 3ac72b7b63d5 ("net: fec: align IP header in hardware") breaks networking on mx28. There is an erratum on mx28 (ENGR121613 - ENET big endian mode not compatible with ARM little endian) that requires an additional byte-swap operation to workaround this problem. So call swap_buffer() prior to performing the IP header alignment to restore network functionality on mx28. Fixes: 3ac72b7b63d5 ("net: fec: align IP header in hardware") Reported-and-tested-by: Henri Roosen Signed-off-by: Fabio Estevam --- drivers/net/ethernet/freescale/fec_main.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c index 4ce8179..3c888be 100644 --- a/drivers/net/ethernet/freescale/fec_main.c +++ b/drivers/net/ethernet/freescale/fec_main.c @@ -1430,14 +1430,14 @@ fec_enet_rx_queue(struct net_device *ndev, int budget, u16 queue_id) skb_put(skb, pkt_len - 4); data = skb->data; + if (!is_copybreak && need_swap) + swap_buffer(data, pkt_len); + #if !defined(CONFIG_M5272) if (fep->quirks & FEC_QUIRK_HAS_RACC) data = skb_pull_inline(skb, 2); #endif - if (!is_copybreak && need_swap) - swap_buffer(data, pkt_len); - /* Extract the enhanced buffer descriptor */ ebdp = NULL; if (fep->bufdesc_ex)