From patchwork Tue Sep 22 11:27:16 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Max Filippov X-Patchwork-Id: 521012 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 CDF531400CB for ; Tue, 22 Sep 2015 21:28:01 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=RJzLiBL1; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754342AbbIVL1n (ORCPT ); Tue, 22 Sep 2015 07:27:43 -0400 Received: from mail-la0-f52.google.com ([209.85.215.52]:36349 "EHLO mail-la0-f52.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753354AbbIVL1m (ORCPT ); Tue, 22 Sep 2015 07:27:42 -0400 Received: by lanb10 with SMTP id b10so7835394lan.3; Tue, 22 Sep 2015 04:27:40 -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=5QCz57kyBic9d9MqtNfcl842JW0705KNVyZnf0Jd+co=; b=RJzLiBL1XUI3sANK6GkO+WKG4hFb+VHMhf2gJlQmh2s9pXwth6DnlGPRHWCrNlVQUd zrbjMWH3dhbuYUIILNIfQ6PqSqSI9dyukZO0NzH8thS4Y9IPozJGvsnX8FteDbNWehUu c32kx2mafmGjr++iIAyPGQwpuaV9MEiqOej0MF9HYJOOeMbNwlA2wYgb9nIqh11CvfGf Dwt5Lf2BcZkx+3XmtDwzoI7gfyGZk2wmQJHIVcmKL3dhaRMwacp7XhpP4IB+4Hk946Gj 0Tyz4UIvbdNSp7v8kfti0CMVyLJIlG60OabH2geELgmJ2aXwqHeAswNAtIjLO5WMrzb/ f+cw== X-Received: by 10.152.198.137 with SMTP id jc9mr9628092lac.58.1442921260265; Tue, 22 Sep 2015 04:27:40 -0700 (PDT) Received: from octofox.metropolis ([5.19.183.212]) by smtp.gmail.com with ESMTPSA id rn8sm3777028lbb.21.2015.09.22.04.27.39 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 22 Sep 2015 04:27:39 -0700 (PDT) From: Max Filippov To: netdev@vger.kernel.org Cc: "David S. Miller" , linux-kernel@vger.kernel.org, Max Filippov Subject: [PATCH] net/ethoc: support big-endian register layout Date: Tue, 22 Sep 2015 14:27:16 +0300 Message-Id: <1442921236-1055-1-git-send-email-jcmvbkbc@gmail.com> X-Mailer: git-send-email 1.8.1.4 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Signed-off-by: Max Filippov --- drivers/net/ethernet/ethoc.c | 14 ++++++++++++-- include/net/ethoc.h | 1 + 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/ethoc.c b/drivers/net/ethernet/ethoc.c index 442410c..17ff9a4 100644 --- a/drivers/net/ethernet/ethoc.c +++ b/drivers/net/ethernet/ethoc.c @@ -201,6 +201,7 @@ struct ethoc { void __iomem *membase; int dma_alloc; resource_size_t io_region_size; + bool big_endian; unsigned int num_bd; unsigned int num_tx; @@ -236,12 +237,18 @@ struct ethoc_bd { static inline u32 ethoc_read(struct ethoc *dev, loff_t offset) { - return ioread32(dev->iobase + offset); + if (dev->big_endian) + return ioread32be(dev->iobase + offset); + else + return ioread32(dev->iobase + offset); } static inline void ethoc_write(struct ethoc *dev, loff_t offset, u32 data) { - iowrite32(data, dev->iobase + offset); + if (dev->big_endian) + iowrite32be(data, dev->iobase + offset); + else + iowrite32(data, dev->iobase + offset); } static inline void ethoc_read_bd(struct ethoc *dev, int index, @@ -1106,6 +1113,9 @@ static int ethoc_probe(struct platform_device *pdev) priv->dma_alloc = buffer_size; } + priv->big_endian = pdata ? pdata->big_endian : + of_device_is_big_endian(pdev->dev.of_node); + /* calculate the number of TX/RX buffers, maximum 128 supported */ num_bd = min_t(unsigned int, 128, (netdev->mem_end - netdev->mem_start + 1) / ETHOC_BUFSIZ); diff --git a/include/net/ethoc.h b/include/net/ethoc.h index 2a2d6bb..bb7f467 100644 --- a/include/net/ethoc.h +++ b/include/net/ethoc.h @@ -17,6 +17,7 @@ struct ethoc_platform_data { u8 hwaddr[IFHWADDRLEN]; s8 phy_id; u32 eth_clkfreq; + bool big_endian; }; #endif /* !LINUX_NET_ETHOC_H */