lkml.org 
[lkml]   [2019]   [Oct]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.3 10/81] regulator: ti-abb: Fix timeout in ti_abb_wait_txdone/ti_abb_clear_all_txdone
    Date
    From: Axel Lin <axel.lin@ingics.com>

    [ Upstream commit f64db548799e0330897c3203680c2ee795ade518 ]

    ti_abb_wait_txdone() may return -ETIMEDOUT when ti_abb_check_txdone()
    returns true in the latest iteration of the while loop because the timeout
    value is abb->settling_time + 1. Similarly, ti_abb_clear_all_txdone() may
    return -ETIMEDOUT when ti_abb_check_txdone() returns false in the latest
    iteration of the while loop. Fix it.

    Signed-off-by: Axel Lin <axel.lin@ingics.com>
    Acked-by: Nishanth Menon <nm@ti.com>
    Link: https://lore.kernel.org/r/20190929095848.21960-1-axel.lin@ingics.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/regulator/ti-abb-regulator.c | 26 ++++++++------------------
    1 file changed, 8 insertions(+), 18 deletions(-)

    diff --git a/drivers/regulator/ti-abb-regulator.c b/drivers/regulator/ti-abb-regulator.c
    index cced1ffb896c1..89b9314d64c9d 100644
    --- a/drivers/regulator/ti-abb-regulator.c
    +++ b/drivers/regulator/ti-abb-regulator.c
    @@ -173,19 +173,14 @@ static int ti_abb_wait_txdone(struct device *dev, struct ti_abb *abb)
    while (timeout++ <= abb->settling_time) {
    status = ti_abb_check_txdone(abb);
    if (status)
    - break;
    + return 0;

    udelay(1);
    }

    - if (timeout > abb->settling_time) {
    - dev_warn_ratelimited(dev,
    - "%s:TRANXDONE timeout(%duS) int=0x%08x\n",
    - __func__, timeout, readl(abb->int_base));
    - return -ETIMEDOUT;
    - }
    -
    - return 0;
    + dev_warn_ratelimited(dev, "%s:TRANXDONE timeout(%duS) int=0x%08x\n",
    + __func__, timeout, readl(abb->int_base));
    + return -ETIMEDOUT;
    }

    /**
    @@ -205,19 +200,14 @@ static int ti_abb_clear_all_txdone(struct device *dev, const struct ti_abb *abb)

    status = ti_abb_check_txdone(abb);
    if (!status)
    - break;
    + return 0;

    udelay(1);
    }

    - if (timeout > abb->settling_time) {
    - dev_warn_ratelimited(dev,
    - "%s:TRANXDONE timeout(%duS) int=0x%08x\n",
    - __func__, timeout, readl(abb->int_base));
    - return -ETIMEDOUT;
    - }
    -
    - return 0;
    + dev_warn_ratelimited(dev, "%s:TRANXDONE timeout(%duS) int=0x%08x\n",
    + __func__, timeout, readl(abb->int_base));
    + return -ETIMEDOUT;
    }

    /**
    --
    2.20.1
    \
     
     \ /
      Last update: 2019-10-30 16:50    [W:4.881 / U:0.052 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site