Re: [RFC 1/2] ARM: dts: exynos: Add proper regulator states for suspend-to-mem for odroid-u3

From: Anand Moon
Date: Fri Feb 15 2019 - 08:58:30 EST


Hi Krzysztof,

On Fri, 15 Feb 2019 at 13:01, Krzysztof Kozlowski <krzk@xxxxxxxxxx> wrote:
>
> On Thu, 14 Feb 2019 at 19:35, Anand Moon <linux.amoon@xxxxxxxxx> wrote:
> >
> > hi Krzysztof,
> >
> > Thanks fro your review comments.
> >
> > On Thu, 14 Feb 2019 at 18:11, Krzysztof Kozlowski <krzk@xxxxxxxxxx> wrote:
> > >
> > > Hi Anand,
> > >
> > > Thanks for the patch. See comments below.
> > >
> > > On Wed, 13 Feb 2019 at 22:41, Anand Moon <linux.amoon@xxxxxxxxx> wrote:
> > > >
> > > > Add suspend-to-mem node to regulator core to be enabled or disabled
> > > > during system suspend and also support changing the regulator operating
> > > > mode during runtime and when the system enter sleep mode.
> > > >
> > > > Cc: Marek Szyprowski <m.szyprowski@xxxxxxxxxxx>
> > > > Cc: Krzysztof Kozlowski <krzk@xxxxxxxxxx>
> > > > Cc: Chanwoo Choi <cw00.choi@xxxxxxxxxxx>
> > > > Signed-off-by: Anand Moon <linux.amoon@xxxxxxxxx>
> > > > ---
> > > >
> > > > Changes from previos patch
> > > > [0] https://patchwork.kernel.org/patch/10712549/
> > > >
> > > > Set all the WAKEUP source regulator in suspend-on state.
> > > > LD04, LD012, LD015, LD020, LD022
> > > > Set all the non used regulator in suspend-odd state
> > > > LD02, LD03, LD05, LD06, LD07, LD011, LD013, LDO14, LD016
> > > >
> > > > BUCK5, BUCK6, BUCK7 and not confirable as per driver max77686-regulator
> > > >
> > > > Tested on microSD card and it resumes correcly after suspend.
> > > > eMMC is not able to resume after entering into suspend state,
> > > > which need to be investigated and how to debug more.
> > > > ---
> > > > .../boot/dts/exynos4412-odroid-common.dtsi | 63 +++++++++++++++++++
> > > > arch/arm/boot/dts/exynos4412-odroidu3.dts | 3 +
> > > > 2 files changed, 66 insertions(+)
> > > >
> > > > diff --git a/arch/arm/boot/dts/exynos4412-odroid-common.dtsi b/arch/arm/boot/dts/exynos4412-odroid-common.dtsi
> > > > index 08d3a0a7b4eb..e984461c37d9 100644
> > > > --- a/arch/arm/boot/dts/exynos4412-odroid-common.dtsi
> > > > +++ b/arch/arm/boot/dts/exynos4412-odroid-common.dtsi
> > > > @@ -288,6 +288,9 @@
> > > > regulator-min-microvolt = <1800000>;
> > > > regulator-max-microvolt = <1800000>;
> > > > regulator-always-on;
> > > > + regulator-state-mem {
> > > > + regulator-off-in-suspend;
> > > > + };
> > >
> > > I see my comment from previous patch was not addressed.
> >
> > I left this unchanged since this regulator is not active linked and used.
> > Ok I will change this to regulator-on-in-suspend,
>
> Why?
>
> Previous patch was setting this to "on". I said that this is noop and
> if you want to add it, I need explanation why this regulator has to
> stay on during suspend.
>
> So you changed to "off"... which is still noop... and you did not
> provide explanation. Now you replied that you will change to "on"...
> so this will be circle. Still without explanation.
>
------------------------------------------------------------------------------------------------
I have added some debug prints to get more inputs.

Here is the boot logs for sdcard suspend resume

[1] https://pastebin.com/wvJvJidp

[root@archl-u3m ~]# rtcwake -d /dev/rtc0 -m mem -s 10
rtcwake: assuming RTC uses UTC ...
rtcwake: wakeup from "mem" using /dev/rtc0 at Fri Feb 15 13:28:06 2019
[ 97.165349] PM: suspend entry (deep)
[ 97.165846] PM: Syncing filesystems ... done.
[ 97.344436] Freezing user space processes ... (elapsed 0.006 seconds) done.
[ 97.354738] OOM killer disabled.
[ 97.356028] Freezing remaining freezable tasks ... (elapsed 0.004
seconds) done.
[ 97.413453] smsc95xx 1-2:1.0 eth0: entering SUSPEND2 mode
[ 97.423227] sd 0:0:0:0: [sda] Synchronizing SCSI cache
[ 97.444346] dwc2 12480000.hsotg: suspending usb gadget g_ether
[ 97.446728] dwc2 12480000.hsotg: dwc2_hsotg_ep_disable: called for ep0
[ 97.451287] dwc2 12480000.hsotg: dwc2_hsotg_ep_disable: called for ep0
[ 97.457742] dwc2 12480000.hsotg: new device is full-speed
[ 97.465766] wake enabled for irq 119
[ 97.466979] BUCK9: No configuration
[ 97.470417] BUCK8_P3V3: No configuration
[ 97.474131] BUCK7_2.0V: No configuration
[ 97.477954] BUCK6_1.35V: No configuration
[ 97.481946] VDDQ_CKEM1_2_1.2V: No configuration
[ 97.487930] BUCK4: regulator suspend disable supported
[ 97.491964] BUCK3: regulator suspend disable supported
[ 97.497184] BUCK1: regulator suspend disable supported
[ 97.501838] LDO26: No configuration
[ 97.505383] LDO24: No configuration
[ 97.508761] LDO23: No configuration
[ 97.512368] LDO19: No configuration
[ 97.515706] LDO18: No configuration
[ 97.519178] LDO17: No configuration
[ 97.523076] LDO16: regulator suspend disable supported
[ 97.528154] LDO15: regulator suspend disable supported
[ 97.533367] LDO14: regulator suspend disable supported
[ 97.538447] LDO12: regulator suspend disable supported
[ 97.543603] LDO11: regulator suspend disable supported
[ 97.548308] LDO9: No configuration
[ 97.552107] LDO7: regulator suspend disable supported
[ 97.557064] LDO6: regulator suspend disable supported
[ 97.562251] LDO2: regulator suspend disable supported
[ 97.566769] VDD_ALIVE_1.0V: No configuration
[ 97.581717] usb3503 0-0008: switched to STANDBY mode
[ 97.582496] wake enabled for irq 123
[ 97.602770] samsung-pinctrl 11000000.pinctrl: Setting external
wakeup interrupt mask: 0xfbfff7ff
[ 97.623616] Disabling non-boot CPUs ...
[ 97.681453] s3c2410-wdt 10060000.watchdog: watchdog disabled
[ 97.681743] wake disabled for irq 123
[ 97.692569] usb3503 0-0008: switched to HUB mode
[ 97.801553] wake disabled for irq 119
[ 97.802087] dwc2 12480000.hsotg: resuming usb gadget g_ether
[ 98.080458] usb 1-2: reset high-speed USB device number 2 using exynos-ehci
[ 98.432321] usb 1-3: reset high-speed USB device number 3 using exynos-ehci
[ 98.970441] usb 1-3.3: reset high-speed USB device number 4 using exynos-ehci
[ 99.135835] OOM killer enabled.
[ 99.135940] Restarting tasks ... done.
[ 99.140760] PM: suspend exit
[root@archl-u3m ~]# [ 99.877843] smsc95xx 1-2:1.0 eth0: link up,
100Mbps, full-duplex, lpa 0xC5E1

------------------------------------------------
Here is the boot log for emmc suspend resume. after disable of emmc regulator.

[2] https://pastebin.com/Z05K3kj2

rtcwake: wakeup from "mem" using /dev/rtc0 at Fri Feb 15 13:27:26 2019
[ 79.775108] PM: suspend entry (deep)
[ 79.775462] PM: Syncing filesystems ... done.
[ 79.819009] Freezing user space processes ... (elapsed 0.004 seconds) done.
[ 79.826300] OOM killer disabled.
[ 79.828603] Freezing remaining freezable tasks ... (elapsed 0.001
seconds) done.
[ 79.875967] smsc95xx 1-2:1.0 eth0: entering SUSPEND2 mode
[ 79.959495] dwc2 12480000.hsotg: suspending usb gadget g_ether
[ 79.960480] dwc2 12480000.hsotg: dwc2_hsotg_ep_disable: called for ep0
[ 79.966431] dwc2 12480000.hsotg: new device is full-speed
[ 79.971805] dwc2 12480000.hsotg: dwc2_hsotg_ep_disable: called for ep0
[ 79.980568] wake enabled for irq 119
[ 79.982195] BUCK9: No configuration
[ 79.985540] BUCK8_P3V3: No configuration
[ 79.989201] BUCK7_2.0V: No configuration
[ 79.993175] BUCK6_1.35V: No configuration
[ 79.997099] VDDQ_CKEM1_2_1.2V: No configuration
[ 80.002765] BUCK4: regulator suspend disable supported
[ 80.007115] BUCK3: regulator suspend disable supported
[ 80.012346] BUCK1: regulator suspend disable supported
[ 80.016991] LDO26: No configuration
[ 80.020467] LDO24: No configuration
[ 80.023991] LDO23: No configuration
[ 80.027456] LDO19: No configuration
[ 80.030858] LDO18: No configuration
[ 80.034388] LDO17: No configuration
[ 80.038172] LDO16: regulator suspend disable supported
[ 80.043410] LDO15: regulator suspend disable supported
[ 80.048429] LDO14: regulator suspend disable supported
[ 80.053658] LDO12: regulator suspend disable supported
[ 80.058670] LDO11: regulator suspend disable supported
[ 80.063522] LDO9: No configuration
[ 80.067187] LDO7: regulator suspend disable supported
[ 80.072290] LDO6: regulator suspend disable supported
[ 80.077321] LDO2: regulator suspend disable supported
[ 80.081995] VDD_ALIVE_1.0V: No configuration
[ 80.096885] usb3503 0-0008: switched to STANDBY mode
[ 80.097568] wake enabled for irq 123
[ 80.116002] samsung-pinctrl 11000000.pinctrl: Setting external
wakeup interrupt mask: 0xfbfff7ff
[ 80.134695] Disabling non-boot CPUs ...

[snip]

> > > > diff --git a/arch/arm/boot/dts/exynos4412-odroidu3.dts b/arch/arm/boot/dts/exynos4412-odroidu3.dts
> > > > index 2bdf899df436..4ebde09fc51d 100644
> > > > --- a/arch/arm/boot/dts/exynos4412-odroidu3.dts
> > > > +++ b/arch/arm/boot/dts/exynos4412-odroidu3.dts
> > > > @@ -82,6 +82,9 @@
> > > > regulator-name = "LDO22_VDDQ_MMC4_2.8V";
> > > > regulator-min-microvolt = <2800000>;
> > > > regulator-max-microvolt = <2800000>;
> > > > + regulator-state-mem {
> > > > + regulator-on-in-suspend;
> > >
> > > Why?
> > >
> >
> > I chose not to disable mshc_0 (emmc) regulator,
> > since I could not get suspend resume working on eMMC.
>
> Having "regulator-on-in-suspend" is not the same as not disabling
> regulator during suspend. This property means you will explicitly
> enable it during suspend. To me it looks wrong so I would be happy to
> see explanations.
>

During suspend the driver set the regulator in standby mode until resume.
Opps I understood the regulator in suspend mode enter into

REGULATOR_MODE_STANDBY : MAX77686_OFF_PWRREQ;

[ 79.997099] VDDQ_CKEM1_2_1.2V: No configuration
[ 80.002765] BUCK4: regulator suspend disable supported
[ 80.007115] BUCK3: regulator suspend disable supported
[ 80.012346] BUCK1: regulator suspend disable supported
[ 80.016991] LDO26: No configuration
[ 80.020467] LDO24: No configuration
[ 80.023991] LDO23: No configuration
[ 80.027456] LDO19: No configuration
[ 80.030858] LDO18: No configuration
[ 80.034388] LDO17: No configuration
[ 80.038172] LDO16: regulator suspend disable supported
[ 80.043410] LDO15: regulator suspend disable supported
[ 80.048429] LDO14: regulator suspend disable supported
[ 80.053658] LDO12: regulator suspend disable supported
[ 80.058670] LDO11: regulator suspend disable supported
[ 80.063522] LDO9: No configuration
[ 80.067187] LDO7: regulator suspend disable supported
[ 80.072290] LDO6: regulator suspend disable supported
[ 80.077321] LDO2: regulator suspend disable supported

So as per the logs BUCK1 / BUCK3 / BUCK4 successfully entered into suspend mode.

Where as suspend is disabled in groups as per the documentation.
(Group 1)
Buck6-->Buck7-->LD01-->LD011-->LD014
Group 2)
Buck2-->Buck1-->Buck3-->Buck4
Group 3>
LD06-->LD013-->LD08-->LD015-->LD010-->LD016-->LD05-->LD012

Best Regards
-Anand