linux-spi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v5 1/1] OMAP2: Spi: Force CS to be in inactive state after off-mode transition
@ 2010-11-24 22:19 Gregory CLEMENT
  2010-11-25  0:49 ` Kevin Hilman
                   ` (2 more replies)
  0 siblings, 3 replies; 12+ messages in thread
From: Gregory CLEMENT @ 2010-11-24 22:19 UTC (permalink / raw)
  To: linux-omap, spi-devel-general; +Cc: David Brownell, Grant Likely, Kevin Hilman

As request by Grant Likely, there is no more cover letter. Full changelog is following.
I am still reluctant to add this changelog in the patch description, as it adds no value to
the patch itself: when it was needed I try to updat comments or patch description.
I understand that Grant Likely would need an ack from other user as this patch fix a corner case.
Kevin Hilman made a few comments on this patch so he could add his "Ack by" or at least his "Review by".


Changelog:
* Change from v1 to v2:
Rebase on linus/master (after 2.6.37-rc1)
Do some clean-up and fix indentation on both patches
Add more explanations for patch 2

* Change from v2 to v3:
Use directly resume function of spi_master instead of using function
from spi_device as Grant Likely pointed it out.
Force this transition explicitly for each CS used by a device.

* Change from v3 to v4:
Patch clean-up according to Kevin Hilman and checkpatch.
Now force CS to be in inactive state only if it was inactive when it was
suspended.

* Change from v4 to v5:
Rebase on linus/master (after 2.6.37-rc3)
Collapse some lines as pointed by Grant Likely
Fix a spelling


== CUT HERE ==
When SPI wake up from OFF mode, CS is in the wrong state: force it to the inactive state.

During the system life, I monitored the CS behavior using a oscilloscope.
I also activated debug in omap2_mcspi, so I saw when driver disable the clocks and restore context when device is not used.
Each time the CS was in the correct state.
It was only when system was put suspend to ram with off-mode activated that on resume the CS was in wrong state( ie activated).

Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
---
 drivers/spi/omap2_mcspi.c |   33 +++++++++++++++++++++++++++++++++
 1 files changed, 33 insertions(+), 0 deletions(-)

diff --git a/drivers/spi/omap2_mcspi.c b/drivers/spi/omap2_mcspi.c
index 2a651e6..dcc024a 100644
--- a/drivers/spi/omap2_mcspi.c
+++ b/drivers/spi/omap2_mcspi.c
@@ -1305,11 +1305,44 @@ static int __exit omap2_mcspi_remove(struct platform_device *pdev)
 /* work with hotplug and coldplug */
 MODULE_ALIAS("platform:omap2_mcspi");

+#ifdef	CONFIG_PM
+/* When SPI wake up from off-mode, CS is in activate state. If it was in
+ * unactive state when driver was suspend, then force it to unactive state at
+ * wake up.
+ */
+static int omap2_mcspi_resume(struct platform_device *pdev)
+{
+	struct spi_master	*master = dev_get_drvdata(&pdev->dev);
+	struct omap2_mcspi	*mcspi = spi_master_get_devdata(master);
+	struct omap2_mcspi_cs *cs;
+
+	omap2_mcspi_enable_clocks(mcspi);
+	list_for_each_entry(cs, &omap2_mcspi_ctx[master->bus_num - 1].cs,
+			    node) {
+		if ((cs->chconf0 & OMAP2_MCSPI_CHCONF_FORCE) == 0) {
+
+			/* We need to toggle CS state for OMAP take this
+			 * change in account.
+			 */
+			MOD_REG_BIT(cs->chconf0, OMAP2_MCSPI_CHCONF_FORCE, 1);
+			__raw_writel(cs->chconf0, cs->base + OMAP2_MCSPI_CHCONF0);
+			MOD_REG_BIT(cs->chconf0, OMAP2_MCSPI_CHCONF_FORCE, 0);
+			__raw_writel(cs->chconf0, cs->base + OMAP2_MCSPI_CHCONF0);
+		}
+	}
+	omap2_mcspi_disable_clocks(mcspi);
+	return 0;
+}
+#else
+#define	omap2_mcspi_resume	NULL
+#endif
+
 static struct platform_driver omap2_mcspi_driver = {
 	.driver = {
 		.name =		"omap2_mcspi",
 		.owner =	THIS_MODULE,
 	},
+	.resume =	omap2_mcspi_resume,
 	.remove =	__exit_p(omap2_mcspi_remove),
 };
 -- 1.7.0.4


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH v5 1/1] OMAP2: Spi: Force CS to be in inactive state after off-mode transition
  2010-11-24 22:19 [PATCH v5 1/1] OMAP2: Spi: Force CS to be in inactive state after off-mode transition Gregory CLEMENT
@ 2010-11-25  0:49 ` Kevin Hilman
  2010-11-25  3:55   ` David Brownell
                     ` (2 more replies)
  2010-11-25  8:58 ` Hemanth V
  2010-11-29 14:22 ` Kevin Hilman
  2 siblings, 3 replies; 12+ messages in thread
From: Kevin Hilman @ 2010-11-25  0:49 UTC (permalink / raw)
  To: Gregory CLEMENT
  Cc: linux-omap, spi-devel-general, David Brownell, Grant Likely

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

> As request by Grant Likely, there is no more cover letter. Full changelog is following.
> I am still reluctant to add this changelog in the patch description, as it adds no value to
> the patch itself: when it was needed I try to updat comments or patch description.

You're right, the changelog should not be in the patch description.
This bit of meta-description and changelog should go after the '---'
just after your signoff.  That way, git tools can still auto-apply the
email, and git ignores stuff after the '---' so it doesn't end up in the
git history.

> I understand that Grant Likely would need an ack from other user as this patch fix a corner case.
> Kevin Hilman made a few comments on this patch so he could add his "Ack by" or at least his "Review by".

I haven't actually tested it, only reviewed it, so you can add a
Reviewed by for me, but I'm not SPI-aware enough to ack this patch or
test it thoroughly.  Also,  I have some more comments below...

Also, in the last patch I suggested you do more of a save/restore of
this value instead of a restore to a hard-coded value.  IOW, save the
value in the suspend method, restore it in resume. I thought you had
agreed to that.  I'm not an SPI expert, so not sure if it makes sense,
but it seems more robust that way and more future proof.

>
> Changelog:
> * Change from v1 to v2:
> Rebase on linus/master (after 2.6.37-rc1)
> Do some clean-up and fix indentation on both patches
> Add more explanations for patch 2
>
> * Change from v2 to v3:
> Use directly resume function of spi_master instead of using function
> from spi_device as Grant Likely pointed it out.
> Force this transition explicitly for each CS used by a device.
>
> * Change from v3 to v4:
> Patch clean-up according to Kevin Hilman and checkpatch.
> Now force CS to be in inactive state only if it was inactive when it was
> suspended.
>
> * Change from v4 to v5:
> Rebase on linus/master (after 2.6.37-rc3)
> Collapse some lines as pointed by Grant Likely
> Fix a spelling
>
>
> == CUT HERE ==
> When SPI wake up from OFF mode, CS is in the wrong state: force it to the inactive state.
>
> During the system life, I monitored the CS behavior using a oscilloscope.
> I also activated debug in omap2_mcspi, so I saw when driver disable the clocks and restore context when device is not used.
> Each time the CS was in the correct state.
> It was only when system was put suspend to ram with off-mode activated that on resume the CS was in wrong state( ie activated).
>
> Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
> ---

This is where any changelog and extra info for reviewers should go.

>  drivers/spi/omap2_mcspi.c |   33 +++++++++++++++++++++++++++++++++
>  1 files changed, 33 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/spi/omap2_mcspi.c b/drivers/spi/omap2_mcspi.c
> index 2a651e6..dcc024a 100644
> --- a/drivers/spi/omap2_mcspi.c
> +++ b/drivers/spi/omap2_mcspi.c
> @@ -1305,11 +1305,44 @@ static int __exit omap2_mcspi_remove(struct platform_device *pdev)
>  /* work with hotplug and coldplug */
>  MODULE_ALIAS("platform:omap2_mcspi");
>
> +#ifdef	CONFIG_PM
> +/* When SPI wake up from off-mode, CS is in activate state. If it was in
> + * unactive state when driver was suspend, then force it to unactive state at
> + * wake up.
> + */

please fix multi-line comment style.  Search for 'multi-line' in
CodingStyle.

> +static int omap2_mcspi_resume(struct platform_device *pdev)
> +{
> +	struct spi_master	*master = dev_get_drvdata(&pdev->dev);
> +	struct omap2_mcspi	*mcspi = spi_master_get_devdata(master);
> +	struct omap2_mcspi_cs *cs;
> +
> +	omap2_mcspi_enable_clocks(mcspi);
> +	list_for_each_entry(cs, &omap2_mcspi_ctx[master->bus_num - 1].cs,
> +			    node) {
> +		if ((cs->chconf0 & OMAP2_MCSPI_CHCONF_FORCE) == 0) {
> +
> +			/* We need to toggle CS state for OMAP take this
> +			 * change in account.
> +			 */

multi-line coding style

> +			MOD_REG_BIT(cs->chconf0, OMAP2_MCSPI_CHCONF_FORCE, 1);
> +			__raw_writel(cs->chconf0, cs->base + OMAP2_MCSPI_CHCONF0);
> +			MOD_REG_BIT(cs->chconf0, OMAP2_MCSPI_CHCONF_FORCE, 0);
> +			__raw_writel(cs->chconf0, cs->base + OMAP2_MCSPI_CHCONF0);
> +		}
> +	}
> +	omap2_mcspi_disable_clocks(mcspi);
> +	return 0;
> +}
> +#else
> +#define	omap2_mcspi_resume	NULL
> +#endif
> +
>  static struct platform_driver omap2_mcspi_driver = {
>  	.driver = {
>  		.name =		"omap2_mcspi",
>  		.owner =	THIS_MODULE,
>  	},
> +	.resume =	omap2_mcspi_resume,
>  	.remove =	__exit_p(omap2_mcspi_remove),
>  };
>  -- 1.7.0.4

Kevin

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v5 1/1] OMAP2: Spi: Force CS to be in inactive state after off-mode transition
  2010-11-25  0:49 ` Kevin Hilman
@ 2010-11-25  3:55   ` David Brownell
  2010-11-29 16:59   ` Gregory CLEMENT
  2010-12-23 23:08   ` Grant Likely
  2 siblings, 0 replies; 12+ messages in thread
From: David Brownell @ 2010-11-25  3:55 UTC (permalink / raw)
  To: Gregory CLEMENT, Kevin Hilman; +Cc: spi-devel-general, linux-omap



--- On Wed, 11/24/10, Kevin Hilman <khilman@deeprootsystems.com> wrote:

>  I'm not SPI-aware enough to ack
> this patch or
> test it thoroughly.

Heh, my excuse is usually "not enough time"
or sometimes "no test setup" ... ;)

In this case I can at least ack the fix in
principle.  CS active means an active trransfer,
which must not happen during OFF  or other
suspend states.


Acked-by: David Brownell <dbrownell@users.sourceforge.net>



> Also, in the last patch I suggested you do more of a
> save/restore of
> this value instead of a restore to a hard-coded
> value.  IOW, save the
> value in the suspend method, restore it in resume.


More correct to restart
message queue processing
after resume, if it's non-empty, and to have
cleanly stopped it (between messages) before
entering suspend states like OFF.


--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v5 1/1] OMAP2: Spi: Force CS to be in inactive state after off-mode transition
  2010-11-24 22:19 [PATCH v5 1/1] OMAP2: Spi: Force CS to be in inactive state after off-mode transition Gregory CLEMENT
  2010-11-25  0:49 ` Kevin Hilman
@ 2010-11-25  8:58 ` Hemanth V
  2010-11-29 17:18   ` Gregory CLEMENT
  2010-11-29 14:22 ` Kevin Hilman
  2 siblings, 1 reply; 12+ messages in thread
From: Hemanth V @ 2010-11-25  8:58 UTC (permalink / raw)
  To: Gregory CLEMENT, linux-omap, spi-devel-general
  Cc: David Brownell, Grant Likely, Kevin Hilman

----- Original Message ----- 
From: "Gregory CLEMENT" <gregory.clement@free-electrons.com>
To: "linux-omap" <linux-omap@vger.kernel.org>; 
<spi-devel-general@lists.sourceforge.net>
Cc: "David Brownell" <dbrownell@users.sourceforge.net>; "Grant Likely" 
<grant.likely@secretlab.ca>; "Kevin Hilman" <khilman@deeprootsystems.com>
Sent: Thursday, November 25, 2010 3:49 AM
Subject: [PATCH v5 1/1] OMAP2: Spi: Force CS to be in inactive state after 
off-mode transition


> As request by Grant Likely, there is no more cover letter. Full changelog 
> is following.
> I am still reluctant to add this changelog in the patch description, as it 
> adds no value to
> the patch itself: when it was needed I try to updat comments or patch 
> description.
> I understand that Grant Likely would need an ack from other user as this 
> patch fix a corner case.
> Kevin Hilman made a few comments on this patch so he could add his "Ack 
> by" or at least his "Review by".
>

I was trying to run some tests with this patch. I find that the resume 
function registered by this patch doesnot seem to
get called during system wide suspend/resume, since spi_resume only calls 
the resume routine registered by spi client driver.
Is there something I am missing.

Thanks
Hemanth



^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v5 1/1] OMAP2: Spi: Force CS to be in inactive state after off-mode transition
  2010-11-24 22:19 [PATCH v5 1/1] OMAP2: Spi: Force CS to be in inactive state after off-mode transition Gregory CLEMENT
  2010-11-25  0:49 ` Kevin Hilman
  2010-11-25  8:58 ` Hemanth V
@ 2010-11-29 14:22 ` Kevin Hilman
  2010-11-29 17:03   ` Gregory CLEMENT
  2010-11-30  3:08   ` David Brownell
  2 siblings, 2 replies; 12+ messages in thread
From: Kevin Hilman @ 2010-11-29 14:22 UTC (permalink / raw)
  To: Gregory CLEMENT
  Cc: linux-omap, spi-devel-general, David Brownell, Grant Likely

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

> As request by Grant Likely, there is no more cover letter. Full changelog is following.
> I am still reluctant to add this changelog in the patch description, as it adds no value to
> the patch itself: when it was needed I try to updat comments or patch description.
> I understand that Grant Likely would need an ack from other user as this patch fix a corner case.
> Kevin Hilman made a few comments on this patch so he could add his "Ack by" or at least his "Review by".

A couple more comments...

>
> Changelog:
> * Change from v1 to v2:
> Rebase on linus/master (after 2.6.37-rc1)
> Do some clean-up and fix indentation on both patches
> Add more explanations for patch 2
>
> * Change from v2 to v3:
> Use directly resume function of spi_master instead of using function
> from spi_device as Grant Likely pointed it out.
> Force this transition explicitly for each CS used by a device.
>
> * Change from v3 to v4:
> Patch clean-up according to Kevin Hilman and checkpatch.
> Now force CS to be in inactive state only if it was inactive when it was
> suspended.
>
> * Change from v4 to v5:
> Rebase on linus/master (after 2.6.37-rc3)
> Collapse some lines as pointed by Grant Likely
> Fix a spelling
>
>
> == CUT HERE ==
> When SPI wake up from OFF mode, CS is in the wrong state: force it to the inactive state.
>
> During the system life, I monitored the CS behavior using a oscilloscope.
> I also activated debug in omap2_mcspi, so I saw when driver disable the clocks and restore context when device is not used.
> Each time the CS was in the correct state.
> It was only when system was put suspend to ram with off-mode activated that on resume the CS was in wrong state( ie activated).
>
> Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
> ---
>  drivers/spi/omap2_mcspi.c |   33 +++++++++++++++++++++++++++++++++
>  1 files changed, 33 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/spi/omap2_mcspi.c b/drivers/spi/omap2_mcspi.c
> index 2a651e6..dcc024a 100644
> --- a/drivers/spi/omap2_mcspi.c
> +++ b/drivers/spi/omap2_mcspi.c
> @@ -1305,11 +1305,44 @@ static int __exit omap2_mcspi_remove(struct platform_device *pdev)
>  /* work with hotplug and coldplug */
>  MODULE_ALIAS("platform:omap2_mcspi");
>
> +#ifdef	CONFIG_PM

You should use CONFIG_SUSPEND here

> +/* When SPI wake up from off-mode, CS is in activate state. If it was in
> + * unactive state when driver was suspend, then force it to unactive state at
> + * wake up.
> + */
> +static int omap2_mcspi_resume(struct platform_device *pdev)
> +{
> +	struct spi_master	*master = dev_get_drvdata(&pdev->dev);
> +	struct omap2_mcspi	*mcspi = spi_master_get_devdata(master);
> +	struct omap2_mcspi_cs *cs;
> +
> +	omap2_mcspi_enable_clocks(mcspi);
> +	list_for_each_entry(cs, &omap2_mcspi_ctx[master->bus_num - 1].cs,
> +			    node) {
> +		if ((cs->chconf0 & OMAP2_MCSPI_CHCONF_FORCE) == 0) {
> +
> +			/* We need to toggle CS state for OMAP take this
> +			 * change in account.
> +			 */
> +			MOD_REG_BIT(cs->chconf0, OMAP2_MCSPI_CHCONF_FORCE, 1);
> +			__raw_writel(cs->chconf0, cs->base + OMAP2_MCSPI_CHCONF0);
> +			MOD_REG_BIT(cs->chconf0, OMAP2_MCSPI_CHCONF_FORCE, 0);
> +			__raw_writel(cs->chconf0, cs->base + OMAP2_MCSPI_CHCONF0);
> +		}
> +	}
> +	omap2_mcspi_disable_clocks(mcspi);
> +	return 0;
> +}
> +#else
> +#define	omap2_mcspi_resume	NULL
> +#endif
> +
>  static struct platform_driver omap2_mcspi_driver = {
>  	.driver = {
>  		.name =		"omap2_mcspi",
>  		.owner =	THIS_MODULE,
>  	},
> +	.resume =	omap2_mcspi_resume,

This is adding legacy PM methods.  Instead, you should add a struct
dev_pm_ops and add the resume method there.

Kevin

>  	.remove =	__exit_p(omap2_mcspi_remove),
>  };
>  -- 1.7.0.4

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v5 1/1] OMAP2: Spi: Force CS to be in inactive state after off-mode transition
  2010-11-25  0:49 ` Kevin Hilman
  2010-11-25  3:55   ` David Brownell
@ 2010-11-29 16:59   ` Gregory CLEMENT
  2010-12-23 23:08   ` Grant Likely
  2 siblings, 0 replies; 12+ messages in thread
From: Gregory CLEMENT @ 2010-11-29 16:59 UTC (permalink / raw)
  To: Kevin Hilman; +Cc: linux-omap, spi-devel-general, David Brownell, Grant Likely

On 11/25/2010 01:49 AM, Kevin Hilman wrote:
> This bit of meta-description and changelog should go after the '---'
> just after your signoff.  That way, git tools can still auto-apply the
> email, and git ignores stuff after the '---' so it doesn't end up in the
> git history.

Thanks for the advice

>> I understand that Grant Likely would need an ack from other user as this patch fix a corner case.
>> Kevin Hilman made a few comments on this patch so he could add his "Ack by" or at least his "Review by".
> 
> I haven't actually tested it, only reviewed it, so you can add a
> Reviewed by for me, but I'm not SPI-aware enough to ack this patch or
> test it thoroughly.  Also,  I have some more comments below...

Thanks I will add it in my next version.

> Also, in the last patch I suggested you do more of a save/restore of
> this value instead of a restore to a hard-coded value.  IOW, save the
> value in the suspend method, restore it in resume. I thought you had
> agreed to that.  I'm not an SPI expert, so not sure if it makes sense,
> but it seems more robust that way and more future proof.

Well I took in account your suggestion and I didn't restore anymore an
hardcore value. The state of the CS is already store in cs->chconf0, so
now I use it. The tricky part is omap2_mcspi_enable_clocks restore the
register when clock was disable, but for OMAP2_MCSPI_CHCONF_FORCE bit, we
had to toggle it. When resumed from OFF mode the OMAP2_MCSPI_CHCONF0
register have default value, which means that OMAP2_MCSPI_CHCONF_FORCE
 is 0. So if we want that OMAP2_MCSPI_CHCONF_FORCE=0 is taken in account
we have to first write a 1 and then a 0. But if we want that
OMAP2_MCSPI_CHCONF_FORCE=1, then we have nothing more to do, because in
omap2_mcspi_enable_clocks this bit was change from 0 (its default value)
to 1. That's why I only do a change when OMAP2_MCSPI_CHCONF_FORCE have to
be changed to 0.
I suppose this means that I had to add more comment around my code about
it.

>> When SPI wake up from OFF mode, CS is in the wrong state: force it to the inactive state.
>>
>> During the system life, I monitored the CS behavior using a oscilloscope.
>> I also activated debug in omap2_mcspi, so I saw when driver disable the clocks and restore context when device is not used.
>> Each time the CS was in the correct state.
>> It was only when system was put suspend to ram with off-mode activated that on resume the CS was in wrong state( ie activated).
>>
>> Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
>> ---
> 
> This is where any changelog and extra info for reviewers should go.
> 
>>  drivers/spi/omap2_mcspi.c |   33 +++++++++++++++++++++++++++++++++
>>  1 files changed, 33 insertions(+), 0 deletions(-)
>>
>> diff --git a/drivers/spi/omap2_mcspi.c b/drivers/spi/omap2_mcspi.c
>> index 2a651e6..dcc024a 100644
>> --- a/drivers/spi/omap2_mcspi.c
>> +++ b/drivers/spi/omap2_mcspi.c
>> @@ -1305,11 +1305,44 @@ static int __exit omap2_mcspi_remove(struct platform_device *pdev)
>>  /* work with hotplug and coldplug */
>>  MODULE_ALIAS("platform:omap2_mcspi");
>>
>> +#ifdef	CONFIG_PM
>> +/* When SPI wake up from off-mode, CS is in activate state. If it was in
>> + * unactive state when driver was suspend, then force it to unactive state at
>> + * wake up.
>> + */
> 
> please fix multi-line comment style.  Search for 'multi-line' in
> CodingStyle.

OK, I though CodingStyle was about burning GNU coding standards ;)
More seriously I keep the same style that other multi-line comment
in this file. But I have no problem to change it.

> 
>> +static int omap2_mcspi_resume(struct platform_device *pdev)
>> +{
>> +	struct spi_master	*master = dev_get_drvdata(&pdev->dev);
>> +	struct omap2_mcspi	*mcspi = spi_master_get_devdata(master);
>> +	struct omap2_mcspi_cs *cs;
>> +
>> +	omap2_mcspi_enable_clocks(mcspi);
>> +	list_for_each_entry(cs, &omap2_mcspi_ctx[master->bus_num - 1].cs,
>> +			    node) {
>> +		if ((cs->chconf0 & OMAP2_MCSPI_CHCONF_FORCE) == 0) {
>> +
>> +			/* We need to toggle CS state for OMAP take this
>> +			 * change in account.
>> +			 */
> 
> multi-line coding style
> 
>> +			MOD_REG_BIT(cs->chconf0, OMAP2_MCSPI_CHCONF_FORCE, 1);
>> +			__raw_writel(cs->chconf0, cs->base + OMAP2_MCSPI_CHCONF0);
>> +			MOD_REG_BIT(cs->chconf0, OMAP2_MCSPI_CHCONF_FORCE, 0);
>> +			__raw_writel(cs->chconf0, cs->base + OMAP2_MCSPI_CHCONF0);
>> +		}
>> +	}
>> +	omap2_mcspi_disable_clocks(mcspi);
>> +	return 0;
>> +}
>> +#else
>> +#define	omap2_mcspi_resume	NULL
>> +#endif
>> +
>>  static struct platform_driver omap2_mcspi_driver = {
>>  	.driver = {
>>  		.name =		"omap2_mcspi",
>>  		.owner =	THIS_MODULE,
>>  	},
>> +	.resume =	omap2_mcspi_resume,
>>  	.remove =	__exit_p(omap2_mcspi_remove),
>>  };
>>  -- 1.7.0.4
> 
> Kevin


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

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v5 1/1] OMAP2: Spi: Force CS to be in inactive state after off-mode transition
  2010-11-29 14:22 ` Kevin Hilman
@ 2010-11-29 17:03   ` Gregory CLEMENT
  2010-11-30  3:08   ` David Brownell
  1 sibling, 0 replies; 12+ messages in thread
From: Gregory CLEMENT @ 2010-11-29 17:03 UTC (permalink / raw)
  To: Kevin Hilman; +Cc: linux-omap, spi-devel-general, David Brownell, Grant Likely

On 11/29/2010 03:22 PM, Kevin Hilman wrote:
> Gregory CLEMENT <gregory.clement@free-electrons.com> writes:
> 
>> As request by Grant Likely, there is no more cover letter. Full changelog is following.
>> I am still reluctant to add this changelog in the patch description, as it adds no value to
>> the patch itself: when it was needed I try to updat comments or patch description.
>> I understand that Grant Likely would need an ack from other user as this patch fix a corner case.
>> Kevin Hilman made a few comments on this patch so he could add his "Ack by" or at least his "Review by".
> 
> A couple more comments...
> 
>>
>> Changelog:
>> * Change from v1 to v2:
>> Rebase on linus/master (after 2.6.37-rc1)
>> Do some clean-up and fix indentation on both patches
>> Add more explanations for patch 2
>>
>> * Change from v2 to v3:
>> Use directly resume function of spi_master instead of using function
>> from spi_device as Grant Likely pointed it out.
>> Force this transition explicitly for each CS used by a device.
>>
>> * Change from v3 to v4:
>> Patch clean-up according to Kevin Hilman and checkpatch.
>> Now force CS to be in inactive state only if it was inactive when it was
>> suspended.
>>
>> * Change from v4 to v5:
>> Rebase on linus/master (after 2.6.37-rc3)
>> Collapse some lines as pointed by Grant Likely
>> Fix a spelling
>>
>>
>> == CUT HERE ==
>> When SPI wake up from OFF mode, CS is in the wrong state: force it to the inactive state.
>>
>> During the system life, I monitored the CS behavior using a oscilloscope.
>> I also activated debug in omap2_mcspi, so I saw when driver disable the clocks and restore context when device is not used.
>> Each time the CS was in the correct state.
>> It was only when system was put suspend to ram with off-mode activated that on resume the CS was in wrong state( ie activated).
>>
>> Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
>> ---
>>  drivers/spi/omap2_mcspi.c |   33 +++++++++++++++++++++++++++++++++
>>  1 files changed, 33 insertions(+), 0 deletions(-)
>>
>> diff --git a/drivers/spi/omap2_mcspi.c b/drivers/spi/omap2_mcspi.c
>> index 2a651e6..dcc024a 100644
>> --- a/drivers/spi/omap2_mcspi.c
>> +++ b/drivers/spi/omap2_mcspi.c
>> @@ -1305,11 +1305,44 @@ static int __exit omap2_mcspi_remove(struct platform_device *pdev)
>>  /* work with hotplug and coldplug */
>>  MODULE_ALIAS("platform:omap2_mcspi");
>>
>> +#ifdef	CONFIG_PM
> 
> You should use CONFIG_SUSPEND here

OK I will do this.

> 
>> +/* When SPI wake up from off-mode, CS is in activate state. If it was in
>> + * unactive state when driver was suspend, then force it to unactive state at
>> + * wake up.
>> + */
>> +static int omap2_mcspi_resume(struct platform_device *pdev)
>> +{
>> +	struct spi_master	*master = dev_get_drvdata(&pdev->dev);
>> +	struct omap2_mcspi	*mcspi = spi_master_get_devdata(master);
>> +	struct omap2_mcspi_cs *cs;
>> +
>> +	omap2_mcspi_enable_clocks(mcspi);
>> +	list_for_each_entry(cs, &omap2_mcspi_ctx[master->bus_num - 1].cs,
>> +			    node) {
>> +		if ((cs->chconf0 & OMAP2_MCSPI_CHCONF_FORCE) == 0) {
>> +
>> +			/* We need to toggle CS state for OMAP take this
>> +			 * change in account.
>> +			 */
>> +			MOD_REG_BIT(cs->chconf0, OMAP2_MCSPI_CHCONF_FORCE, 1);
>> +			__raw_writel(cs->chconf0, cs->base + OMAP2_MCSPI_CHCONF0);
>> +			MOD_REG_BIT(cs->chconf0, OMAP2_MCSPI_CHCONF_FORCE, 0);
>> +			__raw_writel(cs->chconf0, cs->base + OMAP2_MCSPI_CHCONF0);
>> +		}
>> +	}
>> +	omap2_mcspi_disable_clocks(mcspi);
>> +	return 0;
>> +}
>> +#else
>> +#define	omap2_mcspi_resume	NULL
>> +#endif
>> +
>>  static struct platform_driver omap2_mcspi_driver = {
>>  	.driver = {
>>  		.name =		"omap2_mcspi",
>>  		.owner =	THIS_MODULE,
>>  	},
>> +	.resume =	omap2_mcspi_resume,
> 
> This is adding legacy PM methods.  Instead, you should add a struct
> dev_pm_ops and add the resume method there.

OK, I shouldn't copy and paste an old driver!
Thanks for your advices.

> 
> Kevin
> 
>>  	.remove =	__exit_p(omap2_mcspi_remove),
>>  };
>>  -- 1.7.0.4


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

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v5 1/1] OMAP2: Spi: Force CS to be in inactive state after off-mode transition
  2010-11-25  8:58 ` Hemanth V
@ 2010-11-29 17:18   ` Gregory CLEMENT
  0 siblings, 0 replies; 12+ messages in thread
From: Gregory CLEMENT @ 2010-11-29 17:18 UTC (permalink / raw)
  To: Hemanth V
  Cc: linux-omap, spi-devel-general, David Brownell, Grant Likely,
	Kevin Hilman

On 11/25/2010 09:58 AM, Hemanth V wrote:
> ----- Original Message ----- 
> From: "Gregory CLEMENT" <gregory.clement@free-electrons.com>
> To: "linux-omap" <linux-omap@vger.kernel.org>; 
> <spi-devel-general@lists.sourceforge.net>
> Cc: "David Brownell" <dbrownell@users.sourceforge.net>; "Grant Likely" 
> <grant.likely@secretlab.ca>; "Kevin Hilman" <khilman@deeprootsystems.com>
> Sent: Thursday, November 25, 2010 3:49 AM
> Subject: [PATCH v5 1/1] OMAP2: Spi: Force CS to be in inactive state after 
> off-mode transition
> 
> 
>> As request by Grant Likely, there is no more cover letter. Full changelog 
>> is following.
>> I am still reluctant to add this changelog in the patch description, as it 
>> adds no value to
>> the patch itself: when it was needed I try to updat comments or patch 
>> description.
>> I understand that Grant Likely would need an ack from other user as this 
>> patch fix a corner case.
>> Kevin Hilman made a few comments on this patch so he could add his "Ack 
>> by" or at least his "Review by".
>>
> 
> I was trying to run some tests with this patch. I find that the resume 
> function registered by this patch doesnot seem to
> get called during system wide suspend/resume, since spi_resume only calls 
> the resume routine registered by spi client driver.
> Is there something I am missing.

In fact the resume function for this driver won't be called by spi bus but by
platform bus. Indeed this function is registered in a platform_driver structure.

> 
> Thanks
> Hemanth
> 
> 


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

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v5 1/1] OMAP2: Spi: Force CS to be in inactive state after off-mode transition
  2010-11-29 14:22 ` Kevin Hilman
  2010-11-29 17:03   ` Gregory CLEMENT
@ 2010-11-30  3:08   ` David Brownell
  2010-11-30  8:26     ` Gregory CLEMENT
  1 sibling, 1 reply; 12+ messages in thread
From: David Brownell @ 2010-11-30  3:08 UTC (permalink / raw)
  To: Gregory CLEMENT, Kevin Hilman; +Cc: linux-omap, spi-devel-general, Grant Likely

> > Now force CS to be in inactive state only if it was
> inactive when it was suspended.

Note that it's a bug if CS is active in
any suspend state (including OFF).  That
strongly suggests $SUBJECT is an incomplete
workaround for that other bug...

> >
> > When SPI wake up from OFF mode, CS is in the wrong
> state: force it to the inactive state.

Best report the bug that the suspend/OFF state
was mis-handled...  That is, it didn't
correctly ENTER that OFF mode...

In fact ... I'd like to see that fixed more
than the $SUBJECT issue, so the root cause
gets resolved...

CS should only be active while a SPI message
is being processed, and such processing must
have completed before suspend/OFF/... starts



^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v5 1/1] OMAP2: Spi: Force CS to be in inactive state after off-mode transition
  2010-11-30  3:08   ` David Brownell
@ 2010-11-30  8:26     ` Gregory CLEMENT
  0 siblings, 0 replies; 12+ messages in thread
From: Gregory CLEMENT @ 2010-11-30  8:26 UTC (permalink / raw)
  To: David Brownell; +Cc: Kevin Hilman, linux-omap, spi-devel-general, Grant Likely

On 11/30/2010 04:08 AM, David Brownell wrote:
>>> Now force CS to be in inactive state only if it was
>> inactive when it was suspended.
> 
> Note that it's a bug if CS is active in
> any suspend state (including OFF).  That
> strongly suggests $SUBJECT is an incomplete
> workaround for that other bug...
> 

It is not the case, at least it is not what we
observed. In suspend state, CS is inactive.

>>>
>>> When SPI wake up from OFF mode, CS is in the wrong
>> state: force it to the inactive state.
> 
> Best report the bug that the suspend/OFF state
> was mis-handled...  That is, it didn't
> correctly ENTER that OFF mode...
> 
> In fact ... I'd like to see that fixed more
> than the $SUBJECT issue, so the root cause
> gets resolved...

As far as I know, it enter correctly that OFF mode.
It is only at wake up, that CS become active while
there is no SPI message being processed. It is the
point of my patch.

My first patch version forced unconditionally CS to
inactive state at wake up. It was correct from the
point of view of the SPI but not for suspend/resume.
Resume should only restore the state of the driver
just before suspend. If resume force the inactive
state it could mask a bug in the suspend path.
But as I wrote before, as far as I know there is no
bug when driver enter suspend mode, at this moment
CS is inactive.

> 
> CS should only be active while a SPI message
> is being processed, and such processing must
> have completed before suspend/OFF/... starts
> 
I agree and this driver seems to respect this point.

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

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v5 1/1] OMAP2: Spi: Force CS to be in inactive state after off-mode transition
  2010-11-25  0:49 ` Kevin Hilman
  2010-11-25  3:55   ` David Brownell
  2010-11-29 16:59   ` Gregory CLEMENT
@ 2010-12-23 23:08   ` Grant Likely
  2010-12-24 10:38     ` Gregory CLEMENT
  2 siblings, 1 reply; 12+ messages in thread
From: Grant Likely @ 2010-12-23 23:08 UTC (permalink / raw)
  To: Kevin Hilman
  Cc: Gregory CLEMENT, linux-omap, spi-devel-general, David Brownell

On Wed, Nov 24, 2010 at 04:49:47PM -0800, Kevin Hilman wrote:
> Gregory CLEMENT <gregory.clement@free-electrons.com> writes:
> 
> > As request by Grant Likely, there is no more cover letter. Full changelog is following.
> > I am still reluctant to add this changelog in the patch description, as it adds no value to
> > the patch itself: when it was needed I try to updat comments or patch description.
> 
> You're right, the changelog should not be in the patch description.
> This bit of meta-description and changelog should go after the '---'
> just after your signoff.  That way, git tools can still auto-apply the
> email, and git ignores stuff after the '---' so it doesn't end up in the
> git history.

Actually, I used to have the same opinion, but dwmw2 clued me in that
it really is valuable and proper to have the revision history and
changelog in the patch description.  When looking back at what
actually got committed into Linus' tree, the changelog gives hints as
to which exact version of the patch got committed (for instance, if a
v6 got merged, but a v7 was also posted that didn't get merged.)

BTW, this thread has some discussion about this patch not actually
working correctly.  What is the state?  Should this version get
merged, or do I need to wait for a v6?

g.

> 
> > I understand that Grant Likely would need an ack from other user as this patch fix a corner case.
> > Kevin Hilman made a few comments on this patch so he could add his "Ack by" or at least his "Review by".
> 
> I haven't actually tested it, only reviewed it, so you can add a
> Reviewed by for me, but I'm not SPI-aware enough to ack this patch or
> test it thoroughly.  Also,  I have some more comments below...
> 
> Also, in the last patch I suggested you do more of a save/restore of
> this value instead of a restore to a hard-coded value.  IOW, save the
> value in the suspend method, restore it in resume. I thought you had
> agreed to that.  I'm not an SPI expert, so not sure if it makes sense,
> but it seems more robust that way and more future proof.
> 
> >
> > Changelog:
> > * Change from v1 to v2:
> > Rebase on linus/master (after 2.6.37-rc1)
> > Do some clean-up and fix indentation on both patches
> > Add more explanations for patch 2
> >
> > * Change from v2 to v3:
> > Use directly resume function of spi_master instead of using function
> > from spi_device as Grant Likely pointed it out.
> > Force this transition explicitly for each CS used by a device.
> >
> > * Change from v3 to v4:
> > Patch clean-up according to Kevin Hilman and checkpatch.
> > Now force CS to be in inactive state only if it was inactive when it was
> > suspended.
> >
> > * Change from v4 to v5:
> > Rebase on linus/master (after 2.6.37-rc3)
> > Collapse some lines as pointed by Grant Likely
> > Fix a spelling
> >
> >
> > == CUT HERE ==
> > When SPI wake up from OFF mode, CS is in the wrong state: force it to the inactive state.
> >
> > During the system life, I monitored the CS behavior using a oscilloscope.
> > I also activated debug in omap2_mcspi, so I saw when driver disable the clocks and restore context when device is not used.
> > Each time the CS was in the correct state.
> > It was only when system was put suspend to ram with off-mode activated that on resume the CS was in wrong state( ie activated).
> >
> > Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
> > ---
> 
> This is where any changelog and extra info for reviewers should go.
> 
> >  drivers/spi/omap2_mcspi.c |   33 +++++++++++++++++++++++++++++++++
> >  1 files changed, 33 insertions(+), 0 deletions(-)
> >
> > diff --git a/drivers/spi/omap2_mcspi.c b/drivers/spi/omap2_mcspi.c
> > index 2a651e6..dcc024a 100644
> > --- a/drivers/spi/omap2_mcspi.c
> > +++ b/drivers/spi/omap2_mcspi.c
> > @@ -1305,11 +1305,44 @@ static int __exit omap2_mcspi_remove(struct platform_device *pdev)
> >  /* work with hotplug and coldplug */
> >  MODULE_ALIAS("platform:omap2_mcspi");
> >
> > +#ifdef	CONFIG_PM
> > +/* When SPI wake up from off-mode, CS is in activate state. If it was in
> > + * unactive state when driver was suspend, then force it to unactive state at
> > + * wake up.
> > + */
> 
> please fix multi-line comment style.  Search for 'multi-line' in
> CodingStyle.
> 
> > +static int omap2_mcspi_resume(struct platform_device *pdev)
> > +{
> > +	struct spi_master	*master = dev_get_drvdata(&pdev->dev);
> > +	struct omap2_mcspi	*mcspi = spi_master_get_devdata(master);
> > +	struct omap2_mcspi_cs *cs;
> > +
> > +	omap2_mcspi_enable_clocks(mcspi);
> > +	list_for_each_entry(cs, &omap2_mcspi_ctx[master->bus_num - 1].cs,
> > +			    node) {
> > +		if ((cs->chconf0 & OMAP2_MCSPI_CHCONF_FORCE) == 0) {
> > +
> > +			/* We need to toggle CS state for OMAP take this
> > +			 * change in account.
> > +			 */
> 
> multi-line coding style
> 
> > +			MOD_REG_BIT(cs->chconf0, OMAP2_MCSPI_CHCONF_FORCE, 1);
> > +			__raw_writel(cs->chconf0, cs->base + OMAP2_MCSPI_CHCONF0);
> > +			MOD_REG_BIT(cs->chconf0, OMAP2_MCSPI_CHCONF_FORCE, 0);
> > +			__raw_writel(cs->chconf0, cs->base + OMAP2_MCSPI_CHCONF0);
> > +		}
> > +	}
> > +	omap2_mcspi_disable_clocks(mcspi);
> > +	return 0;
> > +}
> > +#else
> > +#define	omap2_mcspi_resume	NULL
> > +#endif
> > +
> >  static struct platform_driver omap2_mcspi_driver = {
> >  	.driver = {
> >  		.name =		"omap2_mcspi",
> >  		.owner =	THIS_MODULE,
> >  	},
> > +	.resume =	omap2_mcspi_resume,
> >  	.remove =	__exit_p(omap2_mcspi_remove),
> >  };
> >  -- 1.7.0.4
> 
> Kevin

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v5 1/1] OMAP2: Spi: Force CS to be in inactive state after off-mode transition
  2010-12-23 23:08   ` Grant Likely
@ 2010-12-24 10:38     ` Gregory CLEMENT
  0 siblings, 0 replies; 12+ messages in thread
From: Gregory CLEMENT @ 2010-12-24 10:38 UTC (permalink / raw)
  To: Grant Likely; +Cc: Kevin Hilman, linux-omap, spi-devel-general, David Brownell

On 12/24/2010 12:08 AM, Grant Likely wrote:
> On Wed, Nov 24, 2010 at 04:49:47PM -0800, Kevin Hilman wrote:
>> Gregory CLEMENT <gregory.clement@free-electrons.com> writes:
>>
>>> As request by Grant Likely, there is no more cover letter. Full changelog is following.
>>> I am still reluctant to add this changelog in the patch description, as it adds no value to
>>> the patch itself: when it was needed I try to updat comments or patch description.
>>
>> You're right, the changelog should not be in the patch description.
>> This bit of meta-description and changelog should go after the '---'
>> just after your signoff.  That way, git tools can still auto-apply the
>> email, and git ignores stuff after the '---' so it doesn't end up in the
>> git history.
> 
> Actually, I used to have the same opinion, but dwmw2 clued me in that
> it really is valuable and proper to have the revision history and
> changelog in the patch description.  When looking back at what
> actually got committed into Linus' tree, the changelog gives hints as
> to which exact version of the patch got committed (for instance, if a
> v6 got merged, but a v7 was also posted that didn't get merged.)
> 
OK if it is the rule for spi subsystem, I will conform to it, and I will
add my changelog in the patch description.

> BTW, this thread has some discussion about this patch not actually
> working correctly.  What is the state?  Should this version get
> merged, or do I need to wait for a v6?
Well, I tried to answer to each points to Kevin and to David Brownell. I
was waiting for some feedback. I didn't realize it was already near a
month ago, so it should be OK. Then I will insert the last comments of
Kevin and release the v6.

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

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2010-12-24 10:38 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-11-24 22:19 [PATCH v5 1/1] OMAP2: Spi: Force CS to be in inactive state after off-mode transition Gregory CLEMENT
2010-11-25  0:49 ` Kevin Hilman
2010-11-25  3:55   ` David Brownell
2010-11-29 16:59   ` Gregory CLEMENT
2010-12-23 23:08   ` Grant Likely
2010-12-24 10:38     ` Gregory CLEMENT
2010-11-25  8:58 ` Hemanth V
2010-11-29 17:18   ` Gregory CLEMENT
2010-11-29 14:22 ` Kevin Hilman
2010-11-29 17:03   ` Gregory CLEMENT
2010-11-30  3:08   ` David Brownell
2010-11-30  8:26     ` Gregory CLEMENT

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).