Re: [PATCH 00/11] ARM: bcm2835: Implement initial S2Idle for Raspberry Pi

Peter Robinson
2024-07-02T20:08:47Z

Hi Stefan,

> This series implement the initial Suspend-To-Idle support for
> the Raspberry Pi, which was a long time on my TODO list [1]. The
> changes allow to suspend and resume the Raspberry Pi via debug UART.
> The focus is on the BCM2835 SoC, because it's less complex than its
> successors and have enough documentation.

Firstly a big thank you for this work!

> The series is a loose collection of fixes and improvements.
> So cherry-picking should be fine.
>
> Test steps:
> - configure debug console (pl011 or mini UART) as wakeup source
> - send system to idle state
>
> echo freeze > /sys/power/state
>
> - wakeup system by console traffic
>
> The implementation isn't perfect and contains workarounds like
> patch 4 and 9. So there is still room for improvements, but
> at least the system won't freeze forever as before [2].

I've got a test kernel for Fedora that I'm going to test on
RPi3/Zero2W so let me know if you want me to test anything in
particular, I will do my best to give review/test on each individual
test over the next few days.

Cheer,
Peter

> Here are some figures for the Raspberry Pi 1 (without any
> devices connected except of a debug UART):
>
> running but CPU idle = 1.67 W
> suspend to idle = 1.33 W
>
> The series has been tested on the following platforms:
> Raspberry Pi 1 B
> Raspberry Pi 3 A+
> Raspberry Pi 3 B+
>
> Known issues:
> - currently it's not possible to power down the USB domain [3]
> - there seems to be an issue with the DWC2 suspend handling [4]
>
> [1] - https://github.com/lategoodbye/rpi-zero/issues/9
> [2] - https://bugzilla.redhat.com/show_bug.cgi?id=2283978
> [3] - https://github.com/raspberrypi/firmware/issues/1894
> [4] - https://lore.kernel.org/linux-usb/3fd0c2fb-4752-45b3-94eb-42352703e1fd@gmx.net/T/
>
> Stefan Wahren (11):
> firmware: raspberrypi: Improve timeout warning
> mailbox: bcm2835: Fix timeout during suspend mode
> pmdomain: raspberrypi-power: Adjust packet definition
> pmdomain: raspberrypi-power: Avoid powering down USB
> irqchip/bcm2835: Enable SKIP_SET_WAKE and MASK_ON_SUSPEND
> drm/vc4: hdmi: Handle error case of pm_runtime_resume_and_get
> drm/vc4: hdmi: Disable connector status polling during suspend
> usb: dwc2: debugfs: Print parameter no_clock_gating
> usb: dwc2: Skip clock gating on Broadcom SoCs
> serial: 8250_bcm2835aux: add PM suspend/resume support
> ARM: bcm2835_defconfig: Enable SUSPEND
>
> arch/arm/configs/bcm2835_defconfig | 2 --
> drivers/firmware/raspberrypi.c | 3 ++-
> drivers/gpu/drm/vc4/vc4_hdmi.c | 18 +++++++++++++++++-
> drivers/irqchip/irq-bcm2835.c | 4 +++-
> drivers/mailbox/bcm2835-mailbox.c | 3 ++-
> drivers/pmdomain/bcm/raspberrypi-power.c | 17 ++++++++++++-----
> drivers/tty/serial/8250/8250_bcm2835aux.c | 23 +++++++++++++++++++++++
> drivers/usb/dwc2/debugfs.c | 1 +
> drivers/usb/dwc2/params.c | 1 +
> 9 files changed, 61 insertions(+), 11 deletions(-)
>
> --
> 2.34.1
>