From 057cec09540d6de39506534ff1468be32c39e9d3 Mon Sep 17 00:00:00 2001 From: Dom Cobley Date: Mon, 14 Oct 2024 18:55:00 +0100 Subject: [PATCH] drm/vc4: Remove request for min clocks when hdmi output is disabled Currently, booting with no hdmi connected has: pi@pi4:~ $ vcgencmd measure_clock hdmi pixel frequency(9)=120010256 frequency(29)=74988280 After connecting hdmi we get: pi@pi4:~ $ vcgencmd measure_clock hdmi pixel frequency(9)=300005856 frequency(29)=149989744 and that persists after disconnecting hdmi I can measure this on a power supply as 10mA@5.2V (52mW). We should always remove clk_set_min_rate requests when we no longer need them. Signed-off-by: Dom Cobley --- drivers/gpu/drm/vc4/vc4_hdmi.c | 3 +++ drivers/gpu/drm/vc4/vc4_hvs.c | 3 +++ drivers/gpu/drm/vc4/vc4_v3d.c | 2 ++ 3 files changed, 8 insertions(+) diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c index d33f599311e53e..487dbc2ab3622f 100644 --- a/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c @@ -1224,7 +1224,10 @@ static void vc4_hdmi_encoder_post_crtc_powerdown(struct drm_encoder *encoder, if (vc4_hdmi->variant->phy_disable) vc4_hdmi->variant->phy_disable(vc4_hdmi); + /* we no longer require a minimum clock rate */ + clk_set_min_rate(vc4_hdmi->pixel_bvb_clock, 0); clk_disable_unprepare(vc4_hdmi->pixel_bvb_clock); + clk_set_min_rate(vc4_hdmi->hsm_clock, 0); clk_disable_unprepare(vc4_hdmi->pixel_clock); ret = pm_runtime_put(&vc4_hdmi->pdev->dev); diff --git a/drivers/gpu/drm/vc4/vc4_hvs.c b/drivers/gpu/drm/vc4/vc4_hvs.c index fbb2bac6083002..02a9bb43035d19 100644 --- a/drivers/gpu/drm/vc4/vc4_hvs.c +++ b/drivers/gpu/drm/vc4/vc4_hvs.c @@ -2361,7 +2361,10 @@ static void vc4_hvs_unbind(struct device *dev, struct device *master, drm_mm_remove_node(node); drm_mm_takedown(&vc4->hvs->lbm_mm); + /* we no longer require a minimum clock rate */ + clk_set_min_rate(hvs->disp_clk, 0); clk_disable_unprepare(hvs->disp_clk); + clk_set_min_rate(hvs->core_clk, 0); clk_disable_unprepare(hvs->core_clk); vc4->hvs = NULL; diff --git a/drivers/gpu/drm/vc4/vc4_v3d.c b/drivers/gpu/drm/vc4/vc4_v3d.c index 14d268f80fa56c..2fdeb76f05c00e 100644 --- a/drivers/gpu/drm/vc4/vc4_v3d.c +++ b/drivers/gpu/drm/vc4/vc4_v3d.c @@ -376,6 +376,8 @@ static int vc4_v3d_runtime_suspend(struct device *dev) vc4_irq_disable(&vc4->base); + /* we no longer require a minimum clock rate */ + clk_set_min_rate(v3d->clk, 0); clk_disable_unprepare(v3d->clk); return 0;