All of lore.kernel.org
 help / color / mirror / Atom feed
From: Gregory CLEMENT <gregory.clement-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
To: Wolfram Sang <wsa-z923LK4zBo2bacvFa/9K2g@public.gmane.org>
Cc: linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	Jason Cooper <jason-NLaQJdtUoK4Be96aLqz0jA@public.gmane.org>,
	Andrew Lunn <andrew-g2DYL2Zd6BY@public.gmane.org>,
	Thomas Petazzoni
	<thomas.petazzoni-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>,
	Ezequiel Garcia
	<ezequiel.garcia-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>,
	Sebastian Hesselbarth
	<sebastian.hesselbarth-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
	Kevin Hilman <khilman-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
Subject: Re: [PATCH 2/5] i2c: mv64xxx: refactor message start to ensure proper initialization
Date: Fri, 14 Feb 2014 12:39:02 +0100	[thread overview]
Message-ID: <52FE0056.2030706@free-electrons.com> (raw)
In-Reply-To: <1392323793-4125-3-git-send-email-wsa-z923LK4zBo2bacvFa/9K2g@public.gmane.org>

On 13/02/2014 21:36, Wolfram Sang wrote:
> Because the offload mechanism can fall back to a standard transfer,
> having two seperate initialization states is unfortunate. Let's just
> have one state which does things consistently. This fixes a bug where
> some preparation was missing when the fallback happened. And it makes
> the code much easier to follow.
> 
> Signed-off-by: Wolfram Sang <wsa-z923LK4zBo2bacvFa/9K2g@public.gmane.org>


Tested-by: Gregory CLEMENT <gregory.clement-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>

With this one the bug we observed was fixed.


Thanks,

Gregory


> ---
>  drivers/i2c/busses/i2c-mv64xxx.c | 27 ++++++++++-----------------
>  1 file changed, 10 insertions(+), 17 deletions(-)
> 
> diff --git a/drivers/i2c/busses/i2c-mv64xxx.c b/drivers/i2c/busses/i2c-mv64xxx.c
> index ba64978..d52d849 100644
> --- a/drivers/i2c/busses/i2c-mv64xxx.c
> +++ b/drivers/i2c/busses/i2c-mv64xxx.c
> @@ -97,7 +97,6 @@ enum {
>  enum {
>  	MV64XXX_I2C_ACTION_INVALID,
>  	MV64XXX_I2C_ACTION_CONTINUE,
> -	MV64XXX_I2C_ACTION_OFFLOAD_SEND_START,
>  	MV64XXX_I2C_ACTION_SEND_START,
>  	MV64XXX_I2C_ACTION_SEND_RESTART,
>  	MV64XXX_I2C_ACTION_OFFLOAD_RESTART,
> @@ -460,15 +459,14 @@ mv64xxx_i2c_do_action(struct mv64xxx_i2c_data *drv_data)
>  			drv_data->reg_base + drv_data->reg_offsets.control);
>  		break;
>  
> -	case MV64XXX_I2C_ACTION_OFFLOAD_SEND_START:
> -		if (!mv64xxx_i2c_offload_msg(drv_data))
> -			break;
> -		else
> -			drv_data->action = MV64XXX_I2C_ACTION_SEND_START;
> -		/* FALLTHRU */
>  	case MV64XXX_I2C_ACTION_SEND_START:
> -		writel(drv_data->cntl_bits | MV64XXX_I2C_REG_CONTROL_START,
> -			drv_data->reg_base + drv_data->reg_offsets.control);
> +		/* Can we offload this msg ? */
> +		if (mv64xxx_i2c_offload_msg(drv_data) < 0) {
> +			/* No, switch to standard path */
> +			mv64xxx_i2c_prepare_for_io(drv_data, drv_data->msgs);
> +			writel(drv_data->cntl_bits | MV64XXX_I2C_REG_CONTROL_START,
> +				drv_data->reg_base + drv_data->reg_offsets.control);
> +		}
>  		break;
>  
>  	case MV64XXX_I2C_ACTION_SEND_ADDR_1:
> @@ -627,15 +625,10 @@ mv64xxx_i2c_execute_msg(struct mv64xxx_i2c_data *drv_data, struct i2c_msg *msg,
>  	unsigned long	flags;
>  
>  	spin_lock_irqsave(&drv_data->lock, flags);
> -	if (drv_data->offload_enabled) {
> -		drv_data->action = MV64XXX_I2C_ACTION_OFFLOAD_SEND_START;
> -		drv_data->state = MV64XXX_I2C_STATE_WAITING_FOR_START_COND;
> -	} else {
> -		mv64xxx_i2c_prepare_for_io(drv_data, msg);
>  
> -		drv_data->action = MV64XXX_I2C_ACTION_SEND_START;
> -		drv_data->state = MV64XXX_I2C_STATE_WAITING_FOR_START_COND;
> -	}
> +	drv_data->action = MV64XXX_I2C_ACTION_SEND_START;
> +	drv_data->state = MV64XXX_I2C_STATE_WAITING_FOR_START_COND;
> +
>  	drv_data->send_stop = is_last;
>  	drv_data->block = 1;
>  	mv64xxx_i2c_do_action(drv_data);
> 


-- 
Gregory Clement, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com

WARNING: multiple messages have this Message-ID (diff)
From: gregory.clement@free-electrons.com (Gregory CLEMENT)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 2/5] i2c: mv64xxx: refactor message start to ensure proper initialization
Date: Fri, 14 Feb 2014 12:39:02 +0100	[thread overview]
Message-ID: <52FE0056.2030706@free-electrons.com> (raw)
In-Reply-To: <1392323793-4125-3-git-send-email-wsa@the-dreams.de>

On 13/02/2014 21:36, Wolfram Sang wrote:
> Because the offload mechanism can fall back to a standard transfer,
> having two seperate initialization states is unfortunate. Let's just
> have one state which does things consistently. This fixes a bug where
> some preparation was missing when the fallback happened. And it makes
> the code much easier to follow.
> 
> Signed-off-by: Wolfram Sang <wsa@the-dreams.de>


Tested-by: Gregory CLEMENT <gregory.clement@free-electrons.com>

With this one the bug we observed was fixed.


Thanks,

Gregory


> ---
>  drivers/i2c/busses/i2c-mv64xxx.c | 27 ++++++++++-----------------
>  1 file changed, 10 insertions(+), 17 deletions(-)
> 
> diff --git a/drivers/i2c/busses/i2c-mv64xxx.c b/drivers/i2c/busses/i2c-mv64xxx.c
> index ba64978..d52d849 100644
> --- a/drivers/i2c/busses/i2c-mv64xxx.c
> +++ b/drivers/i2c/busses/i2c-mv64xxx.c
> @@ -97,7 +97,6 @@ enum {
>  enum {
>  	MV64XXX_I2C_ACTION_INVALID,
>  	MV64XXX_I2C_ACTION_CONTINUE,
> -	MV64XXX_I2C_ACTION_OFFLOAD_SEND_START,
>  	MV64XXX_I2C_ACTION_SEND_START,
>  	MV64XXX_I2C_ACTION_SEND_RESTART,
>  	MV64XXX_I2C_ACTION_OFFLOAD_RESTART,
> @@ -460,15 +459,14 @@ mv64xxx_i2c_do_action(struct mv64xxx_i2c_data *drv_data)
>  			drv_data->reg_base + drv_data->reg_offsets.control);
>  		break;
>  
> -	case MV64XXX_I2C_ACTION_OFFLOAD_SEND_START:
> -		if (!mv64xxx_i2c_offload_msg(drv_data))
> -			break;
> -		else
> -			drv_data->action = MV64XXX_I2C_ACTION_SEND_START;
> -		/* FALLTHRU */
>  	case MV64XXX_I2C_ACTION_SEND_START:
> -		writel(drv_data->cntl_bits | MV64XXX_I2C_REG_CONTROL_START,
> -			drv_data->reg_base + drv_data->reg_offsets.control);
> +		/* Can we offload this msg ? */
> +		if (mv64xxx_i2c_offload_msg(drv_data) < 0) {
> +			/* No, switch to standard path */
> +			mv64xxx_i2c_prepare_for_io(drv_data, drv_data->msgs);
> +			writel(drv_data->cntl_bits | MV64XXX_I2C_REG_CONTROL_START,
> +				drv_data->reg_base + drv_data->reg_offsets.control);
> +		}
>  		break;
>  
>  	case MV64XXX_I2C_ACTION_SEND_ADDR_1:
> @@ -627,15 +625,10 @@ mv64xxx_i2c_execute_msg(struct mv64xxx_i2c_data *drv_data, struct i2c_msg *msg,
>  	unsigned long	flags;
>  
>  	spin_lock_irqsave(&drv_data->lock, flags);
> -	if (drv_data->offload_enabled) {
> -		drv_data->action = MV64XXX_I2C_ACTION_OFFLOAD_SEND_START;
> -		drv_data->state = MV64XXX_I2C_STATE_WAITING_FOR_START_COND;
> -	} else {
> -		mv64xxx_i2c_prepare_for_io(drv_data, msg);
>  
> -		drv_data->action = MV64XXX_I2C_ACTION_SEND_START;
> -		drv_data->state = MV64XXX_I2C_STATE_WAITING_FOR_START_COND;
> -	}
> +	drv_data->action = MV64XXX_I2C_ACTION_SEND_START;
> +	drv_data->state = MV64XXX_I2C_STATE_WAITING_FOR_START_COND;
> +
>  	drv_data->send_stop = is_last;
>  	drv_data->block = 1;
>  	mv64xxx_i2c_do_action(drv_data);
> 


-- 
Gregory Clement, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com

  parent reply	other threads:[~2014-02-14 11:39 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-02-07 10:55 [PATCH] i2c: mv64xxx: Fix locked bus when offload is selected but not used on a message Gregory CLEMENT
2014-02-07 10:55 ` Gregory CLEMENT
2014-02-07 15:09 ` Jason Cooper
2014-02-07 15:09   ` Jason Cooper
2014-02-07 15:18   ` Gregory CLEMENT
2014-02-07 15:18     ` Gregory CLEMENT
     [not found]   ` <20140207150958.GY8533-u4khhh1J0LxI1Ri9qeTfzeTW4wlIGRCZ@public.gmane.org>
2014-02-07 18:09     ` Kevin Hilman
2014-02-07 18:09       ` Kevin Hilman
2014-02-07 18:13       ` Jason Cooper
2014-02-07 18:13         ` Jason Cooper
     [not found] ` <1391770588-1344-1-git-send-email-gregory.clement-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
2014-02-08 17:01   ` Jason Cooper
2014-02-08 17:01     ` Jason Cooper
2014-02-13  9:41 ` Wolfram Sang
2014-02-13  9:41   ` Wolfram Sang
2014-02-13 14:23   ` Gregory CLEMENT
2014-02-13 14:23     ` Gregory CLEMENT
2014-02-13 20:36   ` [PATCH 0/5] mv64xxx updates Wolfram Sang
2014-02-13 20:36     ` Wolfram Sang
     [not found]     ` <1392323793-4125-1-git-send-email-wsa-z923LK4zBo2bacvFa/9K2g@public.gmane.org>
2014-02-13 20:36       ` [PATCH 1/5] i2c: mv64xxx: put offload check into offload prepare function Wolfram Sang
2014-02-13 20:36         ` Wolfram Sang
     [not found]         ` <1392323793-4125-2-git-send-email-wsa-z923LK4zBo2bacvFa/9K2g@public.gmane.org>
2014-02-14 11:38           ` Gregory CLEMENT
2014-02-14 11:38             ` Gregory CLEMENT
2014-02-13 20:36       ` [PATCH 2/5] i2c: mv64xxx: refactor message start to ensure proper initialization Wolfram Sang
2014-02-13 20:36         ` Wolfram Sang
     [not found]         ` <1392323793-4125-3-git-send-email-wsa-z923LK4zBo2bacvFa/9K2g@public.gmane.org>
2014-02-14 11:39           ` Gregory CLEMENT [this message]
2014-02-14 11:39             ` Gregory CLEMENT
     [not found]             ` <52FE0056.2030706-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
2014-02-15 14:44               ` Wolfram Sang
2014-02-15 14:44                 ` Wolfram Sang
2014-02-13 20:36       ` [PATCH 3/5] i2c: mv64xxx: refactor send_start Wolfram Sang
2014-02-13 20:36         ` Wolfram Sang
     [not found]         ` <1392323793-4125-4-git-send-email-wsa-z923LK4zBo2bacvFa/9K2g@public.gmane.org>
2014-02-14 11:42           ` Gregory CLEMENT
2014-02-14 11:42             ` Gregory CLEMENT
2014-02-13 20:36       ` [PATCH 4/5] i2c: mv64xxx: directly call send_start when initializing transfer Wolfram Sang
2014-02-13 20:36         ` Wolfram Sang
2014-02-13 20:36       ` [PATCH 5/5] i2c: mv64xxx: refactor initialization for new msgs Wolfram Sang
2014-02-13 20:36         ` Wolfram Sang
2014-02-13 20:41       ` [PATCH 0/5] mv64xxx updates Gregory CLEMENT
2014-02-13 20:41         ` Gregory CLEMENT
     [not found]         ` <52FD2E0C.10609-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
2014-03-10 16:25           ` Wolfram Sang
2014-03-10 16:25             ` Wolfram Sang
2014-02-13 20:51       ` Thomas Petazzoni
2014-02-13 20:51         ` Thomas Petazzoni
2014-02-18 11:29         ` Maxime Ripard
2014-02-18 11:29           ` Maxime Ripard

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=52FE0056.2030706@free-electrons.com \
    --to=gregory.clement-wi1+55scjutkeb57/3fjtnbpr1lh4cv8@public.gmane.org \
    --cc=andrew-g2DYL2Zd6BY@public.gmane.org \
    --cc=ezequiel.garcia-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org \
    --cc=jason-NLaQJdtUoK4Be96aLqz0jA@public.gmane.org \
    --cc=khilman-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
    --cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
    --cc=linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=sebastian.hesselbarth-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=thomas.petazzoni-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org \
    --cc=wsa-z923LK4zBo2bacvFa/9K2g@public.gmane.org \
    /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.