Loading drivers/gpu/drm/msm/sde/sde_hw_sspp.c +4 −1 Original line number Diff line number Diff line Loading @@ -257,7 +257,10 @@ static void sde_hw_sspp_setup_multirect(struct sde_hw_pipe *ctx, } else { mode_mask = SDE_REG_READ(&ctx->hw, SSPP_MULTIRECT_OPMODE + idx); mode_mask |= index; mode_mask |= (mode == SDE_SSPP_MULTIRECT_TIME_MX) ? 0x4 : 0x0; if (mode == SDE_SSPP_MULTIRECT_TIME_MX) mode_mask |= BIT(2); else mode_mask &= ~BIT(2); } SDE_REG_WRITE(&ctx->hw, SSPP_MULTIRECT_OPMODE + idx, mode_mask); Loading drivers/gpu/drm/msm/sde/sde_plane.c +34 −5 Original line number Diff line number Diff line Loading @@ -3532,13 +3532,12 @@ static int sde_plane_sspp_atomic_update(struct drm_plane *plane, return 0; } static void sde_plane_atomic_update(struct drm_plane *plane, static void _sde_plane_atomic_disable(struct drm_plane *plane, struct drm_plane_state *old_state) { struct sde_plane *psde; struct drm_plane_state *state; struct sde_plane_state *pstate; struct sde_plane_state *old_pstate; if (!plane) { SDE_ERROR("invalid plane\n"); Loading @@ -3546,20 +3545,50 @@ static void sde_plane_atomic_update(struct drm_plane *plane, } else if (!plane->state) { SDE_ERROR("invalid plane state\n"); return; } else if (!old_state) { SDE_ERROR("invalid old state\n"); return; } psde = to_sde_plane(plane); psde->is_error = false; state = plane->state; pstate = to_sde_plane_state(state); old_pstate = to_sde_plane_state(old_state); SDE_EVT32(DRMID(plane), is_sde_plane_virtual(plane), pstate->multirect_mode); pstate->pending = true; if (is_sde_plane_virtual(plane) && psde->pipe_hw && psde->pipe_hw->ops.setup_multirect) psde->pipe_hw->ops.setup_multirect(psde->pipe_hw, SDE_SSPP_RECT_SOLO, SDE_SSPP_MULTIRECT_NONE); } static void sde_plane_atomic_update(struct drm_plane *plane, struct drm_plane_state *old_state) { struct sde_plane *psde; struct drm_plane_state *state; if (!plane) { SDE_ERROR("invalid plane\n"); return; } else if (!plane->state) { SDE_ERROR("invalid plane state\n"); return; } psde = to_sde_plane(plane); psde->is_error = false; state = plane->state; SDE_DEBUG_PLANE(psde, "\n"); sde_plane_rot_atomic_update(plane, old_state); if (!sde_plane_sspp_enabled(state)) { pstate->pending = true; _sde_plane_atomic_disable(plane, old_state); } else { int ret; Loading Loading
drivers/gpu/drm/msm/sde/sde_hw_sspp.c +4 −1 Original line number Diff line number Diff line Loading @@ -257,7 +257,10 @@ static void sde_hw_sspp_setup_multirect(struct sde_hw_pipe *ctx, } else { mode_mask = SDE_REG_READ(&ctx->hw, SSPP_MULTIRECT_OPMODE + idx); mode_mask |= index; mode_mask |= (mode == SDE_SSPP_MULTIRECT_TIME_MX) ? 0x4 : 0x0; if (mode == SDE_SSPP_MULTIRECT_TIME_MX) mode_mask |= BIT(2); else mode_mask &= ~BIT(2); } SDE_REG_WRITE(&ctx->hw, SSPP_MULTIRECT_OPMODE + idx, mode_mask); Loading
drivers/gpu/drm/msm/sde/sde_plane.c +34 −5 Original line number Diff line number Diff line Loading @@ -3532,13 +3532,12 @@ static int sde_plane_sspp_atomic_update(struct drm_plane *plane, return 0; } static void sde_plane_atomic_update(struct drm_plane *plane, static void _sde_plane_atomic_disable(struct drm_plane *plane, struct drm_plane_state *old_state) { struct sde_plane *psde; struct drm_plane_state *state; struct sde_plane_state *pstate; struct sde_plane_state *old_pstate; if (!plane) { SDE_ERROR("invalid plane\n"); Loading @@ -3546,20 +3545,50 @@ static void sde_plane_atomic_update(struct drm_plane *plane, } else if (!plane->state) { SDE_ERROR("invalid plane state\n"); return; } else if (!old_state) { SDE_ERROR("invalid old state\n"); return; } psde = to_sde_plane(plane); psde->is_error = false; state = plane->state; pstate = to_sde_plane_state(state); old_pstate = to_sde_plane_state(old_state); SDE_EVT32(DRMID(plane), is_sde_plane_virtual(plane), pstate->multirect_mode); pstate->pending = true; if (is_sde_plane_virtual(plane) && psde->pipe_hw && psde->pipe_hw->ops.setup_multirect) psde->pipe_hw->ops.setup_multirect(psde->pipe_hw, SDE_SSPP_RECT_SOLO, SDE_SSPP_MULTIRECT_NONE); } static void sde_plane_atomic_update(struct drm_plane *plane, struct drm_plane_state *old_state) { struct sde_plane *psde; struct drm_plane_state *state; if (!plane) { SDE_ERROR("invalid plane\n"); return; } else if (!plane->state) { SDE_ERROR("invalid plane state\n"); return; } psde = to_sde_plane(plane); psde->is_error = false; state = plane->state; SDE_DEBUG_PLANE(psde, "\n"); sde_plane_rot_atomic_update(plane, old_state); if (!sde_plane_sspp_enabled(state)) { pstate->pending = true; _sde_plane_atomic_disable(plane, old_state); } else { int ret; Loading