lkml.org 
[lkml]   [2020]   [Jul]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [PATCH v3] phy: samsung: Use readl_poll_timeout function
    On Tue, Jul 07, 2020 at 09:59:08AM +0000, Anand Moon wrote:
    > Instead of a busy waiting loop while loop using udelay

    You doubled "loop".

    > use readl_poll_timeout function to check the condition
    > is met or timeout occurs in crport_handshake function.

    Still you did not mention that you convert the function to use sleeping
    primitive. You also did not mention whether it is actually allowed in
    this context and I am not sure if you investigated it.

    Best regards,
    Krzysztof

    >
    > Fixes: d8c80bb3b55b ("phy: exynos5-usbdrd: Calibrate LOS levels for exynos5420/5800")
    > Signed-off-by: Anand Moon <linux.amoon@gmail.com>
    > ---
    > Changes v3:
    > --Fix the commit message.
    > --Drop the variable, used the value directly.
    > Changes v2:
    > --used the default timeout values.
    > --Added missing Fixed tags.
    > ---
    > drivers/phy/samsung/phy-exynos5-usbdrd.c | 35 +++++++-----------------
    > 1 file changed, 10 insertions(+), 25 deletions(-)
    >
    > diff --git a/drivers/phy/samsung/phy-exynos5-usbdrd.c b/drivers/phy/samsung/phy-exynos5-usbdrd.c
    > index e510732afb8b..fa75fa88da33 100644
    > --- a/drivers/phy/samsung/phy-exynos5-usbdrd.c
    > +++ b/drivers/phy/samsung/phy-exynos5-usbdrd.c
    > @@ -16,6 +16,7 @@
    > #include <linux/of.h>
    > #include <linux/of_address.h>
    > #include <linux/of_device.h>
    > +#include <linux/iopoll.h>
    > #include <linux/phy/phy.h>
    > #include <linux/platform_device.h>
    > #include <linux/mutex.h>
    > @@ -556,40 +557,24 @@ static int exynos5_usbdrd_phy_power_off(struct phy *phy)
    > static int crport_handshake(struct exynos5_usbdrd_phy *phy_drd,
    > u32 val, u32 cmd)
    > {
    > - u32 usec = 100;
    > unsigned int result;
    > + int err;
    >
    > writel(val | cmd, phy_drd->reg_phy + EXYNOS5_DRD_PHYREG0);
    >
    > - do {
    > - result = readl(phy_drd->reg_phy + EXYNOS5_DRD_PHYREG1);
    > - if (result & PHYREG1_CR_ACK)
    > - break;
    > -
    > - udelay(1);
    > - } while (usec-- > 0);
    > -
    > - if (!usec) {
    > - dev_err(phy_drd->dev,
    > - "CRPORT handshake timeout1 (0x%08x)\n", val);
    > + err = readl_poll_timeout(phy_drd->reg_phy + EXYNOS5_DRD_PHYREG1,
    > + result, (result & PHYREG1_CR_ACK), 1, 100);
    > + if (err) {
    > + dev_err(phy_drd->dev, "CRPORT handshake timeout1 (0x%08x)\n", val);
    > return -ETIME;
    > }
    >
    > - usec = 100;
    > -
    > writel(val, phy_drd->reg_phy + EXYNOS5_DRD_PHYREG0);
    >
    > - do {
    > - result = readl(phy_drd->reg_phy + EXYNOS5_DRD_PHYREG1);
    > - if (!(result & PHYREG1_CR_ACK))
    > - break;
    > -
    > - udelay(1);
    > - } while (usec-- > 0);
    > -
    > - if (!usec) {
    > - dev_err(phy_drd->dev,
    > - "CRPORT handshake timeout2 (0x%08x)\n", val);
    > + err = readl_poll_timeout(phy_drd->reg_phy + EXYNOS5_DRD_PHYREG1,
    > + result, !(result & PHYREG1_CR_ACK), 1, 100);
    > + if (err) {
    > + dev_err(phy_drd->dev, "CRPORT handshake timeout2 (0x%08x)\n", val);
    > return -ETIME;
    > }
    >
    > --
    > 2.27.0
    >

    \
     
     \ /
      Last update: 2020-07-07 13:37    [W:9.284 / U:0.060 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site