On Wed, 4 Oct 2023 at 19:27, Kuogee Hsieh <quic_khsieh@xxxxxxxxxxx> wrote: > > Currently DP driver is executed independent of PM runtime framework. > This leads msm eDP panel can not being detected by edp_panel driver during > generic_edp_panel_probe() due to AUX DPCD read failed at edp panel driver. > Incorporate PM runtime framework into DP driver so that host controller's > power and clocks are enable/disable through PM runtime mechanism. > Once PM runtime framework is incorporated into DP driver, waking up device > from power up path is not necessary. Hence remove it. > > After incorporating pm_runtime framework into eDP/DP driver, dp_pm_suspend() > to handle power off both DP phy and controller during suspend and > dp_pm_resume() to handle power on both DP phy and controller during resume > are not necessary. Therefore both dp_pm_suspend() and dp_pm_resume() are > dropped and replace with dp_pm_runtime_suspend() and dp_pm_runtime_resume() > respectively. > > Changes in v5: > -- remove pm_runtime_put_autosuspend feature, use pm_runtime_put_sync() directly > -- squash add pm_runtime_force_suspend()/resume() patch into this patch > > Changes in v4: > -- reworded commit text to explain why pm_framework is required for edp panel > -- reworded commit text to explain autosuspend is choiced > -- delete EV_POWER_PM_GET and PM_EV_POWER_PUT from changes #3 > -- delete dp_display_pm_get() and dp_display_pm_Put() from changes #3 > -- return value from pm_runtime_resume_and_get() directly > -- check return value of devm_pm_runtime_enable() > -- delete pm_runtime_xxx from dp_display_remove() > -- drop dp_display_host_init() from EV_HPD_INIT_SETUP > -- drop both dp_pm_prepare() and dp_pm_compete() from this change > -- delete ST_SUSPENDED state > -- rewording commit text to add more details regrading the purpose > of this change > > Changes in v3: > -- incorporate removing pm_runtime_xx() from dp_pwer.c to this patch > -- use pm_runtime_resume_and_get() instead of pm_runtime_get() > -- error checking pm_runtime_resume_and_get() return value > -- add EV_POWER_PM_GET and PM_EV_POWER_PUT to handle HPD_GPIO case > -- replace dp_pm_suspend() with pm_runtime_force_suspend() > -- replace dp_pm_resume() with pm_runtime_force_resume() > > Signed-off-by: Kuogee Hsieh <quic_khsieh@xxxxxxxxxxx> > Reported-by: kernel test robot <lkp@xxxxxxxxx> > --- > drivers/gpu/drm/msm/dp/dp_aux.c | 5 ++ > drivers/gpu/drm/msm/dp/dp_display.c | 166 ++++++++++++------------------------ > drivers/gpu/drm/msm/dp/dp_power.c | 16 ---- > drivers/gpu/drm/msm/dp/dp_power.h | 11 --- > 4 files changed, 59 insertions(+), 139 deletions(-) [skipped] > @@ -1702,6 +1638,12 @@ void dp_bridge_hpd_enable(struct drm_bridge *bridge) > struct dp_display_private *dp = container_of(dp_display, struct dp_display_private, dp_display); > > mutex_lock(&dp->event_mutex); > + if (pm_runtime_resume_and_get(&dp->pdev->dev)) { > + DRM_ERROR("failed to start power\n"); It was in the previous review comment: "failed to resume". > + mutex_unlock(&dp->event_mutex); > + return; > + } > + -- With best wishes Dmitry