drm/amd/display: Account for Subvp Phantoms in DML MALL surface calculations
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. Tested-by: Daniel Wheeler <Daniel.Wheeler@amd.com> Reviewed-by: Alvin Lee <Alvin.Lee2@amd.com> Acked-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com> Signed-off-by: Dillon Varone <Dillon.Varone@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
95c454ca92
commit
a21005e4d2
@ -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,
|
||||
|
@ -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(
|
||||
|
@ -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[],
|
||||
|
Loading…
x
Reference in New Issue
Block a user