From patchwork Mon Mar 23 02:56:24 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dejin Zheng X-Patchwork-Id: 222062 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id AD2A7C54FCF for ; Mon, 23 Mar 2020 02:57:01 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 8247E2074D for ; Mon, 23 Mar 2020 02:57:01 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="dgfSrtAv" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727161AbgCWC46 (ORCPT ); Sun, 22 Mar 2020 22:56:58 -0400 Received: from mail-pl1-f196.google.com ([209.85.214.196]:45225 "EHLO mail-pl1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726983AbgCWC46 (ORCPT ); Sun, 22 Mar 2020 22:56:58 -0400 Received: by mail-pl1-f196.google.com with SMTP id b9so5277960pls.12; Sun, 22 Mar 2020 19:56:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=CIaJDacIEM2pET5Cxv3vrEk+VwaiqZRb/EmAApNnPZs=; b=dgfSrtAv4UeB4ZVPrRRtCV+Geyg7w+eEn2NT+ZLHuW7qdz6vK58+NrtyGw+ZM6tYOx gOduP0ALtnS0j6yIt87cIMmN9or4v/2C5Jb2WRr7N0suDQ9AujTny/NBpVRrmSmwXMwV SYixJn0JW75cLKQ6giWsKxgttlZEQkk/NXxIyngVne2sRSsyWxDyVC2JcZQkp9Vxvm9K oUknn6HEWL63+zIKFZInppTCzedX5+OZm+4bGM7HFTIP1p/H8lbE58yUO2LRkKf85t1i NfQmNGth87uG3/JQ4Yvrj3ufYpJPDbVTMLL+E1kv/11dV3wnl3y6nDAPks61PSi2LFXc z5mw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=CIaJDacIEM2pET5Cxv3vrEk+VwaiqZRb/EmAApNnPZs=; b=WoJtjcR+TT3eV81rTh5XOSC5t3YmRSKC4mLRMRIrqIoY3Gm9MQ8TPJx0Ox54t9TXFx TO4aJD7hOdGChY6hjQYjGkh7l/hon2e2FQlLbuFemznU+G+JTnl0ZKmNXdwUboE7i/NP bUTuWXg5b35RjQA9BgB68MYQome1xO4UdaA0UV9OymWmjSEKyZxPZAGYbh81lPLHu2uk cMyuWtzwHU15alU5ReXqtY5xF6ukIQ+3Ye/THddJjTOnS4Xu22Aq41ZDrzS+pZa5yB3+ gw7O9B1U49M31heakJ0RRf67z7EuPrdX1y3m9squp5TDLBD4+oOGzF/yL7/h1G1NQYaz PbJg== X-Gm-Message-State: ANhLgQ0yZWm3bm9irdZTNUhBsXugsnBkRtz0zD2OWY3ji3RWUbvIOwXI fJup+54SXR6PZSXXwNsH7H1kyBVS X-Google-Smtp-Source: ADFU+vvUrEsR7XRgDEhqSVAczw3D69SuHHm+myk/oneJkyD/2vYTdg8F78i29OmbJ3lySWnMaqKJpA== X-Received: by 2002:a17:90a:6c22:: with SMTP id x31mr22952650pjj.124.1584932217236; Sun, 22 Mar 2020 19:56:57 -0700 (PDT) Received: from localhost (104.128.80.227.16clouds.com. [104.128.80.227]) by smtp.gmail.com with ESMTPSA id a24sm11388020pfl.115.2020.03.22.19.56.56 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sun, 22 Mar 2020 19:56:56 -0700 (PDT) From: Dejin Zheng To: andrew@lunn.ch, f.fainelli@gmail.com, hkallweit1@gmail.com, linux@armlinux.org.uk, davem@davemloft.net, mchehab+samsung@kernel.org, gregkh@linuxfoundation.org, broonie@kernel.org, tglx@linutronix.de, netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Dejin Zheng Subject: [PATCH net-next v6 01/10] iopoll: introduce read_poll_timeout macro Date: Mon, 23 Mar 2020 10:56:24 +0800 Message-Id: <20200323025633.6069-2-zhengdejin5@gmail.com> X-Mailer: git-send-email 2.25.0 In-Reply-To: <20200323025633.6069-1-zhengdejin5@gmail.com> References: <20200323025633.6069-1-zhengdejin5@gmail.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org this macro is an extension of readx_poll_timeout macro. the accessor function op just supports only one parameter in the readx_poll_timeout macro, but this macro can supports multiple variable parameters for it. so functions like phy_read(struct phy_device *phydev, u32 regnum) and phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum) can also use this poll timeout framework. Signed-off-by: Dejin Zheng --- v5 -> v6: - no changed v4 -> v5: - no changed v3 -> v4: - no changed v2 -> v3: - no changed v1 -> v2: - no changed include/linux/iopoll.h | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/include/linux/iopoll.h b/include/linux/iopoll.h index 35e15dfd4155..7d44a2e20267 100644 --- a/include/linux/iopoll.h +++ b/include/linux/iopoll.h @@ -13,6 +13,46 @@ #include #include +/** + * read_poll_timeout - Periodically poll an address until a condition is + * met or a timeout occurs + * @op: accessor function (takes @args as its arguments) + * @val: Variable to read the value into + * @cond: Break condition (usually involving @val) + * @sleep_us: Maximum time to sleep between reads in us (0 + * tight-loops). Should be less than ~20ms since usleep_range + * is used (see Documentation/timers/timers-howto.rst). + * @timeout_us: Timeout in us, 0 means never timeout + * @args: arguments for @op poll + * + * Returns 0 on success and -ETIMEDOUT upon a timeout. In either + * case, the last read value at @args is stored in @val. Must not + * be called from atomic context if sleep_us or timeout_us are used. + * + * When available, you'll probably want to use one of the specialized + * macros defined below rather than this macro directly. + */ +#define read_poll_timeout(op, val, cond, sleep_us, timeout_us, args...) \ +({ \ + u64 __timeout_us = (timeout_us); \ + unsigned long __sleep_us = (sleep_us); \ + ktime_t __timeout = ktime_add_us(ktime_get(), __timeout_us); \ + might_sleep_if((__sleep_us) != 0); \ + for (;;) { \ + (val) = op(args); \ + if (cond) \ + break; \ + if (__timeout_us && \ + ktime_compare(ktime_get(), __timeout) > 0) { \ + (val) = op(args); \ + break; \ + } \ + if (__sleep_us) \ + usleep_range((__sleep_us >> 2) + 1, __sleep_us); \ + } \ + (cond) ? 0 : -ETIMEDOUT; \ +}) + /** * readx_poll_timeout - Periodically poll an address until a condition is met or a timeout occurs * @op: accessor function (takes @addr as its only argument) From patchwork Mon Mar 23 02:56:26 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dejin Zheng X-Patchwork-Id: 222061 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id DF014C1975A for ; Mon, 23 Mar 2020 02:57:14 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id A9C6920769 for ; Mon, 23 Mar 2020 02:57:14 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="IApyGohZ" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727212AbgCWC5N (ORCPT ); Sun, 22 Mar 2020 22:57:13 -0400 Received: from mail-pf1-f193.google.com ([209.85.210.193]:35565 "EHLO mail-pf1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726983AbgCWC5N (ORCPT ); Sun, 22 Mar 2020 22:57:13 -0400 Received: by mail-pf1-f193.google.com with SMTP id u68so6784047pfb.2; Sun, 22 Mar 2020 19:57:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=XPNpREPrKXsdscJCtGIsFykCiZzhn9WW7+8w0rGQ9A4=; b=IApyGohZoFvLgK6DbM4qeGYTrqNTPHBgg65x6HQnmkoR6Lp6HPFxVpT15q5wvFGgnE WO7qNfuzWrGBCUdGPjLQn2os4DFelBRs4FLu4GsN3rhU6n/EHw0yGi09sieQsCrDGYrA rkXk/5Svg3OXU8qwAB4M2KKscFCz9djHSjqW98ScTH5UqzPtKo/FdG0aryUHrQy7jlLs KY5kXl3wDnlFmKtZFJKs5DGKE8l21HdLtNUZqDqOSFxlJPKrt/syQQtjDUkPUFYTIQyd UmFH4MIST7JLDrgKhCey0Mi8x77SCRQcgI1gL1QfN9+XXNq7Y43sRddFhD1EimIJKAbc 2yDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=XPNpREPrKXsdscJCtGIsFykCiZzhn9WW7+8w0rGQ9A4=; b=AmdBz48yGAgzoAdmfor5H07P0SkDIuz/B7qvrXRPsw31g5eHtrJTojak6hnduuKXEN +/HqSHBkEpvjYT3AjzCT44nK9LKFxrcQbkkVrNGNPaGinXUY0Ko4PbvpVI7TcYgdATSN RVKuyScB03xBaS+9POIKtcgahUH42bbd+wmF9E8+8ERIFm7B3NFtCqT4M06nhxdPTfsu XGOj+vG6zKZDeqQvD2GYHqKTS/FWm69+MmD2wzSLpzg8UXykkaeF7Kaer3rajdSAe3Dn RU2gh8sbHQE0Vean9CD4a6nGjM42+oBq5SayiyxIEmIdATXZwPtwPSfgKgUBwyyEnjw2 /WrA== X-Gm-Message-State: ANhLgQ1ER3e1+OJc/RQaOJMqQ1lTuvR3ElU94xom0y3SmUvKY88DvsLt qPdOK7/q89BaWEzq0DNloho= X-Google-Smtp-Source: ADFU+vtAdouusdfXsITnRRrZHpdMhP9G8zf7UdP+zkETppWYMIaJJw0JohSxx9vjumWLhnptEzipjQ== X-Received: by 2002:a63:2166:: with SMTP id s38mr18848174pgm.83.1584932231771; Sun, 22 Mar 2020 19:57:11 -0700 (PDT) Received: from localhost (104.128.80.227.16clouds.com. [104.128.80.227]) by smtp.gmail.com with ESMTPSA id h4sm2622405pgk.72.2020.03.22.19.57.10 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sun, 22 Mar 2020 19:57:11 -0700 (PDT) From: Dejin Zheng To: andrew@lunn.ch, f.fainelli@gmail.com, hkallweit1@gmail.com, linux@armlinux.org.uk, davem@davemloft.net, mchehab+samsung@kernel.org, gregkh@linuxfoundation.org, broonie@kernel.org, tglx@linutronix.de, netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Dejin Zheng Subject: [PATCH net-next v6 03/10] net: phy: introduce phy_read_mmd_poll_timeout macro Date: Mon, 23 Mar 2020 10:56:26 +0800 Message-Id: <20200323025633.6069-4-zhengdejin5@gmail.com> X-Mailer: git-send-email 2.25.0 In-Reply-To: <20200323025633.6069-1-zhengdejin5@gmail.com> References: <20200323025633.6069-1-zhengdejin5@gmail.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org it is sometimes necessary to poll a phy register by phy_read_mmd() function until its value satisfies some condition. introduce phy_read_mmd_poll_timeout() macros that do this. Suggested-by: Andrew Lunn Reviewed-by: Andrew Lunn Signed-off-by: Dejin Zheng --- v5 -> v6: - no changed v4 -> v5: - no changed v3 -> v4: - deal with precedence issues for parameter cond. v2 -> v3: - modify the parameter order of newly added functions. phy_read_mmd_poll_timeout(val, cond, sleep_us, timeout_us, \ phydev, devaddr, regnum) || \/ phy_read_mmd_poll_timeout(phydev, devaddr regnum, val, cond, \ sleep_us, timeout_us) v1 -> v2: - passed a phydev, device address and a reg to replace args... parameter in phy_read_mmd_poll_timeout() by Andrew Lunn 's suggestion. Andrew Lunn , Thanks very much for your help! - handle phy_read_mmd return an error(the return value < 0) in phy_read_mmd_poll_timeout(). Thanks Andrew again. include/linux/phy.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/include/linux/phy.h b/include/linux/phy.h index 36d9dea04016..42a5ec9288d5 100644 --- a/include/linux/phy.h +++ b/include/linux/phy.h @@ -24,6 +24,7 @@ #include #include #include +#include #include @@ -784,6 +785,20 @@ static inline int __phy_modify_changed(struct phy_device *phydev, u32 regnum, */ int phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum); +#define phy_read_mmd_poll_timeout(phydev, devaddr, regnum, val, cond, \ + sleep_us, timeout_us) \ +({ \ + int ret = 0; \ + ret = read_poll_timeout(phy_read_mmd, val, (cond) || val < 0, \ + sleep_us, timeout_us, phydev, devaddr, \ + regnum); \ + if (val < 0) \ + ret = val; \ + if (ret) \ + phydev_err(phydev, "%s failed: %d\n", __func__, ret); \ + ret; \ +}) + /** * __phy_read_mmd - Convenience function for reading a register * from an MMD on a given PHY. From patchwork Mon Mar 23 02:56:28 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dejin Zheng X-Patchwork-Id: 222060 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED, USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7C78CC54FCE for ; Mon, 23 Mar 2020 02:57:28 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 53FA92074D for ; Mon, 23 Mar 2020 02:57:28 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="vNb/KEz3" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727261AbgCWC5Z (ORCPT ); Sun, 22 Mar 2020 22:57:25 -0400 Received: from mail-pg1-f195.google.com ([209.85.215.195]:35380 "EHLO mail-pg1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726983AbgCWC5Y (ORCPT ); Sun, 22 Mar 2020 22:57:24 -0400 Received: by mail-pg1-f195.google.com with SMTP id 7so6460764pgr.2; Sun, 22 Mar 2020 19:57:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Mifl2ikKJNKf9Y0+MA8EZLncr03EmrnFMDIlWtiHq4E=; b=vNb/KEz3bAt7X6kr6oAgcFWun+PsRezIj3xzygvRXA4JOwqsNnVMvncVjBwZCTMMNL T7AciISiKpIB6GnGz2uz87D6u6350q5Q/iPjrOxqOv5D9hYbSbWy0N1mW0xo/2AKy4zk 6dhhuWui6UydKJ4AJ4RWuBoPWOp4um2YzKIqiZaSapX9qXbOnZ3+3DMBQvMxugEFG+sd EKanBHoEC8oQ7qEGcYqakGHmaBcIMVYF98IboJ3iWoMD1e3mbmN83jgRjcfM/yzt9XM7 PiBvcNIiriX4TIUi0ogk+VlKgeLan5WNVZblMsXn34ryvhQFeJSQpdDt5dit2z9Y/5sx vKxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Mifl2ikKJNKf9Y0+MA8EZLncr03EmrnFMDIlWtiHq4E=; b=P+PwHB8XxbImrZxq7RctS7alvwxkqPQhbGiKe9BXB3MWWvw+ChKQkXAYlWf03CWxtT 5sAbuRec0ZHO/+RnL1Y5SI1WVMU0eRXNJhYlXe3ryWG4+QOQ6hqlLDMZA+drU9AxgEdU 4V078ZUJ3VFVpla8LzriqQ0mKHuj4pqS9QZNr7e7ekPJ/E1TiKNEOEnuIz/6vZFWCjok 0qqTjycW2prie3bk9MhYByNJMXxLA7jUiMzzmXAhupbnGYDf9lHDF8sw58CE9vPqwrwa 8iAhvmvCI86q2y3pEygNy9JSJxbvrNa7jsjDr/R1cg5OvO37JN2ujvmG/I4hbGoGPOJd Lfng== X-Gm-Message-State: ANhLgQ3cDB0ciqwhghfB4KGUMO/QI/1lTePfSDwyLX7HNTcP0bCDREzK grQLYmYEdwCzFWtvhbHetcY= X-Google-Smtp-Source: ADFU+vvtJ6VVES5MpYj5dXV9cn4A/doa2f+0gxiUXwDoDU5wJ5cJuNPYTV9PlIHyavJHr5zb55o1PQ== X-Received: by 2002:a62:6807:: with SMTP id d7mr22401640pfc.230.1584932243020; Sun, 22 Mar 2020 19:57:23 -0700 (PDT) Received: from localhost (104.128.80.227.16clouds.com. [104.128.80.227]) by smtp.gmail.com with ESMTPSA id c15sm5600915pfo.139.2020.03.22.19.57.21 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sun, 22 Mar 2020 19:57:22 -0700 (PDT) From: Dejin Zheng To: andrew@lunn.ch, f.fainelli@gmail.com, hkallweit1@gmail.com, linux@armlinux.org.uk, davem@davemloft.net, mchehab+samsung@kernel.org, gregkh@linuxfoundation.org, broonie@kernel.org, tglx@linutronix.de, netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Dejin Zheng Subject: [PATCH net-next v6 05/10] net: phy: aquantia: use phy_read_mmd_poll_timeout() to simplify the code Date: Mon, 23 Mar 2020 10:56:28 +0800 Message-Id: <20200323025633.6069-6-zhengdejin5@gmail.com> X-Mailer: git-send-email 2.25.0 In-Reply-To: <20200323025633.6069-1-zhengdejin5@gmail.com> References: <20200323025633.6069-1-zhengdejin5@gmail.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org use phy_read_mmd_poll_timeout() to replace the poll codes for simplify aqr107_wait_reset_complete() function. Reviewed-by: Andrew Lunn Signed-off-by: Dejin Zheng --- v5 -> v6: - no changed v4 -> v5: - no changed v3 -> v4: - no changed v2 -> v3: - adapt to it after modifying the parameter order of the newly added function v1 -> v2: - remove the handle of phy_read_mmd's return error. drivers/net/phy/aquantia_main.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/drivers/net/phy/aquantia_main.c b/drivers/net/phy/aquantia_main.c index 31927b2c7d5a..db3e20938729 100644 --- a/drivers/net/phy/aquantia_main.c +++ b/drivers/net/phy/aquantia_main.c @@ -451,16 +451,11 @@ static int aqr107_set_tunable(struct phy_device *phydev, */ static int aqr107_wait_reset_complete(struct phy_device *phydev) { - int val, retries = 100; - - do { - val = phy_read_mmd(phydev, MDIO_MMD_VEND1, VEND1_GLOBAL_FW_ID); - if (val < 0) - return val; - msleep(20); - } while (!val && --retries); + int val; - return val ? 0 : -ETIMEDOUT; + return phy_read_mmd_poll_timeout(phydev, MDIO_MMD_VEND1, + VEND1_GLOBAL_FW_ID, val, + val != 0, 20000, 2000000); } static void aqr107_chip_info(struct phy_device *phydev) From patchwork Mon Mar 23 02:56:30 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dejin Zheng X-Patchwork-Id: 222059 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED, USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 569E0C54FCF for ; Mon, 23 Mar 2020 02:57:40 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 2BE272073E for ; Mon, 23 Mar 2020 02:57:40 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="lfUesMTj" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727298AbgCWC5h (ORCPT ); Sun, 22 Mar 2020 22:57:37 -0400 Received: from mail-pf1-f196.google.com ([209.85.210.196]:38836 "EHLO mail-pf1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726983AbgCWC5g (ORCPT ); Sun, 22 Mar 2020 22:57:36 -0400 Received: by mail-pf1-f196.google.com with SMTP id z25so2441204pfa.5; Sun, 22 Mar 2020 19:57:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=AzKNp0Bukz0SfQKbFYnotqvXt5RjOKiGdbp496IXj9s=; b=lfUesMTjlNPx60Mxt/CMQDqFO8n68Fw8/VgDDp3OFQrayJ3kqJZ9QcTJKsYZ24SMae adSIr+c2NX9B0KllH4wLrlb1IXoiEcZKwWsI8E0krisUwJ405gfBS7dkloi+dxC7j2jk MLQdphP2uZWADPW8tSOnMMXGEZnvbNdsYPRm7bRv1tvp9R71409DVVgYNEKOqyi/Bk0J Bqw4eSQ3mSDx4rxORkvxiLCsVKPgAmT9/YlXU3ZCo2gXQNBEeKU94s1FQPsLlDXMXqtB exmMdIi1UGfQYuooGImXVB765ml356wFCMoVAhsalI7zhvYIn6AJrGWmvvUEEa8KzWX8 xbPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=AzKNp0Bukz0SfQKbFYnotqvXt5RjOKiGdbp496IXj9s=; b=I53j9LDkuxcQc0l30dxfdsS7TDQazd65uxXvr+kQnbCL/Vzq2DI1iv1ILlrgLnxtaa iXB/tJ973Db3fWi2JjhOPxygbgThk84xw+B4nnKJQlo+LpBR/UdmbcDA6IIIN7DnDwEF MbPAnHQv2Zwk1PkIY1trwQNDgpuieYHBQIvTA9vOL02IlUnq9vkiyAjv/Ngq9l67QAEd 0VF9j/3Rf1hxvnotdWt/+UQs4twuCpWFoL5AwoAAkQa61qS5PmonILVdBwPSHGIffLz0 RgHO1ZrmJ3lpd8BFNEF3fYMUt160PHNOwI6vYSFL2CLlK/uXQghG/f8E/53IGNurwHzP JwOg== X-Gm-Message-State: ANhLgQ0d4pq/2ivdTSj45s2Bw+bkFifF+AhPdZcNT7JUN21ubAPBKlR9 WyPoAnq/0uu/svbca3bmtEo= X-Google-Smtp-Source: ADFU+vszrweFVXNu6W95SNoRNuCRbsBDNVk3gSGCKWjTZnBT1DKicvz+GEPjS8Dbz1OaFgb2V18zdg== X-Received: by 2002:a62:ce48:: with SMTP id y69mr21861018pfg.178.1584932255139; Sun, 22 Mar 2020 19:57:35 -0700 (PDT) Received: from localhost (104.128.80.227.16clouds.com. [104.128.80.227]) by smtp.gmail.com with ESMTPSA id 71sm12103932pfv.8.2020.03.22.19.57.33 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sun, 22 Mar 2020 19:57:34 -0700 (PDT) From: Dejin Zheng To: andrew@lunn.ch, f.fainelli@gmail.com, hkallweit1@gmail.com, linux@armlinux.org.uk, davem@davemloft.net, mchehab+samsung@kernel.org, gregkh@linuxfoundation.org, broonie@kernel.org, tglx@linutronix.de, netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Dejin Zheng Subject: [PATCH net-next v6 07/10] net: phy: introduce phy_read_poll_timeout macro Date: Mon, 23 Mar 2020 10:56:30 +0800 Message-Id: <20200323025633.6069-8-zhengdejin5@gmail.com> X-Mailer: git-send-email 2.25.0 In-Reply-To: <20200323025633.6069-1-zhengdejin5@gmail.com> References: <20200323025633.6069-1-zhengdejin5@gmail.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org it is sometimes necessary to poll a phy register by phy_read() function until its value satisfies some condition. introduce phy_read_poll_timeout() macros that do this. Suggested-by: Andrew Lunn Reviewed-by: Andrew Lunn Signed-off-by: Dejin Zheng --- v5 -> v6: - no changed. v4 -> v5: - no changed. v3 -> v4: - deal with precedence issues for parameter cond. v2 -> v3: - modify the parameter order of newly added functions. phy_read_poll_timeout(val, cond, sleep_us, timeout_us, \ phydev, regnum) || \/ phy_read_poll_timeout(phydev, regnum, val, cond, sleep_us, \ timeout_us) v1 -> v2: - pass a phydev and a regnum to replace args... parameter in the phy_read_poll_timeout(), and also handle the phy_read() function's return error. include/linux/phy.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/include/linux/phy.h b/include/linux/phy.h index 42a5ec9288d5..f2e0aea13a2f 100644 --- a/include/linux/phy.h +++ b/include/linux/phy.h @@ -714,6 +714,19 @@ static inline int phy_read(struct phy_device *phydev, u32 regnum) return mdiobus_read(phydev->mdio.bus, phydev->mdio.addr, regnum); } +#define phy_read_poll_timeout(phydev, regnum, val, cond, sleep_us, timeout_us) \ +({ \ + int ret = 0; \ + ret = read_poll_timeout(phy_read, val, (cond) || val < 0, sleep_us, \ + timeout_us, phydev, regnum); \ + if (val < 0) \ + ret = val; \ + if (ret) \ + phydev_err(phydev, "%s failed: %d\n", __func__, ret); \ + ret; \ +}) + + /** * __phy_read - convenience function for reading a given PHY register * @phydev: the phy_device struct From patchwork Mon Mar 23 02:56:32 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dejin Zheng X-Patchwork-Id: 222058 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED, USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 63EFEC54FCF for ; Mon, 23 Mar 2020 02:57:53 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 3B1032074D for ; Mon, 23 Mar 2020 02:57:53 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="nzeGKEcW" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727330AbgCWC5u (ORCPT ); Sun, 22 Mar 2020 22:57:50 -0400 Received: from mail-pg1-f196.google.com ([209.85.215.196]:42500 "EHLO mail-pg1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726983AbgCWC5u (ORCPT ); Sun, 22 Mar 2020 22:57:50 -0400 Received: by mail-pg1-f196.google.com with SMTP id h8so6438194pgs.9; Sun, 22 Mar 2020 19:57:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=2RzrjnjlFsoE4gKq8dQtt+6wyLVwzt/6FPHXx4r1hZA=; b=nzeGKEcWF80+UA+29o2nRKvtsVKO7NLrB2Fs8rln3kn/f9OuoDarpGeRXZhqQXWHYZ FlM0huwSRiS9tNjMmd9kFCdLKBD/85rZynKRWnVgzZdOrUI8Dc4bvvnz59BUuCyNZ5xA 5FX964y6HwMDCRKZyI+0oZ/iMo/iXuMiSiKNKdmfPxUlrG8YoVFq+yYtjN8Lo0xaewjG ElDJEH1fVcLTcL8+0qqZ755FZKVFHWlghv8FczyHHjX0DjVEtlwb85EGwD6t06vHXs+Y Rhup4Uu7yVmNBFkqyTxlX84/dSqHIUi3uIR9xRYHeOAa/mJmMqoMAPXeIVai6JkXXMys 2bWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=2RzrjnjlFsoE4gKq8dQtt+6wyLVwzt/6FPHXx4r1hZA=; b=N0sLGz27LIbbdOwWOvDKsbzJiGAHc6uyLIlfEjRfzJXL8u8BLuVaEcPEzZDhQ0KRsv j4GoCgTKxKK+c9mdUtKFp56ZhmHYdyCDq/clRb+2uSNOmv1a8OWg1LpOrRsEZ6rEZm+R bjJRcQFeNXWHUwkabQZHh3c+7vf9EV+spiJ1GHHlIbAK7hp1MT5DdBKZMN8HJYje2I7B qoV9vHQzM4Zde1Wvg6ORbuR0GOJeEC3a1HBNspd85wEBo8qLI2CqH/cL09NZPGnFAe7e Yf6nUiLzBYCEOUH51iUvtrWJaS0MqgDauylyh+UkJmkhe7Z+DIkLxC8kVUIAAjC8EXBH ifSA== X-Gm-Message-State: ANhLgQ3BbFlag7VAenpWmdwWkxkB9WFMqX4O10i6EfYsMx5BjskzoLT7 3BWiZ6rfdW9QVekydImBnXI= X-Google-Smtp-Source: ADFU+vtcDRozhnR3XI1zbXILvCGDDVn8CYx431KkNfHnlOhfzRnvMYK0f0sW9XeYw1IzeFXJ5Nkbmg== X-Received: by 2002:aa7:94a5:: with SMTP id a5mr22524685pfl.67.1584932268481; Sun, 22 Mar 2020 19:57:48 -0700 (PDT) Received: from localhost (104.128.80.227.16clouds.com. [104.128.80.227]) by smtp.gmail.com with ESMTPSA id z17sm11762499pff.12.2020.03.22.19.57.46 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sun, 22 Mar 2020 19:57:48 -0700 (PDT) From: Dejin Zheng To: andrew@lunn.ch, f.fainelli@gmail.com, hkallweit1@gmail.com, linux@armlinux.org.uk, davem@davemloft.net, mchehab+samsung@kernel.org, gregkh@linuxfoundation.org, broonie@kernel.org, tglx@linutronix.de, netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Dejin Zheng Subject: [PATCH net-next v6 09/10] net: phy: smsc: use phy_read_poll_timeout() to simplify the code Date: Mon, 23 Mar 2020 10:56:32 +0800 Message-Id: <20200323025633.6069-10-zhengdejin5@gmail.com> X-Mailer: git-send-email 2.25.0 In-Reply-To: <20200323025633.6069-1-zhengdejin5@gmail.com> References: <20200323025633.6069-1-zhengdejin5@gmail.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org use phy_read_poll_timeout() to replace the poll codes for simplify lan87xx_read_status() function. it should be add msleep(10) before call phy_read_poll_timeout() to keep the code more similar, but it will report that warning, so modify it to msleep(20). ./scripts/checkpatch.pl v5-0009-net-phy-smsc-use-phy_read_poll_timeout-to-simplif.patch WARNING: msleep < 20ms can sleep for up to 20ms; see Documentation/timers/timers-howto.rst #42: FILE: drivers/net/phy/smsc.c:126: + msleep(10); Suggested-by: Andrew Lunn Signed-off-by: Dejin Zheng --- v5 -> v6: - no changed. v4 -> v5: - add msleep before phy_read_poll_timeout() to keep the code more similar v3 -> v4: - add this patch by Andrew's suggestion. Thanks Andrew! drivers/net/phy/smsc.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/drivers/net/phy/smsc.c b/drivers/net/phy/smsc.c index b73298250793..f888523086ed 100644 --- a/drivers/net/phy/smsc.c +++ b/drivers/net/phy/smsc.c @@ -112,8 +112,6 @@ static int lan87xx_read_status(struct phy_device *phydev) int err = genphy_read_status(phydev); if (!phydev->link && priv->energy_enable) { - int i; - /* Disable EDPD to wake up PHY */ int rc = phy_read(phydev, MII_LAN83C185_CTRL_STATUS); if (rc < 0) @@ -125,15 +123,12 @@ static int lan87xx_read_status(struct phy_device *phydev) return rc; /* Wait max 640 ms to detect energy */ - for (i = 0; i < 64; i++) { - /* Sleep to allow link test pulses to be sent */ - msleep(10); - rc = phy_read(phydev, MII_LAN83C185_CTRL_STATUS); - if (rc < 0) - return rc; - if (rc & MII_LAN83C185_ENERGYON) - break; - } + msleep(20); + phy_read_poll_timeout(phydev, MII_LAN83C185_CTRL_STATUS, rc, + rc & MII_LAN83C185_ENERGYON, 10000, + 620000); + if (rc < 0) + return rc; /* Re-enable EDPD */ rc = phy_read(phydev, MII_LAN83C185_CTRL_STATUS);