Skip to content

Commit

Permalink
drm/vc4: Remove request for min clocks when hdmi output is disabled
Browse files Browse the repository at this point in the history
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 [email protected] (52mW).

We should always remove clk_set_min_rate requests
when we no longer need them.

Signed-off-by: Dom Cobley <[email protected]>
  • Loading branch information
popcornmix committed Oct 15, 2024
1 parent 239df14 commit 473129f
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 0 deletions.
5 changes: 5 additions & 0 deletions drivers/gpu/drm/vc4/vc4_hdmi.c
Original file line number Diff line number Diff line change
Expand Up @@ -1224,6 +1224,8 @@ 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_disable_unprepare(vc4_hdmi->pixel_clock);

Expand Down Expand Up @@ -3722,8 +3724,11 @@ static int vc5_hdmi_init_resources(struct drm_device *drm,
static int vc4_hdmi_runtime_suspend(struct device *dev)
{
struct vc4_hdmi *vc4_hdmi = dev_get_drvdata(dev);
printk("%s\n", __func__);

Check failure on line 3727 in drivers/gpu/drm/vc4/vc4_hdmi.c

View workflow job for this annotation

GitHub Actions / checkpatch review

WARNING: printk() should include KERN_<LEVEL> facility level

Check failure on line 3727 in drivers/gpu/drm/vc4/vc4_hdmi.c

View workflow job for this annotation

GitHub Actions / checkpatch review

WARNING: Unnecessary ftrace-like logging - prefer using ftrace

clk_disable_unprepare(vc4_hdmi->audio_clock);
/* we no longer require a minimum clock rate */
clk_set_min_rate(vc4_hdmi->hsm_clock, 0);
clk_disable_unprepare(vc4_hdmi->hsm_clock);

return 0;
Expand Down
3 changes: 3 additions & 0 deletions drivers/gpu/drm/vc4/vc4_hvs.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
2 changes: 2 additions & 0 deletions drivers/gpu/drm/vc4/vc4_v3d.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit 473129f

Please sign in to comment.