All of lore.kernel.org
 help / color / mirror / Atom feed
From: Florian Fainelli <f.fainelli@gmail.com>
To: Antoine Tenart <antoine.tenart@bootlin.com>,
	davem@davemloft.net, andrew@lunn.ch, hkallweit1@gmail.com
Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
	alexandre.belloni@bootlin.com, thomas.petazzoni@bootlin.com,
	allan.nielsen@microchip.com
Subject: Re: [PATCH net-next 4/4] net: phy: mscc-miim: read poll when high resolution timers are disabled
Date: Tue, 26 May 2020 14:22:31 -0700	[thread overview]
Message-ID: <e95bbdb6-a6db-be02-660e-7318b9bb5f01@gmail.com> (raw)
In-Reply-To: <20200526162256.466885-5-antoine.tenart@bootlin.com>



On 5/26/2020 9:22 AM, Antoine Tenart wrote:
> The driver uses a read polling mechanism to check the status of the MDIO
> bus, to know if it is ready to accept next commands. This polling
> mechanism uses usleep_delay() under the hood between reads which is fine
> as long as high resolution timers are enabled. Otherwise the delays will
> end up to be much longer than expected.
> 
> This patch fixes this by using udelay() under the hood when
> CONFIG_HIGH_RES_TIMERS isn't enabled. This increases CPU usage.
> 
> Signed-off-by: Antoine Tenart <antoine.tenart@bootlin.com>
> ---
>  drivers/net/phy/Kconfig          |  3 ++-
>  drivers/net/phy/mdio-mscc-miim.c | 22 +++++++++++++++++-----
>  2 files changed, 19 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig
> index 2a32f26ead0b..047c27087b10 100644
> --- a/drivers/net/phy/Kconfig
> +++ b/drivers/net/phy/Kconfig
> @@ -184,7 +184,8 @@ config MDIO_MSCC_MIIM
>  	depends on HAS_IOMEM
>  	help
>  	  This driver supports the MIIM (MDIO) interface found in the network
> -	  switches of the Microsemi SoCs
> +	  switches of the Microsemi SoCs; it is recommended to switch on
> +	  CONFIG_HIGH_RES_TIMERS
>  
>  config MDIO_MVUSB
>  	tristate "Marvell USB to MDIO Adapter"
> diff --git a/drivers/net/phy/mdio-mscc-miim.c b/drivers/net/phy/mdio-mscc-miim.c
> index aed9afa1e8f1..11f583fd4611 100644
> --- a/drivers/net/phy/mdio-mscc-miim.c
> +++ b/drivers/net/phy/mdio-mscc-miim.c
> @@ -39,13 +39,25 @@ struct mscc_miim_dev {
>  	void __iomem *phy_regs;
>  };
>  
> +/* When high resolution timers aren't built-in: we can't use usleep_range() as
> + * we would sleep way too long. Use udelay() instead.
> + */
> +#define mscc_readl_poll_timeout(addr, val, cond, delay_us, timeout_us)	\
> +({									\
> +	if (!IS_ENABLED(CONFIG_HIGH_RES_TIMERS))			\
> +		readl_poll_timeout_atomic(addr, val, cond, delay_us,	\
> +					  timeout_us);			\
> +	readl_poll_timeout(addr, val, cond, delay_us, timeout_us);	\
> +})
> +

I would make this a regular function which would not harm the compiler's
ability to optimize it, but would give you type checking. With that fixed:

Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
-- 
Florian

  reply	other threads:[~2020-05-26 21:22 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-26 16:22 [PATCH net-next 0/4] net: phy: mscc-miim: reduce waiting time between MDIO transactions Antoine Tenart
2020-05-26 16:22 ` [PATCH net-next 1/4] net: phy: mscc-miim: use more reasonable delays Antoine Tenart
2020-05-26 21:04   ` Alexandre Belloni
2020-05-26 21:19   ` Florian Fainelli
2020-05-26 16:22 ` [PATCH net-next 2/4] net: phy: mscc-miim: remove redundant timeout check Antoine Tenart
2020-05-26 21:04   ` Alexandre Belloni
2020-05-26 21:19   ` Florian Fainelli
2020-05-26 16:22 ` [PATCH net-next 3/4] net: phy: mscc-miim: improve waiting logic Antoine Tenart
2020-05-26 21:07   ` Alexandre Belloni
2020-05-26 21:21   ` Florian Fainelli
2020-05-26 16:22 ` [PATCH net-next 4/4] net: phy: mscc-miim: read poll when high resolution timers are disabled Antoine Tenart
2020-05-26 21:22   ` Florian Fainelli [this message]
2020-05-26 22:01     ` Andrew Lunn
2020-05-26 22:05       ` Florian Fainelli
2020-05-26 17:01 ` [PATCH net-next 0/4] net: phy: mscc-miim: reduce waiting time between MDIO transactions Andrew Lunn
2020-05-27  7:00   ` Antoine Tenart
2020-05-26 22:34 ` David Miller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=e95bbdb6-a6db-be02-660e-7318b9bb5f01@gmail.com \
    --to=f.fainelli@gmail.com \
    --cc=alexandre.belloni@bootlin.com \
    --cc=allan.nielsen@microchip.com \
    --cc=andrew@lunn.ch \
    --cc=antoine.tenart@bootlin.com \
    --cc=davem@davemloft.net \
    --cc=hkallweit1@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=thomas.petazzoni@bootlin.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.