Re: [PATCH/RFC v2 0/5] clk: renesas: rcar-gen3: Restore clocks during resume

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

 



Hi Geert,

Thanks for your hard work!

On 2017-06-29 15:25:15 +0200, Geert Uytterhoeven wrote:
> 	Hi all,
> 
> During PSCI system suspend, R-Car Gen3 SoCs are powered down, and their
> clock register state is lost.  Note that as the boot loader skips most
> initialization after resume, clock register state differs from the state
> encountered during normal system boot, too.
> 
> Hence after s2ram, some operations may fail because module clocks are
> disabled, while drivers expect them to be still enabled.  E.g. EtherAVB
> fails when Wake-on-LAN has been enabled using "ethtool -s eth0 wol g":
> 
>     ravb e6800000.ethernet eth0: failed to switch device to config mode
>     ravb e6800000.ethernet eth0: device will be stopped after h/w processes are done.
>     ravb e6800000.ethernet eth0: failed to switch device to config
>     PM: Device e6800000.ethernet failed to resume: error -110
> 
> In addition, some clocks that were disabled by clk_disable_unused() may
> have been re-enabled, wasting power.
> 
> This RFC is a second attempt to fix this issue by restoring clock registers
> during system resume.
> 
> Note that while this fixes EtherAVB operation after resume from s2ram,
> EtherAVB cannot be used as an actual wake-up source from s2ram, only
> from s2idle, due to PSCI limitations.
> 
> Changes compared to v1 (more details in the individual patches):
>   - Save module clock registers in suspend_noirq instead of constantly
>     updating shadow registers,
>   - Restore all module clocks under our control, not just the ones we ever
>     changed,
>   - Also restore DIV6, SDHI, and R clocks, thus covering all supported
>     programmable core clocks on R-Car Gen3.
> 
> As clock register restore is only needed on R-Car Gen3 with PSCI, although
> harmless on other systems, perhaps the save/restore code should be
> protected by #ifdef CONFIG_ARM_PSCI_FW?
> 
> This series is against clk-next, with "clk: renesas: div6: Document fields
> used for parent selection" applied on top.
> 
> This has been tested on Salvator-X with R-Car H3 ES1.0 and M3-W ES1.0.
> On Salvator-XS with R-Car H3 ES2.0, EtherAVB restarts after system resume,
> but NFS fails with "server not responding", probably not due to a clock
> issue.

I tested this series using this setup:

- Base latest renesas-drivers, 710def1a48c7bc9d ("of_mdio: Fix broken 
  PHY IRQ in case of probe deferral"). This branch also includes the 
  RAVB WoL patches.

- Salvator-X H3 ES1.0

- The arm64 defconfig.

The test procedure I used:

    arm64 ~/shared/deep-sleep # cat sleep.sh
    #!/bin/bash

    ethtool -s eth0 wol g

    echo disabled > /sys/devices/platform/soc/e6800000.ethernet/power/wakeup

    echo 0 > /sys/module/printk/parameters/console_suspend

    i2cset -f -y 7 0x30 0x20 0x0F

    echo "Flip Switch"
    read -n 1

    echo mem > /sys/power/state

And for me the NFS root came up OK after flipping switch back. I wonder 
what is different in our test procedures. I would like to provide my 
tested-by tag but I first want to figure out why NFS (or maybe the whole 
net interface?) don't work for you after resume.

arm64 ~/shared/deep-sleep # ./sleep.sh
Flip Switch

[  720.992971] PM: Syncing filesystems ... done.
[  720.998841] Freezing user space processes ... (elapsed 0.001 seconds) done.
[  721.007530] OOM killer disabled.
[  721.010763] Freezing remaining freezable tasks ... (elapsed 0.001 seconds) done.
[  721.600789] vsp1 fea38000.vsp: pipeline 0 stop timeout
[  722.112773] vsp1 fea30000.vsp: pipeline 0 stop timeout
[  722.624769] vsp1 fea28000.vsp: pipeline 0 stop timeout
[  723.136772] vsp1 fea20000.vsp: pipeline 0 stop timeout
[  723.147535] ohci-platform ee080000.usb: runtime PM trying to suspend device but active child
[  723.156051] phy_rcar_gen3_usb2 ee080200.usb-phy: runtime PM trying to suspend device but active child
[  723.167851] ohci-platform ee0c0000.usb: runtime PM trying to suspend device but active child
[  723.176313] ohci-platform ee0a0000.usb: runtime PM trying to suspend device but active child
[  723.184769] phy_rcar_gen3_usb2 ee0c0200.usb-phy: runtime PM trying to suspend device but active child
[  723.194001] phy_rcar_gen3_usb2 ee0a0200.usb-phy: runtime PM trying to suspend device but active child
[  723.203413] Disabling non-boot CPUs ...
[  723.229225] IRQ15 no longer affine to CPU1
[  723.229561] CPU1: shutdown
[  723.236412] psci: CPU1 killed.
[  723.277182] IRQ16 no longer affine to CPU2
[  723.277535] CPU2: shutdown
[  723.284367] psci: CPU2 killed.
[  723.329121] IRQ17 no longer affine to CPU3
[  723.329404] CPU3: shutdown
[  723.336229] psci: CPU3 killed.

!! Flipping switch back here !!

NOTICE:  BL2: R-Car Gen3 Initial Program Loader(CA57) Rev.1.0.12
NOTICE:  BL2: PRR is R-Car H3 ES1.0
NOTICE:  BL2: Boot device is HyperFlash(160MHz)
NOTICE:  BL2: LCM state is CM
NOTICE:  BL2: AVS setting succeeded. DVFS_SetVID=0x52
NOTICE:  BL2: DDR1600(rev.0.20)[WARM_BOOT]..0
NOTICE:  BL2: DRAM Split is 4ch
NOTICE:  BL2: QoS is default setting(rev.0.33)
NOTICE:  BL2: v1.3(release):c040be5
NOTICE:  BL2: Built : 16:03:29, Jan 30 2017
NOTICE:  BL2: Normal boot
ÿ[  723.351187] Enabling non-boot CPUs ...dToRAM)
[  723.367103] Detected PIPT I-cache on CPU1
[  723.367163] CPU1: Booted secondary processor [411fd073]
[  723.367448]  cache: parent cpu1 should not be sleeping
[  723.381957] CPU1 is up
[  723.394114] Detected PIPT I-cache on CPU2
[  723.394134] CPU2: Booted secondary processor [411fd073]
[  723.394306]  cache: parent cpu2 should not be sleeping
[  723.408755] CPU2 is up
[  723.426652] Detected PIPT I-cache on CPU3
[  723.426673] CPU3: Booted secondary processor [411fd073]
[  723.426845]  cache: parent cpu3 should not be sleeping
[  723.441328] CPU3 is up
[  723.565306] usb usb2: root hub lost power or was reset
[  723.565325] usb usb1: root hub lost power or was reset
[  723.569644] usb usb5: root hub lost power or was reset
[  723.649254] ravb e6800000.ethernet eth0: limited PHY to 100Mbit/s
[  723.655345] Micrel KSZ9031 Gigabit PHY e6800000.ethernet-ffffffff:00: attached PHY driver [Micrel KSZ9031 Gigabit PHY] (mii_bus:phy_addr=e6800000.ethernet-ffffffff:00, irq=236)
[  723.762737] usb usb3: root hub lost power or was reset
[  723.854727] usb usb4: root hub lost power or was reset
[  723.950730] usb usb6: root hub lost power or was reset
[  724.092718] ata1: link resume succeeded after 1 retries
[  724.153545] OOM killer enabled.
[  724.158915] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
[  724.158918] [drm] No driver support for vblank timestamp query.
[  724.172372] Restarting tasks ... done.
[  724.202297] ata1: SATA link down (SStatus 0 SControl 300)
[  725.265366] ravb e6800000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx
arm64 ~/shared/deep-sleep #

I also know you reported an IRQ storm when resuming using WoL which I in 
over 1000 suspend/resume cycles never have been able to reproduce. Maybe 
my test environment or procedure is to kind and/or something is falling 
thru the cracks :-( Do you notice any difference in test procedure or 
console printouts?

> 
> Thanks for your comments!
> 
> Geert Uytterhoeven (5):
>   [RFC] clk: renesas: cpg-mssr: Restore module clocks during resume
>   [RFC] clk: renesas: cpg-mssr: Add support to restore core clocks
>     during resume
>   [RFC] clk: renesas: div6: Restore clock state during resume
>   [RFC] clk: renesas: rcar-gen3: Restore SDHI clocks during resume
>   [RFC] clk: renesas: rcar-gen3: Restore R clock during resume
> 
>  drivers/clk/renesas/clk-div6.c         | 38 ++++++++++++++-
>  drivers/clk/renesas/clk-div6.h         |  3 +-
>  drivers/clk/renesas/rcar-gen2-cpg.c    |  7 ++-
>  drivers/clk/renesas/rcar-gen2-cpg.h    |  6 +--
>  drivers/clk/renesas/rcar-gen3-cpg.c    | 79 +++++++++++++++++++++++++-------
>  drivers/clk/renesas/rcar-gen3-cpg.h    |  3 +-
>  drivers/clk/renesas/renesas-cpg-mssr.c | 84 +++++++++++++++++++++++++++++++++-
>  drivers/clk/renesas/renesas-cpg-mssr.h |  3 +-
>  8 files changed, 193 insertions(+), 30 deletions(-)
> 
> -- 
> 2.7.4
> 
> Gr{oetje,eeting}s,
> 
> 						Geert
> 
> --
> Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx
> 
> In personal conversations with technical people, I call myself a hacker. But
> when I'm talking to journalists I just say "programmer" or something like that.
> 							    -- Linus Torvalds

-- 
Regards,
Niklas Söderlund



[Index of Archives]     [Linux Samsung SOC]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]

  Powered by Linux