From patchwork Sun Mar 1 06:08:02 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arun Chandran X-Patchwork-Id: 444703 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 3B4DC1400B7 for ; Sun, 1 Mar 2015 17:09:07 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751516AbbCAGI7 (ORCPT ); Sun, 1 Mar 2015 01:08:59 -0500 Received: from mail-pd0-f179.google.com ([209.85.192.179]:32891 "EHLO mail-pd0-f179.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751455AbbCAGI4 (ORCPT ); Sun, 1 Mar 2015 01:08:56 -0500 Received: by pdjz10 with SMTP id z10so31271043pdj.0 for ; Sat, 28 Feb 2015 22:08:55 -0800 (PST) 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:in-reply-to :references; bh=7xEJNW+qMGdKXAuSvbhmddSaJhiPdV1rQ63zKRpwBtc=; b=Z0Yly4fx8c/bgjY3leD1tYW4Wu24/YULzWBFTZyIZ70Vcfvb1eCNexYCo/jZofpkk2 A9hLiFhUp7bnG/qK9wluXnUq6/QkuLHtNWQed/YUchPvGnoBifS4P4QVHuki6tRkVQF8 hyPSLVMNZi2LcZDKC2L/pmAEuTbpJIlsAmGrm6T4kOsNMN0u9pncJLmMt4wtwQZ4vKle Ie5iy5Fe+2zLXytL7jJ0+Rv+5wJ09YmC4COgOETKveJFUk3GgCbRS5PCc9mQnqcUPBNN voStaWDfK/QvV42uQA3YJFSkDcHvvavkHs7gEzHF1O/JuKKlNGANljRo5QvBw2QQsgIY U//g== X-Gm-Message-State: ALoCoQlPYzvf5mVt5A7SNbLSWW+JLmsMxT/03GpSPgobZpY1QQg2vz3ZvSgNESJXYevBjeuhd0E/ X-Received: by 10.70.91.8 with SMTP id ca8mr36967298pdb.156.1425190135722; Sat, 28 Feb 2015 22:08:55 -0800 (PST) Received: from arun-OptiPlex-9010.mvista.com ([111.93.218.67]) by mx.google.com with ESMTPSA id qm12sm8348850pdb.36.2015.02.28.22.08.52 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sat, 28 Feb 2015 22:08:54 -0800 (PST) From: Arun Chandran To: David Miller Cc: Nicolas Ferre , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Michal Simek , Arun Chandran Subject: [PATCH 1/2] net: macb: Add on the fly CPU endianness detection Date: Sun, 1 Mar 2015 11:38:02 +0530 Message-Id: <1425190083-16007-1-git-send-email-achandran@mvista.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <20150227.172430.705343480463996651.davem@davemloft.net> References: <20150227.172430.705343480463996651.davem@davemloft.net> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Program management descriptor's access mode according to the dynamically detected CPU endianness. Signed-off-by: Arun Chandran Acked-by: Nicolas Ferre Tested-by: Michal Simek --- * Adding CPU endianness detection according to Michal Simek * Added Acked-by: Nicolas Ferre * Added Tested-by: Michal Simek --- --- drivers/net/ethernet/cadence/macb.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/cadence/macb.c b/drivers/net/ethernet/cadence/macb.c index 05fb36d..1fe8b94 100644 --- a/drivers/net/ethernet/cadence/macb.c +++ b/drivers/net/ethernet/cadence/macb.c @@ -1578,6 +1578,7 @@ static u32 macb_dbw(struct macb *bp) static void macb_configure_dma(struct macb *bp) { u32 dmacfg; + u32 tmp, ncr; if (macb_is_gem(bp)) { dmacfg = gem_readl(bp, DMACFG) & ~GEM_BF(RXBS, -1L); @@ -1586,10 +1587,23 @@ static void macb_configure_dma(struct macb *bp) dmacfg = GEM_BFINS(FBLDO, bp->dma_burst_length, dmacfg); dmacfg |= GEM_BIT(TXPBMS) | GEM_BF(RXBMS, -1L); dmacfg &= ~GEM_BIT(ENDIA_PKT); - /* Tell the chip to byteswap descriptors on big-endian hosts */ -#ifdef __BIG_ENDIAN - dmacfg |= GEM_BIT(ENDIA_DESC); -#endif + + /* Find the CPU endianness by using the loopback bit of net_ctrl + * register. save it first. When the CPU is in big endian we + * need to program swaped mode for management descriptor access. + */ + ncr = macb_readl(bp, NCR); + __raw_writel(MACB_BIT(LLB), bp->regs + MACB_NCR); + tmp = __raw_readl(bp->regs + MACB_NCR); + + if (tmp == MACB_BIT(LLB)) + dmacfg &= ~GEM_BIT(ENDIA_DESC); + else + dmacfg |= GEM_BIT(ENDIA_DESC); /* CPU in big endian */ + + /* Restore net_ctrl */ + macb_writel(bp, NCR, ncr); + if (bp->dev->features & NETIF_F_HW_CSUM) dmacfg |= GEM_BIT(TXCOEN); else