linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH V2 00/16] ARM: bcm2835: Implement initial S2Idle for Raspberry Pi
@ 2024-07-28 11:41 Stefan Wahren
  2024-07-28 11:41 ` [PATCH V2 01/16] firmware: raspberrypi: Improve timeout warning Stefan Wahren
                   ` (8 more replies)
  0 siblings, 9 replies; 41+ messages in thread
From: Stefan Wahren @ 2024-07-28 11:41 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Florian Fainelli, Ray Jui, Scott Branden,
	Maxime Ripard, Jassi Brar, Ulf Hansson, Maíra Canal,
	Jiri Slaby, Minas Harutyunyan
  Cc: Dave Stevenson, Maarten Lankhorst, Thomas Zimmermann,
	David Airlie, Daniel Vetter, Lukas Wunner, Artur Petrosyan,
	Peter Robinson, dri-devel, bcm-kernel-feedback-list, linux-pm,
	linux-serial, linux-usb, linux-arm-kernel, kernel-list,
	Stefan Wahren

This series implement the initial S2Idle 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.

The series can be roughly separated in 3 parts:
 1. base patches (1-5, 15, 16) which allows S2Idle support for BCM2835
 2. drm vc4 patches which implement S2Idle support (mostly new and not
    really BCM2835 specific)
 3. dwc2 patches which handle BCM2835 specific issues (still in progress,
    but works fine)

Cherry-picking of patches 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 DWC2 part of the implementation isn't complete yet (especially patch 14),
but much better than the first version. The USB domain is now powered down and
the USB devices are still usable after resume. There is still room for
improvements, but at least the system won't freeze forever as before [2].

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
S2Idle               = 1.33 W

In comparison with HDMI & USB keyboard connected (but neither active
nor wakeup source):

running but CPU idle = 1.82 W
S2Idle               = 1.33 W

The series has been successfully tested on the following platforms:
Raspberry Pi 1 B
Raspberry Pi 3 B+

Changes in V2:
- rebased against todays mainline
- added Reviewed-by from Florian
- added Acked-by from Minas
- dropped "irqchip/bcm2835: Enable SKIP_SET_WAKE and MASK_ON_SUSPEND"
  because it has been applied by Thomas Gleixner
- dropped "pmdomain: raspberrypi-power: Avoid powering down USB"
  because this workaround has been replaced by patch 14
- use drm_err_once instead of DRM_ERROR and return connector_status_unknown
  in patch 6
- add new patch in order to clean-up all DRM_ERROR
- add new patch to improve raspberrypi-power logging
- add new patch to simplify V3D clock retrieval
- add new patch 5 to avoid power down of wakeup devices
- add new patch 12 to avoid confusion about ACPI ID of BCM283x USB
- add new patch 8 & 10 which address the problem that HDMI
  is not functional after s2idle
- add more links and fix typo in patch 13
- add new WIP patch 14 which recover DWC2 register after power down
- take care of UART clock in patch 15 as commented by Florian
- use SYSTEM_SLEEP_PM_OPS in patch 15

[1] - https://github.com/lategoodbye/rpi-zero/issues/9
[2] - https://bugzilla.redhat.com/show_bug.cgi?id=2283978

Stefan Wahren (16):
  firmware: raspberrypi: Improve timeout warning
  mailbox: bcm2835: Fix timeout during suspend mode
  pmdomain: raspberrypi-power: Adjust packet definition
  pmdomain: raspberrypi-power: Add logging to rpi_firmware_set_power
  pmdomain: raspberrypi-power: set flag GENPD_FLAG_ACTIVE_WAKEUP
  drm/vc4: hdmi: Handle error case of pm_runtime_resume_and_get
  drm/vc4: Get the rid of DRM_ERROR()
  drm/vc4: hdmi: add PM suspend/resume support
  drm/vc4: v3d: simplify clock retrieval
  drm/vc4: v3d: add PM suspend/resume support
  usb: dwc2: debugfs: Print parameter no_clock_gating
  usb: dwc2: Add comment about BCM2848 ACPI ID
  usb: dwc2: Skip clock gating on Broadcom SoCs
  WIP: usb: dwc2: Implement recovery after PM domain off
  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_bo.c              | 14 ++---
 drivers/gpu/drm/vc4/vc4_dpi.c             | 14 ++---
 drivers/gpu/drm/vc4/vc4_dsi.c             | 32 ++++++-----
 drivers/gpu/drm/vc4/vc4_gem.c             | 11 ++--
 drivers/gpu/drm/vc4/vc4_hdmi.c            | 70 +++++++++++++++++------
 drivers/gpu/drm/vc4/vc4_hvs.c             |  4 +-
 drivers/gpu/drm/vc4/vc4_irq.c             |  2 +-
 drivers/gpu/drm/vc4/vc4_v3d.c             | 21 +++----
 drivers/gpu/drm/vc4/vc4_validate.c        |  8 +--
 drivers/gpu/drm/vc4/vc4_vec.c             | 10 ++--
 drivers/mailbox/bcm2835-mailbox.c         |  3 +-
 drivers/pmdomain/bcm/raspberrypi-power.c  | 43 ++++++++------
 drivers/tty/serial/8250/8250_bcm2835aux.c | 37 ++++++++++++
 drivers/usb/dwc2/core.c                   | 16 ++++++
 drivers/usb/dwc2/core.h                   | 17 ++++++
 drivers/usb/dwc2/debugfs.c                |  1 +
 drivers/usb/dwc2/gadget.c                 | 49 ++++++++++++++++
 drivers/usb/dwc2/hcd.c                    | 49 ++++++++++++++++
 drivers/usb/dwc2/params.c                 |  2 +
 drivers/usb/dwc2/platform.c               | 32 +++++++++++
 22 files changed, 339 insertions(+), 101 deletions(-)

--
2.34.1



^ permalink raw reply	[flat|nested] 41+ messages in thread

end of thread, other threads:[~2024-08-16 16:59 UTC | newest]

Thread overview: 41+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-07-28 11:41 [PATCH V2 00/16] ARM: bcm2835: Implement initial S2Idle for Raspberry Pi Stefan Wahren
2024-07-28 11:41 ` [PATCH V2 01/16] firmware: raspberrypi: Improve timeout warning Stefan Wahren
2024-08-12 20:51   ` Stefan Wahren
2024-08-13 20:21   ` Florian Fainelli
2024-07-28 11:41 ` [PATCH V2 02/16] mailbox: bcm2835: Fix timeout during suspend mode Stefan Wahren
2024-08-12 20:56   ` Stefan Wahren
2024-07-28 11:41 ` [PATCH V2 03/16] pmdomain: raspberrypi-power: Adjust packet definition Stefan Wahren
2024-07-28 11:41 ` [PATCH V2 04/16] pmdomain: raspberrypi-power: Add logging to rpi_firmware_set_power Stefan Wahren
2024-07-28 11:41 ` [PATCH V2 05/16] pmdomain: raspberrypi-power: set flag GENPD_FLAG_ACTIVE_WAKEUP Stefan Wahren
2024-08-12 21:04   ` Stefan Wahren
2024-08-14 12:25   ` Ulf Hansson
2024-07-28 11:41 ` [PATCH V2 06/16] drm/vc4: hdmi: Handle error case of pm_runtime_resume_and_get Stefan Wahren
2024-07-30 11:37   ` Maíra Canal
2024-07-30 13:32   ` Maxime Ripard
2024-07-28 11:41 ` [PATCH V2 07/16] drm/vc4: Get the rid of DRM_ERROR() Stefan Wahren
2024-07-30  6:30   ` Maxime Ripard
2024-07-30 11:19   ` Maíra Canal
2024-07-28 11:41 ` [PATCH V2 08/16] drm/vc4: hdmi: add PM suspend/resume support Stefan Wahren
2024-07-30 13:32   ` Maxime Ripard
2024-07-28 13:00 ` [PATCH V2 09/16] drm/vc4: v3d: simplify clock retrieval Stefan Wahren
2024-07-28 13:00   ` [PATCH V2 10/16] drm/vc4: v3d: add PM suspend/resume support Stefan Wahren
2024-07-28 13:00   ` [PATCH V2 11/16] usb: dwc2: debugfs: Print parameter no_clock_gating Stefan Wahren
2024-07-28 13:00   ` [PATCH V2 12/16] usb: dwc2: Add comment about BCM2848 ACPI ID Stefan Wahren
2024-07-28 13:00   ` [PATCH V2 13/16] usb: dwc2: Skip clock gating on Broadcom SoCs Stefan Wahren
2024-07-28 13:00   ` [PATCH V2 14/16] WIP: usb: dwc2: Implement recovery after PM domain off Stefan Wahren
2024-08-12 23:47     ` Stefan Wahren
2024-08-13 19:57       ` Doug Anderson
2024-08-14 12:01         ` Ulf Hansson
2024-08-14 21:48           ` Stefan Wahren
2024-08-15 19:37             ` Doug Anderson
2024-08-16 16:57               ` Stefan Wahren
2024-07-28 13:00   ` [PATCH V2 15/16] serial: 8250_bcm2835aux: add PM suspend/resume support Stefan Wahren
2024-08-14 12:18     ` Ulf Hansson
2024-08-14 20:54       ` Stefan Wahren
2024-07-28 13:00   ` [PATCH V2 16/16] ARM: bcm2835_defconfig: Enable SUSPEND Stefan Wahren
2024-07-30 11:23   ` [PATCH V2 09/16] drm/vc4: v3d: simplify clock retrieval Maíra Canal
2024-07-31 16:41     ` Stefan Wahren
2024-08-02 12:56       ` Maíra Canal
2024-08-02 13:00         ` Stefan Wahren
2024-08-07 14:31           ` Maíra Canal
2024-08-07 14:49             ` Stefan Wahren

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).