Loading drivers/gpu/drm/msm/sde/sde_crtc.c +1 −5 Original line number Diff line number Diff line Loading @@ -3537,11 +3537,7 @@ static int _sde_crtc_commit_kickoff_rot(struct drm_crtc *crtc, if (master_ctl && master_ctl->ops.update_bitmask_rot) { master_ctl->ops.update_bitmask_rot(master_ctl, rot_id, 1); /* explicitly trigger rotator for async modes */ if (cstate->sbuf_cfg.rot_op_mode == SDE_CTL_ROT_OP_MODE_INLINE_ASYNC && master_ctl->ops.trigger_rot_start) master_ctl->ops.trigger_rot_start(master_ctl); /* defer ROT_START trigger until CTL_START */ SDE_EVT32(DRMID(crtc), master_ctl->idx - CTL_0, sde_crtc->sbuf_rot_id, sde_crtc->sbuf_rot_id_delta); Loading drivers/gpu/drm/msm/sde/sde_crtc.h +13 −0 Original line number Diff line number Diff line Loading @@ -501,6 +501,19 @@ static inline int sde_crtc_get_mixer_height(struct sde_crtc *sde_crtc, cstate->ds_cfg[0].lm_height : mode->vdisplay); } /** * sde_crtc_get_rotator_op_mode - get the rotator op mode from the crtc state * @crtc: Pointer to drm crtc object */ static inline enum sde_ctl_rot_op_mode sde_crtc_get_rotator_op_mode( struct drm_crtc *crtc) { if (!crtc || !crtc->state) return SDE_CTL_ROT_OP_MODE_OFFLINE; return to_sde_crtc_state(crtc->state)->sbuf_cfg.rot_op_mode; } /** * sde_crtc_frame_pending - retun the number of pending frames * @crtc: Pointer to drm crtc object Loading drivers/gpu/drm/msm/sde/sde_encoder.c +19 −1 Original line number Diff line number Diff line Loading @@ -3190,6 +3190,7 @@ static inline void _sde_encoder_trigger_flush(struct drm_encoder *drm_enc, static inline void _sde_encoder_trigger_start(struct sde_encoder_phys *phys) { struct sde_hw_ctl *ctl; struct sde_encoder_virt *sde_enc; if (!phys) { SDE_ERROR("invalid argument(s)\n"); Loading @@ -3201,14 +3202,31 @@ static inline void _sde_encoder_trigger_start(struct sde_encoder_phys *phys) return; } if (!phys->parent) { SDE_ERROR("invalid parent\n"); return; } ctl = phys->hw_ctl; sde_enc = to_sde_encoder_virt(phys->parent); if (phys->split_role == ENC_ROLE_SKIP) { SDE_DEBUG_ENC(to_sde_encoder_virt(phys->parent), SDE_DEBUG_ENC(sde_enc, "skip start pp%d ctl%d\n", phys->hw_pp->idx - PINGPONG_0, ctl->idx - CTL_0); return; } /* Start rotator before CTL_START for async inline mode */ if (sde_crtc_get_rotator_op_mode(sde_enc->crtc) == SDE_CTL_ROT_OP_MODE_INLINE_ASYNC && ctl->ops.trigger_rot_start) { SDE_DEBUG_ENC(sde_enc, "trigger rotator start ctl%d\n", ctl->idx - CTL_0); ctl->ops.trigger_rot_start(ctl); } if (phys->ops.trigger_start && phys->enable_state != SDE_ENC_DISABLED) phys->ops.trigger_start(phys); } Loading Loading
drivers/gpu/drm/msm/sde/sde_crtc.c +1 −5 Original line number Diff line number Diff line Loading @@ -3537,11 +3537,7 @@ static int _sde_crtc_commit_kickoff_rot(struct drm_crtc *crtc, if (master_ctl && master_ctl->ops.update_bitmask_rot) { master_ctl->ops.update_bitmask_rot(master_ctl, rot_id, 1); /* explicitly trigger rotator for async modes */ if (cstate->sbuf_cfg.rot_op_mode == SDE_CTL_ROT_OP_MODE_INLINE_ASYNC && master_ctl->ops.trigger_rot_start) master_ctl->ops.trigger_rot_start(master_ctl); /* defer ROT_START trigger until CTL_START */ SDE_EVT32(DRMID(crtc), master_ctl->idx - CTL_0, sde_crtc->sbuf_rot_id, sde_crtc->sbuf_rot_id_delta); Loading
drivers/gpu/drm/msm/sde/sde_crtc.h +13 −0 Original line number Diff line number Diff line Loading @@ -501,6 +501,19 @@ static inline int sde_crtc_get_mixer_height(struct sde_crtc *sde_crtc, cstate->ds_cfg[0].lm_height : mode->vdisplay); } /** * sde_crtc_get_rotator_op_mode - get the rotator op mode from the crtc state * @crtc: Pointer to drm crtc object */ static inline enum sde_ctl_rot_op_mode sde_crtc_get_rotator_op_mode( struct drm_crtc *crtc) { if (!crtc || !crtc->state) return SDE_CTL_ROT_OP_MODE_OFFLINE; return to_sde_crtc_state(crtc->state)->sbuf_cfg.rot_op_mode; } /** * sde_crtc_frame_pending - retun the number of pending frames * @crtc: Pointer to drm crtc object Loading
drivers/gpu/drm/msm/sde/sde_encoder.c +19 −1 Original line number Diff line number Diff line Loading @@ -3190,6 +3190,7 @@ static inline void _sde_encoder_trigger_flush(struct drm_encoder *drm_enc, static inline void _sde_encoder_trigger_start(struct sde_encoder_phys *phys) { struct sde_hw_ctl *ctl; struct sde_encoder_virt *sde_enc; if (!phys) { SDE_ERROR("invalid argument(s)\n"); Loading @@ -3201,14 +3202,31 @@ static inline void _sde_encoder_trigger_start(struct sde_encoder_phys *phys) return; } if (!phys->parent) { SDE_ERROR("invalid parent\n"); return; } ctl = phys->hw_ctl; sde_enc = to_sde_encoder_virt(phys->parent); if (phys->split_role == ENC_ROLE_SKIP) { SDE_DEBUG_ENC(to_sde_encoder_virt(phys->parent), SDE_DEBUG_ENC(sde_enc, "skip start pp%d ctl%d\n", phys->hw_pp->idx - PINGPONG_0, ctl->idx - CTL_0); return; } /* Start rotator before CTL_START for async inline mode */ if (sde_crtc_get_rotator_op_mode(sde_enc->crtc) == SDE_CTL_ROT_OP_MODE_INLINE_ASYNC && ctl->ops.trigger_rot_start) { SDE_DEBUG_ENC(sde_enc, "trigger rotator start ctl%d\n", ctl->idx - CTL_0); ctl->ops.trigger_rot_start(ctl); } if (phys->ops.trigger_start && phys->enable_state != SDE_ENC_DISABLED) phys->ops.trigger_start(phys); } Loading