forked from rosa/hakurei
internal/rosa/package: migrate kernel
This introduces bindings for extra paths and KnownChecksum, and exposes a passthrough special case. Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
@@ -0,0 +1,493 @@
|
||||
From 6ce6fbfddc5b127e4f57c3b5bfdcf40239a4fc2f Mon Sep 17 00:00:00 2001
|
||||
From: Nathan Chancellor <nathan@kernel.org>
|
||||
Date: Sat, 13 Dec 2025 19:58:11 +0900
|
||||
Subject: drm/amd/display: Reduce number of arguments of dcn30's
|
||||
CalculateWatermarksAndDRAMSpeedChangeSupport()
|
||||
|
||||
CalculateWatermarksAndDRAMSpeedChangeSupport() has a large number of
|
||||
parameters, which must be passed on the stack. Most of the parameters
|
||||
between the two callsites are the same, so they can be accessed through
|
||||
the existing mode_lib pointer, instead of being passed as explicit
|
||||
arguments. Doing this reduces the stack size of
|
||||
dml30_ModeSupportAndSystemConfigurationFull() from 1912 bytes to 1840
|
||||
bytes building for x86_64 with clang-22, helping stay under the 2048
|
||||
byte limit for display_mode_vba_30.c.
|
||||
|
||||
Additionally, now that there is a pointer to mode_lib->vba available,
|
||||
use 'v' consistently throughout the entire function.
|
||||
|
||||
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
|
||||
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
|
||||
(cherry picked from commit 563dfbefdf633c8d958398ddfa3955f9f40e47d9)
|
||||
---
|
||||
.../amd/display/dc/dml/dcn30/display_mode_vba_30.c | 287 +++++----------------
|
||||
1 file changed, 66 insertions(+), 221 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/amd/display/dc/dml/dcn30/display_mode_vba_30.c b/drivers/gpu/drm/amd/display/dc/dml/dcn30/display_mode_vba_30.c
|
||||
index 2d19bb8de59c84..1df3412be3465d 100644
|
||||
--- a/drivers/gpu/drm/amd/display/dc/dml/dcn30/display_mode_vba_30.c
|
||||
+++ b/drivers/gpu/drm/amd/display/dc/dml/dcn30/display_mode_vba_30.c
|
||||
@@ -265,62 +265,23 @@ static void CalculateDynamicMetadataParameters(
|
||||
static void CalculateWatermarksAndDRAMSpeedChangeSupport(
|
||||
struct display_mode_lib *mode_lib,
|
||||
unsigned int PrefetchMode,
|
||||
- unsigned int NumberOfActivePlanes,
|
||||
- unsigned int MaxLineBufferLines,
|
||||
- unsigned int LineBufferSize,
|
||||
- unsigned int DPPOutputBufferPixels,
|
||||
- unsigned int DETBufferSizeInKByte,
|
||||
- unsigned int WritebackInterfaceBufferSize,
|
||||
double DCFCLK,
|
||||
double ReturnBW,
|
||||
- bool GPUVMEnable,
|
||||
- unsigned int dpte_group_bytes[],
|
||||
- unsigned int MetaChunkSize,
|
||||
double UrgentLatency,
|
||||
double ExtraLatency,
|
||||
- double WritebackLatency,
|
||||
- double WritebackChunkSize,
|
||||
double SOCCLK,
|
||||
- double DRAMClockChangeLatency,
|
||||
- double SRExitTime,
|
||||
- double SREnterPlusExitTime,
|
||||
double DCFCLKDeepSleep,
|
||||
unsigned int DPPPerPlane[],
|
||||
- bool DCCEnable[],
|
||||
double DPPCLK[],
|
||||
unsigned int DETBufferSizeY[],
|
||||
unsigned int DETBufferSizeC[],
|
||||
unsigned int SwathHeightY[],
|
||||
unsigned int SwathHeightC[],
|
||||
- unsigned int LBBitPerPixel[],
|
||||
double SwathWidthY[],
|
||||
double SwathWidthC[],
|
||||
- double HRatio[],
|
||||
- double HRatioChroma[],
|
||||
- unsigned int vtaps[],
|
||||
- unsigned int VTAPsChroma[],
|
||||
- double VRatio[],
|
||||
- double VRatioChroma[],
|
||||
- unsigned int HTotal[],
|
||||
- double PixelClock[],
|
||||
- unsigned int BlendingAndTiming[],
|
||||
double BytePerPixelDETY[],
|
||||
double BytePerPixelDETC[],
|
||||
- double DSTXAfterScaler[],
|
||||
- double DSTYAfterScaler[],
|
||||
- bool WritebackEnable[],
|
||||
- enum source_format_class WritebackPixelFormat[],
|
||||
- double WritebackDestinationWidth[],
|
||||
- double WritebackDestinationHeight[],
|
||||
- double WritebackSourceHeight[],
|
||||
- enum clock_change_support *DRAMClockChangeSupport,
|
||||
- double *UrgentWatermark,
|
||||
- double *WritebackUrgentWatermark,
|
||||
- double *DRAMClockChangeWatermark,
|
||||
- double *WritebackDRAMClockChangeWatermark,
|
||||
- double *StutterExitWatermark,
|
||||
- double *StutterEnterPlusExitWatermark,
|
||||
- double *MinActiveDRAMClockChangeLatencySupported);
|
||||
+ enum clock_change_support *DRAMClockChangeSupport);
|
||||
static void CalculateDCFCLKDeepSleep(
|
||||
struct display_mode_lib *mode_lib,
|
||||
unsigned int NumberOfActivePlanes,
|
||||
@@ -2646,62 +2607,23 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
|
||||
CalculateWatermarksAndDRAMSpeedChangeSupport(
|
||||
mode_lib,
|
||||
PrefetchMode,
|
||||
- v->NumberOfActivePlanes,
|
||||
- v->MaxLineBufferLines,
|
||||
- v->LineBufferSize,
|
||||
- v->DPPOutputBufferPixels,
|
||||
- v->DETBufferSizeInKByte[0],
|
||||
- v->WritebackInterfaceBufferSize,
|
||||
v->DCFCLK,
|
||||
v->ReturnBW,
|
||||
- v->GPUVMEnable,
|
||||
- v->dpte_group_bytes,
|
||||
- v->MetaChunkSize,
|
||||
v->UrgentLatency,
|
||||
v->UrgentExtraLatency,
|
||||
- v->WritebackLatency,
|
||||
- v->WritebackChunkSize,
|
||||
v->SOCCLK,
|
||||
- v->FinalDRAMClockChangeLatency,
|
||||
- v->SRExitTime,
|
||||
- v->SREnterPlusExitTime,
|
||||
v->DCFCLKDeepSleep,
|
||||
v->DPPPerPlane,
|
||||
- v->DCCEnable,
|
||||
v->DPPCLK,
|
||||
v->DETBufferSizeY,
|
||||
v->DETBufferSizeC,
|
||||
v->SwathHeightY,
|
||||
v->SwathHeightC,
|
||||
- v->LBBitPerPixel,
|
||||
v->SwathWidthY,
|
||||
v->SwathWidthC,
|
||||
- v->HRatio,
|
||||
- v->HRatioChroma,
|
||||
- v->vtaps,
|
||||
- v->VTAPsChroma,
|
||||
- v->VRatio,
|
||||
- v->VRatioChroma,
|
||||
- v->HTotal,
|
||||
- v->PixelClock,
|
||||
- v->BlendingAndTiming,
|
||||
v->BytePerPixelDETY,
|
||||
v->BytePerPixelDETC,
|
||||
- v->DSTXAfterScaler,
|
||||
- v->DSTYAfterScaler,
|
||||
- v->WritebackEnable,
|
||||
- v->WritebackPixelFormat,
|
||||
- v->WritebackDestinationWidth,
|
||||
- v->WritebackDestinationHeight,
|
||||
- v->WritebackSourceHeight,
|
||||
- &DRAMClockChangeSupport,
|
||||
- &v->UrgentWatermark,
|
||||
- &v->WritebackUrgentWatermark,
|
||||
- &v->DRAMClockChangeWatermark,
|
||||
- &v->WritebackDRAMClockChangeWatermark,
|
||||
- &v->StutterExitWatermark,
|
||||
- &v->StutterEnterPlusExitWatermark,
|
||||
- &v->MinActiveDRAMClockChangeLatencySupported);
|
||||
+ &DRAMClockChangeSupport);
|
||||
|
||||
for (k = 0; k < v->NumberOfActivePlanes; ++k) {
|
||||
if (v->WritebackEnable[k] == true) {
|
||||
@@ -4895,62 +4817,23 @@ void dml30_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_l
|
||||
CalculateWatermarksAndDRAMSpeedChangeSupport(
|
||||
mode_lib,
|
||||
v->PrefetchModePerState[i][j],
|
||||
- v->NumberOfActivePlanes,
|
||||
- v->MaxLineBufferLines,
|
||||
- v->LineBufferSize,
|
||||
- v->DPPOutputBufferPixels,
|
||||
- v->DETBufferSizeInKByte[0],
|
||||
- v->WritebackInterfaceBufferSize,
|
||||
v->DCFCLKState[i][j],
|
||||
v->ReturnBWPerState[i][j],
|
||||
- v->GPUVMEnable,
|
||||
- v->dpte_group_bytes,
|
||||
- v->MetaChunkSize,
|
||||
v->UrgLatency[i],
|
||||
v->ExtraLatency,
|
||||
- v->WritebackLatency,
|
||||
- v->WritebackChunkSize,
|
||||
v->SOCCLKPerState[i],
|
||||
- v->FinalDRAMClockChangeLatency,
|
||||
- v->SRExitTime,
|
||||
- v->SREnterPlusExitTime,
|
||||
v->ProjectedDCFCLKDeepSleep[i][j],
|
||||
v->NoOfDPPThisState,
|
||||
- v->DCCEnable,
|
||||
v->RequiredDPPCLKThisState,
|
||||
v->DETBufferSizeYThisState,
|
||||
v->DETBufferSizeCThisState,
|
||||
v->SwathHeightYThisState,
|
||||
v->SwathHeightCThisState,
|
||||
- v->LBBitPerPixel,
|
||||
v->SwathWidthYThisState,
|
||||
v->SwathWidthCThisState,
|
||||
- v->HRatio,
|
||||
- v->HRatioChroma,
|
||||
- v->vtaps,
|
||||
- v->VTAPsChroma,
|
||||
- v->VRatio,
|
||||
- v->VRatioChroma,
|
||||
- v->HTotal,
|
||||
- v->PixelClock,
|
||||
- v->BlendingAndTiming,
|
||||
v->BytePerPixelInDETY,
|
||||
v->BytePerPixelInDETC,
|
||||
- v->DSTXAfterScaler,
|
||||
- v->DSTYAfterScaler,
|
||||
- v->WritebackEnable,
|
||||
- v->WritebackPixelFormat,
|
||||
- v->WritebackDestinationWidth,
|
||||
- v->WritebackDestinationHeight,
|
||||
- v->WritebackSourceHeight,
|
||||
- &v->DRAMClockChangeSupport[i][j],
|
||||
- &v->UrgentWatermark,
|
||||
- &v->WritebackUrgentWatermark,
|
||||
- &v->DRAMClockChangeWatermark,
|
||||
- &v->WritebackDRAMClockChangeWatermark,
|
||||
- &v->StutterExitWatermark,
|
||||
- &v->StutterEnterPlusExitWatermark,
|
||||
- &v->MinActiveDRAMClockChangeLatencySupported);
|
||||
+ &v->DRAMClockChangeSupport[i][j]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5067,63 +4950,25 @@ void dml30_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_l
|
||||
static void CalculateWatermarksAndDRAMSpeedChangeSupport(
|
||||
struct display_mode_lib *mode_lib,
|
||||
unsigned int PrefetchMode,
|
||||
- unsigned int NumberOfActivePlanes,
|
||||
- unsigned int MaxLineBufferLines,
|
||||
- unsigned int LineBufferSize,
|
||||
- unsigned int DPPOutputBufferPixels,
|
||||
- unsigned int DETBufferSizeInKByte,
|
||||
- unsigned int WritebackInterfaceBufferSize,
|
||||
double DCFCLK,
|
||||
double ReturnBW,
|
||||
- bool GPUVMEnable,
|
||||
- unsigned int dpte_group_bytes[],
|
||||
- unsigned int MetaChunkSize,
|
||||
double UrgentLatency,
|
||||
double ExtraLatency,
|
||||
- double WritebackLatency,
|
||||
- double WritebackChunkSize,
|
||||
double SOCCLK,
|
||||
- double DRAMClockChangeLatency,
|
||||
- double SRExitTime,
|
||||
- double SREnterPlusExitTime,
|
||||
double DCFCLKDeepSleep,
|
||||
unsigned int DPPPerPlane[],
|
||||
- bool DCCEnable[],
|
||||
double DPPCLK[],
|
||||
unsigned int DETBufferSizeY[],
|
||||
unsigned int DETBufferSizeC[],
|
||||
unsigned int SwathHeightY[],
|
||||
unsigned int SwathHeightC[],
|
||||
- unsigned int LBBitPerPixel[],
|
||||
double SwathWidthY[],
|
||||
double SwathWidthC[],
|
||||
- double HRatio[],
|
||||
- double HRatioChroma[],
|
||||
- unsigned int vtaps[],
|
||||
- unsigned int VTAPsChroma[],
|
||||
- double VRatio[],
|
||||
- double VRatioChroma[],
|
||||
- unsigned int HTotal[],
|
||||
- double PixelClock[],
|
||||
- unsigned int BlendingAndTiming[],
|
||||
double BytePerPixelDETY[],
|
||||
double BytePerPixelDETC[],
|
||||
- double DSTXAfterScaler[],
|
||||
- double DSTYAfterScaler[],
|
||||
- bool WritebackEnable[],
|
||||
- enum source_format_class WritebackPixelFormat[],
|
||||
- double WritebackDestinationWidth[],
|
||||
- double WritebackDestinationHeight[],
|
||||
- double WritebackSourceHeight[],
|
||||
- enum clock_change_support *DRAMClockChangeSupport,
|
||||
- double *UrgentWatermark,
|
||||
- double *WritebackUrgentWatermark,
|
||||
- double *DRAMClockChangeWatermark,
|
||||
- double *WritebackDRAMClockChangeWatermark,
|
||||
- double *StutterExitWatermark,
|
||||
- double *StutterEnterPlusExitWatermark,
|
||||
- double *MinActiveDRAMClockChangeLatencySupported)
|
||||
+ enum clock_change_support *DRAMClockChangeSupport)
|
||||
{
|
||||
+ struct vba_vars_st *v = &mode_lib->vba;
|
||||
double EffectiveLBLatencyHidingY = 0;
|
||||
double EffectiveLBLatencyHidingC = 0;
|
||||
double LinesInDETY[DC__NUM_DPP__MAX] = { 0 };
|
||||
@@ -5142,101 +4987,101 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
|
||||
double WritebackDRAMClockChangeLatencyHiding = 0;
|
||||
unsigned int k, j;
|
||||
|
||||
- mode_lib->vba.TotalActiveDPP = 0;
|
||||
- mode_lib->vba.TotalDCCActiveDPP = 0;
|
||||
- for (k = 0; k < NumberOfActivePlanes; ++k) {
|
||||
- mode_lib->vba.TotalActiveDPP = mode_lib->vba.TotalActiveDPP + DPPPerPlane[k];
|
||||
- if (DCCEnable[k] == true) {
|
||||
- mode_lib->vba.TotalDCCActiveDPP = mode_lib->vba.TotalDCCActiveDPP + DPPPerPlane[k];
|
||||
+ v->TotalActiveDPP = 0;
|
||||
+ v->TotalDCCActiveDPP = 0;
|
||||
+ for (k = 0; k < v->NumberOfActivePlanes; ++k) {
|
||||
+ v->TotalActiveDPP = v->TotalActiveDPP + DPPPerPlane[k];
|
||||
+ if (v->DCCEnable[k] == true) {
|
||||
+ v->TotalDCCActiveDPP = v->TotalDCCActiveDPP + DPPPerPlane[k];
|
||||
}
|
||||
}
|
||||
|
||||
- *UrgentWatermark = UrgentLatency + ExtraLatency;
|
||||
+ v->UrgentWatermark = UrgentLatency + ExtraLatency;
|
||||
|
||||
- *DRAMClockChangeWatermark = DRAMClockChangeLatency + *UrgentWatermark;
|
||||
+ v->DRAMClockChangeWatermark = v->FinalDRAMClockChangeLatency + v->UrgentWatermark;
|
||||
|
||||
- mode_lib->vba.TotalActiveWriteback = 0;
|
||||
- for (k = 0; k < NumberOfActivePlanes; ++k) {
|
||||
- if (WritebackEnable[k] == true) {
|
||||
- mode_lib->vba.TotalActiveWriteback = mode_lib->vba.TotalActiveWriteback + 1;
|
||||
+ v->TotalActiveWriteback = 0;
|
||||
+ for (k = 0; k < v->NumberOfActivePlanes; ++k) {
|
||||
+ if (v->WritebackEnable[k] == true) {
|
||||
+ v->TotalActiveWriteback = v->TotalActiveWriteback + 1;
|
||||
}
|
||||
}
|
||||
|
||||
- if (mode_lib->vba.TotalActiveWriteback <= 1) {
|
||||
- *WritebackUrgentWatermark = WritebackLatency;
|
||||
+ if (v->TotalActiveWriteback <= 1) {
|
||||
+ v->WritebackUrgentWatermark = v->WritebackLatency;
|
||||
} else {
|
||||
- *WritebackUrgentWatermark = WritebackLatency + WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
|
||||
+ v->WritebackUrgentWatermark = v->WritebackLatency + v->WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
|
||||
}
|
||||
|
||||
- if (mode_lib->vba.TotalActiveWriteback <= 1) {
|
||||
- *WritebackDRAMClockChangeWatermark = DRAMClockChangeLatency + WritebackLatency;
|
||||
+ if (v->TotalActiveWriteback <= 1) {
|
||||
+ v->WritebackDRAMClockChangeWatermark = v->FinalDRAMClockChangeLatency + v->WritebackLatency;
|
||||
} else {
|
||||
- *WritebackDRAMClockChangeWatermark = DRAMClockChangeLatency + WritebackLatency + WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
|
||||
+ v->WritebackDRAMClockChangeWatermark = v->FinalDRAMClockChangeLatency + v->WritebackLatency + v->WritebackChunkSize * 1024.0 / 32.0 / SOCCLK;
|
||||
}
|
||||
|
||||
- for (k = 0; k < NumberOfActivePlanes; ++k) {
|
||||
+ for (k = 0; k < v->NumberOfActivePlanes; ++k) {
|
||||
|
||||
- mode_lib->vba.LBLatencyHidingSourceLinesY = dml_min((double) MaxLineBufferLines, dml_floor(LineBufferSize / LBBitPerPixel[k] / (SwathWidthY[k] / dml_max(HRatio[k], 1.0)), 1)) - (vtaps[k] - 1);
|
||||
+ v->LBLatencyHidingSourceLinesY = dml_min((double) v->MaxLineBufferLines, dml_floor(v->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthY[k] / dml_max(v->HRatio[k], 1.0)), 1)) - (v->vtaps[k] - 1);
|
||||
|
||||
- mode_lib->vba.LBLatencyHidingSourceLinesC = dml_min((double) MaxLineBufferLines, dml_floor(LineBufferSize / LBBitPerPixel[k] / (SwathWidthC[k] / dml_max(HRatioChroma[k], 1.0)), 1)) - (VTAPsChroma[k] - 1);
|
||||
+ v->LBLatencyHidingSourceLinesC = dml_min((double) v->MaxLineBufferLines, dml_floor(v->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthC[k] / dml_max(v->HRatioChroma[k], 1.0)), 1)) - (v->VTAPsChroma[k] - 1);
|
||||
|
||||
- EffectiveLBLatencyHidingY = mode_lib->vba.LBLatencyHidingSourceLinesY / VRatio[k] * (HTotal[k] / PixelClock[k]);
|
||||
+ EffectiveLBLatencyHidingY = v->LBLatencyHidingSourceLinesY / v->VRatio[k] * (v->HTotal[k] / v->PixelClock[k]);
|
||||
|
||||
- EffectiveLBLatencyHidingC = mode_lib->vba.LBLatencyHidingSourceLinesC / VRatioChroma[k] * (HTotal[k] / PixelClock[k]);
|
||||
+ EffectiveLBLatencyHidingC = v->LBLatencyHidingSourceLinesC / v->VRatioChroma[k] * (v->HTotal[k] / v->PixelClock[k]);
|
||||
|
||||
LinesInDETY[k] = (double) DETBufferSizeY[k] / BytePerPixelDETY[k] / SwathWidthY[k];
|
||||
LinesInDETYRoundedDownToSwath[k] = dml_floor(LinesInDETY[k], SwathHeightY[k]);
|
||||
- FullDETBufferingTimeY[k] = LinesInDETYRoundedDownToSwath[k] * (HTotal[k] / PixelClock[k]) / VRatio[k];
|
||||
+ FullDETBufferingTimeY[k] = LinesInDETYRoundedDownToSwath[k] * (v->HTotal[k] / v->PixelClock[k]) / v->VRatio[k];
|
||||
if (BytePerPixelDETC[k] > 0) {
|
||||
- LinesInDETC = mode_lib->vba.DETBufferSizeC[k] / BytePerPixelDETC[k] / SwathWidthC[k];
|
||||
+ LinesInDETC = v->DETBufferSizeC[k] / BytePerPixelDETC[k] / SwathWidthC[k];
|
||||
LinesInDETCRoundedDownToSwath = dml_floor(LinesInDETC, SwathHeightC[k]);
|
||||
- FullDETBufferingTimeC = LinesInDETCRoundedDownToSwath * (HTotal[k] / PixelClock[k]) / VRatioChroma[k];
|
||||
+ FullDETBufferingTimeC = LinesInDETCRoundedDownToSwath * (v->HTotal[k] / v->PixelClock[k]) / v->VRatioChroma[k];
|
||||
} else {
|
||||
LinesInDETC = 0;
|
||||
FullDETBufferingTimeC = 999999;
|
||||
}
|
||||
|
||||
- ActiveDRAMClockChangeLatencyMarginY = EffectiveLBLatencyHidingY + FullDETBufferingTimeY[k] - *UrgentWatermark - (HTotal[k] / PixelClock[k]) * (DSTXAfterScaler[k] / HTotal[k] + DSTYAfterScaler[k]) - *DRAMClockChangeWatermark;
|
||||
+ ActiveDRAMClockChangeLatencyMarginY = EffectiveLBLatencyHidingY + FullDETBufferingTimeY[k] - v->UrgentWatermark - (v->HTotal[k] / v->PixelClock[k]) * (v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[k]) - v->DRAMClockChangeWatermark;
|
||||
|
||||
- if (NumberOfActivePlanes > 1) {
|
||||
- ActiveDRAMClockChangeLatencyMarginY = ActiveDRAMClockChangeLatencyMarginY - (1 - 1.0 / NumberOfActivePlanes) * SwathHeightY[k] * HTotal[k] / PixelClock[k] / VRatio[k];
|
||||
+ if (v->NumberOfActivePlanes > 1) {
|
||||
+ ActiveDRAMClockChangeLatencyMarginY = ActiveDRAMClockChangeLatencyMarginY - (1 - 1.0 / v->NumberOfActivePlanes) * SwathHeightY[k] * v->HTotal[k] / v->PixelClock[k] / v->VRatio[k];
|
||||
}
|
||||
|
||||
if (BytePerPixelDETC[k] > 0) {
|
||||
- ActiveDRAMClockChangeLatencyMarginC = EffectiveLBLatencyHidingC + FullDETBufferingTimeC - *UrgentWatermark - (HTotal[k] / PixelClock[k]) * (DSTXAfterScaler[k] / HTotal[k] + DSTYAfterScaler[k]) - *DRAMClockChangeWatermark;
|
||||
+ ActiveDRAMClockChangeLatencyMarginC = EffectiveLBLatencyHidingC + FullDETBufferingTimeC - v->UrgentWatermark - (v->HTotal[k] / v->PixelClock[k]) * (v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[k]) - v->DRAMClockChangeWatermark;
|
||||
|
||||
- if (NumberOfActivePlanes > 1) {
|
||||
- ActiveDRAMClockChangeLatencyMarginC = ActiveDRAMClockChangeLatencyMarginC - (1 - 1.0 / NumberOfActivePlanes) * SwathHeightC[k] * HTotal[k] / PixelClock[k] / VRatioChroma[k];
|
||||
+ if (v->NumberOfActivePlanes > 1) {
|
||||
+ ActiveDRAMClockChangeLatencyMarginC = ActiveDRAMClockChangeLatencyMarginC - (1 - 1.0 / v->NumberOfActivePlanes) * SwathHeightC[k] * v->HTotal[k] / v->PixelClock[k] / v->VRatioChroma[k];
|
||||
}
|
||||
- mode_lib->vba.ActiveDRAMClockChangeLatencyMargin[k] = dml_min(ActiveDRAMClockChangeLatencyMarginY, ActiveDRAMClockChangeLatencyMarginC);
|
||||
+ v->ActiveDRAMClockChangeLatencyMargin[k] = dml_min(ActiveDRAMClockChangeLatencyMarginY, ActiveDRAMClockChangeLatencyMarginC);
|
||||
} else {
|
||||
- mode_lib->vba.ActiveDRAMClockChangeLatencyMargin[k] = ActiveDRAMClockChangeLatencyMarginY;
|
||||
+ v->ActiveDRAMClockChangeLatencyMargin[k] = ActiveDRAMClockChangeLatencyMarginY;
|
||||
}
|
||||
|
||||
- if (WritebackEnable[k] == true) {
|
||||
+ if (v->WritebackEnable[k] == true) {
|
||||
|
||||
- WritebackDRAMClockChangeLatencyHiding = WritebackInterfaceBufferSize * 1024 / (WritebackDestinationWidth[k] * WritebackDestinationHeight[k] / (WritebackSourceHeight[k] * HTotal[k] / PixelClock[k]) * 4);
|
||||
- if (WritebackPixelFormat[k] == dm_444_64) {
|
||||
+ WritebackDRAMClockChangeLatencyHiding = v->WritebackInterfaceBufferSize * 1024 / (v->WritebackDestinationWidth[k] * v->WritebackDestinationHeight[k] / (v->WritebackSourceHeight[k] * v->HTotal[k] / v->PixelClock[k]) * 4);
|
||||
+ if (v->WritebackPixelFormat[k] == dm_444_64) {
|
||||
WritebackDRAMClockChangeLatencyHiding = WritebackDRAMClockChangeLatencyHiding / 2;
|
||||
}
|
||||
- if (mode_lib->vba.WritebackConfiguration == dm_whole_buffer_for_single_stream_interleave) {
|
||||
+ if (v->WritebackConfiguration == dm_whole_buffer_for_single_stream_interleave) {
|
||||
WritebackDRAMClockChangeLatencyHiding = WritebackDRAMClockChangeLatencyHiding * 2;
|
||||
}
|
||||
- WritebackDRAMClockChangeLatencyMargin = WritebackDRAMClockChangeLatencyHiding - mode_lib->vba.WritebackDRAMClockChangeWatermark;
|
||||
- mode_lib->vba.ActiveDRAMClockChangeLatencyMargin[k] = dml_min(mode_lib->vba.ActiveDRAMClockChangeLatencyMargin[k], WritebackDRAMClockChangeLatencyMargin);
|
||||
+ WritebackDRAMClockChangeLatencyMargin = WritebackDRAMClockChangeLatencyHiding - v->WritebackDRAMClockChangeWatermark;
|
||||
+ v->ActiveDRAMClockChangeLatencyMargin[k] = dml_min(v->ActiveDRAMClockChangeLatencyMargin[k], WritebackDRAMClockChangeLatencyMargin);
|
||||
}
|
||||
}
|
||||
|
||||
- mode_lib->vba.MinActiveDRAMClockChangeMargin = 999999;
|
||||
+ v->MinActiveDRAMClockChangeMargin = 999999;
|
||||
PlaneWithMinActiveDRAMClockChangeMargin = 0;
|
||||
- for (k = 0; k < NumberOfActivePlanes; ++k) {
|
||||
- if (mode_lib->vba.ActiveDRAMClockChangeLatencyMargin[k] < mode_lib->vba.MinActiveDRAMClockChangeMargin) {
|
||||
- mode_lib->vba.MinActiveDRAMClockChangeMargin = mode_lib->vba.ActiveDRAMClockChangeLatencyMargin[k];
|
||||
- if (BlendingAndTiming[k] == k) {
|
||||
+ for (k = 0; k < v->NumberOfActivePlanes; ++k) {
|
||||
+ if (v->ActiveDRAMClockChangeLatencyMargin[k] < v->MinActiveDRAMClockChangeMargin) {
|
||||
+ v->MinActiveDRAMClockChangeMargin = v->ActiveDRAMClockChangeLatencyMargin[k];
|
||||
+ if (v->BlendingAndTiming[k] == k) {
|
||||
PlaneWithMinActiveDRAMClockChangeMargin = k;
|
||||
} else {
|
||||
- for (j = 0; j < NumberOfActivePlanes; ++j) {
|
||||
- if (BlendingAndTiming[k] == j) {
|
||||
+ for (j = 0; j < v->NumberOfActivePlanes; ++j) {
|
||||
+ if (v->BlendingAndTiming[k] == j) {
|
||||
PlaneWithMinActiveDRAMClockChangeMargin = j;
|
||||
}
|
||||
}
|
||||
@@ -5244,40 +5089,40 @@ static void CalculateWatermarksAndDRAMSpeedChangeSupport(
|
||||
}
|
||||
}
|
||||
|
||||
- *MinActiveDRAMClockChangeLatencySupported = mode_lib->vba.MinActiveDRAMClockChangeMargin + DRAMClockChangeLatency;
|
||||
+ v->MinActiveDRAMClockChangeLatencySupported = v->MinActiveDRAMClockChangeMargin + v->FinalDRAMClockChangeLatency;
|
||||
|
||||
SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank = 999999;
|
||||
- for (k = 0; k < NumberOfActivePlanes; ++k) {
|
||||
- if (!((k == PlaneWithMinActiveDRAMClockChangeMargin) && (BlendingAndTiming[k] == k)) && !(BlendingAndTiming[k] == PlaneWithMinActiveDRAMClockChangeMargin) && mode_lib->vba.ActiveDRAMClockChangeLatencyMargin[k] < SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank) {
|
||||
- SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank = mode_lib->vba.ActiveDRAMClockChangeLatencyMargin[k];
|
||||
+ for (k = 0; k < v->NumberOfActivePlanes; ++k) {
|
||||
+ if (!((k == PlaneWithMinActiveDRAMClockChangeMargin) && (v->BlendingAndTiming[k] == k)) && !(v->BlendingAndTiming[k] == PlaneWithMinActiveDRAMClockChangeMargin) && v->ActiveDRAMClockChangeLatencyMargin[k] < SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank) {
|
||||
+ SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank = v->ActiveDRAMClockChangeLatencyMargin[k];
|
||||
}
|
||||
}
|
||||
|
||||
- mode_lib->vba.TotalNumberOfActiveOTG = 0;
|
||||
- for (k = 0; k < NumberOfActivePlanes; ++k) {
|
||||
- if (BlendingAndTiming[k] == k) {
|
||||
- mode_lib->vba.TotalNumberOfActiveOTG = mode_lib->vba.TotalNumberOfActiveOTG + 1;
|
||||
+ v->TotalNumberOfActiveOTG = 0;
|
||||
+ for (k = 0; k < v->NumberOfActivePlanes; ++k) {
|
||||
+ if (v->BlendingAndTiming[k] == k) {
|
||||
+ v->TotalNumberOfActiveOTG = v->TotalNumberOfActiveOTG + 1;
|
||||
}
|
||||
}
|
||||
|
||||
- if (mode_lib->vba.MinActiveDRAMClockChangeMargin > 0) {
|
||||
+ if (v->MinActiveDRAMClockChangeMargin > 0) {
|
||||
*DRAMClockChangeSupport = dm_dram_clock_change_vactive;
|
||||
- } else if (((mode_lib->vba.SynchronizedVBlank == true || mode_lib->vba.TotalNumberOfActiveOTG == 1 || SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank > 0) && PrefetchMode == 0)) {
|
||||
+ } else if (((v->SynchronizedVBlank == true || v->TotalNumberOfActiveOTG == 1 || SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank > 0) && PrefetchMode == 0)) {
|
||||
*DRAMClockChangeSupport = dm_dram_clock_change_vblank;
|
||||
} else {
|
||||
*DRAMClockChangeSupport = dm_dram_clock_change_unsupported;
|
||||
}
|
||||
|
||||
FullDETBufferingTimeYStutterCriticalPlane = FullDETBufferingTimeY[0];
|
||||
- for (k = 0; k < NumberOfActivePlanes; ++k) {
|
||||
+ for (k = 0; k < v->NumberOfActivePlanes; ++k) {
|
||||
if (FullDETBufferingTimeY[k] <= FullDETBufferingTimeYStutterCriticalPlane) {
|
||||
FullDETBufferingTimeYStutterCriticalPlane = FullDETBufferingTimeY[k];
|
||||
- TimeToFinishSwathTransferStutterCriticalPlane = (SwathHeightY[k] - (LinesInDETY[k] - LinesInDETYRoundedDownToSwath[k])) * (HTotal[k] / PixelClock[k]) / VRatio[k];
|
||||
+ TimeToFinishSwathTransferStutterCriticalPlane = (SwathHeightY[k] - (LinesInDETY[k] - LinesInDETYRoundedDownToSwath[k])) * (v->HTotal[k] / v->PixelClock[k]) / v->VRatio[k];
|
||||
}
|
||||
}
|
||||
|
||||
- *StutterExitWatermark = SRExitTime + ExtraLatency + 10 / DCFCLKDeepSleep;
|
||||
- *StutterEnterPlusExitWatermark = dml_max(SREnterPlusExitTime + ExtraLatency + 10 / DCFCLKDeepSleep, TimeToFinishSwathTransferStutterCriticalPlane);
|
||||
+ v->StutterExitWatermark = v->SRExitTime + ExtraLatency + 10 / DCFCLKDeepSleep;
|
||||
+ v->StutterEnterPlusExitWatermark = dml_max(v->SREnterPlusExitTime + ExtraLatency + 10 / DCFCLKDeepSleep, TimeToFinishSwathTransferStutterCriticalPlane);
|
||||
|
||||
}
|
||||
|
||||
--
|
||||
cgit 1.2.3-korg
|
||||
Reference in New Issue
Block a user