Commit f3b899f0 authored by Jouni Högander's avatar Jouni Högander

drm/i915/psr: Calculate PIPE_SRCSZ_ERLY_TPT value

When early transport is enabled we need to write PIPE_SRCSZ_ERLY_TPT on
every flip doing selective update. This patch calculates
PIPE_SRCSZ_ERLY_TPT same way as is done for PSR2_MAN_TRK_CTL value and
stores i in intel_crtc_state->pipe_srcsz_early_tpt to be written later
during flip.

Bspec: 68927
Signed-off-by: default avatarJouni Högander <jouni.hogander@intel.com>
Reviewed-by: default avatarMika Kahola <mika.kahola@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240319123327.1661097-2-jouni.hogander@intel.com
parent ddf8a8bb
...@@ -1424,6 +1424,8 @@ struct intel_crtc_state { ...@@ -1424,6 +1424,8 @@ struct intel_crtc_state {
u32 psr2_man_track_ctl; u32 psr2_man_track_ctl;
u32 pipe_srcsz_early_tpt;
struct drm_rect psr2_su_area; struct drm_rect psr2_su_area;
/* Variable Refresh Rate state */ /* Variable Refresh Rate state */
......
...@@ -2072,6 +2072,20 @@ static void psr2_man_trk_ctl_calc(struct intel_crtc_state *crtc_state, ...@@ -2072,6 +2072,20 @@ static void psr2_man_trk_ctl_calc(struct intel_crtc_state *crtc_state,
crtc_state->psr2_man_track_ctl = val; crtc_state->psr2_man_track_ctl = val;
} }
static u32 psr2_pipe_srcsz_early_tpt_calc(struct intel_crtc_state *crtc_state,
bool full_update)
{
int width, height;
if (!crtc_state->enable_psr2_su_region_et || full_update)
return 0;
width = drm_rect_width(&crtc_state->psr2_su_area);
height = drm_rect_height(&crtc_state->psr2_su_area);
return PIPESRC_WIDTH(width - 1) | PIPESRC_HEIGHT(height - 1);
}
static void clip_area_update(struct drm_rect *overlap_damage_area, static void clip_area_update(struct drm_rect *overlap_damage_area,
struct drm_rect *damage_area, struct drm_rect *damage_area,
struct drm_rect *pipe_src) struct drm_rect *pipe_src)
...@@ -2359,6 +2373,8 @@ int intel_psr2_sel_fetch_update(struct intel_atomic_state *state, ...@@ -2359,6 +2373,8 @@ int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
skip_sel_fetch_set_loop: skip_sel_fetch_set_loop:
psr2_man_trk_ctl_calc(crtc_state, full_update); psr2_man_trk_ctl_calc(crtc_state, full_update);
crtc_state->pipe_srcsz_early_tpt =
psr2_pipe_srcsz_early_tpt_calc(crtc_state, full_update);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment