[PATCH v4 0/6] Power Management for Raspberry Pi V3D GPU

Melissa Wen mwen at igalia.com
Tue Jan 27 07:12:31 PST 2026



On 26/01/2026 14:26, Maíra Canal wrote:
> This series introduces Runtime Power Management (PM) support for the
> Raspberry Pi V3D GPU.
>
> Currently, the V3D clock remains enabled for the entire system uptime,
> even when the GPU is idle. With the introduction of Runtime PM, the
> clock can now be disabled during idle periods. For example, with this
> series applied on a Raspberry Pi 5, if we check `vcgencmd measure_clock
> v3d`, we get:
>
> (idle)
>
> $ vcgencmd measure_clock v3d
> frequency(0)=0
>
> (running glmark2)
>
> $ vcgencmd measure_clock v3d
> frequency(0)=960016128
>
> One particular change was required in v3 to ensure a meaningful
> reduction in idle power consumption: the V3D clock rate must be
> explicitly set to the minimum rate during suspend. As explained in an
> inline comment, this is needed as some firmware versions may not fully
> power off the clock when its state is set to off. This issue can be
> mitigated by setting the clock rate to 0 during suspend. For this same
> reason, PATCH 1/6 has been added in v3.
>
> Apart from that, the v3d patches are mostly identical to v2, but rebased
> on top of drm-misc-next.
>
> To ease testing in Raspberry Pi 4 and 5, I prepared a downstream branch
> backporting this series to rpi-6.18.y [1].
>
> [1] https://github.com/mairacanal/linux-rpi/tree/v3d/downstream/power-management-6.18

The whole series is:

Reviewed-by: Melissa Wen <mwen at igalia.com>

>
> Best regards,
> - Maíra
>
> ---
> v1 -> v2: https://lore.kernel.org/r/20250728-v3d-power-management-v1-0-780f922b1048@igalia.com
>
> - [1/5] NEW PATCH: "clk: bcm: rpi: Add missing logs if firmware fails" (Stefan Wahren)
> - [2/5] Remove the "Fixes:" tag (Stefan Wahren)
> - [2/5] dev_err_ratelimited() instead of dev_err() (Stefan Wahren)
> - [2/5] Instead of logging the clock ID, use clk_hw_get_name(hw) to log the name (Stefan Wahren)
> - [2/5] Add a newline character at the end of the log message (Stefan Wahren)
> - [2/5] Use CLK_IS_CRITICAL for all clocks that can't be disabled (Maxime Ripard)
> - [3/5] NEW PATCH: "clk: bcm: rpi: Maximize V3D clock"
> - [4/5] Use devm_reset_control_get_optional_exclusive() (Philipp Zabel)
> - [4/5] Make sure that resource are cleaned in the inverse order of allocation (Philipp Zabel)
>
> v2 -> v3: https://lore.kernel.org/r/20250731-v3d-power-management-v2-0-032d56b01964@igalia.com
>
> - Rebased on top of drm-misc-next
> - Patches "[PATCH v2 1/5] clk: bcm: rpi: Add missing logs if firmware
>    fails", "[PATCH v2 2/5] clk: bcm: rpi: Turn firmware clock on/off when
>    preparing/unpreparing", and "[PATCH v2 3/5] clk: bcm: rpi: Maximize
>    V3D clock" were applied to clk-next.
> - [1/4] NEW PATCH: "clk: bcm: rpi: Let V3D consumers manage clock rate"
> - [2/4] NEW PATCH: "clk: bcm: rpi: Mark PIXEL_CLK and HEVC_CLK as CLK_IGNORE_UNUSED"
> - [3/4] Added Philipp's R-b (Philipp Zabel)
> - [4/4] s/drm_err/DRM_ERROR
> - [4/4] Set the clock rate to 0 during suspend and to the maximum rate
>    during resume
>
> v3 -> v4: https://lore.kernel.org/r/20260116-v3d-power-management-v3-0-4e1874e81dd6@igalia.com
>
> - Rebased on top of drm-misc-next
> - [1/6, 3/6] Add Melissa's A-b (Melissa Wen)
> - [2/6] NEW PATCH: "clk: bcm: rpi: Add a comment about RPI_FIRMWARE_SET_CLOCK_STATE
>    behavior" (Stefan Wahren)
> - [4/6] NEW PATCH: "drm/v3d: Use devm_reset_control_get_optional_exclusive()" (Melissa Wen)
> - [5/6] Include more context to the commit message (Melissa Wen)
> - [5/6, 6/6] Instead of creating the function v3d_gem_allocate(), use v3d_gem_init()
>    and move HW initialization out of it (Melissa Wen)
>
> ---
> Maíra Canal (6):
>        clk: bcm: rpi: Let V3D consumers manage clock rate
>        clk: bcm: rpi: Add a comment about RPI_FIRMWARE_SET_CLOCK_STATE behavior
>        clk: bcm: rpi: Mark PIXEL_CLK and HEVC_CLK as CLK_IGNORE_UNUSED
>        drm/v3d: Use devm_reset_control_get_optional_exclusive()
>        drm/v3d: Allocate all resources before enabling the clock
>        drm/v3d: Introduce Runtime Power Management
>
>   drivers/clk/bcm/clk-raspberrypi.c |  15 ++--
>   drivers/gpu/drm/v3d/Makefile      |   3 +-
>   drivers/gpu/drm/v3d/v3d_debugfs.c |  23 +++++-
>   drivers/gpu/drm/v3d/v3d_drv.c     | 163 ++++++++++++++++++--------------------
>   drivers/gpu/drm/v3d/v3d_drv.h     |  21 +++++
>   drivers/gpu/drm/v3d/v3d_gem.c     |  25 +++---
>   drivers/gpu/drm/v3d/v3d_irq.c     |  15 ++--
>   drivers/gpu/drm/v3d/v3d_mmu.c     |  12 ++-
>   drivers/gpu/drm/v3d/v3d_power.c   |  96 ++++++++++++++++++++++
>   drivers/gpu/drm/v3d/v3d_submit.c  |  19 ++++-
>   10 files changed, 273 insertions(+), 119 deletions(-)
> ---
> base-commit: 68e28facbc8ab3e701e1814323d397a75b400865
> change-id: 20250728-v3d-power-management-eebb2024dc96
>




More information about the linux-arm-kernel mailing list