From nobody Tue Dec 16 04:27:41 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 64381C07E9D for ; Mon, 26 Sep 2022 12:24:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239402AbiIZMYX (ORCPT ); Mon, 26 Sep 2022 08:24:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39360 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239581AbiIZMXo (ORCPT ); Mon, 26 Sep 2022 08:23:44 -0400 Received: from sin.source.kernel.org (sin.source.kernel.org [IPv6:2604:1380:40e1:4800::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AB6307EFFA; Mon, 26 Sep 2022 04:05:18 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sin.source.kernel.org (Postfix) with ESMTPS id 0CB7FCE111F; Mon, 26 Sep 2022 10:50:21 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id EE1D7C433C1; Mon, 26 Sep 2022 10:50:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1664189419; bh=oYdRjpsQ0y7Yda6NsSDe3hEm5WkcByYSTqzOz7KnoXE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=2GzGnYA7lyMCowq+RP5i4Np/olwz2QvFpecnsv+sFDlXkBA1jF87xMH1gLF5w0iWR m6QHJ90TC60+QkAq5rz7ilXYsNpmSKQxP/BEEIYtJAVpveP8/vNlUGNrbKHi6KyCnZ CTdoXalUqG03FhoEVir+Y/29HoWKmtIBdb+xJBrU= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, "Sudip Mukherjee (Codethink)" , =?UTF-8?q?Ma=C3=ADra=20Canal?= , Rodrigo Siqueira , Nathan Chancellor , Alex Deucher , Sasha Levin Subject: [PATCH 5.19 182/207] drm/amd/display: Reduce number of arguments of dml31s CalculateWatermarksAndDRAMSpeedChangeSupport() Date: Mon, 26 Sep 2022 12:12:51 +0200 Message-Id: <20220926100814.751079022@linuxfoundation.org> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20220926100806.522017616@linuxfoundation.org> References: <20220926100806.522017616@linuxfoundation.org> User-Agent: quilt/0.67 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Nathan Chancellor [ Upstream commit 37934d4118e22bceb80141804391975078f31734 ] 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 dml31_ModeSupportAndSystemConfigurationFull() uses by 240 bytes with LLVM 16 (2216 -> 1976), helping clear up the following clang warning: drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn31/display_mode_vba_31.c:= 3908:6: error: stack frame size (2216) exceeds limit (2048) in 'dml31_ModeS= upportAndSystemConfigurationFull' [-Werror,-Wframe-larger-than] void dml31_ModeSupportAndSystemConfigurationFull(struct display_mode_lib = *mode_lib) ^ 1 error generated. Link: https://github.com/ClangBuiltLinux/linux/issues/1681 Reported-by: "Sudip Mukherjee (Codethink)" Tested-by: Ma=C3=ADra Canal Reviewed-by: Rodrigo Siqueira Signed-off-by: Nathan Chancellor Signed-off-by: Rodrigo Siqueira Signed-off-by: Alex Deucher Signed-off-by: Sasha Levin --- .../dc/dml/dcn31/display_mode_vba_31.c | 248 ++++-------------- 1 file changed, 52 insertions(+), 196 deletions(-) diff --git a/drivers/gpu/drm/amd/display/dc/dml/dcn31/display_mode_vba_31.c= b/drivers/gpu/drm/amd/display/dc/dml/dcn31/display_mode_vba_31.c index e4b9fd31223c..586825d85d66 100644 --- a/drivers/gpu/drm/amd/display/dc/dml/dcn31/display_mode_vba_31.c +++ b/drivers/gpu/drm/amd/display/dc/dml/dcn31/display_mode_vba_31.c @@ -321,64 +321,28 @@ static void CalculateVupdateAndDynamicMetadataParamet= ers( static void CalculateWatermarksAndDRAMSpeedChangeSupport( struct display_mode_lib *mode_lib, unsigned int PrefetchMode, - unsigned int NumberOfActivePlanes, - unsigned int MaxLineBufferLines, - unsigned int LineBufferSize, - unsigned int WritebackInterfaceBufferSize, double DCFCLK, double ReturnBW, - bool SynchronizedVBlank, - 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 SRExitZ8Time, - double SREnterPlusExitZ8Time, double DCFCLKDeepSleep, 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[], unsigned int DPPPerPlane[], double BytePerPixelDETY[], double BytePerPixelDETC[], - double DSTXAfterScaler[], - double DSTYAfterScaler[], - bool WritebackEnable[], - enum source_format_class WritebackPixelFormat[], - double WritebackDestinationWidth[], - double WritebackDestinationHeight[], - double WritebackSourceHeight[], bool UnboundedRequestEnabled, int unsigned CompressedBufferSizeInkByte, enum clock_change_support *DRAMClockChangeSupport, - double *UrgentWatermark, - double *WritebackUrgentWatermark, - double *DRAMClockChangeWatermark, - double *WritebackDRAMClockChangeWatermark, double *StutterExitWatermark, double *StutterEnterPlusExitWatermark, double *Z8StutterExitWatermark, - double *Z8StutterEnterPlusExitWatermark, - double *MinActiveDRAMClockChangeLatencySupported); + double *Z8StutterEnterPlusExitWatermark); =20 static void CalculateDCFCLKDeepSleep( struct display_mode_lib *mode_lib, @@ -3027,64 +2991,28 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchPar= ametersWatermarksAndPerforman CalculateWatermarksAndDRAMSpeedChangeSupport( mode_lib, PrefetchMode, - v->NumberOfActivePlanes, - v->MaxLineBufferLines, - v->LineBufferSize, - v->WritebackInterfaceBufferSize, v->DCFCLK, v->ReturnBW, - v->SynchronizedVBlank, - v->dpte_group_bytes, - v->MetaChunkSize, v->UrgentLatency, v->UrgentExtraLatency, - v->WritebackLatency, - v->WritebackChunkSize, v->SOCCLK, - v->DRAMClockChangeLatency, - v->SRExitTime, - v->SREnterPlusExitTime, - v->SRExitZ8Time, - v->SREnterPlusExitZ8Time, v->DCFCLKDeepSleep, 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->DPPPerPlane, v->BytePerPixelDETY, v->BytePerPixelDETC, - v->DSTXAfterScaler, - v->DSTYAfterScaler, - v->WritebackEnable, - v->WritebackPixelFormat, - v->WritebackDestinationWidth, - v->WritebackDestinationHeight, - v->WritebackSourceHeight, v->UnboundedRequestEnabled, v->CompressedBufferSizeInkByte, &DRAMClockChangeSupport, - &v->UrgentWatermark, - &v->WritebackUrgentWatermark, - &v->DRAMClockChangeWatermark, - &v->WritebackDRAMClockChangeWatermark, &v->StutterExitWatermark, &v->StutterEnterPlusExitWatermark, &v->Z8StutterExitWatermark, - &v->Z8StutterEnterPlusExitWatermark, - &v->MinActiveDRAMClockChangeLatencySupported); + &v->Z8StutterEnterPlusExitWatermark); =20 for (k =3D 0; k < v->NumberOfActivePlanes; ++k) { if (v->WritebackEnable[k] =3D=3D true) { @@ -5481,64 +5409,28 @@ void dml31_ModeSupportAndSystemConfigurationFull(st= ruct display_mode_lib *mode_l CalculateWatermarksAndDRAMSpeedChangeSupport( mode_lib, v->PrefetchModePerState[i][j], - v->NumberOfActivePlanes, - v->MaxLineBufferLines, - v->LineBufferSize, - v->WritebackInterfaceBufferSize, v->DCFCLKState[i][j], v->ReturnBWPerState[i][j], - v->SynchronizedVBlank, - v->dpte_group_bytes, - v->MetaChunkSize, v->UrgLatency[i], v->ExtraLatency, - v->WritebackLatency, - v->WritebackChunkSize, v->SOCCLKPerState[i], - v->DRAMClockChangeLatency, - v->SRExitTime, - v->SREnterPlusExitTime, - v->SRExitZ8Time, - v->SREnterPlusExitZ8Time, v->ProjectedDCFCLKDeepSleep[i][j], 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->NoOfDPPThisState, v->BytePerPixelInDETY, v->BytePerPixelInDETC, - v->DSTXAfterScaler, - v->DSTYAfterScaler, - v->WritebackEnable, - v->WritebackPixelFormat, - v->WritebackDestinationWidth, - v->WritebackDestinationHeight, - v->WritebackSourceHeight, UnboundedRequestEnabledThisState, CompressedBufferSizeInkByteThisState, &v->DRAMClockChangeSupport[i][j], - &v->UrgentWatermark, - &v->WritebackUrgentWatermark, - &v->DRAMClockChangeWatermark, - &v->WritebackDRAMClockChangeWatermark, - &dummy, &dummy, &dummy, &dummy, - &v->MinActiveDRAMClockChangeLatencySupported); + &dummy); } } =20 @@ -5663,64 +5555,28 @@ void dml31_ModeSupportAndSystemConfigurationFull(st= ruct 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 WritebackInterfaceBufferSize, double DCFCLK, double ReturnBW, - bool SynchronizedVBlank, - 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 SRExitZ8Time, - double SREnterPlusExitZ8Time, double DCFCLKDeepSleep, 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[], unsigned int DPPPerPlane[], double BytePerPixelDETY[], double BytePerPixelDETC[], - double DSTXAfterScaler[], - double DSTYAfterScaler[], - bool WritebackEnable[], - enum source_format_class WritebackPixelFormat[], - double WritebackDestinationWidth[], - double WritebackDestinationHeight[], - double WritebackSourceHeight[], bool UnboundedRequestEnabled, int unsigned CompressedBufferSizeInkByte, enum clock_change_support *DRAMClockChangeSupport, - double *UrgentWatermark, - double *WritebackUrgentWatermark, - double *DRAMClockChangeWatermark, - double *WritebackDRAMClockChangeWatermark, double *StutterExitWatermark, double *StutterEnterPlusExitWatermark, double *Z8StutterExitWatermark, - double *Z8StutterEnterPlusExitWatermark, - double *MinActiveDRAMClockChangeLatencySupported) + double *Z8StutterEnterPlusExitWatermark) { struct vba_vars_st *v =3D &mode_lib->vba; double EffectiveLBLatencyHidingY; @@ -5740,103 +5596,103 @@ static void CalculateWatermarksAndDRAMSpeedChange= Support( double TotalPixelBW =3D 0.0; int k, j; =20 - *UrgentWatermark =3D UrgentLatency + ExtraLatency; + v->UrgentWatermark =3D UrgentLatency + ExtraLatency; =20 #ifdef __DML_VBA_DEBUG__ dml_print("DML::%s: UrgentLatency =3D %f\n", __func__, UrgentLatency); dml_print("DML::%s: ExtraLatency =3D %f\n", __func__, ExtraLatency); - dml_print("DML::%s: UrgentWatermark =3D %f\n", __func__, *UrgentWatermark= ); + dml_print("DML::%s: UrgentWatermark =3D %f\n", __func__, v->UrgentWaterma= rk); #endif =20 - *DRAMClockChangeWatermark =3D DRAMClockChangeLatency + *UrgentWatermark; + v->DRAMClockChangeWatermark =3D v->DRAMClockChangeLatency + v->UrgentWate= rmark; =20 #ifdef __DML_VBA_DEBUG__ - dml_print("DML::%s: DRAMClockChangeLatency =3D %f\n", __func__, DRAMClock= ChangeLatency); - dml_print("DML::%s: DRAMClockChangeWatermark =3D %f\n", __func__, *DRAMCl= ockChangeWatermark); + dml_print("DML::%s: v->DRAMClockChangeLatency =3D %f\n", __func__, v->DRA= MClockChangeLatency); + dml_print("DML::%s: DRAMClockChangeWatermark =3D %f\n", __func__, v->DRAM= ClockChangeWatermark); #endif =20 v->TotalActiveWriteback =3D 0; - for (k =3D 0; k < NumberOfActivePlanes; ++k) { - if (WritebackEnable[k] =3D=3D true) { + for (k =3D 0; k < v->NumberOfActivePlanes; ++k) { + if (v->WritebackEnable[k] =3D=3D true) { v->TotalActiveWriteback =3D v->TotalActiveWriteback + 1; } } =20 if (v->TotalActiveWriteback <=3D 1) { - *WritebackUrgentWatermark =3D WritebackLatency; + v->WritebackUrgentWatermark =3D v->WritebackLatency; } else { - *WritebackUrgentWatermark =3D WritebackLatency + WritebackChunkSize * 10= 24.0 / 32.0 / SOCCLK; + v->WritebackUrgentWatermark =3D v->WritebackLatency + v->WritebackChunkS= ize * 1024.0 / 32.0 / SOCCLK; } =20 if (v->TotalActiveWriteback <=3D 1) { - *WritebackDRAMClockChangeWatermark =3D DRAMClockChangeLatency + Writebac= kLatency; + v->WritebackDRAMClockChangeWatermark =3D v->DRAMClockChangeLatency + v->= WritebackLatency; } else { - *WritebackDRAMClockChangeWatermark =3D DRAMClockChangeLatency + Writebac= kLatency + WritebackChunkSize * 1024.0 / 32.0 / SOCCLK; + v->WritebackDRAMClockChangeWatermark =3D v->DRAMClockChangeLatency + v->= WritebackLatency + v->WritebackChunkSize * 1024.0 / 32.0 / SOCCLK; } =20 - for (k =3D 0; k < NumberOfActivePlanes; ++k) { + for (k =3D 0; k < v->NumberOfActivePlanes; ++k) { TotalPixelBW =3D TotalPixelBW - + DPPPerPlane[k] * (SwathWidthY[k] * BytePerPixelDETY[k] * VRatio[k] += SwathWidthC[k] * BytePerPixelDETC[k] * VRatioChroma[k]) - / (HTotal[k] / PixelClock[k]); + + DPPPerPlane[k] * (SwathWidthY[k] * BytePerPixelDETY[k] * v->VRatio[k= ] + SwathWidthC[k] * BytePerPixelDETC[k] * v->VRatioChroma[k]) + / (v->HTotal[k] / v->PixelClock[k]); } =20 - for (k =3D 0; k < NumberOfActivePlanes; ++k) { + for (k =3D 0; k < v->NumberOfActivePlanes; ++k) { double EffectiveDETBufferSizeY =3D DETBufferSizeY[k]; =20 v->LBLatencyHidingSourceLinesY =3D dml_min( - (double) MaxLineBufferLines, - dml_floor(LineBufferSize / LBBitPerPixel[k] / (SwathWidthY[k] / dml_ma= x(HRatio[k], 1.0)), 1)) - (vtaps[k] - 1); + (double) v->MaxLineBufferLines, + dml_floor(v->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthY[k] / = dml_max(v->HRatio[k], 1.0)), 1)) - (v->vtaps[k] - 1); =20 v->LBLatencyHidingSourceLinesC =3D dml_min( - (double) MaxLineBufferLines, - dml_floor(LineBufferSize / LBBitPerPixel[k] / (SwathWidthC[k] / dml_ma= x(HRatioChroma[k], 1.0)), 1)) - (VTAPsChroma[k] - 1); + (double) v->MaxLineBufferLines, + dml_floor(v->LineBufferSize / v->LBBitPerPixel[k] / (SwathWidthC[k] / = dml_max(v->HRatioChroma[k], 1.0)), 1)) - (v->VTAPsChroma[k] - 1); =20 - EffectiveLBLatencyHidingY =3D v->LBLatencyHidingSourceLinesY / VRatio[k]= * (HTotal[k] / PixelClock[k]); + EffectiveLBLatencyHidingY =3D v->LBLatencyHidingSourceLinesY / v->VRatio= [k] * (v->HTotal[k] / v->PixelClock[k]); =20 - EffectiveLBLatencyHidingC =3D v->LBLatencyHidingSourceLinesC / VRatioChr= oma[k] * (HTotal[k] / PixelClock[k]); + EffectiveLBLatencyHidingC =3D v->LBLatencyHidingSourceLinesC / v->VRatio= Chroma[k] * (v->HTotal[k] / v->PixelClock[k]); =20 if (UnboundedRequestEnabled) { EffectiveDETBufferSizeY =3D EffectiveDETBufferSizeY - + CompressedBufferSizeInkByte * 1024 * SwathWidthY[k] * BytePerPixelD= ETY[k] * VRatio[k] / (HTotal[k] / PixelClock[k]) / TotalPixelBW; + + CompressedBufferSizeInkByte * 1024 * SwathWidthY[k] * BytePerPixelD= ETY[k] * v->VRatio[k] / (v->HTotal[k] / v->PixelClock[k]) / TotalPixelBW; } =20 LinesInDETY[k] =3D (double) EffectiveDETBufferSizeY / BytePerPixelDETY[k= ] / SwathWidthY[k]; LinesInDETYRoundedDownToSwath[k] =3D dml_floor(LinesInDETY[k], SwathHeig= htY[k]); - FullDETBufferingTimeY =3D LinesInDETYRoundedDownToSwath[k] * (HTotal[k] = / PixelClock[k]) / VRatio[k]; + FullDETBufferingTimeY =3D LinesInDETYRoundedDownToSwath[k] * (v->HTotal[= k] / v->PixelClock[k]) / v->VRatio[k]; if (BytePerPixelDETC[k] > 0) { LinesInDETC =3D v->DETBufferSizeC[k] / BytePerPixelDETC[k] / SwathWidth= C[k]; LinesInDETCRoundedDownToSwath =3D dml_floor(LinesInDETC, SwathHeightC[k= ]); - FullDETBufferingTimeC =3D LinesInDETCRoundedDownToSwath * (HTotal[k] / = PixelClock[k]) / VRatioChroma[k]; + FullDETBufferingTimeC =3D LinesInDETCRoundedDownToSwath * (v->HTotal[k]= / v->PixelClock[k]) / v->VRatioChroma[k]; } else { LinesInDETC =3D 0; FullDETBufferingTimeC =3D 999999; } =20 ActiveDRAMClockChangeLatencyMarginY =3D EffectiveLBLatencyHidingY + Full= DETBufferingTimeY - - ((double) DSTXAfterScaler[k] / HTotal[k] + DSTYAfterScaler[k]) * HTo= tal[k] / PixelClock[k] - *UrgentWatermark - *DRAMClockChangeWatermark; + - ((double) v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler[= k]) * v->HTotal[k] / v->PixelClock[k] - v->UrgentWatermark - v->DRAMClockCh= angeWatermark; =20 - if (NumberOfActivePlanes > 1) { + if (v->NumberOfActivePlanes > 1) { ActiveDRAMClockChangeLatencyMarginY =3D ActiveDRAMClockChangeLatencyMar= ginY - - (1 - 1.0 / NumberOfActivePlanes) * SwathHeightY[k] * HTotal[k] / Pi= xelClock[k] / VRatio[k]; + - (1 - 1.0 / v->NumberOfActivePlanes) * SwathHeightY[k] * v->HTotal[k= ] / v->PixelClock[k] / v->VRatio[k]; } =20 if (BytePerPixelDETC[k] > 0) { ActiveDRAMClockChangeLatencyMarginC =3D EffectiveLBLatencyHidingC + Ful= lDETBufferingTimeC - - ((double) DSTXAfterScaler[k] / HTotal[k] + DSTYAfterScaler[k]) * HT= otal[k] / PixelClock[k] - *UrgentWatermark - *DRAMClockChangeWatermark; + - ((double) v->DSTXAfterScaler[k] / v->HTotal[k] + v->DSTYAfterScaler= [k]) * v->HTotal[k] / v->PixelClock[k] - v->UrgentWatermark - v->DRAMClockC= hangeWatermark; =20 - if (NumberOfActivePlanes > 1) { + if (v->NumberOfActivePlanes > 1) { ActiveDRAMClockChangeLatencyMarginC =3D ActiveDRAMClockChangeLatencyMa= rginC - - (1 - 1.0 / NumberOfActivePlanes) * SwathHeightC[k] * HTotal[k] / P= ixelClock[k] / VRatioChroma[k]; + - (1 - 1.0 / v->NumberOfActivePlanes) * SwathHeightC[k] * v->HTotal[= k] / v->PixelClock[k] / v->VRatioChroma[k]; } v->ActiveDRAMClockChangeLatencyMargin[k] =3D dml_min(ActiveDRAMClockCha= ngeLatencyMarginY, ActiveDRAMClockChangeLatencyMarginC); } else { v->ActiveDRAMClockChangeLatencyMargin[k] =3D ActiveDRAMClockChangeLaten= cyMarginY; } =20 - if (WritebackEnable[k] =3D=3D true) { - WritebackDRAMClockChangeLatencyHiding =3D WritebackInterfaceBufferSize = * 1024 - / (WritebackDestinationWidth[k] * WritebackDestinationHeight[k] / (Wr= itebackSourceHeight[k] * HTotal[k] / PixelClock[k]) * 4); - if (WritebackPixelFormat[k] =3D=3D dm_444_64) { + if (v->WritebackEnable[k] =3D=3D true) { + WritebackDRAMClockChangeLatencyHiding =3D v->WritebackInterfaceBufferSi= ze * 1024 + / (v->WritebackDestinationWidth[k] * v->WritebackDestinationHeight[k]= / (v->WritebackSourceHeight[k] * v->HTotal[k] / v->PixelClock[k]) * 4); + if (v->WritebackPixelFormat[k] =3D=3D dm_444_64) { WritebackDRAMClockChangeLatencyHiding =3D WritebackDRAMClockChangeLate= ncyHiding / 2; } WritebackDRAMClockChangeLatencyMargin =3D WritebackDRAMClockChangeLaten= cyHiding - v->WritebackDRAMClockChangeWatermark; @@ -5846,14 +5702,14 @@ static void CalculateWatermarksAndDRAMSpeedChangeSu= pport( =20 v->MinActiveDRAMClockChangeMargin =3D 999999; PlaneWithMinActiveDRAMClockChangeMargin =3D 0; - for (k =3D 0; k < NumberOfActivePlanes; ++k) { + for (k =3D 0; k < v->NumberOfActivePlanes; ++k) { if (v->ActiveDRAMClockChangeLatencyMargin[k] < v->MinActiveDRAMClockChan= geMargin) { v->MinActiveDRAMClockChangeMargin =3D v->ActiveDRAMClockChangeLatencyMa= rgin[k]; - if (BlendingAndTiming[k] =3D=3D k) { + if (v->BlendingAndTiming[k] =3D=3D k) { PlaneWithMinActiveDRAMClockChangeMargin =3D k; } else { - for (j =3D 0; j < NumberOfActivePlanes; ++j) { - if (BlendingAndTiming[k] =3D=3D j) { + for (j =3D 0; j < v->NumberOfActivePlanes; ++j) { + if (v->BlendingAndTiming[k] =3D=3D j) { PlaneWithMinActiveDRAMClockChangeMargin =3D j; } } @@ -5861,11 +5717,11 @@ static void CalculateWatermarksAndDRAMSpeedChangeSu= pport( } } =20 - *MinActiveDRAMClockChangeLatencySupported =3D v->MinActiveDRAMClockChange= Margin + DRAMClockChangeLatency; + v->MinActiveDRAMClockChangeLatencySupported =3D v->MinActiveDRAMClockChan= geMargin + v->DRAMClockChangeLatency ; =20 SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank =3D 999999; - for (k =3D 0; k < NumberOfActivePlanes; ++k) { - if (!((k =3D=3D PlaneWithMinActiveDRAMClockChangeMargin) && (BlendingAnd= Timing[k] =3D=3D k)) && !(BlendingAndTiming[k] =3D=3D PlaneWithMinActiveDRA= MClockChangeMargin) + for (k =3D 0; k < v->NumberOfActivePlanes; ++k) { + if (!((k =3D=3D PlaneWithMinActiveDRAMClockChangeMargin) && (v->Blending= AndTiming[k] =3D=3D k)) && !(v->BlendingAndTiming[k] =3D=3D PlaneWithMinAct= iveDRAMClockChangeMargin) && v->ActiveDRAMClockChangeLatencyMargin[k] < SecondMinActiveDRAMClock= ChangeMarginOneDisplayInVBLank) { SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank =3D v->ActiveDRA= MClockChangeLatencyMargin[k]; } @@ -5873,25 +5729,25 @@ static void CalculateWatermarksAndDRAMSpeedChangeSu= pport( =20 v->TotalNumberOfActiveOTG =3D 0; =20 - for (k =3D 0; k < NumberOfActivePlanes; ++k) { - if (BlendingAndTiming[k] =3D=3D k) { + for (k =3D 0; k < v->NumberOfActivePlanes; ++k) { + if (v->BlendingAndTiming[k] =3D=3D k) { v->TotalNumberOfActiveOTG =3D v->TotalNumberOfActiveOTG + 1; } } =20 if (v->MinActiveDRAMClockChangeMargin > 0 && PrefetchMode =3D=3D 0) { *DRAMClockChangeSupport =3D dm_dram_clock_change_vactive; - } else if ((SynchronizedVBlank =3D=3D true || v->TotalNumberOfActiveOTG = =3D=3D 1 + } else if ((v->SynchronizedVBlank =3D=3D true || v->TotalNumberOfActiveOT= G =3D=3D 1 || SecondMinActiveDRAMClockChangeMarginOneDisplayInVBLank > 0) && Prefe= tchMode =3D=3D 0) { *DRAMClockChangeSupport =3D dm_dram_clock_change_vblank; } else { *DRAMClockChangeSupport =3D dm_dram_clock_change_unsupported; } =20 - *StutterExitWatermark =3D SRExitTime + ExtraLatency + 10 / DCFCLKDeepSlee= p; - *StutterEnterPlusExitWatermark =3D (SREnterPlusExitTime + ExtraLatency + = 10 / DCFCLKDeepSleep); - *Z8StutterExitWatermark =3D SRExitZ8Time + ExtraLatency + 10 / DCFCLKDeep= Sleep; - *Z8StutterEnterPlusExitWatermark =3D SREnterPlusExitZ8Time + ExtraLatency= + 10 / DCFCLKDeepSleep; + *StutterExitWatermark =3D v->SRExitTime + ExtraLatency + 10 / DCFCLKDeepS= leep; + *StutterEnterPlusExitWatermark =3D (v->SREnterPlusExitTime + ExtraLatency= + 10 / DCFCLKDeepSleep); + *Z8StutterExitWatermark =3D v->SRExitZ8Time + ExtraLatency + 10 / DCFCLKD= eepSleep; + *Z8StutterEnterPlusExitWatermark =3D v->SREnterPlusExitZ8Time + ExtraLate= ncy + 10 / DCFCLKDeepSleep; =20 #ifdef __DML_VBA_DEBUG__ dml_print("DML::%s: StutterExitWatermark =3D %f\n", __func__, *StutterExi= tWatermark); --=20 2.35.1