mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 10:31:46 +09:00
drm/amd/display: Correct DML calculation to align HW formula
[ Upstream commit 26a9f53198 ]
[Why]
In 2560x1440@240p eDP panel, some use cases will enable MPC
combine with RGB MPO then underflow happened. This case is
not allowed from HW formula.
[How]
Correct eDP, DP and DP2 output bpp calculation to align HW
formula.
Reviewed-by: Nicholas Kazlauskas <Nicholas.Kazlauskas@amd.com>
Acked-by: Qingqing Zhuo <qingqing.zhuo@amd.com>
Signed-off-by: Paul Hsieh <Paul.Hsieh@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
92e6c79aca
commit
09f7da1301
@@ -4305,11 +4305,11 @@ void dml31_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_l
|
|||||||
v->AudioSampleRate[k],
|
v->AudioSampleRate[k],
|
||||||
v->AudioSampleLayout[k],
|
v->AudioSampleLayout[k],
|
||||||
v->ODMCombineEnablePerState[i][k]);
|
v->ODMCombineEnablePerState[i][k]);
|
||||||
} else if (v->Output[k] == dm_dp || v->Output[k] == dm_edp) {
|
} else if (v->Output[k] == dm_dp || v->Output[k] == dm_edp || v->Output[k] == dm_dp2p0) {
|
||||||
if (v->DSCEnable[k] == true) {
|
if (v->DSCEnable[k] == true) {
|
||||||
v->RequiresDSC[i][k] = true;
|
v->RequiresDSC[i][k] = true;
|
||||||
v->LinkDSCEnable = true;
|
v->LinkDSCEnable = true;
|
||||||
if (v->Output[k] == dm_dp) {
|
if (v->Output[k] == dm_dp || v->Output[k] == dm_dp2p0) {
|
||||||
v->RequiresFEC[i][k] = true;
|
v->RequiresFEC[i][k] = true;
|
||||||
} else {
|
} else {
|
||||||
v->RequiresFEC[i][k] = false;
|
v->RequiresFEC[i][k] = false;
|
||||||
@@ -4317,107 +4317,201 @@ void dml31_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_l
|
|||||||
} else {
|
} else {
|
||||||
v->RequiresDSC[i][k] = false;
|
v->RequiresDSC[i][k] = false;
|
||||||
v->LinkDSCEnable = false;
|
v->LinkDSCEnable = false;
|
||||||
v->RequiresFEC[i][k] = false;
|
if (v->Output[k] == dm_dp2p0) {
|
||||||
|
v->RequiresFEC[i][k] = true;
|
||||||
|
} else {
|
||||||
|
v->RequiresFEC[i][k] = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
if (v->Output[k] == dm_dp2p0) {
|
||||||
v->Outbpp = BPP_INVALID;
|
v->Outbpp = BPP_INVALID;
|
||||||
if (v->PHYCLKPerState[i] >= 270.0) {
|
if ((v->OutputLinkDPRate[k] == dm_dp_rate_na || v->OutputLinkDPRate[k] == dm_dp_rate_uhbr10) &&
|
||||||
v->Outbpp = TruncToValidBPP(
|
v->PHYCLKD18PerState[k] >= 10000.0 / 18.0) {
|
||||||
(1.0 - v->Downspreading / 100.0) * 2700,
|
v->Outbpp = TruncToValidBPP(
|
||||||
v->OutputLinkDPLanes[k],
|
(1.0 - v->Downspreading / 100.0) * 10000,
|
||||||
v->HTotal[k],
|
v->OutputLinkDPLanes[k],
|
||||||
v->HActive[k],
|
v->HTotal[k],
|
||||||
v->PixelClockBackEnd[k],
|
v->HActive[k],
|
||||||
v->ForcedOutputLinkBPP[k],
|
v->PixelClockBackEnd[k],
|
||||||
v->LinkDSCEnable,
|
v->ForcedOutputLinkBPP[k],
|
||||||
v->Output[k],
|
v->LinkDSCEnable,
|
||||||
v->OutputFormat[k],
|
v->Output[k],
|
||||||
v->DSCInputBitPerComponent[k],
|
v->OutputFormat[k],
|
||||||
v->NumberOfDSCSlices[k],
|
v->DSCInputBitPerComponent[k],
|
||||||
v->AudioSampleRate[k],
|
v->NumberOfDSCSlices[k],
|
||||||
v->AudioSampleLayout[k],
|
v->AudioSampleRate[k],
|
||||||
v->ODMCombineEnablePerState[i][k]);
|
v->AudioSampleLayout[k],
|
||||||
v->OutputBppPerState[i][k] = v->Outbpp;
|
v->ODMCombineEnablePerState[i][k]);
|
||||||
// TODO: Need some other way to handle this nonsense
|
if (v->Outbpp == BPP_INVALID && v->PHYCLKD18PerState[k] < 13500.0 / 18.0 &&
|
||||||
// v->OutputTypeAndRatePerState[i][k] = v->Output[k] & " HBR"
|
v->DSCEnable[k] == true && v->ForcedOutputLinkBPP[k] == 0) {
|
||||||
}
|
v->RequiresDSC[i][k] = true;
|
||||||
if (v->Outbpp == BPP_INVALID && v->PHYCLKPerState[i] >= 540.0) {
|
v->LinkDSCEnable = true;
|
||||||
v->Outbpp = TruncToValidBPP(
|
v->Outbpp = TruncToValidBPP(
|
||||||
(1.0 - v->Downspreading / 100.0) * 5400,
|
(1.0 - v->Downspreading / 100.0) * 10000,
|
||||||
v->OutputLinkDPLanes[k],
|
v->OutputLinkDPLanes[k],
|
||||||
v->HTotal[k],
|
v->HTotal[k],
|
||||||
v->HActive[k],
|
v->HActive[k],
|
||||||
v->PixelClockBackEnd[k],
|
v->PixelClockBackEnd[k],
|
||||||
v->ForcedOutputLinkBPP[k],
|
v->ForcedOutputLinkBPP[k],
|
||||||
v->LinkDSCEnable,
|
v->LinkDSCEnable,
|
||||||
v->Output[k],
|
v->Output[k],
|
||||||
v->OutputFormat[k],
|
v->OutputFormat[k],
|
||||||
v->DSCInputBitPerComponent[k],
|
v->DSCInputBitPerComponent[k],
|
||||||
v->NumberOfDSCSlices[k],
|
v->NumberOfDSCSlices[k],
|
||||||
v->AudioSampleRate[k],
|
v->AudioSampleRate[k],
|
||||||
v->AudioSampleLayout[k],
|
v->AudioSampleLayout[k],
|
||||||
v->ODMCombineEnablePerState[i][k]);
|
v->ODMCombineEnablePerState[i][k]);
|
||||||
v->OutputBppPerState[i][k] = v->Outbpp;
|
}
|
||||||
// TODO: Need some other way to handle this nonsense
|
v->OutputBppPerState[i][k] = v->Outbpp;
|
||||||
// v->OutputTypeAndRatePerState[i][k] = v->Output[k] & " HBR2"
|
// TODO: Need some other way to handle this nonsense
|
||||||
}
|
// v->OutputTypeAndRatePerState[i][k] = v->Output[k] & " UHBR10"
|
||||||
if (v->Outbpp == BPP_INVALID && v->PHYCLKPerState[i] >= 810.0) {
|
}
|
||||||
v->Outbpp = TruncToValidBPP(
|
if (v->Outbpp == BPP_INVALID &&
|
||||||
(1.0 - v->Downspreading / 100.0) * 8100,
|
(v->OutputLinkDPRate[k] == dm_dp_rate_na || v->OutputLinkDPRate[k] == dm_dp_rate_uhbr13p5) &&
|
||||||
v->OutputLinkDPLanes[k],
|
v->PHYCLKD18PerState[k] >= 13500.0 / 18.0) {
|
||||||
v->HTotal[k],
|
v->Outbpp = TruncToValidBPP(
|
||||||
v->HActive[k],
|
(1.0 - v->Downspreading / 100.0) * 13500,
|
||||||
v->PixelClockBackEnd[k],
|
v->OutputLinkDPLanes[k],
|
||||||
v->ForcedOutputLinkBPP[k],
|
v->HTotal[k],
|
||||||
v->LinkDSCEnable,
|
v->HActive[k],
|
||||||
v->Output[k],
|
v->PixelClockBackEnd[k],
|
||||||
v->OutputFormat[k],
|
v->ForcedOutputLinkBPP[k],
|
||||||
v->DSCInputBitPerComponent[k],
|
v->LinkDSCEnable,
|
||||||
v->NumberOfDSCSlices[k],
|
v->Output[k],
|
||||||
v->AudioSampleRate[k],
|
v->OutputFormat[k],
|
||||||
v->AudioSampleLayout[k],
|
v->DSCInputBitPerComponent[k],
|
||||||
v->ODMCombineEnablePerState[i][k]);
|
v->NumberOfDSCSlices[k],
|
||||||
v->OutputBppPerState[i][k] = v->Outbpp;
|
v->AudioSampleRate[k],
|
||||||
// TODO: Need some other way to handle this nonsense
|
v->AudioSampleLayout[k],
|
||||||
// v->OutputTypeAndRatePerState[i][k] = v->Output[k] & " HBR3"
|
v->ODMCombineEnablePerState[i][k]);
|
||||||
}
|
if (v->Outbpp == BPP_INVALID && v->PHYCLKD18PerState[k] < 20000.0 / 18.0 &&
|
||||||
if (v->Outbpp == BPP_INVALID && v->PHYCLKD18PerState[i] >= 10000.0 / 18) {
|
v->DSCEnable[k] == true && v->ForcedOutputLinkBPP[k] == 0) {
|
||||||
v->Outbpp = TruncToValidBPP(
|
v->RequiresDSC[i][k] = true;
|
||||||
(1.0 - v->Downspreading / 100.0) * 10000,
|
v->LinkDSCEnable = true;
|
||||||
4,
|
v->Outbpp = TruncToValidBPP(
|
||||||
v->HTotal[k],
|
(1.0 - v->Downspreading / 100.0) * 13500,
|
||||||
v->HActive[k],
|
v->OutputLinkDPLanes[k],
|
||||||
v->PixelClockBackEnd[k],
|
v->HTotal[k],
|
||||||
v->ForcedOutputLinkBPP[k],
|
v->HActive[k],
|
||||||
v->LinkDSCEnable,
|
v->PixelClockBackEnd[k],
|
||||||
v->Output[k],
|
v->ForcedOutputLinkBPP[k],
|
||||||
v->OutputFormat[k],
|
v->LinkDSCEnable,
|
||||||
v->DSCInputBitPerComponent[k],
|
v->Output[k],
|
||||||
v->NumberOfDSCSlices[k],
|
v->OutputFormat[k],
|
||||||
v->AudioSampleRate[k],
|
v->DSCInputBitPerComponent[k],
|
||||||
v->AudioSampleLayout[k],
|
v->NumberOfDSCSlices[k],
|
||||||
v->ODMCombineEnablePerState[i][k]);
|
v->AudioSampleRate[k],
|
||||||
v->OutputBppPerState[i][k] = v->Outbpp;
|
v->AudioSampleLayout[k],
|
||||||
//v->OutputTypeAndRatePerState[i][k] = v->Output[k] & "10x4";
|
v->ODMCombineEnablePerState[i][k]);
|
||||||
}
|
}
|
||||||
if (v->Outbpp == BPP_INVALID && v->PHYCLKD18PerState[i] >= 12000.0 / 18) {
|
v->OutputBppPerState[i][k] = v->Outbpp;
|
||||||
v->Outbpp = TruncToValidBPP(
|
// TODO: Need some other way to handle this nonsense
|
||||||
12000,
|
// v->OutputTypeAndRatePerState[i][k] = v->Output[k] & " UHBR13p5"
|
||||||
4,
|
}
|
||||||
v->HTotal[k],
|
if (v->Outbpp == BPP_INVALID &&
|
||||||
v->HActive[k],
|
(v->OutputLinkDPRate[k] == dm_dp_rate_na || v->OutputLinkDPRate[k] == dm_dp_rate_uhbr20) &&
|
||||||
v->PixelClockBackEnd[k],
|
v->PHYCLKD18PerState[k] >= 20000.0 / 18.0) {
|
||||||
v->ForcedOutputLinkBPP[k],
|
v->Outbpp = TruncToValidBPP(
|
||||||
v->LinkDSCEnable,
|
(1.0 - v->Downspreading / 100.0) * 20000,
|
||||||
v->Output[k],
|
v->OutputLinkDPLanes[k],
|
||||||
v->OutputFormat[k],
|
v->HTotal[k],
|
||||||
v->DSCInputBitPerComponent[k],
|
v->HActive[k],
|
||||||
v->NumberOfDSCSlices[k],
|
v->PixelClockBackEnd[k],
|
||||||
v->AudioSampleRate[k],
|
v->ForcedOutputLinkBPP[k],
|
||||||
v->AudioSampleLayout[k],
|
v->LinkDSCEnable,
|
||||||
v->ODMCombineEnablePerState[i][k]);
|
v->Output[k],
|
||||||
v->OutputBppPerState[i][k] = v->Outbpp;
|
v->OutputFormat[k],
|
||||||
//v->OutputTypeAndRatePerState[i][k] = v->Output[k] & "12x4";
|
v->DSCInputBitPerComponent[k],
|
||||||
|
v->NumberOfDSCSlices[k],
|
||||||
|
v->AudioSampleRate[k],
|
||||||
|
v->AudioSampleLayout[k],
|
||||||
|
v->ODMCombineEnablePerState[i][k]);
|
||||||
|
if (v->Outbpp == BPP_INVALID && v->DSCEnable[k] == true &&
|
||||||
|
v->ForcedOutputLinkBPP[k] == 0) {
|
||||||
|
v->RequiresDSC[i][k] = true;
|
||||||
|
v->LinkDSCEnable = true;
|
||||||
|
v->Outbpp = TruncToValidBPP(
|
||||||
|
(1.0 - v->Downspreading / 100.0) * 20000,
|
||||||
|
v->OutputLinkDPLanes[k],
|
||||||
|
v->HTotal[k],
|
||||||
|
v->HActive[k],
|
||||||
|
v->PixelClockBackEnd[k],
|
||||||
|
v->ForcedOutputLinkBPP[k],
|
||||||
|
v->LinkDSCEnable,
|
||||||
|
v->Output[k],
|
||||||
|
v->OutputFormat[k],
|
||||||
|
v->DSCInputBitPerComponent[k],
|
||||||
|
v->NumberOfDSCSlices[k],
|
||||||
|
v->AudioSampleRate[k],
|
||||||
|
v->AudioSampleLayout[k],
|
||||||
|
v->ODMCombineEnablePerState[i][k]);
|
||||||
|
}
|
||||||
|
v->OutputBppPerState[i][k] = v->Outbpp;
|
||||||
|
// TODO: Need some other way to handle this nonsense
|
||||||
|
// v->OutputTypeAndRatePerState[i][k] = v->Output[k] & " UHBR20"
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
v->Outbpp = BPP_INVALID;
|
||||||
|
if (v->PHYCLKPerState[i] >= 270.0) {
|
||||||
|
v->Outbpp = TruncToValidBPP(
|
||||||
|
(1.0 - v->Downspreading / 100.0) * 2700,
|
||||||
|
v->OutputLinkDPLanes[k],
|
||||||
|
v->HTotal[k],
|
||||||
|
v->HActive[k],
|
||||||
|
v->PixelClockBackEnd[k],
|
||||||
|
v->ForcedOutputLinkBPP[k],
|
||||||
|
v->LinkDSCEnable,
|
||||||
|
v->Output[k],
|
||||||
|
v->OutputFormat[k],
|
||||||
|
v->DSCInputBitPerComponent[k],
|
||||||
|
v->NumberOfDSCSlices[k],
|
||||||
|
v->AudioSampleRate[k],
|
||||||
|
v->AudioSampleLayout[k],
|
||||||
|
v->ODMCombineEnablePerState[i][k]);
|
||||||
|
v->OutputBppPerState[i][k] = v->Outbpp;
|
||||||
|
// TODO: Need some other way to handle this nonsense
|
||||||
|
// v->OutputTypeAndRatePerState[i][k] = v->Output[k] & " HBR"
|
||||||
|
}
|
||||||
|
if (v->Outbpp == BPP_INVALID && v->PHYCLKPerState[i] >= 540.0) {
|
||||||
|
v->Outbpp = TruncToValidBPP(
|
||||||
|
(1.0 - v->Downspreading / 100.0) * 5400,
|
||||||
|
v->OutputLinkDPLanes[k],
|
||||||
|
v->HTotal[k],
|
||||||
|
v->HActive[k],
|
||||||
|
v->PixelClockBackEnd[k],
|
||||||
|
v->ForcedOutputLinkBPP[k],
|
||||||
|
v->LinkDSCEnable,
|
||||||
|
v->Output[k],
|
||||||
|
v->OutputFormat[k],
|
||||||
|
v->DSCInputBitPerComponent[k],
|
||||||
|
v->NumberOfDSCSlices[k],
|
||||||
|
v->AudioSampleRate[k],
|
||||||
|
v->AudioSampleLayout[k],
|
||||||
|
v->ODMCombineEnablePerState[i][k]);
|
||||||
|
v->OutputBppPerState[i][k] = v->Outbpp;
|
||||||
|
// TODO: Need some other way to handle this nonsense
|
||||||
|
// v->OutputTypeAndRatePerState[i][k] = v->Output[k] & " HBR2"
|
||||||
|
}
|
||||||
|
if (v->Outbpp == BPP_INVALID && v->PHYCLKPerState[i] >= 810.0) {
|
||||||
|
v->Outbpp = TruncToValidBPP(
|
||||||
|
(1.0 - v->Downspreading / 100.0) * 8100,
|
||||||
|
v->OutputLinkDPLanes[k],
|
||||||
|
v->HTotal[k],
|
||||||
|
v->HActive[k],
|
||||||
|
v->PixelClockBackEnd[k],
|
||||||
|
v->ForcedOutputLinkBPP[k],
|
||||||
|
v->LinkDSCEnable,
|
||||||
|
v->Output[k],
|
||||||
|
v->OutputFormat[k],
|
||||||
|
v->DSCInputBitPerComponent[k],
|
||||||
|
v->NumberOfDSCSlices[k],
|
||||||
|
v->AudioSampleRate[k],
|
||||||
|
v->AudioSampleLayout[k],
|
||||||
|
v->ODMCombineEnablePerState[i][k]);
|
||||||
|
v->OutputBppPerState[i][k] = v->Outbpp;
|
||||||
|
// TODO: Need some other way to handle this nonsense
|
||||||
|
// v->OutputTypeAndRatePerState[i][k] = v->Output[k] & " HBR3"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -4403,11 +4403,11 @@ void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_
|
|||||||
v->AudioSampleRate[k],
|
v->AudioSampleRate[k],
|
||||||
v->AudioSampleLayout[k],
|
v->AudioSampleLayout[k],
|
||||||
v->ODMCombineEnablePerState[i][k]);
|
v->ODMCombineEnablePerState[i][k]);
|
||||||
} else if (v->Output[k] == dm_dp || v->Output[k] == dm_edp) {
|
} else if (v->Output[k] == dm_dp || v->Output[k] == dm_edp || v->Output[k] == dm_dp2p0) {
|
||||||
if (v->DSCEnable[k] == true) {
|
if (v->DSCEnable[k] == true) {
|
||||||
v->RequiresDSC[i][k] = true;
|
v->RequiresDSC[i][k] = true;
|
||||||
v->LinkDSCEnable = true;
|
v->LinkDSCEnable = true;
|
||||||
if (v->Output[k] == dm_dp) {
|
if (v->Output[k] == dm_dp || v->Output[k] == dm_dp2p0) {
|
||||||
v->RequiresFEC[i][k] = true;
|
v->RequiresFEC[i][k] = true;
|
||||||
} else {
|
} else {
|
||||||
v->RequiresFEC[i][k] = false;
|
v->RequiresFEC[i][k] = false;
|
||||||
@@ -4415,107 +4415,201 @@ void dml314_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_
|
|||||||
} else {
|
} else {
|
||||||
v->RequiresDSC[i][k] = false;
|
v->RequiresDSC[i][k] = false;
|
||||||
v->LinkDSCEnable = false;
|
v->LinkDSCEnable = false;
|
||||||
v->RequiresFEC[i][k] = false;
|
if (v->Output[k] == dm_dp2p0) {
|
||||||
|
v->RequiresFEC[i][k] = true;
|
||||||
|
} else {
|
||||||
|
v->RequiresFEC[i][k] = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
if (v->Output[k] == dm_dp2p0) {
|
||||||
v->Outbpp = BPP_INVALID;
|
v->Outbpp = BPP_INVALID;
|
||||||
if (v->PHYCLKPerState[i] >= 270.0) {
|
if ((v->OutputLinkDPRate[k] == dm_dp_rate_na || v->OutputLinkDPRate[k] == dm_dp_rate_uhbr10) &&
|
||||||
v->Outbpp = TruncToValidBPP(
|
v->PHYCLKD18PerState[k] >= 10000.0 / 18.0) {
|
||||||
(1.0 - v->Downspreading / 100.0) * 2700,
|
v->Outbpp = TruncToValidBPP(
|
||||||
v->OutputLinkDPLanes[k],
|
(1.0 - v->Downspreading / 100.0) * 10000,
|
||||||
v->HTotal[k],
|
v->OutputLinkDPLanes[k],
|
||||||
v->HActive[k],
|
v->HTotal[k],
|
||||||
v->PixelClockBackEnd[k],
|
v->HActive[k],
|
||||||
v->ForcedOutputLinkBPP[k],
|
v->PixelClockBackEnd[k],
|
||||||
v->LinkDSCEnable,
|
v->ForcedOutputLinkBPP[k],
|
||||||
v->Output[k],
|
v->LinkDSCEnable,
|
||||||
v->OutputFormat[k],
|
v->Output[k],
|
||||||
v->DSCInputBitPerComponent[k],
|
v->OutputFormat[k],
|
||||||
v->NumberOfDSCSlices[k],
|
v->DSCInputBitPerComponent[k],
|
||||||
v->AudioSampleRate[k],
|
v->NumberOfDSCSlices[k],
|
||||||
v->AudioSampleLayout[k],
|
v->AudioSampleRate[k],
|
||||||
v->ODMCombineEnablePerState[i][k]);
|
v->AudioSampleLayout[k],
|
||||||
v->OutputBppPerState[i][k] = v->Outbpp;
|
v->ODMCombineEnablePerState[i][k]);
|
||||||
// TODO: Need some other way to handle this nonsense
|
if (v->Outbpp == BPP_INVALID && v->PHYCLKD18PerState[k] < 13500.0 / 18.0 &&
|
||||||
// v->OutputTypeAndRatePerState[i][k] = v->Output[k] & " HBR"
|
v->DSCEnable[k] == true && v->ForcedOutputLinkBPP[k] == 0) {
|
||||||
}
|
v->RequiresDSC[i][k] = true;
|
||||||
if (v->Outbpp == BPP_INVALID && v->PHYCLKPerState[i] >= 540.0) {
|
v->LinkDSCEnable = true;
|
||||||
v->Outbpp = TruncToValidBPP(
|
v->Outbpp = TruncToValidBPP(
|
||||||
(1.0 - v->Downspreading / 100.0) * 5400,
|
(1.0 - v->Downspreading / 100.0) * 10000,
|
||||||
v->OutputLinkDPLanes[k],
|
v->OutputLinkDPLanes[k],
|
||||||
v->HTotal[k],
|
v->HTotal[k],
|
||||||
v->HActive[k],
|
v->HActive[k],
|
||||||
v->PixelClockBackEnd[k],
|
v->PixelClockBackEnd[k],
|
||||||
v->ForcedOutputLinkBPP[k],
|
v->ForcedOutputLinkBPP[k],
|
||||||
v->LinkDSCEnable,
|
v->LinkDSCEnable,
|
||||||
v->Output[k],
|
v->Output[k],
|
||||||
v->OutputFormat[k],
|
v->OutputFormat[k],
|
||||||
v->DSCInputBitPerComponent[k],
|
v->DSCInputBitPerComponent[k],
|
||||||
v->NumberOfDSCSlices[k],
|
v->NumberOfDSCSlices[k],
|
||||||
v->AudioSampleRate[k],
|
v->AudioSampleRate[k],
|
||||||
v->AudioSampleLayout[k],
|
v->AudioSampleLayout[k],
|
||||||
v->ODMCombineEnablePerState[i][k]);
|
v->ODMCombineEnablePerState[i][k]);
|
||||||
v->OutputBppPerState[i][k] = v->Outbpp;
|
}
|
||||||
// TODO: Need some other way to handle this nonsense
|
v->OutputBppPerState[i][k] = v->Outbpp;
|
||||||
// v->OutputTypeAndRatePerState[i][k] = v->Output[k] & " HBR2"
|
// TODO: Need some other way to handle this nonsense
|
||||||
}
|
// v->OutputTypeAndRatePerState[i][k] = v->Output[k] & " UHBR10"
|
||||||
if (v->Outbpp == BPP_INVALID && v->PHYCLKPerState[i] >= 810.0) {
|
}
|
||||||
v->Outbpp = TruncToValidBPP(
|
if (v->Outbpp == BPP_INVALID &&
|
||||||
(1.0 - v->Downspreading / 100.0) * 8100,
|
(v->OutputLinkDPRate[k] == dm_dp_rate_na || v->OutputLinkDPRate[k] == dm_dp_rate_uhbr13p5) &&
|
||||||
v->OutputLinkDPLanes[k],
|
v->PHYCLKD18PerState[k] >= 13500.0 / 18.0) {
|
||||||
v->HTotal[k],
|
v->Outbpp = TruncToValidBPP(
|
||||||
v->HActive[k],
|
(1.0 - v->Downspreading / 100.0) * 13500,
|
||||||
v->PixelClockBackEnd[k],
|
v->OutputLinkDPLanes[k],
|
||||||
v->ForcedOutputLinkBPP[k],
|
v->HTotal[k],
|
||||||
v->LinkDSCEnable,
|
v->HActive[k],
|
||||||
v->Output[k],
|
v->PixelClockBackEnd[k],
|
||||||
v->OutputFormat[k],
|
v->ForcedOutputLinkBPP[k],
|
||||||
v->DSCInputBitPerComponent[k],
|
v->LinkDSCEnable,
|
||||||
v->NumberOfDSCSlices[k],
|
v->Output[k],
|
||||||
v->AudioSampleRate[k],
|
v->OutputFormat[k],
|
||||||
v->AudioSampleLayout[k],
|
v->DSCInputBitPerComponent[k],
|
||||||
v->ODMCombineEnablePerState[i][k]);
|
v->NumberOfDSCSlices[k],
|
||||||
v->OutputBppPerState[i][k] = v->Outbpp;
|
v->AudioSampleRate[k],
|
||||||
// TODO: Need some other way to handle this nonsense
|
v->AudioSampleLayout[k],
|
||||||
// v->OutputTypeAndRatePerState[i][k] = v->Output[k] & " HBR3"
|
v->ODMCombineEnablePerState[i][k]);
|
||||||
}
|
if (v->Outbpp == BPP_INVALID && v->PHYCLKD18PerState[k] < 20000.0 / 18.0 &&
|
||||||
if (v->Outbpp == BPP_INVALID && v->PHYCLKD18PerState[i] >= 10000.0 / 18) {
|
v->DSCEnable[k] == true && v->ForcedOutputLinkBPP[k] == 0) {
|
||||||
v->Outbpp = TruncToValidBPP(
|
v->RequiresDSC[i][k] = true;
|
||||||
(1.0 - v->Downspreading / 100.0) * 10000,
|
v->LinkDSCEnable = true;
|
||||||
4,
|
v->Outbpp = TruncToValidBPP(
|
||||||
v->HTotal[k],
|
(1.0 - v->Downspreading / 100.0) * 13500,
|
||||||
v->HActive[k],
|
v->OutputLinkDPLanes[k],
|
||||||
v->PixelClockBackEnd[k],
|
v->HTotal[k],
|
||||||
v->ForcedOutputLinkBPP[k],
|
v->HActive[k],
|
||||||
v->LinkDSCEnable,
|
v->PixelClockBackEnd[k],
|
||||||
v->Output[k],
|
v->ForcedOutputLinkBPP[k],
|
||||||
v->OutputFormat[k],
|
v->LinkDSCEnable,
|
||||||
v->DSCInputBitPerComponent[k],
|
v->Output[k],
|
||||||
v->NumberOfDSCSlices[k],
|
v->OutputFormat[k],
|
||||||
v->AudioSampleRate[k],
|
v->DSCInputBitPerComponent[k],
|
||||||
v->AudioSampleLayout[k],
|
v->NumberOfDSCSlices[k],
|
||||||
v->ODMCombineEnablePerState[i][k]);
|
v->AudioSampleRate[k],
|
||||||
v->OutputBppPerState[i][k] = v->Outbpp;
|
v->AudioSampleLayout[k],
|
||||||
//v->OutputTypeAndRatePerState[i][k] = v->Output[k] & "10x4";
|
v->ODMCombineEnablePerState[i][k]);
|
||||||
}
|
}
|
||||||
if (v->Outbpp == BPP_INVALID && v->PHYCLKD18PerState[i] >= 12000.0 / 18) {
|
v->OutputBppPerState[i][k] = v->Outbpp;
|
||||||
v->Outbpp = TruncToValidBPP(
|
// TODO: Need some other way to handle this nonsense
|
||||||
12000,
|
// v->OutputTypeAndRatePerState[i][k] = v->Output[k] & " UHBR13p5"
|
||||||
4,
|
}
|
||||||
v->HTotal[k],
|
if (v->Outbpp == BPP_INVALID &&
|
||||||
v->HActive[k],
|
(v->OutputLinkDPRate[k] == dm_dp_rate_na || v->OutputLinkDPRate[k] == dm_dp_rate_uhbr20) &&
|
||||||
v->PixelClockBackEnd[k],
|
v->PHYCLKD18PerState[k] >= 20000.0 / 18.0) {
|
||||||
v->ForcedOutputLinkBPP[k],
|
v->Outbpp = TruncToValidBPP(
|
||||||
v->LinkDSCEnable,
|
(1.0 - v->Downspreading / 100.0) * 20000,
|
||||||
v->Output[k],
|
v->OutputLinkDPLanes[k],
|
||||||
v->OutputFormat[k],
|
v->HTotal[k],
|
||||||
v->DSCInputBitPerComponent[k],
|
v->HActive[k],
|
||||||
v->NumberOfDSCSlices[k],
|
v->PixelClockBackEnd[k],
|
||||||
v->AudioSampleRate[k],
|
v->ForcedOutputLinkBPP[k],
|
||||||
v->AudioSampleLayout[k],
|
v->LinkDSCEnable,
|
||||||
v->ODMCombineEnablePerState[i][k]);
|
v->Output[k],
|
||||||
v->OutputBppPerState[i][k] = v->Outbpp;
|
v->OutputFormat[k],
|
||||||
//v->OutputTypeAndRatePerState[i][k] = v->Output[k] & "12x4";
|
v->DSCInputBitPerComponent[k],
|
||||||
|
v->NumberOfDSCSlices[k],
|
||||||
|
v->AudioSampleRate[k],
|
||||||
|
v->AudioSampleLayout[k],
|
||||||
|
v->ODMCombineEnablePerState[i][k]);
|
||||||
|
if (v->Outbpp == BPP_INVALID && v->DSCEnable[k] == true &&
|
||||||
|
v->ForcedOutputLinkBPP[k] == 0) {
|
||||||
|
v->RequiresDSC[i][k] = true;
|
||||||
|
v->LinkDSCEnable = true;
|
||||||
|
v->Outbpp = TruncToValidBPP(
|
||||||
|
(1.0 - v->Downspreading / 100.0) * 20000,
|
||||||
|
v->OutputLinkDPLanes[k],
|
||||||
|
v->HTotal[k],
|
||||||
|
v->HActive[k],
|
||||||
|
v->PixelClockBackEnd[k],
|
||||||
|
v->ForcedOutputLinkBPP[k],
|
||||||
|
v->LinkDSCEnable,
|
||||||
|
v->Output[k],
|
||||||
|
v->OutputFormat[k],
|
||||||
|
v->DSCInputBitPerComponent[k],
|
||||||
|
v->NumberOfDSCSlices[k],
|
||||||
|
v->AudioSampleRate[k],
|
||||||
|
v->AudioSampleLayout[k],
|
||||||
|
v->ODMCombineEnablePerState[i][k]);
|
||||||
|
}
|
||||||
|
v->OutputBppPerState[i][k] = v->Outbpp;
|
||||||
|
// TODO: Need some other way to handle this nonsense
|
||||||
|
// v->OutputTypeAndRatePerState[i][k] = v->Output[k] & " UHBR20"
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
v->Outbpp = BPP_INVALID;
|
||||||
|
if (v->PHYCLKPerState[i] >= 270.0) {
|
||||||
|
v->Outbpp = TruncToValidBPP(
|
||||||
|
(1.0 - v->Downspreading / 100.0) * 2700,
|
||||||
|
v->OutputLinkDPLanes[k],
|
||||||
|
v->HTotal[k],
|
||||||
|
v->HActive[k],
|
||||||
|
v->PixelClockBackEnd[k],
|
||||||
|
v->ForcedOutputLinkBPP[k],
|
||||||
|
v->LinkDSCEnable,
|
||||||
|
v->Output[k],
|
||||||
|
v->OutputFormat[k],
|
||||||
|
v->DSCInputBitPerComponent[k],
|
||||||
|
v->NumberOfDSCSlices[k],
|
||||||
|
v->AudioSampleRate[k],
|
||||||
|
v->AudioSampleLayout[k],
|
||||||
|
v->ODMCombineEnablePerState[i][k]);
|
||||||
|
v->OutputBppPerState[i][k] = v->Outbpp;
|
||||||
|
// TODO: Need some other way to handle this nonsense
|
||||||
|
// v->OutputTypeAndRatePerState[i][k] = v->Output[k] & " HBR"
|
||||||
|
}
|
||||||
|
if (v->Outbpp == BPP_INVALID && v->PHYCLKPerState[i] >= 540.0) {
|
||||||
|
v->Outbpp = TruncToValidBPP(
|
||||||
|
(1.0 - v->Downspreading / 100.0) * 5400,
|
||||||
|
v->OutputLinkDPLanes[k],
|
||||||
|
v->HTotal[k],
|
||||||
|
v->HActive[k],
|
||||||
|
v->PixelClockBackEnd[k],
|
||||||
|
v->ForcedOutputLinkBPP[k],
|
||||||
|
v->LinkDSCEnable,
|
||||||
|
v->Output[k],
|
||||||
|
v->OutputFormat[k],
|
||||||
|
v->DSCInputBitPerComponent[k],
|
||||||
|
v->NumberOfDSCSlices[k],
|
||||||
|
v->AudioSampleRate[k],
|
||||||
|
v->AudioSampleLayout[k],
|
||||||
|
v->ODMCombineEnablePerState[i][k]);
|
||||||
|
v->OutputBppPerState[i][k] = v->Outbpp;
|
||||||
|
// TODO: Need some other way to handle this nonsense
|
||||||
|
// v->OutputTypeAndRatePerState[i][k] = v->Output[k] & " HBR2"
|
||||||
|
}
|
||||||
|
if (v->Outbpp == BPP_INVALID && v->PHYCLKPerState[i] >= 810.0) {
|
||||||
|
v->Outbpp = TruncToValidBPP(
|
||||||
|
(1.0 - v->Downspreading / 100.0) * 8100,
|
||||||
|
v->OutputLinkDPLanes[k],
|
||||||
|
v->HTotal[k],
|
||||||
|
v->HActive[k],
|
||||||
|
v->PixelClockBackEnd[k],
|
||||||
|
v->ForcedOutputLinkBPP[k],
|
||||||
|
v->LinkDSCEnable,
|
||||||
|
v->Output[k],
|
||||||
|
v->OutputFormat[k],
|
||||||
|
v->DSCInputBitPerComponent[k],
|
||||||
|
v->NumberOfDSCSlices[k],
|
||||||
|
v->AudioSampleRate[k],
|
||||||
|
v->AudioSampleLayout[k],
|
||||||
|
v->ODMCombineEnablePerState[i][k]);
|
||||||
|
v->OutputBppPerState[i][k] = v->Outbpp;
|
||||||
|
// TODO: Need some other way to handle this nonsense
|
||||||
|
// v->OutputTypeAndRatePerState[i][k] = v->Output[k] & " HBR3"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user