* [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