Skip to content

Commit 411ad63

Browse files
committed
drm/i915/psr: Use SFF_CTL on invalidate/flush for LunarLake onwards
In LunarLake we have SFF_CTL register which contains SFF bit ored with respective SFF bit in PSR2_MAN_TRK_CTL register. Use this register instead of the bit in PSR2_MAN_TRK_CTL on frontbuffer tracking callbacks. This helps us avoiding taking psr mutex when performing atomic commit. We don't need to set the CFF bit as selective update configuration in PSR2_MAN_TRL_CTL is not overwritten anymore. I.e. we have valid configuration in PSR2_MAN_TRK_CTL and in plane SEL_FETCH_* registers when SFF bit gets cleared by the HW in case something triggers "frame change" event after SFF bit is cleared. Signed-off-by: Jouni Högander <jouni.hogander@intel.com> Reviewed-by: Animesh Manna <animesh.manna@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20250213064804.2077127-6-jouni.hogander@intel.com
1 parent 3b5bf85 commit 411ad63

File tree

1 file changed

+15
-7
lines changed

1 file changed

+15
-7
lines changed

drivers/gpu/drm/i915/display/intel_psr.c

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2359,7 +2359,7 @@ void intel_psr2_program_trans_man_trk_ctl(const struct intel_crtc_state *crtc_st
23592359
struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
23602360

23612361
lockdep_assert_held(&intel_dp->psr.lock);
2362-
if (intel_dp->psr.psr2_sel_fetch_cff_enabled)
2362+
if (DISPLAY_VER(display) < 20 && intel_dp->psr.psr2_sel_fetch_cff_enabled)
23632363
return;
23642364
break;
23652365
}
@@ -3130,12 +3130,16 @@ static void intel_psr_configure_full_frame_update(struct intel_dp *intel_dp)
31303130
if (!intel_dp->psr.psr2_sel_fetch_enabled)
31313131
return;
31323132

3133-
intel_de_write(display,
3134-
PSR2_MAN_TRK_CTL(display, cpu_transcoder),
3135-
man_trk_ctl_enable_bit_get(display) |
3136-
man_trk_ctl_partial_frame_bit_get(display) |
3137-
man_trk_ctl_single_full_frame_bit_get(display) |
3138-
man_trk_ctl_continuos_full_frame(display));
3133+
if (DISPLAY_VER(display) >= 20)
3134+
intel_de_write(display, LNL_SFF_CTL(cpu_transcoder),
3135+
LNL_SFF_CTL_SF_SINGLE_FULL_FRAME);
3136+
else
3137+
intel_de_write(display,
3138+
PSR2_MAN_TRK_CTL(display, cpu_transcoder),
3139+
man_trk_ctl_enable_bit_get(display) |
3140+
man_trk_ctl_partial_frame_bit_get(display) |
3141+
man_trk_ctl_single_full_frame_bit_get(display) |
3142+
man_trk_ctl_continuos_full_frame(display));
31393143
}
31403144

31413145
static void _psr_invalidate_handle(struct intel_dp *intel_dp)
@@ -3239,6 +3243,10 @@ static void _psr_flush_handle(struct intel_dp *intel_dp)
32393243
* Still keep cff bit enabled as we don't have proper SU
32403244
* configuration in case update is sent for any reason after
32413245
* sff bit gets cleared by the HW on next vblank.
3246+
*
3247+
* NOTE: Setting cff bit is not needed for LunarLake onwards as
3248+
* we have own register for SFF bit and we are not overwriting
3249+
* existing SU configuration
32423250
*/
32433251
intel_psr_configure_full_frame_update(intel_dp);
32443252
}

0 commit comments

Comments
 (0)