drm/msm/mdp5: Don't use mode_set helper funcs for encoders and CRTCs
authorArchit Taneja <architt@codeaurora.org>
Fri, 28 Jul 2017 10:47:05 +0000 (16:17 +0530)
committerRob Clark <robdclark@gmail.com>
Wed, 2 Aug 2017 11:53:46 +0000 (07:53 -0400)
We shouldn't use use mode_set/mode_set_nofb helpers when we use runtime
PM. The registers configured in these funcs lose their state when we
eventually enable the display pipeline.

Do not implement these vfuncs in the helpers, and call them in the
crtc_enable/encoder_enable paths instead.

Signed-off-by: Archit Taneja <architt@codeaurora.org>
Signed-off-by: Rob Clark <robdclark@gmail.com>
drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c
drivers/gpu/drm/msm/mdp/mdp5/mdp5_encoder.c

index aa9d56972e3d6186ff788caf2c1bf267f506f7b9..674553b21126bef38e967eecf6fb3b3027dfd667 100644 (file)
@@ -443,6 +443,9 @@ static void mdp5_crtc_enable(struct drm_crtc *crtc)
                return;
 
        pm_runtime_get_sync(dev);
+
+       mdp5_crtc_mode_set_nofb(crtc);
+
        mdp_irq_register(&mdp5_kms->base, &mdp5_crtc->err);
 
        if (mdp5_cstate->cmd_mode)
@@ -951,7 +954,6 @@ static const struct drm_crtc_funcs mdp5_crtc_no_lm_cursor_funcs = {
 };
 
 static const struct drm_crtc_helper_funcs mdp5_crtc_helper_funcs = {
-       .mode_set_nofb = mdp5_crtc_mode_set_nofb,
        .disable = mdp5_crtc_disable,
        .enable = mdp5_crtc_enable,
        .atomic_check = mdp5_crtc_atomic_check,
index 0ca9e4033bb60ac98a83c48535da03b8b5ed2bac..5b851380d3f2d5a1f73d1babe5f28cebfa9ee0e5 100644 (file)
@@ -297,6 +297,10 @@ static void mdp5_encoder_enable(struct drm_encoder *encoder)
 {
        struct mdp5_encoder *mdp5_encoder = to_mdp5_encoder(encoder);
        struct mdp5_interface *intf = mdp5_encoder->intf;
+       /* this isn't right I think */
+       struct drm_crtc_state *cstate = encoder->crtc->state;
+
+       mdp5_encoder_mode_set(encoder, &cstate->mode, &cstate->adjusted_mode);
 
        if (intf->mode == MDP5_INTF_DSI_MODE_COMMAND)
                mdp5_cmd_encoder_enable(encoder);
@@ -320,7 +324,6 @@ static int mdp5_encoder_atomic_check(struct drm_encoder *encoder,
 }
 
 static const struct drm_encoder_helper_funcs mdp5_encoder_helper_funcs = {
-       .mode_set = mdp5_encoder_mode_set,
        .disable = mdp5_encoder_disable,
        .enable = mdp5_encoder_enable,
        .atomic_check = mdp5_encoder_atomic_check,