Loading drivers/gpu/drm/msm/sde/sde_encoder.c +19 −0 Original line number Diff line number Diff line Loading @@ -2229,6 +2229,25 @@ int sde_encoder_helper_hw_release(struct sde_encoder_phys *phys_enc, return 0; } void sde_encoder_prepare_commit(struct drm_encoder *drm_enc) { struct sde_encoder_virt *sde_enc; struct sde_encoder_phys *phys; int i; if (!drm_enc) { SDE_ERROR("invalid encoder\n"); return; } sde_enc = to_sde_encoder_virt(drm_enc); for (i = 0; i < sde_enc->num_phys_encs; i++) { phys = sde_enc->phys_encs[i]; if (phys && phys->ops.prepare_commit) phys->ops.prepare_commit(phys); } } #ifdef CONFIG_DEBUG_FS static int _sde_encoder_status_show(struct seq_file *s, void *data) { Loading drivers/gpu/drm/msm/sde/sde_encoder.h +7 −0 Original line number Diff line number Diff line Loading @@ -179,4 +179,11 @@ struct drm_encoder *sde_encoder_init( */ void sde_encoder_destroy(struct drm_encoder *drm_enc); /** * sde_encoder_prepare_commit - prepare encoder at the very beginning of an * atomic commit, before any registers are written * @drm_enc: Pointer to previously created drm encoder structure */ void sde_encoder_prepare_commit(struct drm_encoder *drm_enc); #endif /* __SDE_ENCODER_H__ */ drivers/gpu/drm/msm/sde/sde_encoder_phys.h +2 −0 Original line number Diff line number Diff line Loading @@ -94,6 +94,7 @@ struct sde_encoder_virt_ops { * struct sde_encoder_phys_ops - Interface the physical encoders provide to * the containing virtual encoder. * @late_register: DRM Call. Add Userspace interfaces, debugfs. * @prepare_commit: MSM Atomic Call, start of atomic commit sequence * @is_master: Whether this phys_enc is the current master * encoder. Can be switched at enable time. Based * on split_role and current mode (CMD/VID). Loading Loading @@ -127,6 +128,7 @@ struct sde_encoder_virt_ops { struct sde_encoder_phys_ops { int (*late_register)(struct sde_encoder_phys *encoder, struct dentry *debugfs_root); void (*prepare_commit)(struct sde_encoder_phys *encoder); bool (*is_master)(struct sde_encoder_phys *encoder); bool (*mode_fixup)(struct sde_encoder_phys *encoder, const struct drm_display_mode *mode, Loading drivers/gpu/drm/msm/sde/sde_encoder_phys_cmd.c +6 −0 Original line number Diff line number Diff line Loading @@ -864,9 +864,15 @@ static void sde_encoder_phys_cmd_update_split_role( _sde_encoder_phys_cmd_update_flush_mask(phys_enc); } static void sde_encoder_phys_cmd_prepare_commit( struct sde_encoder_phys *phys_enc) { } static void sde_encoder_phys_cmd_init_ops( struct sde_encoder_phys_ops *ops) { ops->prepare_commit = sde_encoder_phys_cmd_prepare_commit; ops->is_master = sde_encoder_phys_cmd_is_master; ops->mode_set = sde_encoder_phys_cmd_mode_set; ops->mode_fixup = sde_encoder_phys_cmd_mode_fixup; Loading drivers/gpu/drm/msm/sde/sde_kms.c +10 −2 Original line number Diff line number Diff line Loading @@ -353,16 +353,24 @@ static void sde_kms_prepare_commit(struct msm_kms *kms, { struct sde_kms *sde_kms; struct msm_drm_private *priv; struct drm_device *dev; struct drm_encoder *encoder; if (!kms) return; sde_kms = to_sde_kms(kms); dev = sde_kms->dev; if (!sde_kms->dev || !sde_kms->dev->dev_private) if (!dev || !dev->dev_private) return; priv = sde_kms->dev->dev_private; priv = dev->dev_private; sde_power_resource_enable(&priv->phandle, sde_kms->core_client, true); list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) if (encoder->crtc != NULL) sde_encoder_prepare_commit(encoder); } static void sde_kms_commit(struct msm_kms *kms, Loading Loading
drivers/gpu/drm/msm/sde/sde_encoder.c +19 −0 Original line number Diff line number Diff line Loading @@ -2229,6 +2229,25 @@ int sde_encoder_helper_hw_release(struct sde_encoder_phys *phys_enc, return 0; } void sde_encoder_prepare_commit(struct drm_encoder *drm_enc) { struct sde_encoder_virt *sde_enc; struct sde_encoder_phys *phys; int i; if (!drm_enc) { SDE_ERROR("invalid encoder\n"); return; } sde_enc = to_sde_encoder_virt(drm_enc); for (i = 0; i < sde_enc->num_phys_encs; i++) { phys = sde_enc->phys_encs[i]; if (phys && phys->ops.prepare_commit) phys->ops.prepare_commit(phys); } } #ifdef CONFIG_DEBUG_FS static int _sde_encoder_status_show(struct seq_file *s, void *data) { Loading
drivers/gpu/drm/msm/sde/sde_encoder.h +7 −0 Original line number Diff line number Diff line Loading @@ -179,4 +179,11 @@ struct drm_encoder *sde_encoder_init( */ void sde_encoder_destroy(struct drm_encoder *drm_enc); /** * sde_encoder_prepare_commit - prepare encoder at the very beginning of an * atomic commit, before any registers are written * @drm_enc: Pointer to previously created drm encoder structure */ void sde_encoder_prepare_commit(struct drm_encoder *drm_enc); #endif /* __SDE_ENCODER_H__ */
drivers/gpu/drm/msm/sde/sde_encoder_phys.h +2 −0 Original line number Diff line number Diff line Loading @@ -94,6 +94,7 @@ struct sde_encoder_virt_ops { * struct sde_encoder_phys_ops - Interface the physical encoders provide to * the containing virtual encoder. * @late_register: DRM Call. Add Userspace interfaces, debugfs. * @prepare_commit: MSM Atomic Call, start of atomic commit sequence * @is_master: Whether this phys_enc is the current master * encoder. Can be switched at enable time. Based * on split_role and current mode (CMD/VID). Loading Loading @@ -127,6 +128,7 @@ struct sde_encoder_virt_ops { struct sde_encoder_phys_ops { int (*late_register)(struct sde_encoder_phys *encoder, struct dentry *debugfs_root); void (*prepare_commit)(struct sde_encoder_phys *encoder); bool (*is_master)(struct sde_encoder_phys *encoder); bool (*mode_fixup)(struct sde_encoder_phys *encoder, const struct drm_display_mode *mode, Loading
drivers/gpu/drm/msm/sde/sde_encoder_phys_cmd.c +6 −0 Original line number Diff line number Diff line Loading @@ -864,9 +864,15 @@ static void sde_encoder_phys_cmd_update_split_role( _sde_encoder_phys_cmd_update_flush_mask(phys_enc); } static void sde_encoder_phys_cmd_prepare_commit( struct sde_encoder_phys *phys_enc) { } static void sde_encoder_phys_cmd_init_ops( struct sde_encoder_phys_ops *ops) { ops->prepare_commit = sde_encoder_phys_cmd_prepare_commit; ops->is_master = sde_encoder_phys_cmd_is_master; ops->mode_set = sde_encoder_phys_cmd_mode_set; ops->mode_fixup = sde_encoder_phys_cmd_mode_fixup; Loading
drivers/gpu/drm/msm/sde/sde_kms.c +10 −2 Original line number Diff line number Diff line Loading @@ -353,16 +353,24 @@ static void sde_kms_prepare_commit(struct msm_kms *kms, { struct sde_kms *sde_kms; struct msm_drm_private *priv; struct drm_device *dev; struct drm_encoder *encoder; if (!kms) return; sde_kms = to_sde_kms(kms); dev = sde_kms->dev; if (!sde_kms->dev || !sde_kms->dev->dev_private) if (!dev || !dev->dev_private) return; priv = sde_kms->dev->dev_private; priv = dev->dev_private; sde_power_resource_enable(&priv->phandle, sde_kms->core_client, true); list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) if (encoder->crtc != NULL) sde_encoder_prepare_commit(encoder); } static void sde_kms_commit(struct msm_kms *kms, Loading