aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/0309-drm-amd-display-stereo-support.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/0309-drm-amd-display-stereo-support.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/0309-drm-amd-display-stereo-support.patch70
1 files changed, 70 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/0309-drm-amd-display-stereo-support.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/0309-drm-amd-display-stereo-support.patch
new file mode 100644
index 00000000..c5c550d8
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/0309-drm-amd-display-stereo-support.patch
@@ -0,0 +1,70 @@
+From 892b52c8fa9f6bd8542fa213b0cba78bb70fba7e Mon Sep 17 00:00:00 2001
+From: Vitaly Prosyak <vitaly.prosyak@amd.com>
+Date: Mon, 27 Mar 2017 12:48:46 -0500
+Subject: [PATCH 0309/4131] drm/amd/display: stereo support
+
+Frame sequential, top-bottom and side-by-side support.
+
+Signed-off-by: Vitaly Prosyak <vitaly.prosyak@amd.com>
+Acked-by: Harry Wentland <Harry.Wentland@amd.com>
+Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/display/dc/core/dc_resource.c | 34 +++++++++++++++++------
+ 1 file changed, 26 insertions(+), 8 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
+index 61ca1e2..8f53d7a 100644
+--- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
++++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
+@@ -422,6 +422,11 @@ static void calculate_viewport(struct pipe_ctx *pipe_ctx)
+ bool sec_split = pipe_ctx->top_pipe &&
+ pipe_ctx->top_pipe->surface == pipe_ctx->surface;
+
++ if (stream->timing.timing_3d_format == TIMING_3D_FORMAT_SIDE_BY_SIDE ||
++ stream->timing.timing_3d_format == TIMING_3D_FORMAT_TOP_AND_BOTTOM) {
++ pri_split = false;
++ sec_split = false;
++ }
+ /* The actual clip is an intersection between stream
+ * source and surface clip
+ */
+@@ -532,14 +537,27 @@ static void calculate_recout(struct pipe_ctx *pipe_ctx, struct view *recout_skip
+ stream->public.dst.y + stream->public.dst.height
+ - pipe_ctx->scl_data.recout.y;
+
+- /* Handle hsplit */
+- if (pipe_ctx->top_pipe && pipe_ctx->top_pipe->surface == pipe_ctx->surface) {
+- pipe_ctx->scl_data.recout.width /= 2;
+- pipe_ctx->scl_data.recout.x += pipe_ctx->scl_data.recout.width;
+- /* Floor primary pipe, ceil 2ndary pipe */
+- pipe_ctx->scl_data.recout.width += pipe_ctx->scl_data.recout.width % 2;
+- } else if (pipe_ctx->bottom_pipe && pipe_ctx->bottom_pipe->surface == pipe_ctx->surface) {
+- pipe_ctx->scl_data.recout.width /= 2;
++ /* Handle h & vsplit */
++ if (pipe_ctx->top_pipe && pipe_ctx->top_pipe->surface ==
++ pipe_ctx->surface) {
++ if (stream->public.timing.timing_3d_format ==
++ TIMING_3D_FORMAT_TOP_AND_BOTTOM) {
++ pipe_ctx->scl_data.recout.height /= 2;
++ pipe_ctx->scl_data.recout.y += pipe_ctx->scl_data.recout.height;
++ /* Floor primary pipe, ceil 2ndary pipe */
++ pipe_ctx->scl_data.recout.height += pipe_ctx->scl_data.recout.height % 2;
++ } else {
++ pipe_ctx->scl_data.recout.width /= 2;
++ pipe_ctx->scl_data.recout.x += pipe_ctx->scl_data.recout.width;
++ pipe_ctx->scl_data.recout.width += pipe_ctx->scl_data.recout.width % 2;
++ }
++ } else if (pipe_ctx->bottom_pipe &&
++ pipe_ctx->bottom_pipe->surface == pipe_ctx->surface) {
++ if (stream->public.timing.timing_3d_format ==
++ TIMING_3D_FORMAT_TOP_AND_BOTTOM)
++ pipe_ctx->scl_data.recout.height /= 2;
++ else
++ pipe_ctx->scl_data.recout.width /= 2;
+ }
+
+ /* Unclipped recout offset = stream dst offset + ((surf dst offset - stream src offset)
+--
+2.7.4
+