lkml.org 
[lkml]   [2021]   [Jun]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.12 077/161] bus: ti-sysc: Fix flakey idling of uarts and stop using swsup_sidle_act
    Date
    From: Tony Lindgren <tony@atomide.com>

    [ Upstream commit c8692ad416dcc420ce1b403596a425c8f4c2720b ]

    Looks like the swsup_sidle_act quirk handling is unreliable for serial
    ports. The serial ports just eventually stop idling until woken up and
    re-idled again. As the serial port not idling blocks any deeper SoC idle
    states, it's adds an annoying random flakeyness for power management.

    Let's just switch to swsup_sidle quirk instead like we already do for
    omap3 uarts. This means we manually idle the port instead of trying to
    use the hardware autoidle features when not in use.

    For more details on why the serial ports have been using swsup_idle_act,
    see commit 66dde54e978a ("ARM: OMAP2+: hwmod-data: UART IP needs software
    control to manage sidle modes"). It seems that the swsup_idle_act quirk
    handling is not enough though, and for example the TI Android kernel
    changed to using swsup_sidle with commit 77c34c84e1e0 ("OMAP4: HWMOD:
    UART1: disable smart-idle.").

    Fixes: b4a9a7a38917 ("bus: ti-sysc: Handle swsup idle mode quirks")
    Cc: Carl Philipp Klemm <philipp@uvos.xyz>
    Cc: Ivan Jelincic <parazyd@dyne.org>
    Cc: Merlijn Wajer <merlijn@wizzup.org>
    Cc: Pavel Machek <pavel@ucw.cz>
    Cc: Sebastian Reichel <sre@kernel.org>
    Cc: Sicelo A. Mhlongo <absicsz@gmail.com>
    Signed-off-by: Tony Lindgren <tony@atomide.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/bus/ti-sysc.c | 4 ++--
    1 file changed, 2 insertions(+), 2 deletions(-)

    diff --git a/drivers/bus/ti-sysc.c b/drivers/bus/ti-sysc.c
    index 49c47b939f21..30e9b700273e 100644
    --- a/drivers/bus/ti-sysc.c
    +++ b/drivers/bus/ti-sysc.c
    @@ -1454,9 +1454,9 @@ static const struct sysc_revision_quirk sysc_revision_quirks[] = {
    SYSC_QUIRK_SWSUP_SIDLE | SYSC_QUIRK_LEGACY_IDLE),
    /* Uarts on omap4 and later */
    SYSC_QUIRK("uart", 0, 0x50, 0x54, 0x58, 0x50411e03, 0xffff00ff,
    - SYSC_QUIRK_SWSUP_SIDLE_ACT | SYSC_QUIRK_LEGACY_IDLE),
    + SYSC_QUIRK_SWSUP_SIDLE | SYSC_QUIRK_LEGACY_IDLE),
    SYSC_QUIRK("uart", 0, 0x50, 0x54, 0x58, 0x47422e03, 0xffffffff,
    - SYSC_QUIRK_SWSUP_SIDLE_ACT | SYSC_QUIRK_LEGACY_IDLE),
    + SYSC_QUIRK_SWSUP_SIDLE | SYSC_QUIRK_LEGACY_IDLE),

    /* Quirks that need to be set based on the module address */
    SYSC_QUIRK("mcpdm", 0x40132000, 0, 0x10, -ENODEV, 0x50000800, 0xffffffff,
    --
    2.30.2


    \
     
     \ /
      Last update: 2021-06-08 21:31    [W:4.167 / U:0.348 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site