[PATCH] i2c: imx: remove unnecessary delay at startup

Ian Dannapel posted 1 patch 4 years, 3 months ago
drivers/i2c/busses/i2c-imx.c | 6 ------
1 file changed, 6 deletions(-)
[PATCH] i2c: imx: remove unnecessary delay at startup
Posted by Ian Dannapel 4 years, 3 months ago
a delay on the startup of the i2c imx controller is not required or defined in the specs.
By removing it, the user can see a latency decrease from up to 150μs in communication.
Additional info: https://lore.kernel.org/all/20220304132037.GA15901@pengutronix.de/

Signed-off-by: Ian S. Dannapel <iansdannapel@gmail.com>
---
 drivers/i2c/busses/i2c-imx.c | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c
index 3576b63a6c03..019dda5301df 100644
--- a/drivers/i2c/busses/i2c-imx.c
+++ b/drivers/i2c/busses/i2c-imx.c
@@ -602,12 +602,6 @@ static int i2c_imx_start(struct imx_i2c_struct *i2c_imx, bool atomic)
 	imx_i2c_write_reg(i2c_imx->hwdata->i2sr_clr_opcode, i2c_imx, IMX_I2C_I2SR);
 	imx_i2c_write_reg(i2c_imx->hwdata->i2cr_ien_opcode, i2c_imx, IMX_I2C_I2CR);
 
-	/* Wait controller to be stable */
-	if (atomic)
-		udelay(50);
-	else
-		usleep_range(50, 150);
-
 	/* Start I2C transaction */
 	temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
 	temp |= I2CR_MSTA;
-- 
2.25.1

Re: [PATCH] i2c: imx: remove unnecessary delay at startup
Posted by Uwe Kleine-König 4 years, 3 months ago
Hello,

On Mon, Mar 14, 2022 at 10:59:18AM +0100, Ian Dannapel wrote:
> diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c
> index 3576b63a6c03..019dda5301df 100644
> --- a/drivers/i2c/busses/i2c-imx.c
> +++ b/drivers/i2c/busses/i2c-imx.c
> @@ -602,12 +602,6 @@ static int i2c_imx_start(struct imx_i2c_struct *i2c_imx, bool atomic)
>  	imx_i2c_write_reg(i2c_imx->hwdata->i2sr_clr_opcode, i2c_imx, IMX_I2C_I2SR);
>  	imx_i2c_write_reg(i2c_imx->hwdata->i2cr_ien_opcode, i2c_imx, IMX_I2C_I2CR);
>  
> -	/* Wait controller to be stable */
> -	if (atomic)
> -		udelay(50);
> -	else
> -		usleep_range(50, 150);
> -
>  	/* Start I2C transaction */
>  	temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
>  	temp |= I2CR_MSTA;

This contradicts statements made in
43309f3b521302bb66c4c9e66704dd3675e4d725.

Maybe the sleep/delay should be done conditionally on the busy bit?

Best regards
Uwe

-- 
Pengutronix e.K.                           | Uwe Kleine-König            |
Industrial Linux Solutions                 | https://www.pengutronix.de/ |
Re: [PATCH] i2c: imx: remove unnecessary delay at startup
Posted by Oleksij Rempel 4 years, 3 months ago
On Mon, Mar 14, 2022 at 11:13:37AM +0100, Uwe Kleine-König wrote:
> Hello,
> 
> On Mon, Mar 14, 2022 at 10:59:18AM +0100, Ian Dannapel wrote:
> > diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c
> > index 3576b63a6c03..019dda5301df 100644
> > --- a/drivers/i2c/busses/i2c-imx.c
> > +++ b/drivers/i2c/busses/i2c-imx.c
> > @@ -602,12 +602,6 @@ static int i2c_imx_start(struct imx_i2c_struct *i2c_imx, bool atomic)
> >  	imx_i2c_write_reg(i2c_imx->hwdata->i2sr_clr_opcode, i2c_imx, IMX_I2C_I2SR);
> >  	imx_i2c_write_reg(i2c_imx->hwdata->i2cr_ien_opcode, i2c_imx, IMX_I2C_I2CR);
> >  
> > -	/* Wait controller to be stable */
> > -	if (atomic)
> > -		udelay(50);
> > -	else
> > -		usleep_range(50, 150);
> > -
> >  	/* Start I2C transaction */
> >  	temp = imx_i2c_read_reg(i2c_imx, IMX_I2C_I2CR);
> >  	temp |= I2CR_MSTA;
> 
> This contradicts statements made in
> 43309f3b521302bb66c4c9e66704dd3675e4d725.
> 
> Maybe the sleep/delay should be done conditionally on the busy bit?

Maybe. I do not see what exact problem is this sleep addressing. How
exact the can get stable? Is it addressing some clock issue or wading
until something happening on the bus?

Regards,
Oleskij
-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |
Re: [PATCH] i2c: imx: remove unnecessary delay at startup
Posted by Wolfram Sang 4 years, 3 months ago
> Maybe. I do not see what exact problem is this sleep addressing. How
> exact the can get stable? Is it addressing some clock issue or wading
> until something happening on the bus?

Yeah, it is really hard to see why it is there. And given that the
introducing commit is from 2009, we can't really expect an active
userbase reporting breakage. So, although it may be a useless delay, I'd
like to see an opt-in approach for not using it.