OSDN Git Service

drm/amd/display: Fix underflow issue on 175hz timing
authorLeo Ma <hanghong.ma@amd.com>
Thu, 6 Jul 2023 20:17:03 +0000 (16:17 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 25 Jul 2023 17:41:35 +0000 (13:41 -0400)
[Why]
Screen underflows happen on 175hz timing for 3 plane overlay case.

[How]
Based on dst y prefetch value clamp to equ or oto for bandwidth
calculation.

Reviewed-by: Dillon Varone <dillon.varone@amd.com>
Acked-by: Alex Hung <alex.hung@amd.com>
Signed-off-by: Leo Ma <hanghong.ma@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/dml/dcn32/display_mode_vba_util_32.c

index 890797e..ecea008 100644 (file)
@@ -3459,6 +3459,7 @@ bool dml32_CalculatePrefetchSchedule(
        double TimeForFetchingMetaPTE = 0;
        double TimeForFetchingRowInVBlank = 0;
        double LinesToRequestPrefetchPixelData = 0;
+       double LinesForPrefetchBandwidth = 0;
        unsigned int HostVMDynamicLevelsTrips;
        double  trip_to_mem;
        double  Tvm_trips;
@@ -3888,11 +3889,15 @@ bool dml32_CalculatePrefetchSchedule(
                        TimeForFetchingMetaPTE = Tvm_oto;
                        TimeForFetchingRowInVBlank = Tr0_oto;
                        *PrefetchBandwidth = prefetch_bw_oto;
+                       /* Clamp to oto for bandwidth calculation */
+                       LinesForPrefetchBandwidth = dst_y_prefetch_oto;
                } else {
                        *DestinationLinesForPrefetch = dst_y_prefetch_equ;
                        TimeForFetchingMetaPTE = Tvm_equ;
                        TimeForFetchingRowInVBlank = Tr0_equ;
                        *PrefetchBandwidth = prefetch_bw_equ;
+                       /* Clamp to equ for bandwidth calculation */
+                       LinesForPrefetchBandwidth = dst_y_prefetch_equ;
                }
 
                *DestinationLinesToRequestVMInVBlank = dml_ceil(4.0 * TimeForFetchingMetaPTE / LineTime, 1.0) / 4.0;
@@ -3900,7 +3905,7 @@ bool dml32_CalculatePrefetchSchedule(
                *DestinationLinesToRequestRowInVBlank =
                                dml_ceil(4.0 * TimeForFetchingRowInVBlank / LineTime, 1.0) / 4.0;
 
-               LinesToRequestPrefetchPixelData = *DestinationLinesForPrefetch -
+               LinesToRequestPrefetchPixelData = LinesForPrefetchBandwidth -
                                *DestinationLinesToRequestVMInVBlank - 2 * *DestinationLinesToRequestRowInVBlank;
 
 #ifdef __DML_VBA_DEBUG__