public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 09/23] mfd/db8500-prcmu: tweak for modem wakeup
@ 2011-08-12  8:28 Linus Walleij
  2011-10-03 15:52 ` Samuel Ortiz
  0 siblings, 1 reply; 4+ messages in thread
From: Linus Walleij @ 2011-08-12  8:28 UTC (permalink / raw)
  To: Samuel Ortiz, linux-kernel; +Cc: Lee Jones, Mattias Nilsson, Linus Walleij

From: Mattias Nilsson <mattias.i.nilsson@stericsson.com>

This is a tweak for the case where the modem goes to sleep while
emitting the AC_WAKE_ACK anyway. Also print the modem errors as
critical, since they jeopardize the entire platform when they
occur.

Signed-off-by: Mattias Nilsson <mattias.i.nilsson@stericsson.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
---
 drivers/mfd/db8500-prcmu.c |   32 ++++++++++++++++++++++++++++----
 1 files changed, 28 insertions(+), 4 deletions(-)

diff --git a/drivers/mfd/db8500-prcmu.c b/drivers/mfd/db8500-prcmu.c
index 95498f8..cb58e44 100644
--- a/drivers/mfd/db8500-prcmu.c
+++ b/drivers/mfd/db8500-prcmu.c
@@ -1745,6 +1745,7 @@ int prcmu_abb_write(u8 slave, u8 reg, u8 *value, u8 size)
 void prcmu_ac_wake_req(void)
 {
 	u32 val;
+	u32 status;
 
 	mutex_lock(&mb0_transfer.ac_wake_lock);
 
@@ -1754,11 +1755,34 @@ void prcmu_ac_wake_req(void)
 
 	atomic_set(&ac_wake_req_state, 1);
 
+retry:
 	writel((val | PRCM_HOSTACCESS_REQ_HOSTACCESS_REQ), PRCM_HOSTACCESS_REQ);
 
 	if (!wait_for_completion_timeout(&mb0_transfer.ac_wake_work,
-			msecs_to_jiffies(20000))) {
-		pr_err("prcmu: %s timed out (20 s) waiting for a reply.\n",
+			msecs_to_jiffies(5000))) {
+		panic("prcmu: %s timed out (5 s) waiting for a reply.\n",
+			__func__);
+		goto unlock_and_return;
+	}
+
+	/*
+	 * The modem can generate an AC_WAKE_ACK, and then still go to sleep.
+	 * As a workaround, we wait, and then check that the modem is indeed
+	 * awake (in terms of the value of the PRCM_MOD_AWAKE_STATUS
+	 * register, which may not be the whole truth).
+	 */
+	udelay(400);
+	status = (readl(PRCM_MOD_AWAKE_STATUS) & BITS(0, 2));
+	if (status != (PRCM_MOD_AWAKE_STATUS_PRCM_MOD_AAPD_AWAKE |
+			PRCM_MOD_AWAKE_STATUS_PRCM_MOD_COREPD_AWAKE)) {
+		pr_err("prcmu: %s received ack, but modem not awake (0x%X).\n",
+			__func__, status);
+		udelay(1200);
+		writel(val, PRCM_HOSTACCESS_REQ);
+		if (wait_for_completion_timeout(&mb0_transfer.ac_wake_work,
+				msecs_to_jiffies(5000)))
+			goto retry;
+		panic("prcmu: %s timed out (5 s) waiting for AC_SLEEP_ACK.\n",
 			__func__);
 	}
 
@@ -1783,8 +1807,8 @@ void prcmu_ac_sleep_req()
 		PRCM_HOSTACCESS_REQ);
 
 	if (!wait_for_completion_timeout(&mb0_transfer.ac_wake_work,
-			msecs_to_jiffies(20000))) {
-		pr_err("prcmu: %s timed out (20 s) waiting for a reply.\n",
+			msecs_to_jiffies(5000))) {
+		panic("prcmu: %s timed out (5 s) waiting for a reply.\n",
 			__func__);
 	}
 
-- 
1.7.3.2


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

* Re: [PATCH 09/23] mfd/db8500-prcmu: tweak for modem wakeup
  2011-08-12  8:28 [PATCH 09/23] mfd/db8500-prcmu: tweak for modem wakeup Linus Walleij
@ 2011-10-03 15:52 ` Samuel Ortiz
  2011-10-10 10:31   ` Samuel Ortiz
  0 siblings, 1 reply; 4+ messages in thread
From: Samuel Ortiz @ 2011-10-03 15:52 UTC (permalink / raw)
  To: Linus Walleij; +Cc: linux-kernel, Lee Jones, Mattias Nilsson, Linus Walleij

Hi Linus,

On Fri, Aug 12, 2011 at 10:28:43AM +0200, Linus Walleij wrote:
> @@ -1754,11 +1755,34 @@ void prcmu_ac_wake_req(void)
>  
>  	atomic_set(&ac_wake_req_state, 1);
>  
> +retry:
>  	writel((val | PRCM_HOSTACCESS_REQ_HOSTACCESS_REQ), PRCM_HOSTACCESS_REQ);
>  
>  	if (!wait_for_completion_timeout(&mb0_transfer.ac_wake_work,
> -			msecs_to_jiffies(20000))) {
> -		pr_err("prcmu: %s timed out (20 s) waiting for a reply.\n",
> +			msecs_to_jiffies(5000))) {
> +		panic("prcmu: %s timed out (5 s) waiting for a reply.\n",
> +			__func__);
panic(), really ?


> @@ -1783,8 +1807,8 @@ void prcmu_ac_sleep_req()
>  		PRCM_HOSTACCESS_REQ);
>  
>  	if (!wait_for_completion_timeout(&mb0_transfer.ac_wake_work,
> -			msecs_to_jiffies(20000))) {
> -		pr_err("prcmu: %s timed out (20 s) waiting for a reply.\n",
> +			msecs_to_jiffies(5000))) {
> +		panic("prcmu: %s timed out (5 s) waiting for a reply.\n",
Ditto.

Cheers,
Samuel.

-- 
Intel Open Source Technology Centre
http://oss.intel.com/

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

* Re: [PATCH 09/23] mfd/db8500-prcmu: tweak for modem wakeup
  2011-10-03 15:52 ` Samuel Ortiz
@ 2011-10-10 10:31   ` Samuel Ortiz
  2011-10-10 11:05     ` Linus Walleij
  0 siblings, 1 reply; 4+ messages in thread
From: Samuel Ortiz @ 2011-10-10 10:31 UTC (permalink / raw)
  To: Linus Walleij; +Cc: linux-kernel, Lee Jones, Mattias Nilsson, Linus Walleij

Hi Linus,

On Mon, Oct 03, 2011 at 05:52:07PM +0200, Samuel Ortiz wrote:
> Hi Linus,
> 
> On Fri, Aug 12, 2011 at 10:28:43AM +0200, Linus Walleij wrote:
> > @@ -1754,11 +1755,34 @@ void prcmu_ac_wake_req(void)
> >  
> >  	atomic_set(&ac_wake_req_state, 1);
> >  
> > +retry:
> >  	writel((val | PRCM_HOSTACCESS_REQ_HOSTACCESS_REQ), PRCM_HOSTACCESS_REQ);
> >  
> >  	if (!wait_for_completion_timeout(&mb0_transfer.ac_wake_work,
> > -			msecs_to_jiffies(20000))) {
> > -		pr_err("prcmu: %s timed out (20 s) waiting for a reply.\n",
> > +			msecs_to_jiffies(5000))) {
> > +		panic("prcmu: %s timed out (5 s) waiting for a reply.\n",
> > +			__func__);
> panic(), really ?
What about this one. Do we really want to panic here ?

Cheers,
Samuel.

-- 
Intel Open Source Technology Centre
http://oss.intel.com/

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

* Re: [PATCH 09/23] mfd/db8500-prcmu: tweak for modem wakeup
  2011-10-10 10:31   ` Samuel Ortiz
@ 2011-10-10 11:05     ` Linus Walleij
  0 siblings, 0 replies; 4+ messages in thread
From: Linus Walleij @ 2011-10-10 11:05 UTC (permalink / raw)
  To: Samuel Ortiz; +Cc: Linus Walleij, linux-kernel, Lee Jones, Mattias Nilsson

On Mon, Oct 10, 2011 at 12:31 PM, Samuel Ortiz <sameo@linux.intel.com> wrote:

> Hi Linus,
>> >     if (!wait_for_completion_timeout(&mb0_transfer.ac_wake_work,
>> > -                   msecs_to_jiffies(20000))) {
>> > -           pr_err("prcmu: %s timed out (20 s) waiting for a reply.\n",
>> > +                   msecs_to_jiffies(5000))) {
>> > +           panic("prcmu: %s timed out (5 s) waiting for a reply.\n",
>> > +                   __func__);
>> panic(), really ?
>
> What about this one. Do we really want to panic here ?

Oh I must have lost that patch I wrote converting them all
to pr_crit(). Just sent it out, sorry about this.

Linus Walleij

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

end of thread, other threads:[~2011-10-10 11:05 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-08-12  8:28 [PATCH 09/23] mfd/db8500-prcmu: tweak for modem wakeup Linus Walleij
2011-10-03 15:52 ` Samuel Ortiz
2011-10-10 10:31   ` Samuel Ortiz
2011-10-10 11:05     ` Linus Walleij

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox