Re: DSS2/PM on 3.2 broken?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Jan 13, 2012 at 3:35 PM, Paul Walmsley <paul@xxxxxxxxx> wrote:
> cc Tero, Govindraj
>
> On Thu, 12 Jan 2012, NeilBrown wrote:
>
>> On Wed, 11 Jan 2012 06:43:04 -0700 (MST) Paul Walmsley <paul@xxxxxxxxx> wrote:
>>
>> I spent some time exploring why cpuidle never drops below state 0 and found
>> out that the code explicitly disables other states when uart is active - for
>> a fairly broad definition of 'active'.
>>
>> I found the "sleep_timeout" setting and set them all to 1 second.  This meant
>> that cpuidle started working, but I got a lot of garbage characters.
>>
>
> ...
>
>> Does this really mean CPU_IDLE cannot be used when you might expect chars
>> from a serial port - e.g. GPS or Bluetooth?
>
> Hmmm.  Looking at mach-omap2/pm34xx.c and mach-omap2/cpuidle34xx.c, it
> indeed prevents even the MPU from entering a low-power state when the UART
> is active, as you write.  That doesn't seem correct.
>
> Please try the following patch.  It works fine for me on v3.2 with
> omap2plus_defconfig on a 35xx BeagleBoard.  No dropped or garbled
> characters with console use.  Not too surprising, since the UART has a
> receive FIFO to withstand interrupt servicing delays.
>
>
> - Paul
>
> From: Paul Walmsley <paul@xxxxxxxxx>
> Date: Fri, 13 Jan 2012 02:10:30 -0700
> Subject: [PATCH] ARM: OMAP3: PM: allow MPU to enter low-power states even
>  when the UART is active
>
> For some reason, both the existing OMAP3 PM code and the OMAP3 CPUIdle
> driver prevent the MPU powerdomain from entering low-power modes when
> any UART isn't asleep.  Possibly it is intended to minimize the ARM
> wakeup latency when UART activity arrives, but the UART has a FIFO
> that should handle this for most cases, with no dropped characters.  I
> may be forgetting something important, though.  And CORE/PER low-power
> states are a different matter entirely.
>
> Thanks to NeilBrown <neilb@xxxxxxx> for reporting the problem.
>
> Signed-off-by: Paul Walmsley <paul@xxxxxxxxx>
> Cc: NeilBrown <neilb@xxxxxxx>
> Cc: Joe Woodward <jw@xxxxxxxxxxxxxx>
> Cc: Tero Kristo <t-kristo@xxxxxx>
> Cc: Kevin Hilman <khilman@xxxxxx>
> Cc: Govindraj.R <govindraj.raja@xxxxxx>
> ---
>  arch/arm/mach-omap2/cpuidle34xx.c |    8 +++-----
>  arch/arm/mach-omap2/pm.h          |    1 -
>  arch/arm/mach-omap2/pm34xx.c      |   10 ----------
>  3 files changed, 3 insertions(+), 16 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/cpuidle34xx.c b/arch/arm/mach-omap2/cpuidle34xx.c
> index 942bb4f..4ef32d4 100644
> --- a/arch/arm/mach-omap2/cpuidle34xx.c
> +++ b/arch/arm/mach-omap2/cpuidle34xx.c
> @@ -183,6 +183,9 @@ static int next_valid_state(struct cpuidle_device *dev,
>                        core_deepest_state = PWRDM_POWER_OFF;
>        }
>
> +       if (!omap_uart_can_sleep())
> +               core_deepest_state = PWRDM_POWER_ON;
> +

omap_uart_can_sleep is removed part of uart runtime conversion,
and is no more available on latest mainline, looks like uart runtime
patches got merged after 3.2 tagging.

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


[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux