]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
drm/msm/mdss: Add a TODO for better managing the MDSS clock power state
authorKonrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Tue, 10 Mar 2026 13:20:25 +0000 (14:20 +0100)
committerDmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Wed, 25 Mar 2026 06:06:09 +0000 (08:06 +0200)
There's a small window where the MDP clock could be set to a high rate
(say, from the bootloader) without a corresponding RPM(H)PD vote to
back it up. This is normally not an issue, but could be, if rmmod fails
to shut down the display driver cleanly, and the module is inserted
again, or when the providers' .sync_state has timed out.

Mark a TODO to fix it one day. Linking the relevant discussion below.

Link: https://lore.kernel.org/linux-arm-msm/d5c4eed5-bd87-4156-b178-2d78140ec8a9@oss.qualcomm.com/
Signed-off-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Patchwork: https://patchwork.freedesktop.org/patch/710572/
Link: https://lore.kernel.org/r/20260310-topic-mdss_power_todo-v1-1-59457b8b7486@oss.qualcomm.com
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
drivers/gpu/drm/msm/msm_mdss.c

index a86776425f26143eee95fd0c7dada0ee56d510e6..90c3fa0681a06b31bc01efbd18399d1d6ef4e2ce 100644 (file)
@@ -262,6 +262,14 @@ static int msm_mdss_enable(struct msm_mdss *msm_mdss)
        icc_set_bw(msm_mdss->reg_bus_path, 0,
                   msm_mdss->reg_bus_bw);
 
+       /*
+        * TODO:
+        * Previous users (e.g. the bootloader) may have left this clock at a high rate, which
+        * would remain set, as prepare_enable() doesn't reprogram it. This theoretically poses a
+        * risk of brownout, but realistically this path is almost exclusively excercised after the
+        * correct OPP has been set in one of the MDPn or DPU drivers, or during initial probe,
+        * before the RPM(H)PD sync_state is done.
+        */
        ret = clk_bulk_prepare_enable(msm_mdss->num_clocks, msm_mdss->clocks);
        if (ret) {
                dev_err(msm_mdss->dev, "clock enable failed, ret:%d\n", ret);