diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2515-drm-amd-display-extract-global-sync-params-from-vba.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2515-drm-amd-display-extract-global-sync-params-from-vba.patch | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2515-drm-amd-display-extract-global-sync-params-from-vba.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2515-drm-amd-display-extract-global-sync-params-from-vba.patch new file mode 100644 index 00000000..6f7b79ae --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2515-drm-amd-display-extract-global-sync-params-from-vba.patch @@ -0,0 +1,118 @@ +From 594cc02902a94853de203e2711e869265ea0379e Mon Sep 17 00:00:00 2001 +From: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com> +Date: Wed, 20 Sep 2017 17:50:02 -0400 +Subject: [PATCH 2515/4131] drm/amd/display: extract global sync params from + vba + +Signed-off-by: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com> +Reviewed-by: Tony Cheng <Tony.Cheng@amd.com> +Acked-by: Harry Wentland <Harry.Wentland@amd.com> +--- + .../gpu/drm/amd/display/dc/dml/display_mode_vba.c | 32 +++++++++++++++------- + .../gpu/drm/amd/display/dc/dml/display_mode_vba.h | 3 ++ + 2 files changed, 25 insertions(+), 10 deletions(-) + +diff --git a/drivers/gpu/drm/amd/display/dc/dml/display_mode_vba.c b/drivers/gpu/drm/amd/display/dc/dml/display_mode_vba.c +index e1a3182..054b506 100644 +--- a/drivers/gpu/drm/amd/display/dc/dml/display_mode_vba.c ++++ b/drivers/gpu/drm/amd/display/dc/dml/display_mode_vba.c +@@ -88,7 +88,10 @@ static bool CalculatePrefetchSchedule( + double *VRatioPrefetchC, + double *RequiredPrefetchPixDataBW, + unsigned int *VStartupRequiredWhenNotEnoughTimeForDynamicMetadata, +- double *Tno_bw); ++ double *Tno_bw, ++ unsigned int *VUpdateOffsetPix, ++ unsigned int *VUpdateWidthPix, ++ unsigned int *VReadyOffsetPix); + static double RoundToDFSGranularityUp(double Clock, double VCOSpeed); + static double RoundToDFSGranularityDown(double Clock, double VCOSpeed); + static double CalculatePrefetchSourceLines( +@@ -264,7 +267,7 @@ unsigned int dml_get_voltage_level( + memcpy(mode_lib->vba.cache_pipes, pipes, sizeof(*pipes) * num_pipes); + mode_lib->vba.cache_num_pipes = num_pipes; + +- if (need_recalculate) ++ if (need_recalculate && pipes[0].clks_cfg.dppclk_mhz != 0) + recalculate(mode_lib); + else { + fetch_socbb_params(mode_lib); +@@ -1066,10 +1069,13 @@ static bool CalculatePrefetchSchedule( + double *VRatioPrefetchC, + double *RequiredPrefetchPixDataBW, + unsigned int *VStartupRequiredWhenNotEnoughTimeForDynamicMetadata, +- double *Tno_bw) ++ double *Tno_bw, ++ unsigned int *VUpdateOffsetPix, ++ unsigned int *VUpdateWidthPix, ++ unsigned int *VReadyOffsetPix) + { + bool MyError = false; +- unsigned int DPPCycles, DISPCLKCycles, VUpdateOffsetPix, VUpdateWidthPix, VReadyOffsetPix; ++ unsigned int DPPCycles, DISPCLKCycles; + double DSTTotalPixelsAfterScaler, TotalRepeaterDelayTime; + double Tdm, LineTime, Tsetup; + double dst_y_prefetch_equ; +@@ -1110,17 +1116,17 @@ static bool CalculatePrefetchSchedule( + *DSTYAfterScaler = dml_floor(DSTTotalPixelsAfterScaler / HTotal, 1); + *DSTXAfterScaler = DSTTotalPixelsAfterScaler - ((double) (*DSTYAfterScaler * HTotal)); + +- VUpdateOffsetPix = dml_ceil(HTotal / 4.0, 1); ++ *VUpdateOffsetPix = dml_ceil(HTotal / 4.0, 1); + TotalRepeaterDelayTime = MaxInterDCNTileRepeaters * (2.0 / DPPCLK + 3.0 / DISPCLK); +- VUpdateWidthPix = (14.0 / DCFClkDeepSleep + 12.0 / DPPCLK + TotalRepeaterDelayTime) ++ *VUpdateWidthPix = (14.0 / DCFClkDeepSleep + 12.0 / DPPCLK + TotalRepeaterDelayTime) + * PixelClock; + +- VReadyOffsetPix = dml_max( ++ *VReadyOffsetPix = dml_max( + 150.0 / DPPCLK, + TotalRepeaterDelayTime + 20.0 / DCFClkDeepSleep + 10.0 / DPPCLK) + * PixelClock; + +- Tsetup = (double) (VUpdateOffsetPix + VUpdateWidthPix + VReadyOffsetPix) / PixelClock; ++ Tsetup = (double) (*VUpdateOffsetPix + *VUpdateWidthPix + *VReadyOffsetPix) / PixelClock; + + LineTime = (double) HTotal / PixelClock; + +@@ -2710,7 +2716,10 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman + &mode_lib->vba.VRatioPrefetchC[k], + &mode_lib->vba.RequiredPrefetchPixDataBW[k], + &mode_lib->vba.VStartupRequiredWhenNotEnoughTimeForDynamicMetadata, +- &mode_lib->vba.Tno_bw[k]); ++ &mode_lib->vba.Tno_bw[k], ++ &mode_lib->vba.VUpdateOffsetPix[k], ++ &mode_lib->vba.VUpdateWidthPix[k], ++ &mode_lib->vba.VReadyOffsetPix[k]); + if (mode_lib->vba.BlendingAndTiming[k] == k) { + mode_lib->vba.VStartup[k] = dml_min( + mode_lib->vba.VStartupLines, +@@ -5805,7 +5814,10 @@ static void ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_ + &mode_lib->vba.VRatioPreC[i][k], + &mode_lib->vba.RequiredPrefetchPixelDataBW[i][k], + &mode_lib->vba.VStartupRequiredWhenNotEnoughTimeForDynamicMetadata, +- &mode_lib->vba.Tno_bw[k]); ++ &mode_lib->vba.Tno_bw[k], ++ &mode_lib->vba.VUpdateOffsetPix[k], ++ &mode_lib->vba.VUpdateWidthPix[k], ++ &mode_lib->vba.VReadyOffsetPix[k]); + } + for (k = 0; k <= mode_lib->vba.NumberOfActivePlanes - 1; k++) { + mode_lib->vba.cursor_bw[k] = mode_lib->vba.NumberOfCursors[k] +diff --git a/drivers/gpu/drm/amd/display/dc/dml/display_mode_vba.h b/drivers/gpu/drm/amd/display/dc/dml/display_mode_vba.h +index 346ffea..5758c3f 100644 +--- a/drivers/gpu/drm/amd/display/dc/dml/display_mode_vba.h ++++ b/drivers/gpu/drm/amd/display/dc/dml/display_mode_vba.h +@@ -383,6 +383,9 @@ struct vba_vars_st { + double DPPCLK_calculated[DC__NUM_DPP__MAX]; + + unsigned int VStartup[DC__NUM_DPP__MAX]; ++ unsigned int VUpdateOffsetPix[DC__NUM_DPP__MAX]; ++ unsigned int VUpdateWidthPix[DC__NUM_DPP__MAX]; ++ unsigned int VReadyOffsetPix[DC__NUM_DPP__MAX]; + unsigned int VStartupRequiredWhenNotEnoughTimeForDynamicMetadata; + + double ImmediateFlipBW; +-- +2.7.4 + |