diff --git a/msm/sde/sde_crtc.c b/msm/sde/sde_crtc.c index eb2619bef2..43fe353016 100644 --- a/msm/sde/sde_crtc.c +++ b/msm/sde/sde_crtc.c @@ -5659,6 +5659,9 @@ void sde_crtc_misr_setup(struct drm_crtc *crtc, bool enable, u32 frame_count) } sde_crtc = to_sde_crtc(crtc); + if (!sde_crtc->misr_reconfigure) + return; + sde_crtc->misr_enable_sui = enable; sde_crtc->misr_frame_count = frame_count; for (i = 0; i < sde_crtc->num_mixers; ++i) { @@ -5668,6 +5671,7 @@ void sde_crtc_misr_setup(struct drm_crtc *crtc, bool enable, u32 frame_count) m->hw_lm->ops.setup_misr(m->hw_lm, enable, frame_count); } + sde_crtc->misr_reconfigure = false; } void sde_crtc_get_misr_info(struct drm_crtc *crtc, @@ -5893,6 +5897,7 @@ static ssize_t _sde_crtc_misr_setup(struct file *file, return rc; sde_crtc->misr_enable_debugfs = enable; + sde_crtc->misr_reconfigure = true; sde_crtc_misr_setup(crtc, enable, frame_count); pm_runtime_put_sync(crtc->dev->dev); diff --git a/msm/sde/sde_crtc.h b/msm/sde/sde_crtc.h index 339900deb5..525490ad22 100644 --- a/msm/sde/sde_crtc.h +++ b/msm/sde/sde_crtc.h @@ -267,6 +267,7 @@ struct sde_crtc_misr_info { * for secure cases. * @misr_enable_debugfs : boolean entry indicates misr enable/disable status * from debugfs. + * @misr_reconfigure : boolean entry indicates misr reconfigure status * @misr_frame_count : misr frame count provided by client * @misr_data : store misr data before turning off the clocks. * @idle_notify_work: delayed worker to notify idle timeout to user space @@ -341,6 +342,7 @@ struct sde_crtc { spinlock_t event_lock; bool misr_enable_sui; bool misr_enable_debugfs; + bool misr_reconfigure; u32 misr_frame_count; struct kthread_delayed_work idle_notify_work; diff --git a/msm/sde/sde_encoder.c b/msm/sde/sde_encoder.c index 29118e298d..0fbe17cf41 100644 --- a/msm/sde/sde_encoder.c +++ b/msm/sde/sde_encoder.c @@ -1485,6 +1485,9 @@ static void sde_encoder_misr_configure(struct drm_encoder *drm_enc, } sde_enc = to_sde_encoder_virt(drm_enc); + if (!sde_enc->misr_reconfigure) + return; + for (i = 0; i < sde_enc->num_phys_encs; i++) { struct sde_encoder_phys *phys = sde_enc->phys_encs[i]; @@ -1493,6 +1496,7 @@ static void sde_encoder_misr_configure(struct drm_encoder *drm_enc, phys->ops.setup_misr(phys, enable, frame_count); } + sde_enc->misr_reconfigure = false; } static void sde_encoder_input_event_handler(struct input_handle *handle, @@ -4292,6 +4296,7 @@ static ssize_t _sde_encoder_misr_setup(struct file *file, return rc; sde_enc->misr_enable = enable; + sde_enc->misr_reconfigure = true; sde_enc->misr_frame_count = frame_count; sde_encoder_misr_configure(&sde_enc->base, enable, frame_count); pm_runtime_put_sync(drm_enc->dev->dev); diff --git a/msm/sde/sde_encoder.h b/msm/sde/sde_encoder.h index e7b3924d43..c87c7a71c7 100644 --- a/msm/sde/sde_encoder.h +++ b/msm/sde/sde_encoder.h @@ -159,6 +159,7 @@ struct sde_encoder_ops { * @rsc_state_init: boolean to indicate rsc config init * @disp_info: local copy of msm_display_info struct * @misr_enable: misr enable/disable status + * @misr_reconfigure: boolean entry indicates misr reconfigure status * @misr_frame_count: misr frame count before start capturing the data * @idle_pc_enabled: indicate if idle power collapse is enabled * currently. This can be controlled by user-mode @@ -226,6 +227,7 @@ struct sde_encoder_virt { bool rsc_state_init; struct msm_display_info disp_info; bool misr_enable; + bool misr_reconfigure; u32 misr_frame_count; bool idle_pc_enabled;