From patchwork Thu Apr 14 15:11:29 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Akinobu Mita X-Patchwork-Id: 610492 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 3qm4010NHjz9t41 for ; Fri, 15 Apr 2016 01:12:01 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=jKpxcufb; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932170AbcDNPLx (ORCPT ); Thu, 14 Apr 2016 11:11:53 -0400 Received: from mail-pf0-f176.google.com ([209.85.192.176]:33388 "EHLO mail-pf0-f176.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932103AbcDNPLw (ORCPT ); Thu, 14 Apr 2016 11:11:52 -0400 Received: by mail-pf0-f176.google.com with SMTP id 184so47041653pff.0 for ; Thu, 14 Apr 2016 08:11:52 -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:in-reply-to:references; bh=fTeXnMiVirbZDfuzdEPhJj7jJBBuUH6/WOrYYB2rmXs=; b=jKpxcufb0MhTpgXEnev+SoBSkrwF/2ZAZvyTf7yOsYhtsFY/mgGVzS2uJmGy61dLTE yayx0GNrm3D1hJGDcB6xICdOpQHrTksABHPN7qbS6w9GqLlh9DWbtXxm8DBl2jZZN57W mMgoc1KaPlKskuoLJfe+n2QJQWCJrZQfQBwz0116qJjwyRus9Y2Q/sHPKIf1G/t49A0Z CPRtny7FjATVbkbDrI005FG8CLgRm3qEa+DutN43GLMk6naeZDb82Q1r5ZKD1pcphYYh giGek7Rn+DZIwqsR67akNkzU2Aj7lSko+JT9eGXrhLh/LZj+g4qQQqcsx9LSS3Vko3EF aGTQ== 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=fTeXnMiVirbZDfuzdEPhJj7jJBBuUH6/WOrYYB2rmXs=; b=Fjs8bLg1iKDh67YsP0fSBZD4WS4CWkZaVwm72cEcfpODSWPTuao6hMIya6OFBRR95S PYtZBiGB8upCqdFc3z7UmsEvtJzRtEx7cwWNNE6wEQIdp3KtY3XfmlOrXDJ7W3jBESxe Od1ZzBMavVUAcdeH5/IJsgsU1DrSZzj30yOEXQJeYhTGBq6WbpKKXwcC5HnHX1XlE9G+ AvuwKb5ZtdzfL1yBAgqifA14Apz/iSSabVsV2ZB8mjmIykBqc2vPjBt5wMRzWOdWh8li zooo85lLD/j8Onl4HjEcNYUXu4bl8PQJLjj/QIcTN9+RfdijSX/6TnN6IJd2433Y1xhn rTfw== X-Gm-Message-State: AOPr4FXVQmgED7aCAk2WS1pkg4nFJx9D3GtxkeGqnG/ymjIIuq6kKVZrEZFatMSeOx+8/Q== X-Received: by 10.98.16.198 with SMTP id 67mr22012180pfq.21.1460646711496; Thu, 14 Apr 2016 08:11:51 -0700 (PDT) Received: from localhost.localdomain (KD113159139091.ppp-bb.dion.ne.jp. [113.159.139.91]) by smtp.gmail.com with ESMTPSA id i7sm14523782pfc.47.2016.04.14.08.11.49 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 14 Apr 2016 08:11:50 -0700 (PDT) From: Akinobu Mita To: netdev@vger.kernel.org Cc: Akinobu Mita , Mike Sinkovsky , "David S. Miller" Subject: [PATCH v3 1/5] net: w5100: move mmiowb into register access callbacks Date: Fri, 15 Apr 2016 00:11:29 +0900 Message-Id: <1460646693-25179-2-git-send-email-akinobu.mita@gmail.com> X-Mailer: git-send-email 2.5.0 In-Reply-To: <1460646693-25179-1-git-send-email-akinobu.mita@gmail.com> References: <1460646693-25179-1-git-send-email-akinobu.mita@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Instead of sprinkle mmiowb over the driver code, move it into primary register write callbacks. (w5100_write, w5100_write16, w5100_writebuf) This is a preparation for supporting SPI interface which doesn't use MMIO for accessing w5100 registers. Signed-off-by: Akinobu Mita Cc: Mike Sinkovsky Cc: David S. Miller --- * No changes from v2 drivers/net/ethernet/wiznet/w5100.c | 44 +++++++++++++------------------------ 1 file changed, 15 insertions(+), 29 deletions(-) diff --git a/drivers/net/ethernet/wiznet/w5100.c b/drivers/net/ethernet/wiznet/w5100.c index 8b282d0..f4b7200 100644 --- a/drivers/net/ethernet/wiznet/w5100.c +++ b/drivers/net/ethernet/wiznet/w5100.c @@ -122,10 +122,17 @@ static inline u8 w5100_read_direct(struct w5100_priv *priv, u16 addr) return ioread8(priv->base + (addr << CONFIG_WIZNET_BUS_SHIFT)); } +static inline void __w5100_write_direct(struct w5100_priv *priv, u16 addr, + u8 data) +{ + iowrite8(data, priv->base + (addr << CONFIG_WIZNET_BUS_SHIFT)); +} + static inline void w5100_write_direct(struct w5100_priv *priv, u16 addr, u8 data) { - iowrite8(data, priv->base + (addr << CONFIG_WIZNET_BUS_SHIFT)); + __w5100_write_direct(priv, addr, data); + mmiowb(); } static u16 w5100_read16_direct(struct w5100_priv *priv, u16 addr) @@ -138,8 +145,9 @@ static u16 w5100_read16_direct(struct w5100_priv *priv, u16 addr) static void w5100_write16_direct(struct w5100_priv *priv, u16 addr, u16 data) { - w5100_write_direct(priv, addr, data >> 8); - w5100_write_direct(priv, addr + 1, data); + __w5100_write_direct(priv, addr, data >> 8); + __w5100_write_direct(priv, addr + 1, data); + mmiowb(); } static void w5100_readbuf_direct(struct w5100_priv *priv, @@ -164,8 +172,9 @@ static void w5100_writebuf_direct(struct w5100_priv *priv, for (i = 0; i < len; i++, addr++) { if (unlikely(addr > W5100_TX_MEM_END)) addr = W5100_TX_MEM_START; - w5100_write_direct(priv, addr, *buf++); + __w5100_write_direct(priv, addr, *buf++); } + mmiowb(); } /* @@ -186,7 +195,6 @@ static u8 w5100_read_indirect(struct w5100_priv *priv, u16 addr) spin_lock_irqsave(&priv->reg_lock, flags); w5100_write16_direct(priv, W5100_IDM_AR, addr); - mmiowb(); data = w5100_read_direct(priv, W5100_IDM_DR); spin_unlock_irqrestore(&priv->reg_lock, flags); @@ -199,9 +207,7 @@ static void w5100_write_indirect(struct w5100_priv *priv, u16 addr, u8 data) spin_lock_irqsave(&priv->reg_lock, flags); w5100_write16_direct(priv, W5100_IDM_AR, addr); - mmiowb(); w5100_write_direct(priv, W5100_IDM_DR, data); - mmiowb(); spin_unlock_irqrestore(&priv->reg_lock, flags); } @@ -212,7 +218,6 @@ static u16 w5100_read16_indirect(struct w5100_priv *priv, u16 addr) spin_lock_irqsave(&priv->reg_lock, flags); w5100_write16_direct(priv, W5100_IDM_AR, addr); - mmiowb(); data = w5100_read_direct(priv, W5100_IDM_DR) << 8; data |= w5100_read_direct(priv, W5100_IDM_DR); spin_unlock_irqrestore(&priv->reg_lock, flags); @@ -226,10 +231,8 @@ static void w5100_write16_indirect(struct w5100_priv *priv, u16 addr, u16 data) spin_lock_irqsave(&priv->reg_lock, flags); w5100_write16_direct(priv, W5100_IDM_AR, addr); - mmiowb(); - w5100_write_direct(priv, W5100_IDM_DR, data >> 8); + __w5100_write_direct(priv, W5100_IDM_DR, data >> 8); w5100_write_direct(priv, W5100_IDM_DR, data); - mmiowb(); spin_unlock_irqrestore(&priv->reg_lock, flags); } @@ -242,13 +245,11 @@ static void w5100_readbuf_indirect(struct w5100_priv *priv, spin_lock_irqsave(&priv->reg_lock, flags); w5100_write16_direct(priv, W5100_IDM_AR, addr); - mmiowb(); for (i = 0; i < len; i++, addr++) { if (unlikely(addr > W5100_RX_MEM_END)) { addr = W5100_RX_MEM_START; w5100_write16_direct(priv, W5100_IDM_AR, addr); - mmiowb(); } *buf++ = w5100_read_direct(priv, W5100_IDM_DR); } @@ -265,15 +266,13 @@ static void w5100_writebuf_indirect(struct w5100_priv *priv, spin_lock_irqsave(&priv->reg_lock, flags); w5100_write16_direct(priv, W5100_IDM_AR, addr); - mmiowb(); for (i = 0; i < len; i++, addr++) { if (unlikely(addr > W5100_TX_MEM_END)) { addr = W5100_TX_MEM_START; w5100_write16_direct(priv, W5100_IDM_AR, addr); - mmiowb(); } - w5100_write_direct(priv, W5100_IDM_DR, *buf++); + __w5100_write_direct(priv, W5100_IDM_DR, *buf++); } mmiowb(); spin_unlock_irqrestore(&priv->reg_lock, flags); @@ -309,7 +308,6 @@ static int w5100_command(struct w5100_priv *priv, u16 cmd) unsigned long timeout = jiffies + msecs_to_jiffies(100); w5100_write(priv, W5100_S0_CR, cmd); - mmiowb(); while (w5100_read(priv, W5100_S0_CR) != 0) { if (time_after(jiffies, timeout)) @@ -327,18 +325,15 @@ static void w5100_write_macaddr(struct w5100_priv *priv) for (i = 0; i < ETH_ALEN; i++) w5100_write(priv, W5100_SHAR + i, ndev->dev_addr[i]); - mmiowb(); } static void w5100_hw_reset(struct w5100_priv *priv) { w5100_write_direct(priv, W5100_MR, MR_RST); - mmiowb(); mdelay(5); w5100_write_direct(priv, W5100_MR, priv->indirect ? MR_PB | MR_AI | MR_IND : MR_PB); - mmiowb(); w5100_write(priv, W5100_IMR, 0); w5100_write_macaddr(priv); @@ -347,23 +342,19 @@ static void w5100_hw_reset(struct w5100_priv *priv) */ w5100_write(priv, W5100_RMSR, 0x03); w5100_write(priv, W5100_TMSR, 0x03); - mmiowb(); } static void w5100_hw_start(struct w5100_priv *priv) { w5100_write(priv, W5100_S0_MR, priv->promisc ? S0_MR_MACRAW : S0_MR_MACRAW_MF); - mmiowb(); w5100_command(priv, S0_CR_OPEN); w5100_write(priv, W5100_IMR, IR_S0); - mmiowb(); } static void w5100_hw_close(struct w5100_priv *priv) { w5100_write(priv, W5100_IMR, 0); - mmiowb(); w5100_command(priv, S0_CR_CLOSE); } @@ -447,7 +438,6 @@ static int w5100_start_tx(struct sk_buff *skb, struct net_device *ndev) offset = w5100_read16(priv, W5100_S0_TX_WR); w5100_writebuf(priv, offset, skb->data, skb->len); w5100_write16(priv, W5100_S0_TX_WR, offset + skb->len); - mmiowb(); ndev->stats.tx_bytes += skb->len; ndev->stats.tx_packets++; dev_kfree_skb(skb); @@ -488,7 +478,6 @@ static int w5100_napi_poll(struct napi_struct *napi, int budget) skb_put(skb, rx_len); w5100_readbuf(priv, offset + 2, skb->data, rx_len); w5100_write16(priv, W5100_S0_RX_RD, offset + 2 + rx_len); - mmiowb(); w5100_command(priv, S0_CR_RECV); skb->protocol = eth_type_trans(skb, ndev); @@ -500,7 +489,6 @@ static int w5100_napi_poll(struct napi_struct *napi, int budget) if (rx_count < budget) { napi_complete(napi); w5100_write(priv, W5100_IMR, IR_S0); - mmiowb(); } return rx_count; @@ -515,7 +503,6 @@ static irqreturn_t w5100_interrupt(int irq, void *ndev_instance) if (!ir) return IRQ_NONE; w5100_write(priv, W5100_S0_IR, ir); - mmiowb(); if (ir & S0_IR_SENDOK) { netif_dbg(priv, tx_done, ndev, "tx done\n"); @@ -525,7 +512,6 @@ static irqreturn_t w5100_interrupt(int irq, void *ndev_instance) if (ir & S0_IR_RECV) { if (napi_schedule_prep(&priv->napi)) { w5100_write(priv, W5100_IMR, 0); - mmiowb(); __napi_schedule(&priv->napi); } }