drm/amd/display: Fix off-by-one error in DML
[ Upstream commit e4e3678260e9734f6f41b4325aac0b171833a618 ] [WHY] For DCN30 and later, there is no data in DML arrays indexed by state at index num_states. Signed-off-by: Wesley Chalmers <Wesley.Chalmers@amd.com> Reviewed-by: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com> Acked-by: Stylon Wang <stylon.wang@amd.com> Tested-by: Daniel Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
afa06442d2
commit
c71de31b2e
@@ -2053,7 +2053,7 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
|
|||||||
v->DISPCLKWithoutRamping,
|
v->DISPCLKWithoutRamping,
|
||||||
v->DISPCLKDPPCLKVCOSpeed);
|
v->DISPCLKDPPCLKVCOSpeed);
|
||||||
v->MaxDispclkRoundedToDFSGranularity = RoundToDFSGranularityDown(
|
v->MaxDispclkRoundedToDFSGranularity = RoundToDFSGranularityDown(
|
||||||
v->soc.clock_limits[mode_lib->soc.num_states].dispclk_mhz,
|
v->soc.clock_limits[mode_lib->soc.num_states - 1].dispclk_mhz,
|
||||||
v->DISPCLKDPPCLKVCOSpeed);
|
v->DISPCLKDPPCLKVCOSpeed);
|
||||||
if (v->DISPCLKWithoutRampingRoundedToDFSGranularity
|
if (v->DISPCLKWithoutRampingRoundedToDFSGranularity
|
||||||
> v->MaxDispclkRoundedToDFSGranularity) {
|
> v->MaxDispclkRoundedToDFSGranularity) {
|
||||||
@@ -3958,20 +3958,20 @@ void dml30_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_l
|
|||||||
for (k = 0; k <= v->NumberOfActivePlanes - 1; k++) {
|
for (k = 0; k <= v->NumberOfActivePlanes - 1; k++) {
|
||||||
v->PlaneRequiredDISPCLKWithoutODMCombine = v->PixelClock[k] * (1.0 + v->DISPCLKDPPCLKDSCCLKDownSpreading / 100.0)
|
v->PlaneRequiredDISPCLKWithoutODMCombine = v->PixelClock[k] * (1.0 + v->DISPCLKDPPCLKDSCCLKDownSpreading / 100.0)
|
||||||
* (1.0 + v->DISPCLKRampingMargin / 100.0);
|
* (1.0 + v->DISPCLKRampingMargin / 100.0);
|
||||||
if ((v->PlaneRequiredDISPCLKWithoutODMCombine >= v->MaxDispclk[i] && v->MaxDispclk[i] == v->MaxDispclk[mode_lib->soc.num_states]
|
if ((v->PlaneRequiredDISPCLKWithoutODMCombine >= v->MaxDispclk[i] && v->MaxDispclk[i] == v->MaxDispclk[mode_lib->soc.num_states - 1]
|
||||||
&& v->MaxDppclk[i] == v->MaxDppclk[mode_lib->soc.num_states])) {
|
&& v->MaxDppclk[i] == v->MaxDppclk[mode_lib->soc.num_states - 1])) {
|
||||||
v->PlaneRequiredDISPCLKWithoutODMCombine = v->PixelClock[k] * (1 + v->DISPCLKDPPCLKDSCCLKDownSpreading / 100.0);
|
v->PlaneRequiredDISPCLKWithoutODMCombine = v->PixelClock[k] * (1 + v->DISPCLKDPPCLKDSCCLKDownSpreading / 100.0);
|
||||||
}
|
}
|
||||||
v->PlaneRequiredDISPCLKWithODMCombine2To1 = v->PixelClock[k] / 2 * (1 + v->DISPCLKDPPCLKDSCCLKDownSpreading / 100.0)
|
v->PlaneRequiredDISPCLKWithODMCombine2To1 = v->PixelClock[k] / 2 * (1 + v->DISPCLKDPPCLKDSCCLKDownSpreading / 100.0)
|
||||||
* (1 + v->DISPCLKRampingMargin / 100.0);
|
* (1 + v->DISPCLKRampingMargin / 100.0);
|
||||||
if ((v->PlaneRequiredDISPCLKWithODMCombine2To1 >= v->MaxDispclk[i] && v->MaxDispclk[i] == v->MaxDispclk[mode_lib->soc.num_states]
|
if ((v->PlaneRequiredDISPCLKWithODMCombine2To1 >= v->MaxDispclk[i] && v->MaxDispclk[i] == v->MaxDispclk[mode_lib->soc.num_states - 1]
|
||||||
&& v->MaxDppclk[i] == v->MaxDppclk[mode_lib->soc.num_states])) {
|
&& v->MaxDppclk[i] == v->MaxDppclk[mode_lib->soc.num_states - 1])) {
|
||||||
v->PlaneRequiredDISPCLKWithODMCombine2To1 = v->PixelClock[k] / 2 * (1 + v->DISPCLKDPPCLKDSCCLKDownSpreading / 100.0);
|
v->PlaneRequiredDISPCLKWithODMCombine2To1 = v->PixelClock[k] / 2 * (1 + v->DISPCLKDPPCLKDSCCLKDownSpreading / 100.0);
|
||||||
}
|
}
|
||||||
v->PlaneRequiredDISPCLKWithODMCombine4To1 = v->PixelClock[k] / 4 * (1 + v->DISPCLKDPPCLKDSCCLKDownSpreading / 100.0)
|
v->PlaneRequiredDISPCLKWithODMCombine4To1 = v->PixelClock[k] / 4 * (1 + v->DISPCLKDPPCLKDSCCLKDownSpreading / 100.0)
|
||||||
* (1 + v->DISPCLKRampingMargin / 100.0);
|
* (1 + v->DISPCLKRampingMargin / 100.0);
|
||||||
if ((v->PlaneRequiredDISPCLKWithODMCombine4To1 >= v->MaxDispclk[i] && v->MaxDispclk[i] == v->MaxDispclk[mode_lib->soc.num_states]
|
if ((v->PlaneRequiredDISPCLKWithODMCombine4To1 >= v->MaxDispclk[i] && v->MaxDispclk[i] == v->MaxDispclk[mode_lib->soc.num_states - 1]
|
||||||
&& v->MaxDppclk[i] == v->MaxDppclk[mode_lib->soc.num_states])) {
|
&& v->MaxDppclk[i] == v->MaxDppclk[mode_lib->soc.num_states - 1])) {
|
||||||
v->PlaneRequiredDISPCLKWithODMCombine4To1 = v->PixelClock[k] / 4 * (1 + v->DISPCLKDPPCLKDSCCLKDownSpreading / 100.0);
|
v->PlaneRequiredDISPCLKWithODMCombine4To1 = v->PixelClock[k] / 4 * (1 + v->DISPCLKDPPCLKDSCCLKDownSpreading / 100.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user