forked from ClangBuiltLinux/continuous-integration2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
patches: mainline: Apply drm/amd/display patches for dml314
These patches are needed to keep CONFIG_WERROR enabled for x86_64. They should be in mainline soon, as they have been accepted. Signed-off-by: Nathan Chancellor <nathan@kernel.org>
- Loading branch information
1 parent
984d81d
commit fc1158b
Showing
3 changed files
with
827 additions
and
0 deletions.
There are no files selected for viewing
310 changes: 310 additions & 0 deletions
310
...nathan_drm_amd_display_reduce_number_of_arguments_of_dml314_s_calculateflipschedule.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,310 @@ | ||
From git@z Thu Jan 1 00:00:00 1970 | ||
Subject: [PATCH 2/2] drm/amd/display: Reduce number of arguments of dml314's CalculateFlipSchedule() | ||
From: Nathan Chancellor <nathan@kernel.org> | ||
Date: Fri, 16 Sep 2022 14:06:58 -0700 | ||
Message-Id: <20220916210658.3412450-2-nathan@kernel.org> | ||
To: Harry Wentland <harry.wentland@amd.com>, Leo Li <sunpeng.li@amd.com>, Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>, Alex Deucher <alexander.deucher@amd.com>,Christian König <christian.koenig@amd.com>, "Pan, Xinhui" <Xinhui.Pan@amd.com> | ||
Cc: Nick Desaulniers <ndesaulniers@google.com>, Tom Rix <trix@redhat.com>, amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, llvm@lists.linux.dev, patches@lists.linux.dev, Nathan Chancellor <nathan@kernel.org>, "kernelci.org bot" <bot@kernelci.org> | ||
In-Reply-To: <20220916210658.3412450-1-nathan@kernel.org> | ||
References: <20220916210658.3412450-1-nathan@kernel.org> | ||
List-Id: <llvm.lists.linux.dev> | ||
MIME-Version: 1.0 | ||
Content-Type: text/plain; charset="utf-8" | ||
Content-Transfer-Encoding: 7bit | ||
|
||
Most of the arguments are identical between the two call sites and they | ||
can be accessed through the 'struct vba_vars_st' pointer. This reduces | ||
the total amount of stack space that | ||
dml314_ModeSupportAndSystemConfigurationFull() uses by 112 bytes with | ||
LLVM 16 (1976 -> 1864), helping clear up the following clang warning: | ||
|
||
drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn314/display_mode_vba_314.c:4020:6: error: stack frame size (2216) exceeds limit (2048) in 'dml314_ModeSupportAndSystemConfigurationFull' [-Werror,-Wframe-larger-than] | ||
void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_lib) | ||
^ | ||
1 error generated. | ||
|
||
Link: https://github.com/ClangBuiltLinux/linux/issues/1710 | ||
Reported-by: "kernelci.org bot" <bot@kernelci.org> | ||
Link: https://lore.kernel.org/r/20220916210658.3412450-2-nathan@kernel.org | ||
Signed-off-by: Nathan Chancellor <nathan@kernel.org> | ||
--- | ||
|
||
This is just commit 1dbec5b4b0ef ("drm/amd/display: Reduce number of | ||
arguments of dml31's CalculateFlipSchedule()") applied to dml314. | ||
|
||
.../dc/dml/dcn314/display_mode_vba_314.c | 172 +++++------------- | ||
1 file changed, 47 insertions(+), 125 deletions(-) | ||
|
||
diff --git a/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c b/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c | ||
index 32ceb72f7a14..e4dfa714207a 100644 | ||
--- a/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c | ||
+++ b/drivers/gpu/drm/amd/display/dc/dml/dcn314/display_mode_vba_314.c | ||
@@ -265,33 +265,13 @@ static void CalculateRowBandwidth( | ||
|
||
static void CalculateFlipSchedule( | ||
struct display_mode_lib *mode_lib, | ||
+ unsigned int k, | ||
double HostVMInefficiencyFactor, | ||
double UrgentExtraLatency, | ||
double UrgentLatency, | ||
- unsigned int GPUVMMaxPageTableLevels, | ||
- bool HostVMEnable, | ||
- unsigned int HostVMMaxNonCachedPageTableLevels, | ||
- bool GPUVMEnable, | ||
- double HostVMMinPageSize, | ||
double PDEAndMetaPTEBytesPerFrame, | ||
double MetaRowBytes, | ||
- double DPTEBytesPerRow, | ||
- double BandwidthAvailableForImmediateFlip, | ||
- unsigned int TotImmediateFlipBytes, | ||
- enum source_format_class SourcePixelFormat, | ||
- double LineTime, | ||
- double VRatio, | ||
- double VRatioChroma, | ||
- double Tno_bw, | ||
- bool DCCEnable, | ||
- unsigned int dpte_row_height, | ||
- unsigned int meta_row_height, | ||
- unsigned int dpte_row_height_chroma, | ||
- unsigned int meta_row_height_chroma, | ||
- double *DestinationLinesToRequestVMInImmediateFlip, | ||
- double *DestinationLinesToRequestRowInImmediateFlip, | ||
- double *final_flip_bw, | ||
- bool *ImmediateFlipSupportedForPipe); | ||
+ double DPTEBytesPerRow); | ||
static double CalculateWriteBackDelay( | ||
enum source_format_class WritebackPixelFormat, | ||
double WritebackHRatio, | ||
@@ -2892,33 +2872,13 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman | ||
for (k = 0; k < v->NumberOfActivePlanes; ++k) { | ||
CalculateFlipSchedule( | ||
mode_lib, | ||
+ k, | ||
HostVMInefficiencyFactor, | ||
v->UrgentExtraLatency, | ||
v->UrgentLatency, | ||
- v->GPUVMMaxPageTableLevels, | ||
- v->HostVMEnable, | ||
- v->HostVMMaxNonCachedPageTableLevels, | ||
- v->GPUVMEnable, | ||
- v->HostVMMinPageSize, | ||
v->PDEAndMetaPTEBytesFrame[k], | ||
v->MetaRowByte[k], | ||
- v->PixelPTEBytesPerRow[k], | ||
- v->BandwidthAvailableForImmediateFlip, | ||
- v->TotImmediateFlipBytes, | ||
- v->SourcePixelFormat[k], | ||
- v->HTotal[k] / v->PixelClock[k], | ||
- v->VRatio[k], | ||
- v->VRatioChroma[k], | ||
- v->Tno_bw[k], | ||
- v->DCCEnable[k], | ||
- v->dpte_row_height[k], | ||
- v->meta_row_height[k], | ||
- v->dpte_row_height_chroma[k], | ||
- v->meta_row_height_chroma[k], | ||
- &v->DestinationLinesToRequestVMInImmediateFlip[k], | ||
- &v->DestinationLinesToRequestRowInImmediateFlip[k], | ||
- &v->final_flip_bw[k], | ||
- &v->ImmediateFlipSupportedForPipe[k]); | ||
+ v->PixelPTEBytesPerRow[k]); | ||
} | ||
|
||
v->total_dcn_read_bw_with_flip = 0.0; | ||
@@ -3638,61 +3598,43 @@ static void CalculateRowBandwidth( | ||
|
||
static void CalculateFlipSchedule( | ||
struct display_mode_lib *mode_lib, | ||
+ unsigned int k, | ||
double HostVMInefficiencyFactor, | ||
double UrgentExtraLatency, | ||
double UrgentLatency, | ||
- unsigned int GPUVMMaxPageTableLevels, | ||
- bool HostVMEnable, | ||
- unsigned int HostVMMaxNonCachedPageTableLevels, | ||
- bool GPUVMEnable, | ||
- double HostVMMinPageSize, | ||
double PDEAndMetaPTEBytesPerFrame, | ||
double MetaRowBytes, | ||
- double DPTEBytesPerRow, | ||
- double BandwidthAvailableForImmediateFlip, | ||
- unsigned int TotImmediateFlipBytes, | ||
- enum source_format_class SourcePixelFormat, | ||
- double LineTime, | ||
- double VRatio, | ||
- double VRatioChroma, | ||
- double Tno_bw, | ||
- bool DCCEnable, | ||
- unsigned int dpte_row_height, | ||
- unsigned int meta_row_height, | ||
- unsigned int dpte_row_height_chroma, | ||
- unsigned int meta_row_height_chroma, | ||
- double *DestinationLinesToRequestVMInImmediateFlip, | ||
- double *DestinationLinesToRequestRowInImmediateFlip, | ||
- double *final_flip_bw, | ||
- bool *ImmediateFlipSupportedForPipe) | ||
+ double DPTEBytesPerRow) | ||
{ | ||
+ struct vba_vars_st *v = &mode_lib->vba; | ||
double min_row_time = 0.0; | ||
unsigned int HostVMDynamicLevelsTrips; | ||
double TimeForFetchingMetaPTEImmediateFlip; | ||
double TimeForFetchingRowInVBlankImmediateFlip; | ||
double ImmediateFlipBW; | ||
+ double LineTime = v->HTotal[k] / v->PixelClock[k]; | ||
|
||
- if (GPUVMEnable == true && HostVMEnable == true) { | ||
- HostVMDynamicLevelsTrips = HostVMMaxNonCachedPageTableLevels; | ||
+ if (v->GPUVMEnable == true && v->HostVMEnable == true) { | ||
+ HostVMDynamicLevelsTrips = v->HostVMMaxNonCachedPageTableLevels; | ||
} else { | ||
HostVMDynamicLevelsTrips = 0; | ||
} | ||
|
||
- if (GPUVMEnable == true || DCCEnable == true) { | ||
- ImmediateFlipBW = (PDEAndMetaPTEBytesPerFrame + MetaRowBytes + DPTEBytesPerRow) * BandwidthAvailableForImmediateFlip / TotImmediateFlipBytes; | ||
+ if (v->GPUVMEnable == true || v->DCCEnable[k] == true) { | ||
+ ImmediateFlipBW = (PDEAndMetaPTEBytesPerFrame + MetaRowBytes + DPTEBytesPerRow) * v->BandwidthAvailableForImmediateFlip / v->TotImmediateFlipBytes; | ||
} | ||
|
||
- if (GPUVMEnable == true) { | ||
+ if (v->GPUVMEnable == true) { | ||
TimeForFetchingMetaPTEImmediateFlip = dml_max3( | ||
- Tno_bw + PDEAndMetaPTEBytesPerFrame * HostVMInefficiencyFactor / ImmediateFlipBW, | ||
- UrgentExtraLatency + UrgentLatency * (GPUVMMaxPageTableLevels * (HostVMDynamicLevelsTrips + 1) - 1), | ||
+ v->Tno_bw[k] + PDEAndMetaPTEBytesPerFrame * HostVMInefficiencyFactor / ImmediateFlipBW, | ||
+ UrgentExtraLatency + UrgentLatency * (v->GPUVMMaxPageTableLevels * (HostVMDynamicLevelsTrips + 1) - 1), | ||
LineTime / 4.0); | ||
} else { | ||
TimeForFetchingMetaPTEImmediateFlip = 0; | ||
} | ||
|
||
- *DestinationLinesToRequestVMInImmediateFlip = dml_ceil(4.0 * (TimeForFetchingMetaPTEImmediateFlip / LineTime), 1) / 4.0; | ||
- if ((GPUVMEnable == true || DCCEnable == true)) { | ||
+ v->DestinationLinesToRequestVMInImmediateFlip[k] = dml_ceil(4.0 * (TimeForFetchingMetaPTEImmediateFlip / LineTime), 1) / 4.0; | ||
+ if ((v->GPUVMEnable == true || v->DCCEnable[k] == true)) { | ||
TimeForFetchingRowInVBlankImmediateFlip = dml_max3( | ||
(MetaRowBytes + DPTEBytesPerRow * HostVMInefficiencyFactor) / ImmediateFlipBW, | ||
UrgentLatency * (HostVMDynamicLevelsTrips + 1), | ||
@@ -3701,54 +3643,54 @@ static void CalculateFlipSchedule( | ||
TimeForFetchingRowInVBlankImmediateFlip = 0; | ||
} | ||
|
||
- *DestinationLinesToRequestRowInImmediateFlip = dml_ceil(4.0 * (TimeForFetchingRowInVBlankImmediateFlip / LineTime), 1) / 4.0; | ||
+ v->DestinationLinesToRequestRowInImmediateFlip[k] = dml_ceil(4.0 * (TimeForFetchingRowInVBlankImmediateFlip / LineTime), 1) / 4.0; | ||
|
||
- if (GPUVMEnable == true) { | ||
- *final_flip_bw = dml_max( | ||
- PDEAndMetaPTEBytesPerFrame * HostVMInefficiencyFactor / (*DestinationLinesToRequestVMInImmediateFlip * LineTime), | ||
- (MetaRowBytes + DPTEBytesPerRow * HostVMInefficiencyFactor) / (*DestinationLinesToRequestRowInImmediateFlip * LineTime)); | ||
- } else if ((GPUVMEnable == true || DCCEnable == true)) { | ||
- *final_flip_bw = (MetaRowBytes + DPTEBytesPerRow * HostVMInefficiencyFactor) / (*DestinationLinesToRequestRowInImmediateFlip * LineTime); | ||
+ if (v->GPUVMEnable == true) { | ||
+ v->final_flip_bw[k] = dml_max( | ||
+ PDEAndMetaPTEBytesPerFrame * HostVMInefficiencyFactor / (v->DestinationLinesToRequestVMInImmediateFlip[k] * LineTime), | ||
+ (MetaRowBytes + DPTEBytesPerRow * HostVMInefficiencyFactor) / (v->DestinationLinesToRequestRowInImmediateFlip[k] * LineTime)); | ||
+ } else if ((v->GPUVMEnable == true || v->DCCEnable[k] == true)) { | ||
+ v->final_flip_bw[k] = (MetaRowBytes + DPTEBytesPerRow * HostVMInefficiencyFactor) / (v->DestinationLinesToRequestRowInImmediateFlip[k] * LineTime); | ||
} else { | ||
- *final_flip_bw = 0; | ||
+ v->final_flip_bw[k] = 0; | ||
} | ||
|
||
- if (SourcePixelFormat == dm_420_8 || SourcePixelFormat == dm_420_10 || SourcePixelFormat == dm_rgbe_alpha) { | ||
- if (GPUVMEnable == true && DCCEnable != true) { | ||
- min_row_time = dml_min(dpte_row_height * LineTime / VRatio, dpte_row_height_chroma * LineTime / VRatioChroma); | ||
- } else if (GPUVMEnable != true && DCCEnable == true) { | ||
- min_row_time = dml_min(meta_row_height * LineTime / VRatio, meta_row_height_chroma * LineTime / VRatioChroma); | ||
+ if (v->SourcePixelFormat[k] == dm_420_8 || v->SourcePixelFormat[k] == dm_420_10 || v->SourcePixelFormat[k] == dm_rgbe_alpha) { | ||
+ if (v->GPUVMEnable == true && v->DCCEnable[k] != true) { | ||
+ min_row_time = dml_min(v->dpte_row_height[k] * LineTime / v->VRatio[k], v->dpte_row_height_chroma[k] * LineTime / v->VRatioChroma[k]); | ||
+ } else if (v->GPUVMEnable != true && v->DCCEnable[k] == true) { | ||
+ min_row_time = dml_min(v->meta_row_height[k] * LineTime / v->VRatio[k], v->meta_row_height_chroma[k] * LineTime / v->VRatioChroma[k]); | ||
} else { | ||
min_row_time = dml_min4( | ||
- dpte_row_height * LineTime / VRatio, | ||
- meta_row_height * LineTime / VRatio, | ||
- dpte_row_height_chroma * LineTime / VRatioChroma, | ||
- meta_row_height_chroma * LineTime / VRatioChroma); | ||
+ v->dpte_row_height[k] * LineTime / v->VRatio[k], | ||
+ v->meta_row_height[k] * LineTime / v->VRatio[k], | ||
+ v->dpte_row_height_chroma[k] * LineTime / v->VRatioChroma[k], | ||
+ v->meta_row_height_chroma[k] * LineTime / v->VRatioChroma[k]); | ||
} | ||
} else { | ||
- if (GPUVMEnable == true && DCCEnable != true) { | ||
- min_row_time = dpte_row_height * LineTime / VRatio; | ||
- } else if (GPUVMEnable != true && DCCEnable == true) { | ||
- min_row_time = meta_row_height * LineTime / VRatio; | ||
+ if (v->GPUVMEnable == true && v->DCCEnable[k] != true) { | ||
+ min_row_time = v->dpte_row_height[k] * LineTime / v->VRatio[k]; | ||
+ } else if (v->GPUVMEnable != true && v->DCCEnable[k] == true) { | ||
+ min_row_time = v->meta_row_height[k] * LineTime / v->VRatio[k]; | ||
} else { | ||
- min_row_time = dml_min(dpte_row_height * LineTime / VRatio, meta_row_height * LineTime / VRatio); | ||
+ min_row_time = dml_min(v->dpte_row_height[k] * LineTime / v->VRatio[k], v->meta_row_height[k] * LineTime / v->VRatio[k]); | ||
} | ||
} | ||
|
||
- if (*DestinationLinesToRequestVMInImmediateFlip >= 32 || *DestinationLinesToRequestRowInImmediateFlip >= 16 | ||
+ if (v->DestinationLinesToRequestVMInImmediateFlip[k] >= 32 || v->DestinationLinesToRequestRowInImmediateFlip[k] >= 16 | ||
|| TimeForFetchingMetaPTEImmediateFlip + 2 * TimeForFetchingRowInVBlankImmediateFlip > min_row_time) { | ||
- *ImmediateFlipSupportedForPipe = false; | ||
+ v->ImmediateFlipSupportedForPipe[k] = false; | ||
} else { | ||
- *ImmediateFlipSupportedForPipe = true; | ||
+ v->ImmediateFlipSupportedForPipe[k] = true; | ||
} | ||
|
||
#ifdef __DML_VBA_DEBUG__ | ||
- dml_print("DML::%s: DestinationLinesToRequestVMInImmediateFlip = %f\n", __func__, *DestinationLinesToRequestVMInImmediateFlip); | ||
- dml_print("DML::%s: DestinationLinesToRequestRowInImmediateFlip = %f\n", __func__, *DestinationLinesToRequestRowInImmediateFlip); | ||
+ dml_print("DML::%s: DestinationLinesToRequestVMInImmediateFlip = %f\n", __func__, v->DestinationLinesToRequestVMInImmediateFlip[k]); | ||
+ dml_print("DML::%s: DestinationLinesToRequestRowInImmediateFlip = %f\n", __func__, v->DestinationLinesToRequestRowInImmediateFlip[k]); | ||
dml_print("DML::%s: TimeForFetchingMetaPTEImmediateFlip = %f\n", __func__, TimeForFetchingMetaPTEImmediateFlip); | ||
dml_print("DML::%s: TimeForFetchingRowInVBlankImmediateFlip = %f\n", __func__, TimeForFetchingRowInVBlankImmediateFlip); | ||
dml_print("DML::%s: min_row_time = %f\n", __func__, min_row_time); | ||
- dml_print("DML::%s: ImmediateFlipSupportedForPipe = %d\n", __func__, *ImmediateFlipSupportedForPipe); | ||
+ dml_print("DML::%s: ImmediateFlipSupportedForPipe = %d\n", __func__, v->ImmediateFlipSupportedForPipe[k]); | ||
#endif | ||
|
||
} | ||
@@ -5340,33 +5282,13 @@ void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_ | ||
for (k = 0; k < v->NumberOfActivePlanes; k++) { | ||
CalculateFlipSchedule( | ||
mode_lib, | ||
+ k, | ||
HostVMInefficiencyFactor, | ||
v->ExtraLatency, | ||
v->UrgLatency[i], | ||
- v->GPUVMMaxPageTableLevels, | ||
- v->HostVMEnable, | ||
- v->HostVMMaxNonCachedPageTableLevels, | ||
- v->GPUVMEnable, | ||
- v->HostVMMinPageSize, | ||
v->PDEAndMetaPTEBytesPerFrame[i][j][k], | ||
v->MetaRowBytes[i][j][k], | ||
- v->DPTEBytesPerRow[i][j][k], | ||
- v->BandwidthAvailableForImmediateFlip, | ||
- v->TotImmediateFlipBytes, | ||
- v->SourcePixelFormat[k], | ||
- v->HTotal[k] / v->PixelClock[k], | ||
- v->VRatio[k], | ||
- v->VRatioChroma[k], | ||
- v->Tno_bw[k], | ||
- v->DCCEnable[k], | ||
- v->dpte_row_height[k], | ||
- v->meta_row_height[k], | ||
- v->dpte_row_height_chroma[k], | ||
- v->meta_row_height_chroma[k], | ||
- &v->DestinationLinesToRequestVMInImmediateFlip[k], | ||
- &v->DestinationLinesToRequestRowInImmediateFlip[k], | ||
- &v->final_flip_bw[k], | ||
- &v->ImmediateFlipSupportedForPipe[k]); | ||
+ v->DPTEBytesPerRow[i][j][k]); | ||
} | ||
v->total_dcn_read_bw_with_flip = 0.0; | ||
for (k = 0; k < v->NumberOfActivePlanes; k++) { | ||
-- | ||
2.37.3 | ||
|
Oops, something went wrong.