Message ID | 20240630153652.318882-1-wahrenst@gmx.net |
---|---|
Headers | show |
Series | ARM: bcm2835: Implement initial S2Idle for Raspberry Pi | expand |
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 >