From patchwork Fri Feb 8 04:07:08 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tristram.Ha@microchip.com X-Patchwork-Id: 1038479 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=microchip.com Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43whTd45Zjz9s4Z for ; Fri, 8 Feb 2019 15:07:17 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727059AbfBHEHQ (ORCPT ); Thu, 7 Feb 2019 23:07:16 -0500 Received: from esa3.microchip.iphmx.com ([68.232.153.233]:23038 "EHLO esa3.microchip.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726975AbfBHEHN (ORCPT ); Thu, 7 Feb 2019 23:07:13 -0500 X-IronPort-AV: E=Sophos;i="5.56,564,1539673200"; d="scan'208";a="26452655" Received: from smtpout.microchip.com (HELO email.microchip.com) ([198.175.253.82]) by esa3.microchip.iphmx.com with ESMTP/TLS/DHE-RSA-AES256-SHA; 07 Feb 2019 21:07:12 -0700 Received: from localhost.localdomain (10.10.76.4) by chn-sv-exch07.mchp-main.com (10.10.76.108) with Microsoft SMTP Server id 14.3.352.0; Thu, 7 Feb 2019 21:07:12 -0700 From: To: Sergio Paracuellos , Andrew Lunn , Florian Fainelli , Pavel Machek CC: Tristram Ha , , Subject: [PATCH v1 net-next 3/4] net: dsa: microchip: use readx_poll_time for polling Date: Thu, 7 Feb 2019 20:07:08 -0800 Message-ID: <1549598829-25970-4-git-send-email-Tristram.Ha@microchip.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1549598829-25970-1-git-send-email-Tristram.Ha@microchip.com> References: <1549598829-25970-1-git-send-email-Tristram.Ha@microchip.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Tristram Ha Replace register polling functions using timeout with readx_poll_time call. Signed-off-by: Tristram Ha --- drivers/net/dsa/microchip/ksz9477.c | 91 +++++++++++-------------------------- 1 file changed, 27 insertions(+), 64 deletions(-) diff --git a/drivers/net/dsa/microchip/ksz9477.c b/drivers/net/dsa/microchip/ksz9477.c index 4502e13..8391b9e 100644 --- a/drivers/net/dsa/microchip/ksz9477.c +++ b/drivers/net/dsa/microchip/ksz9477.c @@ -114,28 +114,11 @@ static void ksz9477_port_cfg32(struct ksz_device *dev, int port, int offset, data; \ }) -static int ksz9477_wait_vlan_ctrl_ready(struct ksz_device *dev, u32 waiton, - int timeout) -{ - u8 data; - - do { - ksz_read8(dev, REG_SW_VLAN_CTRL, &data); - if (!(data & waiton)) - break; - usleep_range(1, 10); - } while (timeout-- > 0); - - if (timeout <= 0) - return -ETIMEDOUT; - - return 0; -} - static int ksz9477_get_vlan_table(struct ksz_device *dev, u16 vid, u32 *vlan_table) { int ret; + u8 data; mutex_lock(&dev->vlan_mutex); @@ -143,7 +126,8 @@ static int ksz9477_get_vlan_table(struct ksz_device *dev, u16 vid, ksz_write8(dev, REG_SW_VLAN_CTRL, VLAN_READ | VLAN_START); /* wait to be cleared */ - ret = ksz9477_wait_vlan_ctrl_ready(dev, VLAN_START, 1000); + ret = readx_poll_timeout(read8_op, REG_SW_VLAN_CTRL, data, + !(data & VLAN_START), 10, 1000); if (ret < 0) { dev_dbg(dev->dev, "Failed to read vlan table\n"); goto exit; @@ -165,6 +149,7 @@ static int ksz9477_set_vlan_table(struct ksz_device *dev, u16 vid, u32 *vlan_table) { int ret; + u8 data; mutex_lock(&dev->vlan_mutex); @@ -176,7 +161,8 @@ static int ksz9477_set_vlan_table(struct ksz_device *dev, u16 vid, ksz_write8(dev, REG_SW_VLAN_CTRL, VLAN_START | VLAN_WRITE); /* wait to be cleared */ - ret = ksz9477_wait_vlan_ctrl_ready(dev, VLAN_START, 1000); + ret = readx_poll_timeout(read8_op, REG_SW_VLAN_CTRL, data, + !(data & VLAN_START), 10, 1000); if (ret < 0) { dev_dbg(dev->dev, "Failed to write vlan table\n"); goto exit; @@ -211,42 +197,6 @@ static void ksz9477_write_table(struct ksz_device *dev, u32 *table) ksz_write32(dev, REG_SW_ALU_VAL_D, table[3]); } -static int ksz9477_wait_alu_ready(struct ksz_device *dev, u32 waiton, - int timeout) -{ - u32 data; - - do { - ksz_read32(dev, REG_SW_ALU_CTRL__4, &data); - if (!(data & waiton)) - break; - usleep_range(1, 10); - } while (timeout-- > 0); - - if (timeout <= 0) - return -ETIMEDOUT; - - return 0; -} - -static int ksz9477_wait_alu_sta_ready(struct ksz_device *dev, u32 waiton, - int timeout) -{ - u32 data; - - do { - ksz_read32(dev, REG_SW_ALU_STAT_CTRL__4, &data); - if (!(data & waiton)) - break; - usleep_range(1, 10); - } while (timeout-- > 0); - - if (timeout <= 0) - return -ETIMEDOUT; - - return 0; -} - static int ksz9477_reset_switch(struct ksz_device *dev) { u8 data8; @@ -649,7 +599,8 @@ static int ksz9477_port_fdb_add(struct dsa_switch *ds, int port, ksz_write32(dev, REG_SW_ALU_CTRL__4, ALU_READ | ALU_START); /* wait to be finished */ - ret = ksz9477_wait_alu_ready(dev, ALU_START, 1000); + ret = readx_poll_timeout(read32_op, REG_SW_ALU_CTRL__4, data, + !(data & ALU_START), 10, 1000); if (ret < 0) { dev_dbg(dev->dev, "Failed to read ALU\n"); goto exit; @@ -673,7 +624,8 @@ static int ksz9477_port_fdb_add(struct dsa_switch *ds, int port, ksz_write32(dev, REG_SW_ALU_CTRL__4, ALU_WRITE | ALU_START); /* wait to be finished */ - ret = ksz9477_wait_alu_ready(dev, ALU_START, 1000); + ret = readx_poll_timeout(read32_op, REG_SW_ALU_CTRL__4, data, + !(data & ALU_START), 10, 1000); if (ret < 0) dev_dbg(dev->dev, "Failed to write ALU\n"); @@ -706,7 +658,8 @@ static int ksz9477_port_fdb_del(struct dsa_switch *ds, int port, ksz_write32(dev, REG_SW_ALU_CTRL__4, ALU_READ | ALU_START); /* wait to be finished */ - ret = ksz9477_wait_alu_ready(dev, ALU_START, 1000); + ret = readx_poll_timeout(read32_op, REG_SW_ALU_CTRL__4, data, + !(data & ALU_START), 10, 1000); if (ret < 0) { dev_dbg(dev->dev, "Failed to read ALU\n"); goto exit; @@ -740,7 +693,8 @@ static int ksz9477_port_fdb_del(struct dsa_switch *ds, int port, ksz_write32(dev, REG_SW_ALU_CTRL__4, ALU_WRITE | ALU_START); /* wait to be finished */ - ret = ksz9477_wait_alu_ready(dev, ALU_START, 1000); + ret = readx_poll_timeout(read32_op, REG_SW_ALU_CTRL__4, data, + !(data & ALU_START), 10, 1000); if (ret < 0) dev_dbg(dev->dev, "Failed to write ALU\n"); @@ -832,6 +786,7 @@ static void ksz9477_port_mdb_add(struct dsa_switch *ds, int port, u32 static_table[4]; u32 data; int index; + int ret; u32 mac_hi, mac_lo; mac_hi = ((mdb->addr[0] << 8) | mdb->addr[1]); @@ -847,7 +802,10 @@ static void ksz9477_port_mdb_add(struct dsa_switch *ds, int port, ksz_write32(dev, REG_SW_ALU_STAT_CTRL__4, data); /* wait to be finished */ - if (ksz9477_wait_alu_sta_ready(dev, ALU_STAT_START, 1000) < 0) { + ret = readx_poll_timeout(read32_op, REG_SW_ALU_STAT_CTRL__4, + data, !(data & ALU_STAT_START), + 10, 1000); + if (ret < 0) { dev_dbg(dev->dev, "Failed to read ALU STATIC\n"); goto exit; } @@ -888,7 +846,9 @@ static void ksz9477_port_mdb_add(struct dsa_switch *ds, int port, ksz_write32(dev, REG_SW_ALU_STAT_CTRL__4, data); /* wait to be finished */ - if (ksz9477_wait_alu_sta_ready(dev, ALU_STAT_START, 1000) < 0) + ret = readx_poll_timeout(read32_op, REG_SW_ALU_STAT_CTRL__4, data, + !(data & ALU_STAT_START), 10, 1000); + if (ret < 0) dev_dbg(dev->dev, "Failed to read ALU STATIC\n"); exit: @@ -918,7 +878,9 @@ static int ksz9477_port_mdb_del(struct dsa_switch *ds, int port, ksz_write32(dev, REG_SW_ALU_STAT_CTRL__4, data); /* wait to be finished */ - ret = ksz9477_wait_alu_sta_ready(dev, ALU_STAT_START, 1000); + ret = readx_poll_timeout(read32_op, REG_SW_ALU_STAT_CTRL__4, + data, !(data & ALU_STAT_START), + 10, 1000); if (ret < 0) { dev_dbg(dev->dev, "Failed to read ALU STATIC\n"); goto exit; @@ -960,7 +922,8 @@ static int ksz9477_port_mdb_del(struct dsa_switch *ds, int port, ksz_write32(dev, REG_SW_ALU_STAT_CTRL__4, data); /* wait to be finished */ - ret = ksz9477_wait_alu_sta_ready(dev, ALU_STAT_START, 1000); + ret = readx_poll_timeout(read32_op, REG_SW_ALU_STAT_CTRL__4, data, + !(data & ALU_STAT_START), 10, 1000); if (ret < 0) dev_dbg(dev->dev, "Failed to read ALU STATIC\n");