aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/4892-drm-amd-display-Separate-HUBP-surface-size-and-rotat.patch
diff options
context:
space:
mode:
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.patch122
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
+