From patchwork Thu Jan 3 01:10:23 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Vasut X-Patchwork-Id: 10746809 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id AE0CE1399 for ; Thu, 3 Jan 2019 01:11:17 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9BEBD28409 for ; Thu, 3 Jan 2019 01:11:17 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 8C89A28417; Thu, 3 Jan 2019 01:11:17 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1958328409 for ; Thu, 3 Jan 2019 01:11:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728164AbfACBLM (ORCPT ); Wed, 2 Jan 2019 20:11:12 -0500 Received: from mail-out.m-online.net ([212.18.0.10]:43928 "EHLO mail-out.m-online.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726071AbfACBLL (ORCPT ); Wed, 2 Jan 2019 20:11:11 -0500 Received: from frontend01.mail.m-online.net (unknown [192.168.8.182]) by mail-out.m-online.net (Postfix) with ESMTP id 43VVGy0mNdz1qvSr; Thu, 3 Jan 2019 02:11:06 +0100 (CET) Received: from localhost (dynscan1.mnet-online.de [192.168.6.70]) by mail.m-online.net (Postfix) with ESMTP id 43VVGy0b6Fz1qvWb; Thu, 3 Jan 2019 02:11:06 +0100 (CET) X-Virus-Scanned: amavisd-new at mnet-online.de Received: from mail.mnet-online.de ([192.168.8.182]) by localhost (dynscan1.mail.m-online.net [192.168.6.70]) (amavisd-new, port 10024) with ESMTP id LERbfVc-Hb88; Thu, 3 Jan 2019 02:11:04 +0100 (CET) X-Auth-Info: DyF7z22xaKQQMnvmb+KADW11d2YbpetDMcj+FtLhy+I= Received: from kurokawa.lan (ip-86-49-110-70.net.upcbroadband.cz [86.49.110.70]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.mnet-online.de (Postfix) with ESMTPSA; Thu, 3 Jan 2019 02:11:04 +0100 (CET) From: Marek Vasut To: netdev@vger.kernel.org Cc: Marek Vasut , "David S . Miller" , Nisar Sayed , Woojung Huh , Andrew Lunn , Florian Fainelli , linux-usb@vger.kernel.org Subject: [PATCH 02/19] usbnet: smsc95xx: Stop propagation of in_pm Date: Thu, 3 Jan 2019 02:10:23 +0100 Message-Id: <20190103011040.25974-3-marex@denx.de> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20190103011040.25974-1-marex@denx.de> References: <20190103011040.25974-1-marex@denx.de> MIME-Version: 1.0 Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The information whether the SMSC95xx is in_pm or not can be derived from the usbdev->suspend_count. First thing called in smsc95xx_suspend() is usbnet_suspend(), which increments the usbdev->suspend_count and since then the driver only calls _nopm() functions and functions with in_pm set to 1. The smsc95xx_resume() does the inverse, it calls functions with _nopm() suffix and with in_pm set to 1 until usbnet_resume(), which sets the usbdev->suspend_count to 0. Thus, this patch replaces all the in_pm variables used throughout the driver with simple call to smsc95xx_in_pm(), which checks whether the usbdev->suspend_count is zero or not. Signed-off-by: Marek Vasut Cc: David S. Miller Cc: Nisar Sayed Cc: Woojung Huh Cc: Andrew Lunn Cc: Florian Fainelli Cc: linux-usb@vger.kernel.org To: netdev@vger.kernel.org --- drivers/net/usb/smsc95xx.c | 63 ++++++++++++++++++++------------------ 1 file changed, 33 insertions(+), 30 deletions(-) diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c index 772429c17ae1..c74183b51d5b 100644 --- a/drivers/net/usb/smsc95xx.c +++ b/drivers/net/usb/smsc95xx.c @@ -82,8 +82,13 @@ static bool turbo_mode = true; module_param(turbo_mode, bool, 0644); MODULE_PARM_DESC(turbo_mode, "Enable multiple frames per Rx transaction"); +static int smsc95xx_in_pm(struct usbnet *dev) +{ + return dev->suspend_count != 0; +} + static int __must_check __smsc95xx_read_reg(struct usbnet *dev, u32 index, - u32 *data, int in_pm) + u32 *data) { u32 buf; int ret; @@ -91,7 +96,7 @@ static int __must_check __smsc95xx_read_reg(struct usbnet *dev, u32 index, BUG_ON(!dev); - if (!in_pm) + if (!smsc95xx_in_pm(dev)) fn = usbnet_read_cmd; else fn = usbnet_read_cmd_nopm; @@ -112,7 +117,7 @@ static int __must_check __smsc95xx_read_reg(struct usbnet *dev, u32 index, } static int __must_check __smsc95xx_write_reg(struct usbnet *dev, u32 index, - u32 data, int in_pm) + u32 data) { u32 buf; int ret; @@ -120,7 +125,7 @@ static int __must_check __smsc95xx_write_reg(struct usbnet *dev, u32 index, BUG_ON(!dev); - if (!in_pm) + if (!smsc95xx_in_pm(dev)) fn = usbnet_write_cmd; else fn = usbnet_write_cmd_nopm; @@ -141,38 +146,37 @@ static int __must_check __smsc95xx_write_reg(struct usbnet *dev, u32 index, static int __must_check smsc95xx_read_reg_nopm(struct usbnet *dev, u32 index, u32 *data) { - return __smsc95xx_read_reg(dev, index, data, 1); + return __smsc95xx_read_reg(dev, index, data); } static int __must_check smsc95xx_write_reg_nopm(struct usbnet *dev, u32 index, u32 data) { - return __smsc95xx_write_reg(dev, index, data, 1); + return __smsc95xx_write_reg(dev, index, data); } static int __must_check smsc95xx_read_reg(struct usbnet *dev, u32 index, u32 *data) { - return __smsc95xx_read_reg(dev, index, data, 0); + return __smsc95xx_read_reg(dev, index, data); } static int __must_check smsc95xx_write_reg(struct usbnet *dev, u32 index, u32 data) { - return __smsc95xx_write_reg(dev, index, data, 0); + return __smsc95xx_write_reg(dev, index, data); } /* Loop until the read is completed with timeout * called with phy_mutex held */ -static int __must_check __smsc95xx_phy_wait_not_busy(struct usbnet *dev, - int in_pm) +static int __must_check __smsc95xx_phy_wait_not_busy(struct usbnet *dev) { unsigned long start_time = jiffies; u32 val; int ret; do { - ret = __smsc95xx_read_reg(dev, MII_ADDR, &val, in_pm); + ret = __smsc95xx_read_reg(dev, MII_ADDR, &val); if (ret < 0) { netdev_warn(dev->net, "Error reading MII_ACCESS\n"); return ret; @@ -185,8 +189,7 @@ static int __must_check __smsc95xx_phy_wait_not_busy(struct usbnet *dev, return -EIO; } -static int __smsc95xx_mdio_read(struct net_device *netdev, int phy_id, int idx, - int in_pm) +static int __smsc95xx_mdio_read(struct net_device *netdev, int phy_id, int idx) { struct usbnet *dev = netdev_priv(netdev); u32 val, addr; @@ -195,7 +198,7 @@ static int __smsc95xx_mdio_read(struct net_device *netdev, int phy_id, int idx, mutex_lock(&dev->phy_mutex); /* confirm MII not busy */ - ret = __smsc95xx_phy_wait_not_busy(dev, in_pm); + ret = __smsc95xx_phy_wait_not_busy(dev); if (ret < 0) { netdev_warn(dev->net, "MII is busy in smsc95xx_mdio_read\n"); goto done; @@ -205,19 +208,19 @@ static int __smsc95xx_mdio_read(struct net_device *netdev, int phy_id, int idx, phy_id &= dev->mii.phy_id_mask; idx &= dev->mii.reg_num_mask; addr = (phy_id << 11) | (idx << 6) | MII_READ_ | MII_BUSY_; - ret = __smsc95xx_write_reg(dev, MII_ADDR, addr, in_pm); + ret = __smsc95xx_write_reg(dev, MII_ADDR, addr); if (ret < 0) { netdev_warn(dev->net, "Error writing MII_ADDR\n"); goto done; } - ret = __smsc95xx_phy_wait_not_busy(dev, in_pm); + ret = __smsc95xx_phy_wait_not_busy(dev); if (ret < 0) { netdev_warn(dev->net, "Timed out reading MII reg %02X\n", idx); goto done; } - ret = __smsc95xx_read_reg(dev, MII_DATA, &val, in_pm); + ret = __smsc95xx_read_reg(dev, MII_DATA, &val); if (ret < 0) { netdev_warn(dev->net, "Error reading MII_DATA\n"); goto done; @@ -231,7 +234,7 @@ static int __smsc95xx_mdio_read(struct net_device *netdev, int phy_id, int idx, } static void __smsc95xx_mdio_write(struct net_device *netdev, int phy_id, - int idx, int regval, int in_pm) + int idx, int regval) { struct usbnet *dev = netdev_priv(netdev); u32 val, addr; @@ -240,14 +243,14 @@ static void __smsc95xx_mdio_write(struct net_device *netdev, int phy_id, mutex_lock(&dev->phy_mutex); /* confirm MII not busy */ - ret = __smsc95xx_phy_wait_not_busy(dev, in_pm); + ret = __smsc95xx_phy_wait_not_busy(dev); if (ret < 0) { netdev_warn(dev->net, "MII is busy in smsc95xx_mdio_write\n"); goto done; } val = regval; - ret = __smsc95xx_write_reg(dev, MII_DATA, val, in_pm); + ret = __smsc95xx_write_reg(dev, MII_DATA, val); if (ret < 0) { netdev_warn(dev->net, "Error writing MII_DATA\n"); goto done; @@ -257,13 +260,13 @@ static void __smsc95xx_mdio_write(struct net_device *netdev, int phy_id, phy_id &= dev->mii.phy_id_mask; idx &= dev->mii.reg_num_mask; addr = (phy_id << 11) | (idx << 6) | MII_WRITE_ | MII_BUSY_; - ret = __smsc95xx_write_reg(dev, MII_ADDR, addr, in_pm); + ret = __smsc95xx_write_reg(dev, MII_ADDR, addr); if (ret < 0) { netdev_warn(dev->net, "Error writing MII_ADDR\n"); goto done; } - ret = __smsc95xx_phy_wait_not_busy(dev, in_pm); + ret = __smsc95xx_phy_wait_not_busy(dev); if (ret < 0) { netdev_warn(dev->net, "Timed out writing MII reg %02X\n", idx); goto done; @@ -276,24 +279,24 @@ static void __smsc95xx_mdio_write(struct net_device *netdev, int phy_id, static int smsc95xx_mdio_read_nopm(struct net_device *netdev, int phy_id, int idx) { - return __smsc95xx_mdio_read(netdev, phy_id, idx, 1); + return __smsc95xx_mdio_read(netdev, phy_id, idx); } static void smsc95xx_mdio_write_nopm(struct net_device *netdev, int phy_id, int idx, int regval) { - __smsc95xx_mdio_write(netdev, phy_id, idx, regval, 1); + __smsc95xx_mdio_write(netdev, phy_id, idx, regval); } static int smsc95xx_mdio_read(struct net_device *netdev, int phy_id, int idx) { - return __smsc95xx_mdio_read(netdev, phy_id, idx, 0); + return __smsc95xx_mdio_read(netdev, phy_id, idx); } static void smsc95xx_mdio_write(struct net_device *netdev, int phy_id, int idx, int regval) { - __smsc95xx_mdio_write(netdev, phy_id, idx, regval, 0); + __smsc95xx_mdio_write(netdev, phy_id, idx, regval); } static int __must_check smsc95xx_wait_eeprom(struct usbnet *dev) @@ -972,7 +975,7 @@ static int smsc95xx_start_tx_path(struct usbnet *dev) } /* Starts the Receive path */ -static int smsc95xx_start_rx_path(struct usbnet *dev, int in_pm) +static int smsc95xx_start_rx_path(struct usbnet *dev) { struct smsc95xx_priv *pdata = (struct smsc95xx_priv *)(dev->data[0]); unsigned long flags; @@ -981,7 +984,7 @@ static int smsc95xx_start_rx_path(struct usbnet *dev, int in_pm) pdata->mac_cr |= MAC_CR_RXEN_; spin_unlock_irqrestore(&pdata->mac_cr_lock, flags); - return __smsc95xx_write_reg(dev, MAC_CR, pdata->mac_cr, in_pm); + return __smsc95xx_write_reg(dev, MAC_CR, pdata->mac_cr); } static int smsc95xx_phy_initialize(struct usbnet *dev) @@ -1233,7 +1236,7 @@ static int smsc95xx_reset(struct usbnet *dev) return ret; } - ret = smsc95xx_start_rx_path(dev, 0); + ret = smsc95xx_start_rx_path(dev); if (ret < 0) { netdev_warn(dev->net, "Failed to start RX path\n"); return ret; @@ -1833,7 +1836,7 @@ static int smsc95xx_suspend(struct usb_interface *intf, pm_message_t message) goto done; /* enable receiver to enable frame reception */ - smsc95xx_start_rx_path(dev, 1); + smsc95xx_start_rx_path(dev); /* some wol options are enabled, so enter SUSPEND0 */ netdev_info(dev->net, "entering SUSPEND0 mode\n");