From nobody Fri Dec 19 17:33:18 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 E68D1C07E9D for ; Mon, 26 Sep 2022 11:29:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234276AbiIZL3Z (ORCPT ); Mon, 26 Sep 2022 07:29:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53046 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234705AbiIZL1j (ORCPT ); Mon, 26 Sep 2022 07:27:39 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 843216AA03; Mon, 26 Sep 2022 03:41:10 -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 dfw.source.kernel.org (Postfix) with ESMTPS id 6DA08604F5; Mon, 26 Sep 2022 10:40:13 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 60C20C433C1; Mon, 26 Sep 2022 10:40:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1664188812; bh=Xd9c0X3QS3568Rh+Yj1HbEuidc7xksczan6ogDvhjVY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Rq8zWU1J7S/6JQ+ToVkfmwUDfDCrWzo2jUGHjSScLCBF4HkwiXEB2QeZu7W35OL5k tN4Pe+mwd1GFrjl3e73JFAkIQ+iyPMb5TQvyZ6Dg5H5fQN66JyJApXIGoaU3hPgCBw kdmFOv4v1RzP++p5VX/ggDiPIY1Hh13LmCrCNcE8= 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.15 130/148] drm/amd/display: Reduce number of arguments of dml31s CalculateWatermarksAndDRAMSpeedChangeSupport() Date: Mon, 26 Sep 2022 12:12:44 +0200 Message-Id: <20220926100801.070398320@linuxfoundation.org> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20220926100756.074519146@linuxfoundation.org> References: <20220926100756.074519146@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 d58925cff420..a6ce22d23b26 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 @@ -319,64 +319,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, @@ -3072,64 +3036,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) { @@ -5561,64 +5489,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 @@ -5743,64 +5635,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; @@ -5820,103 +5676,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; @@ -5926,14 +5782,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; } } @@ -5941,11 +5797,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]; } @@ -5953,25 +5809,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