diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3561-drm-amd-display-update-bw_calcs-to-take-pipe-sync-in.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3561-drm-amd-display-update-bw_calcs-to-take-pipe-sync-in.patch | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3561-drm-amd-display-update-bw_calcs-to-take-pipe-sync-in.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3561-drm-amd-display-update-bw_calcs-to-take-pipe-sync-in.patch new file mode 100644 index 00000000..940be956 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3561-drm-amd-display-update-bw_calcs-to-take-pipe-sync-in.patch @@ -0,0 +1,78 @@ +From 8f5936be8109638a1ce825df8f835040edb60984 Mon Sep 17 00:00:00 2001 +From: Alex Deucher <alexander.deucher@amd.com> +Date: Thu, 8 Aug 2019 09:03:46 -0500 +Subject: [PATCH 3561/4256] drm/amd/display: update bw_calcs to take pipe sync + into account (v3) + +Properly set all_displays_in_sync so that when the data is +propagated to powerplay, it's set properly and we can enable +mclk switching when all monitors are in sync. + +v2: fix logic, clean up +v3: check for blending chains, simplify logic + +Acked-by: Evan Quan <evan.quan@amd.com> +Reviewed-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + .../gpu/drm/amd/display/dc/calcs/dce_calcs.c | 30 +++++++++++++++++-- + 1 file changed, 28 insertions(+), 2 deletions(-) + +diff --git a/drivers/gpu/drm/amd/display/dc/calcs/dce_calcs.c b/drivers/gpu/drm/amd/display/dc/calcs/dce_calcs.c +index fdab16ea0a2e..562489fdbc22 100644 +--- a/drivers/gpu/drm/amd/display/dc/calcs/dce_calcs.c ++++ b/drivers/gpu/drm/amd/display/dc/calcs/dce_calcs.c +@@ -23,6 +23,7 @@ + * + */ + ++#include "resource.h" + #include "dm_services.h" + #include "dce_calcs.h" + #include "dc.h" +@@ -2975,6 +2976,32 @@ static void populate_initial_data( + data->number_of_displays = num_displays; + } + ++static bool all_displays_in_sync(const struct pipe_ctx pipe[], ++ int pipe_count) ++{ ++ const struct pipe_ctx *active_pipes[MAX_PIPES]; ++ int i, num_active_pipes = 0; ++ ++ for (i = 0; i < pipe_count; i++) { ++ if (!pipe[i].stream || pipe[i].top_pipe) ++ continue; ++ ++ active_pipes[num_active_pipes++] = &pipe[i]; ++ } ++ ++ if (!num_active_pipes) ++ return false; ++ ++ for (i = 1; i < num_active_pipes; ++i) { ++ if (!resource_are_streams_timing_synchronizable( ++ active_pipes[0]->stream, active_pipes[i]->stream)) { ++ return false; ++ } ++ } ++ ++ return true; ++} ++ + /** + * Return: + * true - Display(s) configuration supported. +@@ -2996,8 +3023,7 @@ bool bw_calcs(struct dc_context *ctx, + + populate_initial_data(pipe, pipe_count, data); + +- /*TODO: this should be taken out calcs output and assigned during timing sync for pplib use*/ +- calcs_output->all_displays_in_sync = false; ++ calcs_output->all_displays_in_sync = all_displays_in_sync(pipe, pipe_count); + + if (data->number_of_displays != 0) { + uint8_t yclk_lvl, sclk_lvl; +-- +2.17.1 + |