drm/amd/display: temporary clamp the vratio used to 1.0
authorLewis Huang <Lewis.Huang@amd.com>
Wed, 22 Apr 2020 02:01:23 +0000 (10:01 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 5 May 2020 17:11:36 +0000 (13:11 -0400)
[Why]
in Is_Support function, driver report different caps between
same timing but different scaling cause OS inconsistent.

[How]
min_row_time is a local that’s only used for verifying immediate
flip support. Clamp the vratio used for its calculation to 1.0.

Signed-off-by: Lewis Huang <Lewis.Huang@amd.com>
Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
Acked-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/dml/dcn21/display_mode_vba_21.c

index 5bc80b6..a576eed 100644 (file)
@@ -3190,6 +3190,7 @@ static void CalculateFlipSchedule(
        double TimeForFetchingRowInVBlankImmediateFlip;
        double ImmediateFlipBW;
        double HostVMInefficiencyFactor;
+       double VRatioClamped;
 
        if (GPUVMEnable == true && HostVMEnable == true) {
                HostVMInefficiencyFactor =
@@ -3222,31 +3223,32 @@ static void CalculateFlipSchedule(
 
        *DestinationLinesToRequestRowInImmediateFlip = dml_ceil(4.0 * (TimeForFetchingRowInVBlankImmediateFlip / LineTime), 1) / 4.0;
        *final_flip_bw = dml_max(PDEAndMetaPTEBytesPerFrame * HostVMInefficiencyFactor / (*DestinationLinesToRequestVMInImmediateFlip * LineTime), (MetaRowBytes + DPTEBytesPerRow) * HostVMInefficiencyFactor / (*DestinationLinesToRequestRowInImmediateFlip * LineTime));
+       VRatioClamped = (VRatio < 1.0) ? 1.0 : VRatio;
        if (SourcePixelFormat == dm_420_8 || SourcePixelFormat == dm_420_10) {
                if (GPUVMEnable == true && DCCEnable != true) {
                        min_row_time = dml_min(
-                                       dpte_row_height * LineTime / VRatio,
-                                       dpte_row_height_chroma * LineTime / (VRatio / 2));
+                                       dpte_row_height * LineTime / VRatioClamped,
+                                       dpte_row_height_chroma * LineTime / (VRatioClamped / 2));
                } else if (GPUVMEnable != true && DCCEnable == true) {
                        min_row_time = dml_min(
-                                       meta_row_height * LineTime / VRatio,
-                                       meta_row_height_chroma * LineTime / (VRatio / 2));
+                                       meta_row_height * LineTime / VRatioClamped,
+                                       meta_row_height_chroma * LineTime / (VRatioClamped / 2));
                } else {
                        min_row_time = dml_min4(
-                                       dpte_row_height * LineTime / VRatio,
-                                       meta_row_height * LineTime / VRatio,
-                                       dpte_row_height_chroma * LineTime / (VRatio / 2),
-                                       meta_row_height_chroma * LineTime / (VRatio / 2));
+                                       dpte_row_height * LineTime / VRatioClamped,
+                                       meta_row_height * LineTime / VRatioClamped,
+                                       dpte_row_height_chroma * LineTime / (VRatioClamped / 2),
+                                       meta_row_height_chroma * LineTime / (VRatioClamped / 2));
                }
        } else {
                if (GPUVMEnable == true && DCCEnable != true) {
-                       min_row_time = dpte_row_height * LineTime / VRatio;
+                       min_row_time = dpte_row_height * LineTime / VRatioClamped;
                } else if (GPUVMEnable != true && DCCEnable == true) {
-                       min_row_time = meta_row_height * LineTime / VRatio;
+                       min_row_time = meta_row_height * LineTime / VRatioClamped;
                } else {
                        min_row_time = dml_min(
-                                       dpte_row_height * LineTime / VRatio,
-                                       meta_row_height * LineTime / VRatio);
+                                       dpte_row_height * LineTime / VRatioClamped,
+                                       meta_row_height * LineTime / VRatioClamped);
                }
        }