On Tue, Jun 12, 2018 at 05:49:03PM -0700, Abhinav Kumar wrote:
> Seamless modes are ones which do not require a display
> to be turned OFF/ON between mode switches.
> 
> Remove support for seamless modes from DPU for now.
> 
> This will be added later based on additional requirements.
> 
> This change depends on the DPU custom property removal series:
>  - https://patchwork.freedesktop.org/series/44592/

Pushed to dpu-staging/for-next, thanks

Sean

> 
> Signed-off-by: Abhinav Kumar <abhin...@codeaurora.org>
> ---
>  drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c    |  31 --------
>  drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 106 
> +---------------------------
>  drivers/gpu/drm/msm/msm_kms.h               |  44 ------------
>  include/uapi/drm/drm_mode.h                 |   1 -
>  4 files changed, 3 insertions(+), 179 deletions(-)
> 
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c 
> b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c
> index 4616a62..9ca8325 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c
> @@ -591,22 +591,6 @@ static void dpu_crtc_destroy(struct drm_crtc *crtc)
>       kfree(dpu_crtc);
>  }
>  
> -static bool dpu_crtc_mode_fixup(struct drm_crtc *crtc,
> -             const struct drm_display_mode *mode,
> -             struct drm_display_mode *adjusted_mode)
> -{
> -     DPU_DEBUG("\n");
> -
> -     if ((msm_is_mode_seamless(adjusted_mode) ||
> -                     msm_is_mode_seamless_vrr(adjusted_mode)) &&
> -             (!crtc->enabled)) {
> -             DPU_ERROR("crtc state prevents seamless transition\n");
> -             return false;
> -     }
> -
> -     return true;
> -}
> -
>  static void _dpu_crtc_setup_blend_cfg(struct dpu_crtc_mixer *mixer,
>               struct dpu_plane_state *pstate)
>  {
> @@ -1728,12 +1712,6 @@ static void dpu_crtc_disable(struct drm_crtc *crtc)
>       mode = &cstate->base.adjusted_mode;
>       priv = crtc->dev->dev_private;
>  
> -     if (msm_is_mode_seamless(mode) || msm_is_mode_seamless_vrr(mode) ||
> -         msm_is_mode_seamless_dms(mode)) {
> -             DPU_DEBUG("Seamless mode is being applied, skip disable\n");
> -             return;
> -     }
> -
>       DPU_DEBUG("crtc%d\n", crtc->base.id);
>  
>       if (dpu_kms_is_suspend_state(crtc->dev))
> @@ -1817,12 +1795,6 @@ static void dpu_crtc_enable(struct drm_crtc *crtc,
>       DPU_EVT32_VERBOSE(DRMID(crtc));
>       dpu_crtc = to_dpu_crtc(crtc);
>  
> -     if (msm_is_mode_seamless(&crtc->state->adjusted_mode) ||
> -         msm_is_mode_seamless_vrr(&crtc->state->adjusted_mode)) {
> -             DPU_DEBUG("Skipping crtc enable, seamless mode\n");
> -             return;
> -     }
> -
>       drm_for_each_encoder(encoder, crtc->dev) {
>               if (encoder->crtc != crtc)
>                       continue;
> @@ -1857,8 +1829,6 @@ static void dpu_crtc_enable(struct drm_crtc *crtc,
>               DPU_POWER_EVENT_PRE_DISABLE,
>               dpu_crtc_handle_power_event, crtc, dpu_crtc->name);
>  
> -     if (msm_needs_vblank_pre_modeset(&crtc->state->adjusted_mode))
> -             drm_crtc_wait_one_vblank(crtc);
>  }
>  
>  struct plane_state {
> @@ -2497,7 +2467,6 @@ static void dpu_crtc_early_unregister(struct drm_crtc 
> *crtc)
>  };
>  
>  static const struct drm_crtc_helper_funcs dpu_crtc_helper_funcs = {
> -     .mode_fixup = dpu_crtc_mode_fixup,
>       .disable = dpu_crtc_disable,
>       .atomic_enable = dpu_crtc_enable,
>       .atomic_check = dpu_crtc_atomic_check,
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c 
> b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
> index 7dd609c..11a1045 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
> @@ -96,15 +96,6 @@
>   *   IDLE is expected when IDLE_PC has run, and PRE_OFF did nothing.
>   *   PRE_OFF is expected when PRE_STOP was executed during the ON state.
>   *   Resource state should be in OFF at the end of the event.
> - * @DPU_ENC_RC_EVENT_PRE_MODESET:
> - *   This event happens at NORMAL priority from a work item.
> - *   Event signals that there is a seamless mode switch is in prgoress. A
> - *   client needs to turn of only irq - leave clocks ON to reduce the mode
> - *   switch latency.
> - * @DPU_ENC_RC_EVENT_POST_MODESET:
> - *   This event happens at NORMAL priority from a work item.
> - *   Event signals that seamless mode switch is complete and resources are
> - *   acquired. Clients wants to turn on the irq again.
>   * @DPU_ENC_RC_EVENT_ENTER_IDLE:
>   *   This event happens at NORMAL priority from a work item.
>   *   Event signals that there were no frame updates for IDLE_TIMEOUT time.
> @@ -116,8 +107,6 @@ enum dpu_enc_rc_events {
>       DPU_ENC_RC_EVENT_FRAME_DONE,
>       DPU_ENC_RC_EVENT_PRE_STOP,
>       DPU_ENC_RC_EVENT_STOP,
> -     DPU_ENC_RC_EVENT_PRE_MODESET,
> -     DPU_ENC_RC_EVENT_POST_MODESET,
>       DPU_ENC_RC_EVENT_ENTER_IDLE
>  };
>  
> @@ -133,7 +122,6 @@ enum dpu_enc_rc_states {
>       DPU_ENC_RC_STATE_OFF,
>       DPU_ENC_RC_STATE_PRE_OFF,
>       DPU_ENC_RC_STATE_ON,
> -     DPU_ENC_RC_STATE_MODESET,
>       DPU_ENC_RC_STATE_IDLE
>  };
>  
> @@ -809,7 +797,6 @@ static int dpu_encoder_resource_control(struct 
> drm_encoder *drm_enc,
>       struct dpu_encoder_virt *dpu_enc;
>       struct msm_drm_private *priv;
>       struct msm_drm_thread *disp_thread;
> -     int ret;
>       bool is_vid_mode = false;
>  
>       if (!drm_enc || !drm_enc->dev || !drm_enc->dev->dev_private ||
> @@ -834,8 +821,6 @@ static int dpu_encoder_resource_control(struct 
> drm_encoder *drm_enc,
>        */
>       if (!dpu_enc->idle_pc_supported &&
>                       (sw_event != DPU_ENC_RC_EVENT_KICKOFF &&
> -                     sw_event != DPU_ENC_RC_EVENT_PRE_MODESET &&
> -                     sw_event != DPU_ENC_RC_EVENT_POST_MODESET &&
>                       sw_event != DPU_ENC_RC_EVENT_STOP &&
>                       sw_event != DPU_ENC_RC_EVENT_PRE_STOP))
>               return 0;
> @@ -966,8 +951,7 @@ static int dpu_encoder_resource_control(struct 
> drm_encoder *drm_enc,
>                               DPU_EVTLOG_FUNC_CASE4);
>                       mutex_unlock(&dpu_enc->rc_lock);
>                       return 0;
> -             } else if (dpu_enc->rc_state == DPU_ENC_RC_STATE_ON ||
> -                        dpu_enc->rc_state == DPU_ENC_RC_STATE_MODESET) {
> +             } else if (dpu_enc->rc_state == DPU_ENC_RC_STATE_ON) {
>                       DPU_ERROR_ENC(dpu_enc, "sw_event:%d, rc in state %d\n",
>                                       sw_event, dpu_enc->rc_state);
>                       DPU_EVT32(DRMID(drm_enc), sw_event, dpu_enc->rc_state,
> @@ -991,69 +975,6 @@ static int dpu_encoder_resource_control(struct 
> drm_encoder *drm_enc,
>               mutex_unlock(&dpu_enc->rc_lock);
>               break;
>  
> -     case DPU_ENC_RC_EVENT_PRE_MODESET:
> -             /* cancel delayed off work, if any */
> -             if (kthread_cancel_delayed_work_sync(
> -                             &dpu_enc->delayed_off_work))
> -                     DPU_DEBUG_ENC(dpu_enc, "sw_event:%d, work cancelled\n",
> -                                     sw_event);
> -
> -             mutex_lock(&dpu_enc->rc_lock);
> -
> -             /* return if the resource control is already in ON state */
> -             if (dpu_enc->rc_state != DPU_ENC_RC_STATE_ON) {
> -                     /* enable all the clks and resources */
> -                     _dpu_encoder_resource_control_helper(drm_enc, true);
> -
> -                     DPU_EVT32(DRMID(drm_enc), sw_event, dpu_enc->rc_state,
> -                             DPU_ENC_RC_STATE_ON, DPU_EVTLOG_FUNC_CASE5);
> -                     dpu_enc->rc_state = DPU_ENC_RC_STATE_ON;
> -             }
> -
> -             ret = dpu_encoder_wait_for_event(drm_enc, MSM_ENC_TX_COMPLETE);
> -             if (ret && ret != -EWOULDBLOCK) {
> -                     DPU_ERROR_ENC(dpu_enc,
> -                                     "wait for commit done returned %d\n",
> -                                     ret);
> -                     DPU_EVT32(DRMID(drm_enc), sw_event, dpu_enc->rc_state,
> -                                     ret, DPU_EVTLOG_ERROR);
> -                     mutex_unlock(&dpu_enc->rc_lock);
> -                     return -EINVAL;
> -             }
> -
> -             _dpu_encoder_irq_control(drm_enc, false);
> -
> -             DPU_EVT32(DRMID(drm_enc), sw_event, dpu_enc->rc_state,
> -                     DPU_ENC_RC_STATE_MODESET, DPU_EVTLOG_FUNC_CASE5);
> -
> -             dpu_enc->rc_state = DPU_ENC_RC_STATE_MODESET;
> -             mutex_unlock(&dpu_enc->rc_lock);
> -             break;
> -
> -     case DPU_ENC_RC_EVENT_POST_MODESET:
> -             mutex_lock(&dpu_enc->rc_lock);
> -
> -             /* return if the resource control is already in ON state */
> -             if (dpu_enc->rc_state != DPU_ENC_RC_STATE_MODESET) {
> -                     DPU_ERROR_ENC(dpu_enc,
> -                                     "sw_event:%d, rc:%d !MODESET state\n",
> -                                     sw_event, dpu_enc->rc_state);
> -                     DPU_EVT32(DRMID(drm_enc), sw_event, dpu_enc->rc_state,
> -                                     DPU_EVTLOG_ERROR);
> -                     mutex_unlock(&dpu_enc->rc_lock);
> -                     return -EINVAL;
> -             }
> -
> -             _dpu_encoder_irq_control(drm_enc, true);
> -
> -             DPU_EVT32(DRMID(drm_enc), sw_event, dpu_enc->rc_state,
> -                             DPU_ENC_RC_STATE_ON, DPU_EVTLOG_FUNC_CASE6);
> -
> -             dpu_enc->rc_state = DPU_ENC_RC_STATE_ON;
> -
> -             mutex_unlock(&dpu_enc->rc_lock);
> -             break;
> -
>       case DPU_ENC_RC_EVENT_ENTER_IDLE:
>               mutex_lock(&dpu_enc->rc_lock);
>  
> @@ -1180,11 +1101,6 @@ static void dpu_encoder_virt_mode_set(struct 
> drm_encoder *drm_enc,
>               }
>       }
>  
> -     /* update resources after seamless mode change */
> -     if (msm_is_mode_seamless_dms(adj_mode))
> -             dpu_encoder_resource_control(&dpu_enc->base,
> -                                             DPU_ENC_RC_EVENT_POST_MODESET);
> -
>       dpu_enc->mode_set_complete = true;
>  }
>  
> @@ -1297,15 +1213,7 @@ static void dpu_encoder_virt_enable(struct drm_encoder 
> *drm_enc)
>                       continue;
>  
>               if (phys != dpu_enc->cur_master) {
> -                     /**
> -                      * on DMS request, the encoder will be enabled
> -                      * already. Invoke restore to reconfigure the
> -                      * new mode.
> -                      */
> -                     if (msm_is_mode_seamless_dms(cur_mode) &&
> -                                     phys->ops.restore)
> -                             phys->ops.restore(phys);
> -                     else if (phys->ops.enable)
> +                     if (phys->ops.enable)
>                               phys->ops.enable(phys);
>               }
>  
> @@ -1315,10 +1223,7 @@ static void dpu_encoder_virt_enable(struct drm_encoder 
> *drm_enc)
>                                               dpu_enc->misr_frame_count);
>       }
>  
> -     if (msm_is_mode_seamless_dms(cur_mode) &&
> -                     dpu_enc->cur_master->ops.restore)
> -             dpu_enc->cur_master->ops.restore(dpu_enc->cur_master);
> -     else if (dpu_enc->cur_master->ops.enable)
> +     if (dpu_enc->cur_master->ops.enable)
>               dpu_enc->cur_master->ops.enable(dpu_enc->cur_master);
>  
>       _dpu_encoder_virt_enable_helper(drm_enc);
> @@ -1344,11 +1249,6 @@ static void dpu_encoder_virt_disable(struct 
> drm_encoder *drm_enc)
>       }
>  
>       mode = &drm_enc->crtc->state->adjusted_mode;
> -     if (msm_is_mode_seamless(mode) || msm_is_mode_seamless_vrr(mode) ||
> -         msm_is_mode_seamless_dms(mode)) {
> -             DPU_DEBUG("Seamless mode is being applied, skip disable\n");
> -             return;
> -     }
>  
>       dpu_enc = to_dpu_encoder_virt(drm_enc);
>       DPU_DEBUG_ENC(dpu_enc, "\n");
> diff --git a/drivers/gpu/drm/msm/msm_kms.h b/drivers/gpu/drm/msm/msm_kms.h
> index 5e1de85..4544d0a 100644
> --- a/drivers/gpu/drm/msm/msm_kms.h
> +++ b/drivers/gpu/drm/msm/msm_kms.h
> @@ -26,19 +26,6 @@
>  
>  #define MAX_PLANE    4
>  
> -/**
> - * Device Private DRM Mode Flags
> - * drm_mode->private_flags
> - */
> -/* Connector has interpreted seamless transition request as dynamic fps */
> -#define MSM_MODE_FLAG_SEAMLESS_DYNAMIC_FPS   (1<<0)
> -/* Transition to new mode requires a wait-for-vblank before the modeset */
> -#define MSM_MODE_FLAG_VBLANK_PRE_MODESET     (1<<1)
> -/* Request to switch the connector mode */
> -#define MSM_MODE_FLAG_SEAMLESS_DMS                   (1<<2)
> -/* Request to switch the fps */
> -#define MSM_MODE_FLAG_SEAMLESS_VRR                   (1<<3)
> -
>  /* As there are different display controller blocks depending on the
>   * snapdragon version, the kms support is split out and the appropriate
>   * implementation is loaded at runtime.  The kms module is responsible
> @@ -146,35 +133,4 @@ struct msm_mdss {
>  int mdp5_mdss_init(struct drm_device *dev);
>  int dpu_mdss_init(struct drm_device *dev);
>  
> -/**
> - * Mode Set Utility Functions
> - */
> -static inline bool msm_is_mode_seamless(const struct drm_display_mode *mode)
> -{
> -     return (mode->flags & DRM_MODE_FLAG_SEAMLESS);
> -}
> -
> -static inline bool msm_is_mode_seamless_dms(const struct drm_display_mode 
> *mode)
> -{
> -     return mode ? (mode->private_flags & MSM_MODE_FLAG_SEAMLESS_DMS)
> -             : false;
> -}
> -
> -static inline bool msm_is_mode_dynamic_fps(const struct drm_display_mode 
> *mode)
> -{
> -     return ((mode->flags & DRM_MODE_FLAG_SEAMLESS) &&
> -             (mode->private_flags & MSM_MODE_FLAG_SEAMLESS_DYNAMIC_FPS));
> -}
> -
> -static inline bool msm_is_mode_seamless_vrr(const struct drm_display_mode 
> *mode)
> -{
> -     return mode ? (mode->private_flags & MSM_MODE_FLAG_SEAMLESS_VRR)
> -             : false;
> -}
> -
> -static inline bool msm_needs_vblank_pre_modeset(
> -             const struct drm_display_mode *mode)
> -{
> -     return (mode->private_flags & MSM_MODE_FLAG_VBLANK_PRE_MODESET);
> -}
>  #endif /* __MSM_KMS_H__ */
> diff --git a/include/uapi/drm/drm_mode.h b/include/uapi/drm/drm_mode.h
> index 4e1a3ff..50bcf42 100644
> --- a/include/uapi/drm/drm_mode.h
> +++ b/include/uapi/drm/drm_mode.h
> @@ -88,7 +88,6 @@
>  #define  DRM_MODE_FLAG_3D_L_DEPTH_GFX_GFX_DEPTH      (6<<14)
>  #define  DRM_MODE_FLAG_3D_TOP_AND_BOTTOM     (7<<14)
>  #define  DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF  (8<<14)
> -#define  DRM_MODE_FLAG_SEAMLESS                      (1<<19)
>  
>  /* Picture aspect ratio options */
>  #define DRM_MODE_PICTURE_ASPECT_NONE         0
> -- 
> The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
> a Linux Foundation Collaborative Project
> 

-- 
Sean Paul, Software Engineer, Google / Chromium OS
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to