diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/0425-drm-amd-display-fix-scaling-info-based-surface-updat.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.14.71/0425-drm-amd-display-fix-scaling-info-based-surface-updat.patch | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/0425-drm-amd-display-fix-scaling-info-based-surface-updat.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/0425-drm-amd-display-fix-scaling-info-based-surface-updat.patch new file mode 100644 index 00000000..62482b32 --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/0425-drm-amd-display-fix-scaling-info-based-surface-updat.patch @@ -0,0 +1,80 @@ +From bdb02a42867ea0140271d0efea0cbbc37553a8df Mon Sep 17 00:00:00 2001 +From: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com> +Date: Wed, 10 May 2017 18:05:02 -0400 +Subject: [PATCH 0425/4131] drm/amd/display: fix scaling info based surface + update type check + +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.c | 47 +++++++++----------------------- + 1 file changed, 13 insertions(+), 34 deletions(-) + +diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c +index bc98081..6d56cb0 100644 +--- a/drivers/gpu/drm/amd/display/dc/core/dc.c ++++ b/drivers/gpu/drm/amd/display/dc/core/dc.c +@@ -1122,45 +1122,24 @@ static enum surface_update_type get_plane_info_update_type( + static enum surface_update_type get_scaling_info_update_type( + const struct dc_surface_update *u) + { +- struct dc_scaling_info temp_scaling_info = { { 0 } }; +- + if (!u->scaling_info) + return UPDATE_TYPE_FAST; + +- /* Copy all parameters that will cause a full update +- * from current surface, the rest of the parameters +- * from provided plane configuration. +- * Perform memory compare and special validation +- * for those that can cause fast/medium updates +- */ +- +- /* Full Update Parameters */ +- temp_scaling_info.dst_rect = u->surface->dst_rect; +- temp_scaling_info.src_rect = u->surface->src_rect; +- temp_scaling_info.scaling_quality = u->surface->scaling_quality; +- +- /* Special validation required */ +- temp_scaling_info.clip_rect = u->scaling_info->clip_rect; +- +- if (memcmp(u->scaling_info, &temp_scaling_info, +- sizeof(struct dc_scaling_info)) != 0) ++ if (u->scaling_info->src_rect.width != u->surface->src_rect.width ++ || u->scaling_info->src_rect.height != u->surface->src_rect.height ++ || u->scaling_info->clip_rect.width != u->surface->clip_rect.width ++ || u->scaling_info->clip_rect.height != u->surface->clip_rect.height ++ || u->scaling_info->dst_rect.width != u->surface->dst_rect.width ++ || u->scaling_info->dst_rect.height != u->surface->dst_rect.height) + return UPDATE_TYPE_FULL; + +- /* Check Clip rectangles if not equal +- * difference is in offsets == > UPDATE_TYPE_MED +- * difference is in dimensions == > UPDATE_TYPE_FULL +- */ +- if (memcmp(&u->scaling_info->clip_rect, +- &u->surface->clip_rect, sizeof(struct rect)) != 0) { +- if ((u->scaling_info->clip_rect.height == +- u->surface->clip_rect.height) && +- (u->scaling_info->clip_rect.width == +- u->surface->clip_rect.width)) { +- return UPDATE_TYPE_MED; +- } else { +- return UPDATE_TYPE_FULL; +- } +- } ++ if (u->scaling_info->src_rect.x != u->surface->src_rect.x ++ || u->scaling_info->src_rect.y != u->surface->src_rect.y ++ || u->scaling_info->clip_rect.x != u->surface->clip_rect.x ++ || u->scaling_info->clip_rect.y != u->surface->clip_rect.y ++ || u->scaling_info->dst_rect.x != u->surface->dst_rect.x ++ || u->scaling_info->dst_rect.y != u->surface->dst_rect.y) ++ return UPDATE_TYPE_MED; + + return UPDATE_TYPE_FAST; + } +-- +2.7.4 + |