From: Dillon Varone <[email protected]>

DML does not explicitly consider support for space in MALL required for
subvp phantom pipes. This adds a check to make sure portion of phantom
surface can fit in MALL.

Reviewed-by: Alvin Lee <[email protected]>
Acked-by: Rodrigo Siqueira <[email protected]>
Signed-off-by: Dillon Varone <[email protected]>
---
 .../display/dc/dml/dcn32/display_mode_vba_32.c    |  2 ++
 .../dc/dml/dcn32/display_mode_vba_util_32.c       | 15 +++++++++++----
 .../dc/dml/dcn32/display_mode_vba_util_32.h       |  1 +
 3 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/dc/dml/dcn32/display_mode_vba_32.c 
b/drivers/gpu/drm/amd/display/dc/dml/dcn32/display_mode_vba_32.c
index 83765008dd5f..6c5ab5c26b38 100644
--- a/drivers/gpu/drm/amd/display/dc/dml/dcn32/display_mode_vba_32.c
+++ b/drivers/gpu/drm/amd/display/dc/dml/dcn32/display_mode_vba_32.c
@@ -387,6 +387,7 @@ static void 
DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
                                mode_lib->vba.NumberOfActiveSurfaces,
                                mode_lib->vba.MALLAllocatedForDCNFinal,
                                mode_lib->vba.UseMALLForStaticScreen,
+                               mode_lib->vba.UsesMALLForPStateChange,
                                mode_lib->vba.DCCEnable,
                                mode_lib->vba.ViewportStationary,
                                mode_lib->vba.ViewportXStartY,
@@ -2628,6 +2629,7 @@ void dml32_ModeSupportAndSystemConfigurationFull(struct 
display_mode_lib *mode_l
                        mode_lib->vba.NumberOfActiveSurfaces,
                        mode_lib->vba.MALLAllocatedForDCNFinal,
                        mode_lib->vba.UseMALLForStaticScreen,
+                       mode_lib->vba.UsesMALLForPStateChange,
                        mode_lib->vba.DCCEnable,
                        mode_lib->vba.ViewportStationary,
                        mode_lib->vba.ViewportXStartY,
diff --git 
a/drivers/gpu/drm/amd/display/dc/dml/dcn32/display_mode_vba_util_32.c 
b/drivers/gpu/drm/amd/display/dc/dml/dcn32/display_mode_vba_util_32.c
index 4279cd481de1..ba23b199afa6 100644
--- a/drivers/gpu/drm/amd/display/dc/dml/dcn32/display_mode_vba_util_32.c
+++ b/drivers/gpu/drm/amd/display/dc/dml/dcn32/display_mode_vba_util_32.c
@@ -1772,6 +1772,7 @@ void dml32_CalculateSurfaceSizeInMall(
                unsigned int NumberOfActiveSurfaces,
                unsigned int MALLAllocatedForDCN,
                enum dm_use_mall_for_static_screen_mode 
UseMALLForStaticScreen[],
+               enum dm_use_mall_for_pstate_change_mode 
UsesMALLForPStateChange[],
                bool DCCEnable[],
                bool ViewportStationary[],
                unsigned int ViewportXStartY[],
@@ -1803,8 +1804,10 @@ void dml32_CalculateSurfaceSizeInMall(
                unsigned int    SurfaceSizeInMALL[],
                bool *ExceededMALLSize)
 {
-       unsigned int TotalSurfaceSizeInMALL  = 0;
        unsigned int k;
+       unsigned int TotalSurfaceSizeInMALLForSS = 0;
+       unsigned int TotalSurfaceSizeInMALLForSubVP = 0;
+       unsigned int MALLAllocatedForDCNInBytes = MALLAllocatedForDCN * 1024 * 
1024;
 
        for (k = 0; k < NumberOfActiveSurfaces; ++k) {
                if (ViewportStationary[k]) {
@@ -1896,10 +1899,14 @@ void dml32_CalculateSurfaceSizeInMall(
        }
 
        for (k = 0; k < NumberOfActiveSurfaces; ++k) {
-               if (UseMALLForStaticScreen[k] == 
dm_use_mall_static_screen_enable)
-                       TotalSurfaceSizeInMALL = TotalSurfaceSizeInMALL + 
SurfaceSizeInMALL[k];
+               /* SS and Subvp counted separate as they are never used at the 
same time */
+               if (UsesMALLForPStateChange[k] == 
dm_use_mall_pstate_change_phantom_pipe)
+                       TotalSurfaceSizeInMALLForSubVP = 
TotalSurfaceSizeInMALLForSubVP + SurfaceSizeInMALL[k];
+               else if (UseMALLForStaticScreen[k] == 
dm_use_mall_static_screen_enable)
+                       TotalSurfaceSizeInMALLForSS = 
TotalSurfaceSizeInMALLForSS + SurfaceSizeInMALL[k];
        }
-       *ExceededMALLSize =  (TotalSurfaceSizeInMALL > MALLAllocatedForDCN * 
1024 * 1024);
+       *ExceededMALLSize =  (TotalSurfaceSizeInMALLForSS > 
MALLAllocatedForDCNInBytes) ||
+                                                       
(TotalSurfaceSizeInMALLForSubVP > MALLAllocatedForDCNInBytes);
 } // CalculateSurfaceSizeInMall
 
 void dml32_CalculateVMRowAndSwath(
diff --git 
a/drivers/gpu/drm/amd/display/dc/dml/dcn32/display_mode_vba_util_32.h 
b/drivers/gpu/drm/amd/display/dc/dml/dcn32/display_mode_vba_util_32.h
index 83edfcee8851..5c7196d1ddef 100644
--- a/drivers/gpu/drm/amd/display/dc/dml/dcn32/display_mode_vba_util_32.h
+++ b/drivers/gpu/drm/amd/display/dc/dml/dcn32/display_mode_vba_util_32.h
@@ -334,6 +334,7 @@ void dml32_CalculateSurfaceSizeInMall(
                unsigned int NumberOfActiveSurfaces,
                unsigned int MALLAllocatedForDCN,
                enum dm_use_mall_for_static_screen_mode 
UseMALLForStaticScreen[],
+               enum dm_use_mall_for_pstate_change_mode 
UsesMALLForPStateChange[],
                bool DCCEnable[],
                bool ViewportStationary[],
                unsigned int ViewportXStartY[],
-- 
2.39.0

Reply via email to