Skip to content

Commit c612268

Browse files
committed
drm/msm/mdp5: stop overriding drvdata
The rest of the code expects that master's device drvdata is the struct msm_drm_private instance. Do not override the mdp5's drvdata. Fixes: 6874f48 ("drm/msm: make mdp5/dpu devices master components") Signed-off-by: Dmitry Baryshkov <[email protected]> Reviewed-by: Abhinav Kumar <[email protected]> Patchwork: https://patchwork.freedesktop.org/patch/508334/ Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Dmitry Baryshkov <[email protected]>
1 parent 9a5c158 commit c612268

File tree

1 file changed

+17
-15
lines changed

1 file changed

+17
-15
lines changed

drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ static int mdp5_set_split_display(struct msm_kms *kms,
203203
slave_encoder);
204204
}
205205

206-
static void mdp5_destroy(struct platform_device *pdev);
206+
static void mdp5_destroy(struct mdp5_kms *mdp5_kms);
207207

208208
static void mdp5_kms_destroy(struct msm_kms *kms)
209209
{
@@ -223,7 +223,7 @@ static void mdp5_kms_destroy(struct msm_kms *kms)
223223
}
224224

225225
mdp_kms_destroy(&mdp5_kms->base);
226-
mdp5_destroy(mdp5_kms->pdev);
226+
mdp5_destroy(mdp5_kms);
227227
}
228228

229229
#ifdef CONFIG_DEBUG_FS
@@ -519,9 +519,10 @@ static void read_mdp_hw_revision(struct mdp5_kms *mdp5_kms,
519519
struct device *dev = &mdp5_kms->pdev->dev;
520520
u32 version;
521521

522-
pm_runtime_get_sync(dev);
522+
/* Manually enable the MDP5, as pm runtime isn't usable yet. */
523+
mdp5_enable(mdp5_kms);
523524
version = mdp5_read(mdp5_kms, REG_MDP5_HW_VERSION);
524-
pm_runtime_put_sync(dev);
525+
mdp5_disable(mdp5_kms);
525526

526527
*major = FIELD(version, MDP5_HW_VERSION_MAJOR);
527528
*minor = FIELD(version, MDP5_HW_VERSION_MINOR);
@@ -559,6 +560,8 @@ static int mdp5_kms_init(struct drm_device *dev)
559560
int irq, i, ret;
560561

561562
ret = mdp5_init(to_platform_device(dev->dev), dev);
563+
if (ret)
564+
return ret;
562565

563566
/* priv->kms would have been populated by the MDP5 driver */
564567
kms = priv->kms;
@@ -632,9 +635,8 @@ static int mdp5_kms_init(struct drm_device *dev)
632635
return ret;
633636
}
634637

635-
static void mdp5_destroy(struct platform_device *pdev)
638+
static void mdp5_destroy(struct mdp5_kms *mdp5_kms)
636639
{
637-
struct mdp5_kms *mdp5_kms = platform_get_drvdata(pdev);
638640
int i;
639641

640642
if (mdp5_kms->ctlm)
@@ -648,7 +650,7 @@ static void mdp5_destroy(struct platform_device *pdev)
648650
kfree(mdp5_kms->intfs[i]);
649651

650652
if (mdp5_kms->rpm_enabled)
651-
pm_runtime_disable(&pdev->dev);
653+
pm_runtime_disable(&mdp5_kms->pdev->dev);
652654

653655
drm_atomic_private_obj_fini(&mdp5_kms->glob_state);
654656
drm_modeset_lock_fini(&mdp5_kms->glob_state_lock);
@@ -797,8 +799,6 @@ static int mdp5_init(struct platform_device *pdev, struct drm_device *dev)
797799
goto fail;
798800
}
799801

800-
platform_set_drvdata(pdev, mdp5_kms);
801-
802802
spin_lock_init(&mdp5_kms->resource_lock);
803803

804804
mdp5_kms->dev = dev;
@@ -839,9 +839,6 @@ static int mdp5_init(struct platform_device *pdev, struct drm_device *dev)
839839
*/
840840
clk_set_rate(mdp5_kms->core_clk, 200000000);
841841

842-
pm_runtime_enable(&pdev->dev);
843-
mdp5_kms->rpm_enabled = true;
844-
845842
read_mdp_hw_revision(mdp5_kms, &major, &minor);
846843

847844
mdp5_kms->cfg = mdp5_cfg_init(mdp5_kms, major, minor);
@@ -893,10 +890,13 @@ static int mdp5_init(struct platform_device *pdev, struct drm_device *dev)
893890
/* set uninit-ed kms */
894891
priv->kms = &mdp5_kms->base.base;
895892

893+
pm_runtime_enable(&pdev->dev);
894+
mdp5_kms->rpm_enabled = true;
895+
896896
return 0;
897897
fail:
898898
if (mdp5_kms)
899-
mdp5_destroy(pdev);
899+
mdp5_destroy(mdp5_kms);
900900
return ret;
901901
}
902902

@@ -953,7 +953,8 @@ static int mdp5_dev_remove(struct platform_device *pdev)
953953
static __maybe_unused int mdp5_runtime_suspend(struct device *dev)
954954
{
955955
struct platform_device *pdev = to_platform_device(dev);
956-
struct mdp5_kms *mdp5_kms = platform_get_drvdata(pdev);
956+
struct msm_drm_private *priv = platform_get_drvdata(pdev);
957+
struct mdp5_kms *mdp5_kms = to_mdp5_kms(to_mdp_kms(priv->kms));
957958

958959
DBG("");
959960

@@ -963,7 +964,8 @@ static __maybe_unused int mdp5_runtime_suspend(struct device *dev)
963964
static __maybe_unused int mdp5_runtime_resume(struct device *dev)
964965
{
965966
struct platform_device *pdev = to_platform_device(dev);
966-
struct mdp5_kms *mdp5_kms = platform_get_drvdata(pdev);
967+
struct msm_drm_private *priv = platform_get_drvdata(pdev);
968+
struct mdp5_kms *mdp5_kms = to_mdp5_kms(to_mdp_kms(priv->kms));
967969

968970
DBG("");
969971

0 commit comments

Comments
 (0)