Commit e791bc29 authored by Vinod Polimera's avatar Vinod Polimera Committed by Dmitry Baryshkov

drm/msm/disp/dpu1: set mdp clk to the maximum frequency in opp table during probe

Set mdp clock to max clock rate during probe/bind sequence from the
opp table so that rails are not at undetermined state. Since we do not
know what will be the rate set in boot loader, it would be ideal to
vote at max frequency. There could be a firmware display programmed
in bootloader and we want to transition it to kernel without underflowing.
The clock will be scaled down later when framework sends an update.

Fixes: 25fdd593 ("drm/msm: Add SDM845 DPU support")
Signed-off-by: default avatarVinod Polimera <quic_vpolimer@quicinc.com>
Reviewed-by: default avatarDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Reviewed-by: default avatarDouglas Anderson <dianders@chromium.org>
Tested-by: default avatarDouglas Anderson <dianders@chromium.org>
Patchwork: https://patchwork.freedesktop.org/patch/479090/
Link: https://lore.kernel.org/r/1647919631-14447-2-git-send-email-quic_vpolimer@quicinc.comSigned-off-by: default avatarDmitry Baryshkov <dmitry.baryshkov@linaro.org>
parent 92b5eff9
...@@ -1212,7 +1212,9 @@ static int dpu_kms_init(struct drm_device *ddev) ...@@ -1212,7 +1212,9 @@ static int dpu_kms_init(struct drm_device *ddev)
struct platform_device *pdev = to_platform_device(dev); struct platform_device *pdev = to_platform_device(dev);
struct dpu_kms *dpu_kms; struct dpu_kms *dpu_kms;
int irq; int irq;
struct dev_pm_opp *opp;
int ret = 0; int ret = 0;
unsigned long max_freq = ULONG_MAX;
dpu_kms = devm_kzalloc(&pdev->dev, sizeof(*dpu_kms), GFP_KERNEL); dpu_kms = devm_kzalloc(&pdev->dev, sizeof(*dpu_kms), GFP_KERNEL);
if (!dpu_kms) if (!dpu_kms)
...@@ -1235,6 +1237,12 @@ static int dpu_kms_init(struct drm_device *ddev) ...@@ -1235,6 +1237,12 @@ static int dpu_kms_init(struct drm_device *ddev)
} }
dpu_kms->num_clocks = ret; dpu_kms->num_clocks = ret;
opp = dev_pm_opp_find_freq_floor(dev, &max_freq);
if (!IS_ERR(opp))
dev_pm_opp_put(opp);
dev_pm_opp_set_rate(dev, max_freq);
ret = msm_kms_init(&dpu_kms->base, &kms_funcs); ret = msm_kms_init(&dpu_kms->base, &kms_funcs);
if (ret) { if (ret) {
DPU_ERROR("failed to init kms, ret=%d\n", ret); DPU_ERROR("failed to init kms, ret=%d\n", ret);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment