Loading msm/sde/sde_crtc.c +17 −0 Original line number Diff line number Diff line Loading @@ -5332,6 +5332,23 @@ static int sde_crtc_atomic_set_property(struct drm_crtc *crtc, return ret; } void sde_crtc_set_qos_dirty(struct drm_crtc *crtc) { struct drm_plane *plane; struct drm_plane_state *state; struct sde_plane_state *pstate; drm_atomic_crtc_for_each_plane(plane, crtc) { state = plane->state; if (!state) continue; pstate = to_sde_plane_state(state); pstate->dirty |= SDE_PLANE_DIRTY_QOS; } } /** * sde_crtc_atomic_get_property - retrieve a crtc drm property * @crtc: Pointer to drm crtc structure Loading msm/sde/sde_crtc.h +7 −0 Original line number Diff line number Diff line Loading @@ -819,6 +819,13 @@ void sde_crtc_timeline_status(struct drm_crtc *crtc); void sde_crtc_update_cont_splash_settings( struct drm_crtc *crtc); /** * sde_crtc_set_qos_dirty - update plane dirty flag to include * QoS reprogramming which is required during fps switch * @crtc: Pointer to drm crtc structure */ void sde_crtc_set_qos_dirty(struct drm_crtc *crtc); /** * sde_crtc_misr_setup - to configure and enable/disable MISR * @crtc: Pointer to drm crtc structure Loading msm/sde/sde_encoder.c +2 −0 Original line number Diff line number Diff line Loading @@ -2122,6 +2122,8 @@ static void sde_encoder_virt_mode_set(struct drm_encoder *drm_enc, } drm_connector_list_iter_end(&conn_iter); sde_crtc_set_qos_dirty(sde_enc->crtc); if (!conn) { SDE_ERROR_ENC(sde_enc, "failed to find attached connector\n"); return; Loading msm/sde/sde_plane.c +12 −3 Original line number Diff line number Diff line Loading @@ -3129,6 +3129,8 @@ static void _sde_plane_update_properties(struct drm_plane *plane, psde->pipe_hw->ops.setup_sharpening) _sde_plane_update_sharpening(psde); if (pstate->dirty & (SDE_PLANE_DIRTY_QOS | SDE_PLANE_DIRTY_RECTS | SDE_PLANE_DIRTY_FORMAT)) _sde_plane_set_qos_lut(plane, crtc, fb); if (plane->type != DRM_PLANE_TYPE_CURSOR) { Loading @@ -3138,6 +3140,7 @@ static void _sde_plane_update_properties(struct drm_plane *plane, _sde_plane_set_ts_prefill(plane, pstate); } if (pstate->dirty & SDE_PLANE_DIRTY_QOS) _sde_plane_set_qos_remap(plane); /* clear dirty */ Loading @@ -3155,6 +3158,7 @@ static int sde_plane_sspp_atomic_update(struct drm_plane *plane, struct drm_framebuffer *fb; int idx; int dirty_prop_flag; bool is_rt; if (!plane) { SDE_ERROR("invalid plane\n"); Loading Loading @@ -3231,12 +3235,17 @@ static int sde_plane_sspp_atomic_update(struct drm_plane *plane, _sde_plane_set_scanout(plane, pstate, &psde->pipe_cfg, fb); is_rt = sde_crtc_is_rt_client(crtc, crtc->state); if (is_rt != psde->is_rt_pipe) { psde->is_rt_pipe = is_rt; pstate->dirty |= SDE_PLANE_DIRTY_QOS; } /* early out if nothing dirty */ if (!pstate->dirty) return 0; pstate->pending = true; psde->is_rt_pipe = sde_crtc_is_rt_client(crtc, crtc->state); _sde_plane_set_qos_ctrl(plane, false, SDE_PLANE_QOS_PANIC_CTRL); _sde_plane_update_properties(plane, crtc, fb); Loading msm/sde/sde_plane.h +1 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ #define SDE_PLANE_DIRTY_VIG_IGC 0x40 #define SDE_PLANE_DIRTY_DMA_IGC 0x80 #define SDE_PLANE_DIRTY_DMA_GC 0x100 #define SDE_PLANE_DIRTY_QOS 0x200 #define SDE_PLANE_DIRTY_CP (SDE_PLANE_DIRTY_VIG_GAMUT |\ SDE_PLANE_DIRTY_VIG_IGC | SDE_PLANE_DIRTY_DMA_IGC |\ SDE_PLANE_DIRTY_DMA_GC) Loading Loading
msm/sde/sde_crtc.c +17 −0 Original line number Diff line number Diff line Loading @@ -5332,6 +5332,23 @@ static int sde_crtc_atomic_set_property(struct drm_crtc *crtc, return ret; } void sde_crtc_set_qos_dirty(struct drm_crtc *crtc) { struct drm_plane *plane; struct drm_plane_state *state; struct sde_plane_state *pstate; drm_atomic_crtc_for_each_plane(plane, crtc) { state = plane->state; if (!state) continue; pstate = to_sde_plane_state(state); pstate->dirty |= SDE_PLANE_DIRTY_QOS; } } /** * sde_crtc_atomic_get_property - retrieve a crtc drm property * @crtc: Pointer to drm crtc structure Loading
msm/sde/sde_crtc.h +7 −0 Original line number Diff line number Diff line Loading @@ -819,6 +819,13 @@ void sde_crtc_timeline_status(struct drm_crtc *crtc); void sde_crtc_update_cont_splash_settings( struct drm_crtc *crtc); /** * sde_crtc_set_qos_dirty - update plane dirty flag to include * QoS reprogramming which is required during fps switch * @crtc: Pointer to drm crtc structure */ void sde_crtc_set_qos_dirty(struct drm_crtc *crtc); /** * sde_crtc_misr_setup - to configure and enable/disable MISR * @crtc: Pointer to drm crtc structure Loading
msm/sde/sde_encoder.c +2 −0 Original line number Diff line number Diff line Loading @@ -2122,6 +2122,8 @@ static void sde_encoder_virt_mode_set(struct drm_encoder *drm_enc, } drm_connector_list_iter_end(&conn_iter); sde_crtc_set_qos_dirty(sde_enc->crtc); if (!conn) { SDE_ERROR_ENC(sde_enc, "failed to find attached connector\n"); return; Loading
msm/sde/sde_plane.c +12 −3 Original line number Diff line number Diff line Loading @@ -3129,6 +3129,8 @@ static void _sde_plane_update_properties(struct drm_plane *plane, psde->pipe_hw->ops.setup_sharpening) _sde_plane_update_sharpening(psde); if (pstate->dirty & (SDE_PLANE_DIRTY_QOS | SDE_PLANE_DIRTY_RECTS | SDE_PLANE_DIRTY_FORMAT)) _sde_plane_set_qos_lut(plane, crtc, fb); if (plane->type != DRM_PLANE_TYPE_CURSOR) { Loading @@ -3138,6 +3140,7 @@ static void _sde_plane_update_properties(struct drm_plane *plane, _sde_plane_set_ts_prefill(plane, pstate); } if (pstate->dirty & SDE_PLANE_DIRTY_QOS) _sde_plane_set_qos_remap(plane); /* clear dirty */ Loading @@ -3155,6 +3158,7 @@ static int sde_plane_sspp_atomic_update(struct drm_plane *plane, struct drm_framebuffer *fb; int idx; int dirty_prop_flag; bool is_rt; if (!plane) { SDE_ERROR("invalid plane\n"); Loading Loading @@ -3231,12 +3235,17 @@ static int sde_plane_sspp_atomic_update(struct drm_plane *plane, _sde_plane_set_scanout(plane, pstate, &psde->pipe_cfg, fb); is_rt = sde_crtc_is_rt_client(crtc, crtc->state); if (is_rt != psde->is_rt_pipe) { psde->is_rt_pipe = is_rt; pstate->dirty |= SDE_PLANE_DIRTY_QOS; } /* early out if nothing dirty */ if (!pstate->dirty) return 0; pstate->pending = true; psde->is_rt_pipe = sde_crtc_is_rt_client(crtc, crtc->state); _sde_plane_set_qos_ctrl(plane, false, SDE_PLANE_QOS_PANIC_CTRL); _sde_plane_update_properties(plane, crtc, fb); Loading
msm/sde/sde_plane.h +1 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ #define SDE_PLANE_DIRTY_VIG_IGC 0x40 #define SDE_PLANE_DIRTY_DMA_IGC 0x80 #define SDE_PLANE_DIRTY_DMA_GC 0x100 #define SDE_PLANE_DIRTY_QOS 0x200 #define SDE_PLANE_DIRTY_CP (SDE_PLANE_DIRTY_VIG_GAMUT |\ SDE_PLANE_DIRTY_VIG_IGC | SDE_PLANE_DIRTY_DMA_IGC |\ SDE_PLANE_DIRTY_DMA_GC) Loading