@@ -1406,6 +1406,13 @@ static inline u32 man_trk_ctl_single_full_frame_bit_get(struct drm_i915_private
1406
1406
PSR2_MAN_TRK_CTL_SF_SINGLE_FULL_FRAME ;
1407
1407
}
1408
1408
1409
+ static inline u32 man_trk_ctl_partial_frame_bit_get (struct drm_i915_private * dev_priv )
1410
+ {
1411
+ return IS_ALDERLAKE_P (dev_priv ) ?
1412
+ ADLP_PSR2_MAN_TRK_CTL_SF_PARTIAL_FRAME_UPDATE :
1413
+ PSR2_MAN_TRK_CTL_SF_PARTIAL_FRAME_UPDATE ;
1414
+ }
1415
+
1409
1416
static void psr_force_hw_tracking_exit (struct intel_dp * intel_dp )
1410
1417
{
1411
1418
struct drm_i915_private * dev_priv = dp_to_i915 (intel_dp );
@@ -1510,7 +1517,13 @@ static void psr2_man_trk_ctl_calc(struct intel_crtc_state *crtc_state,
1510
1517
{
1511
1518
struct intel_crtc * crtc = to_intel_crtc (crtc_state -> uapi .crtc );
1512
1519
struct drm_i915_private * dev_priv = to_i915 (crtc -> base .dev );
1513
- u32 val = PSR2_MAN_TRK_CTL_ENABLE ;
1520
+ u32 val = 0 ;
1521
+
1522
+ if (!IS_ALDERLAKE_P (dev_priv ))
1523
+ val = PSR2_MAN_TRK_CTL_ENABLE ;
1524
+
1525
+ /* SF partial frame enable has to be set even on full update */
1526
+ val |= man_trk_ctl_partial_frame_bit_get (dev_priv );
1514
1527
1515
1528
if (full_update ) {
1516
1529
/*
@@ -1530,7 +1543,6 @@ static void psr2_man_trk_ctl_calc(struct intel_crtc_state *crtc_state,
1530
1543
} else {
1531
1544
drm_WARN_ON (crtc_state -> uapi .crtc -> dev , clip -> y1 % 4 || clip -> y2 % 4 );
1532
1545
1533
- val |= PSR2_MAN_TRK_CTL_SF_PARTIAL_FRAME_UPDATE ;
1534
1546
val |= PSR2_MAN_TRK_CTL_SU_REGION_START_ADDR (clip -> y1 / 4 + 1 );
1535
1547
val |= PSR2_MAN_TRK_CTL_SU_REGION_END_ADDR (clip -> y2 / 4 + 1 );
1536
1548
}
0 commit comments