diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/0423-drm-amd-display-fix-scaling-calculation-for-proper-s.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.14.71/0423-drm-amd-display-fix-scaling-calculation-for-proper-s.patch | 245 |
1 files changed, 0 insertions, 245 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/0423-drm-amd-display-fix-scaling-calculation-for-proper-s.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/0423-drm-amd-display-fix-scaling-calculation-for-proper-s.patch deleted file mode 100644 index 426f73b8..00000000 --- a/common/recipes-kernel/linux/linux-yocto-4.14.71/0423-drm-amd-display-fix-scaling-calculation-for-proper-s.patch +++ /dev/null @@ -1,245 +0,0 @@ -From bd025418437344338ac79ef90af461a068cc8163 Mon Sep 17 00:00:00 2001 -From: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com> -Date: Tue, 9 May 2017 16:39:26 -0400 -Subject: [PATCH 0423/4131] drm/amd/display: fix scaling calculation for proper - surface input format - -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> -Signed-off-by: Alex Deucher <alexander.deucher@amd.com> ---- - drivers/gpu/drm/amd/display/dc/core/dc_resource.c | 60 +++++++++++++++-------- - drivers/gpu/drm/amd/display/dc/dc_hw_types.h | 20 ++++---- - 2 files changed, 49 insertions(+), 31 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 9588217..7ca03d1 100644 ---- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c -+++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c -@@ -431,6 +431,7 @@ static void calculate_viewport(struct pipe_ctx *pipe_ctx) - const struct dc_surface *surface = &pipe_ctx->surface->public; - const struct dc_stream *stream = &pipe_ctx->stream->public; - struct scaler_data *data = &pipe_ctx->scl_data; -+ struct rect surf_src = surface->src_rect; - struct rect clip = { 0 }; - int vpc_div = (data->format == PIXEL_FORMAT_420BPP12 - || data->format == PIXEL_FORMAT_420BPP15) ? 2 : 1; -@@ -444,6 +445,11 @@ static void calculate_viewport(struct pipe_ctx *pipe_ctx) - pri_split = false; - sec_split = false; - } -+ -+ if (pipe_ctx->surface->public.rotation == ROTATION_ANGLE_90 || -+ pipe_ctx->surface->public.rotation == ROTATION_ANGLE_270) -+ rect_swap_helper(&surf_src); -+ - /* The actual clip is an intersection between stream - * source and surface clip - */ -@@ -463,18 +469,18 @@ static void calculate_viewport(struct pipe_ctx *pipe_ctx) - stream->src.y + stream->src.height - clip.y : - surface->clip_rect.y + surface->clip_rect.height - clip.y ; - -- /* offset = src.ofs + (clip.ofs - surface->dst_rect.ofs) * scl_ratio -+ /* offset = surf_src.ofs + (clip.ofs - surface->dst_rect.ofs) * scl_ratio - * num_pixels = clip.num_pix * scl_ratio - */ -- data->viewport.x = surface->src_rect.x + (clip.x - surface->dst_rect.x) * -- surface->src_rect.width / surface->dst_rect.width; -+ data->viewport.x = surf_src.x + (clip.x - surface->dst_rect.x) * -+ surf_src.width / surface->dst_rect.width; - data->viewport.width = clip.width * -- surface->src_rect.width / surface->dst_rect.width; -+ surf_src.width / surface->dst_rect.width; - -- data->viewport.y = surface->src_rect.y + (clip.y - surface->dst_rect.y) * -- surface->src_rect.height / surface->dst_rect.height; -+ data->viewport.y = surf_src.y + (clip.y - surface->dst_rect.y) * -+ surf_src.height / surface->dst_rect.height; - data->viewport.height = clip.height * -- surface->src_rect.height / surface->dst_rect.height; -+ surf_src.height / surface->dst_rect.height; - - /* Round down, compensate in init */ - data->viewport_c.x = data->viewport.x / vpc_div; -@@ -523,16 +529,21 @@ static void calculate_recout(struct pipe_ctx *pipe_ctx, struct view *recout_skip - { - const struct dc_surface *surface = &pipe_ctx->surface->public; - struct core_stream *stream = pipe_ctx->stream; -- struct rect clip = surface->clip_rect; -+ struct rect surf_src = surface->src_rect; -+ struct rect surf_clip = surface->clip_rect; - int recout_full_x, recout_full_y; - -+ if (pipe_ctx->surface->public.rotation == ROTATION_ANGLE_90 || -+ pipe_ctx->surface->public.rotation == ROTATION_ANGLE_270) -+ rect_swap_helper(&surf_src); -+ - pipe_ctx->scl_data.recout.x = stream->public.dst.x; -- if (stream->public.src.x < clip.x) -- pipe_ctx->scl_data.recout.x += (clip.x -+ if (stream->public.src.x < surf_clip.x) -+ pipe_ctx->scl_data.recout.x += (surf_clip.x - - stream->public.src.x) * stream->public.dst.width - / stream->public.src.width; - -- pipe_ctx->scl_data.recout.width = clip.width * -+ pipe_ctx->scl_data.recout.width = surf_clip.width * - stream->public.dst.width / stream->public.src.width; - if (pipe_ctx->scl_data.recout.width + pipe_ctx->scl_data.recout.x > - stream->public.dst.x + stream->public.dst.width) -@@ -541,12 +552,12 @@ static void calculate_recout(struct pipe_ctx *pipe_ctx, struct view *recout_skip - - pipe_ctx->scl_data.recout.x; - - pipe_ctx->scl_data.recout.y = stream->public.dst.y; -- if (stream->public.src.y < clip.y) -- pipe_ctx->scl_data.recout.y += (clip.y -+ if (stream->public.src.y < surf_clip.y) -+ pipe_ctx->scl_data.recout.y += (surf_clip.y - - stream->public.src.y) * stream->public.dst.height - / stream->public.src.height; - -- pipe_ctx->scl_data.recout.height = clip.height * -+ pipe_ctx->scl_data.recout.height = surf_clip.height * - stream->public.dst.height / stream->public.src.height; - if (pipe_ctx->scl_data.recout.height + pipe_ctx->scl_data.recout.y > - stream->public.dst.y + stream->public.dst.height) -@@ -569,7 +580,7 @@ static void calculate_recout(struct pipe_ctx *pipe_ctx, struct view *recout_skip - 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->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; -@@ -577,17 +588,17 @@ static void calculate_recout(struct pipe_ctx *pipe_ctx, struct view *recout_skip - pipe_ctx->scl_data.recout.width /= 2; - } - -- /* Unclipped recout offset = stream dst offset + ((surf dst offset - stream src offset) -- * * 1/ stream scaling ratio) - (surf src offset * 1/ full scl -+ /* Unclipped recout offset = stream dst offset + ((surf dst offset - stream surf_src offset) -+ * * 1/ stream scaling ratio) - (surf surf_src offset * 1/ full scl - * ratio) - */ - recout_full_x = stream->public.dst.x + (surface->dst_rect.x - stream->public.src.x) - * stream->public.dst.width / stream->public.src.width - -- surface->src_rect.x * surface->dst_rect.width / surface->src_rect.width -+ surf_src.x * surface->dst_rect.width / surf_src.width - * stream->public.dst.width / stream->public.src.width; - recout_full_y = stream->public.dst.y + (surface->dst_rect.y - stream->public.src.y) - * stream->public.dst.height / stream->public.src.height - -- surface->src_rect.y * surface->dst_rect.height / surface->src_rect.height -+ surf_src.y * surface->dst_rect.height / surf_src.height - * stream->public.dst.height / stream->public.src.height; - - recout_skip->width = pipe_ctx->scl_data.recout.x - recout_full_x; -@@ -598,16 +609,21 @@ static void calculate_scaling_ratios(struct pipe_ctx *pipe_ctx) - { - const struct dc_surface *surface = &pipe_ctx->surface->public; - struct core_stream *stream = pipe_ctx->stream; -+ struct rect surf_src = surface->src_rect; - const int in_w = stream->public.src.width; - const int in_h = stream->public.src.height; - const int out_w = stream->public.dst.width; - const int out_h = stream->public.dst.height; - -+ if (pipe_ctx->surface->public.rotation == ROTATION_ANGLE_90 || -+ pipe_ctx->surface->public.rotation == ROTATION_ANGLE_270) -+ rect_swap_helper(&surf_src); -+ - pipe_ctx->scl_data.ratios.horz = dal_fixed31_32_from_fraction( -- surface->src_rect.width, -+ surf_src.width, - surface->dst_rect.width); - pipe_ctx->scl_data.ratios.vert = dal_fixed31_32_from_fraction( -- surface->src_rect.height, -+ surf_src.height, - surface->dst_rect.height); - - if (surface->stereo_format == PLANE_STEREO_FORMAT_SIDE_BY_SIDE) -@@ -637,8 +653,10 @@ static void calculate_inits_and_adj_vp(struct pipe_ctx *pipe_ctx, struct view *r - int vpc_div = (data->format == PIXEL_FORMAT_420BPP12 - || data->format == PIXEL_FORMAT_420BPP15) ? 2 : 1; - -+ - if (pipe_ctx->surface->public.rotation == ROTATION_ANGLE_90 || - pipe_ctx->surface->public.rotation == ROTATION_ANGLE_270) { -+ rect_swap_helper(&src); - rect_swap_helper(&data->viewport_c); - rect_swap_helper(&data->viewport); - } -diff --git a/drivers/gpu/drm/amd/display/dc/dc_hw_types.h b/drivers/gpu/drm/amd/display/dc/dc_hw_types.h -index 1a7ce06..58a3bcd 100644 ---- a/drivers/gpu/drm/amd/display/dc/dc_hw_types.h -+++ b/drivers/gpu/drm/amd/display/dc/dc_hw_types.h -@@ -99,15 +99,15 @@ struct dc_plane_address { - }; - - struct dc_size { -- uint32_t width; -- uint32_t height; -+ int width; -+ int height; - }; - - struct rect { - int x; - int y; -- uint32_t width; -- uint32_t height; -+ int width; -+ int height; - }; - - union plane_size { -@@ -123,7 +123,7 @@ union plane_size { - * In LINEAR_GENERAL mode, pitch - * is 32 pixel aligned. - */ -- uint32_t surface_pitch; -+ int surface_pitch; - } grph; - - struct { -@@ -132,14 +132,14 @@ union plane_size { - * In LINEAR_GENERAL mode, pitch is - * 32 pixel aligned. - */ -- uint32_t luma_pitch; -+ int luma_pitch; - - struct rect chroma_size; - /* Graphic surface pitch in pixels. - * In LINEAR_GENERAL mode, pitch is - * 32 pixel aligned. - */ -- uint32_t chroma_pitch; -+ int chroma_pitch; - } video; - }; - -@@ -148,15 +148,15 @@ struct dc_plane_dcc_param { - - union { - struct { -- uint32_t meta_pitch; -+ int meta_pitch; - bool independent_64b_blks; - } grph; - - struct { -- uint32_t meta_pitch_l; -+ int meta_pitch_l; - bool independent_64b_blks_l; - -- uint32_t meta_pitch_c; -+ int meta_pitch_c; - bool independent_64b_blks_c; - } video; - }; --- -2.7.4 - |