diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/4892-drm-amd-display-Separate-HUBP-surface-size-and-rotat.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.14.71/4892-drm-amd-display-Separate-HUBP-surface-size-and-rotat.patch | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/4892-drm-amd-display-Separate-HUBP-surface-size-and-rotat.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/4892-drm-amd-display-Separate-HUBP-surface-size-and-rotat.patch new file mode 100644 index 00000000..a052c7ed --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/4892-drm-amd-display-Separate-HUBP-surface-size-and-rotat.patch @@ -0,0 +1,122 @@ +From 548fa588dbfb81ae01e7573edb130d812bb6cfa5 Mon Sep 17 00:00:00 2001 +From: Eric Bernstein <eric.bernstein@amd.com> +Date: Fri, 8 Jun 2018 15:01:59 -0400 +Subject: [PATCH 4892/5725] drm/amd/display: Separate HUBP surface size and + rotation/mirror programming + +Separate HUBP surface size and rotation/mirror programming so that +HUBP revision without mirror/rotation do not access those register +fields. + +Signed-off-by: Eric Bernstein <eric.bernstein@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/dcn10/dcn10_hubp.c | 23 +++++++++++++++-------- + drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubp.h | 13 ++++++++----- + 2 files changed, 23 insertions(+), 13 deletions(-) + +diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubp.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubp.c +index a281bed..ec8e833 100644 +--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubp.c ++++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubp.c +@@ -152,16 +152,14 @@ void hubp1_program_tiling( + PIPE_ALIGNED, info->gfx9.pipe_aligned); + } + +-void hubp1_program_size_and_rotation( ++void hubp1_program_size( + struct hubp *hubp, +- enum dc_rotation_angle rotation, + enum surface_pixel_format format, + const union plane_size *plane_size, +- struct dc_plane_dcc_param *dcc, +- bool horizontal_mirror) ++ struct dc_plane_dcc_param *dcc) + { + struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp); +- uint32_t pitch, meta_pitch, pitch_c, meta_pitch_c, mirror; ++ uint32_t pitch, meta_pitch, pitch_c, meta_pitch_c; + + /* Program data and meta surface pitch (calculation from addrlib) + * 444 or 420 luma +@@ -192,13 +190,22 @@ void hubp1_program_size_and_rotation( + if (format >= SURFACE_PIXEL_FORMAT_VIDEO_BEGIN) + REG_UPDATE_2(DCSURF_SURFACE_PITCH_C, + PITCH_C, pitch_c, META_PITCH_C, meta_pitch_c); ++} ++ ++void hubp1_program_rotation( ++ struct hubp *hubp, ++ enum dc_rotation_angle rotation, ++ bool horizontal_mirror) ++{ ++ struct dcn10_hubp *hubp1 = TO_DCN10_HUBP(hubp); ++ uint32_t mirror; ++ + + if (horizontal_mirror) + mirror = 1; + else + mirror = 0; + +- + /* Program rotation angle and horz mirror - no mirror */ + if (rotation == ROTATION_ANGLE_0) + REG_UPDATE_2(DCSURF_SURFACE_CONFIG, +@@ -481,8 +488,8 @@ void hubp1_program_surface_config( + { + hubp1_dcc_control(hubp, dcc->enable, dcc->grph.independent_64b_blks); + hubp1_program_tiling(hubp, tiling_info, format); +- hubp1_program_size_and_rotation( +- hubp, rotation, format, plane_size, dcc, horizontal_mirror); ++ hubp1_program_size(hubp, format, plane_size, dcc); ++ hubp1_program_rotation(hubp, rotation, horizontal_mirror); + hubp1_program_pixel_format(hubp, format); + } + +diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubp.h b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubp.h +index d901d50..f689fea 100644 +--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubp.h ++++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hubp.h +@@ -268,8 +268,6 @@ + HUBP_SF(HUBPREQ0_DCSURF_SURFACE_PITCH, META_PITCH, mask_sh),\ + HUBP_SF(HUBPREQ0_DCSURF_SURFACE_PITCH_C, PITCH_C, mask_sh),\ + HUBP_SF(HUBPREQ0_DCSURF_SURFACE_PITCH_C, META_PITCH_C, mask_sh),\ +- HUBP_SF(HUBP0_DCSURF_SURFACE_CONFIG, ROTATION_ANGLE, mask_sh),\ +- HUBP_SF(HUBP0_DCSURF_SURFACE_CONFIG, H_MIRROR_EN, mask_sh),\ + HUBP_SF(HUBP0_DCSURF_SURFACE_CONFIG, SURFACE_PIXEL_FORMAT, mask_sh),\ + HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, SURFACE_FLIP_TYPE, mask_sh),\ + HUBP_SF(HUBPREQ0_DCSURF_FLIP_CONTROL, SURFACE_FLIP_PENDING, mask_sh),\ +@@ -388,6 +386,8 @@ + #define HUBP_MASK_SH_LIST_DCN10(mask_sh)\ + HUBP_MASK_SH_LIST_DCN(mask_sh),\ + HUBP_MASK_SH_LIST_DCN_VM(mask_sh),\ ++ HUBP_SF(HUBP0_DCSURF_SURFACE_CONFIG, ROTATION_ANGLE, mask_sh),\ ++ HUBP_SF(HUBP0_DCSURF_SURFACE_CONFIG, H_MIRROR_EN, mask_sh),\ + HUBP_SF(HUBPREQ0_PREFETCH_SETTINS, DST_Y_PREFETCH, mask_sh),\ + HUBP_SF(HUBPREQ0_PREFETCH_SETTINS, VRATIO_PREFETCH, mask_sh),\ + HUBP_SF(HUBPREQ0_PREFETCH_SETTINS_C, VRATIO_PREFETCH_C, mask_sh),\ +@@ -679,12 +679,15 @@ void hubp1_program_pixel_format( + struct hubp *hubp, + enum surface_pixel_format format); + +-void hubp1_program_size_and_rotation( ++void hubp1_program_size( + struct hubp *hubp, +- enum dc_rotation_angle rotation, + enum surface_pixel_format format, + const union plane_size *plane_size, +- struct dc_plane_dcc_param *dcc, ++ struct dc_plane_dcc_param *dcc); ++ ++void hubp1_program_rotation( ++ struct hubp *hubp, ++ enum dc_rotation_angle rotation, + bool horizontal_mirror); + + void hubp1_program_tiling( +-- +2.7.4 + |