Message ID | 1464356224-10339-1-git-send-email-smohammed@nvidia.com |
---|---|
State | Deferred |
Headers | show |
> + err = readx_poll_timeout(readl, i2c_dev->base + reg_offset, > + val, val == 0, 1000, > + I2C_CONFIG_LOAD_TIMEOUT); Any reason we can't use readl_poll_timeout() here?
> Subject: Re: [PATCH v8 1/3] i2c: tegra: use readx_poll_timeout after > config_load reg programmed > > * PGP Signed by an unknown key > > > > + err = readx_poll_timeout(readl, i2c_dev->base + reg_offset, > > + val, val == 0, 1000, > > + I2C_CONFIG_LOAD_TIMEOUT); > > Any reason we can't use readl_poll_timeout() here? [Shardar] Can be used, will change and push the new patchset. > > > * Unknown Key > * 0x14A029B6 -- To unsubscribe from this list: send the line "unsubscribe linux-tegra" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
> > > + err = readx_poll_timeout(readl, i2c_dev->base + reg_offset, > > > + val, val == 0, 1000, > > > + I2C_CONFIG_LOAD_TIMEOUT); > > > > Any reason we can't use readl_poll_timeout() here? > [Shardar] Can be used, will change and push the new patchset. Still interested? Should be an easy change, but I am reluctant to fix it here with no testing.
> -----Original Message----- > From: Wolfram Sang [mailto:wsa@the-dreams.de] > Sent: Friday, August 26, 2016 1:10 AM > To: Shardar Mohammed > Cc: Laxman Dewangan; swarren@wwwdotorg.org; > thierry.reding@gmail.com; gnurou@gmail.com; linux-i2c@vger.kernel.org; > linux-tegra@vger.kernel.org; linux-kernel@vger.kernel.org > Subject: Re: [PATCH v8 1/3] i2c: tegra: use readx_poll_timeout after > config_load reg programmed > > * PGP Signed by an unknown key > > > > > > + err = readx_poll_timeout(readl, i2c_dev->base + reg_offset, > > > > + val, val == 0, 1000, > > > > + I2C_CONFIG_LOAD_TIMEOUT); > > > > > > Any reason we can't use readl_poll_timeout() here? > > [Shardar] Can be used, will change and push the new patchset. > > Still interested? Should be an easy change, but I am reluctant to fix it here > with no testing. [Shardar] Will push the change by tomorrow. > > > * Unknown Key > * 0x14A029B6 -- To unsubscribe from this list: send the line "unsubscribe linux-tegra" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
> > Still interested? Should be an easy change, but I am reluctant to fix it here > > with no testing. > [Shardar] Will push the change by tomorrow. Thanks. If possibe, could you rebase it on top of this series? [PATCH V2 0/9] Some Tegra I2C Updates Or is it easier to rebase Jon's series on top of yours? CCing Jon, too...
Hi Wolfram Sang, I have pushed below changes: PATCH v9 series with only taking care of review comment. PATCH v10 series with rebasing on top of Jon's patch series [PATCH V2 0/9] Some Tegra I2C Updates. Please review. Thanks, Shardar > -----Original Message----- > From: Wolfram Sang [mailto:wsa@the-dreams.de] > Sent: Friday, August 26, 2016 9:24 PM > To: Shardar Mohammed > Cc: Laxman Dewangan; swarren@wwwdotorg.org; > thierry.reding@gmail.com; gnurou@gmail.com; linux-i2c@vger.kernel.org; > linux-tegra@vger.kernel.org; linux-kernel@vger.kernel.org; Jonathan Hunter > Subject: Re: [PATCH v8 1/3] i2c: tegra: use readx_poll_timeout after > config_load reg programmed > > * PGP Signed by an unknown key > > > > Still interested? Should be an easy change, but I am reluctant to > > > fix it here with no testing. > > [Shardar] Will push the change by tomorrow. > > Thanks. If possibe, could you rebase it on top of this series? > > [PATCH V2 0/9] Some Tegra I2C Updates > > Or is it easier to rebase Jon's series on top of yours? > > CCing Jon, too... > > > * Unknown Key > * 0x14A029B6 -- To unsubscribe from this list: send the line "unsubscribe linux-tegra" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/i2c/busses/i2c-tegra.c b/drivers/i2c/busses/i2c-tegra.c index 445398c3..7cbeb4e 100644 --- a/drivers/i2c/busses/i2c-tegra.c +++ b/drivers/i2c/busses/i2c-tegra.c @@ -28,6 +28,7 @@ #include <linux/of_device.h> #include <linux/module.h> #include <linux/reset.h> +#include <linux/iopoll.h> #include <asm/unaligned.h> @@ -110,6 +111,8 @@ #define I2C_CLKEN_OVERRIDE 0x090 #define I2C_MST_CORE_CLKEN_OVR (1 << 0) +#define I2C_CONFIG_LOAD_TIMEOUT 1000000 + /* * msg_end_type: The bus control which need to be send at end of transfer. * @MSG_END_STOP: Send stop pulse at end of transfer. @@ -428,7 +431,6 @@ static int tegra_i2c_init(struct tegra_i2c_dev *i2c_dev) u32 val; int err = 0; u32 clk_divisor; - unsigned long timeout = jiffies + HZ; err = tegra_i2c_clock_enable(i2c_dev); if (err < 0) { @@ -478,15 +480,18 @@ static int tegra_i2c_init(struct tegra_i2c_dev *i2c_dev) i2c_writel(i2c_dev, I2C_MST_CORE_CLKEN_OVR, I2C_CLKEN_OVERRIDE); if (i2c_dev->hw->has_config_load_reg) { + u32 val; + unsigned long reg_offset; + + reg_offset = tegra_i2c_reg_addr(i2c_dev, I2C_CONFIG_LOAD); i2c_writel(i2c_dev, I2C_MSTR_CONFIG_LOAD, I2C_CONFIG_LOAD); - while (i2c_readl(i2c_dev, I2C_CONFIG_LOAD) != 0) { - if (time_after(jiffies, timeout)) { - dev_warn(i2c_dev->dev, - "timeout waiting for config load\n"); - err = -ETIMEDOUT; - goto err; - } - msleep(1); + err = readx_poll_timeout(readl, i2c_dev->base + reg_offset, + val, val == 0, 1000, + I2C_CONFIG_LOAD_TIMEOUT); + if (err) { + dev_warn(i2c_dev->dev, + "timeout waiting for config load\n"); + goto err; } }
After CONFIG_LOAD register programing instead of explicitly waiting for timeout, use readx_poll_timeout() to check for register value to get updated or wait till timeout. Signed-off-by: Shardar Shariff Md <smohammed@nvidia.com> --- Changes in v4: - Split timeout calculation to separate patch Changes in v5: - Move disabling of clock to separate patch Changes in v8: - 1st change of [PATCH v7] series is merged, v8 is rebased on top of merged change, here patch series is changed accordingly. - Updated the commit message as per review to properly reflect change. - calculate the register offset seperately to make code more readable. --- drivers/i2c/busses/i2c-tegra.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-)