diff options
Diffstat (limited to 'meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0157-drm-amd-display-HDR-Enablement-For-Applications.patch')
-rw-r--r-- | meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0157-drm-amd-display-HDR-Enablement-For-Applications.patch | 219 |
1 files changed, 0 insertions, 219 deletions
diff --git a/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0157-drm-amd-display-HDR-Enablement-For-Applications.patch b/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0157-drm-amd-display-HDR-Enablement-For-Applications.patch deleted file mode 100644 index 2de24823..00000000 --- a/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0157-drm-amd-display-HDR-Enablement-For-Applications.patch +++ /dev/null @@ -1,219 +0,0 @@ -From c981b4eb6e1265a338bb9edf5e1caa9e1d557cbb Mon Sep 17 00:00:00 2001 -From: Amy Zhang <Amy.Zhang@amd.com> -Date: Fri, 13 Jan 2017 16:49:26 -0500 -Subject: [PATCH 0157/4131] drm/amd/display: HDR Enablement For Applications - -- Made sure dest color space is updated in stream and info frame -- Optimized segment distribution algorithm for regamma mapping - -Signed-off-by: Amy Zhang <Amy.Zhang@amd.com> -Acked-by: Harry Wentland <Harry.Wentland@amd.com> -Reviewed-by: Aric Cyr <Aric.Cyr@amd.com> -Signed-off-by: Alex Deucher <alexander.deucher@amd.com> ---- - drivers/gpu/drm/amd/display/dc/core/dc_resource.c | 14 ++++ - drivers/gpu/drm/amd/display/dc/dc_hw_types.h | 6 +- - .../amd/display/dc/dce110/dce110_hw_sequencer.c | 94 ++++++++++++++++++---- - drivers/gpu/drm/amd/display/dc/inc/hw/transform.h | 11 +++ - 4 files changed, 107 insertions(+), 18 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 fe79a28..8b41c77 100644 ---- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c -+++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c -@@ -1310,6 +1310,20 @@ static void set_avi_info_frame( - info_frame.avi_info_packet.info_packet_hdmi.bits.C0_C1 = - COLORIMETRY_NO_DATA; - -+ if (color_space == COLOR_SPACE_2020_RGB_FULLRANGE || -+ color_space == COLOR_SPACE_2020_RGB_LIMITEDRANGE || -+ color_space == COLOR_SPACE_2020_YCBCR) { -+ info_frame.avi_info_packet.info_packet_hdmi.bits.EC0_EC2 = -+ COLORIMETRYEX_BT2020RGBYCBCR; -+ info_frame.avi_info_packet.info_packet_hdmi.bits.C0_C1 = -+ COLORIMETRY_EXTENDED; -+ } else if (color_space == COLOR_SPACE_ADOBERGB) { -+ info_frame.avi_info_packet.info_packet_hdmi.bits.EC0_EC2 = -+ COLORIMETRYEX_ADOBERGB; -+ info_frame.avi_info_packet.info_packet_hdmi.bits.C0_C1 = -+ COLORIMETRY_EXTENDED; -+ } -+ - /* TODO: un-hardcode aspect ratio */ - aspect = stream->public.timing.aspect_ratio; - -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 00958bd..a17e7bc 100644 ---- a/drivers/gpu/drm/amd/display/dc/dc_hw_types.h -+++ b/drivers/gpu/drm/amd/display/dc/dc_hw_types.h -@@ -444,7 +444,11 @@ enum dc_color_space { - COLOR_SPACE_YCBCR601, - COLOR_SPACE_YCBCR709, - COLOR_SPACE_YCBCR601_LIMITED, -- COLOR_SPACE_YCBCR709_LIMITED -+ COLOR_SPACE_YCBCR709_LIMITED, -+ COLOR_SPACE_2020_RGB_FULLRANGE, -+ COLOR_SPACE_2020_RGB_LIMITEDRANGE, -+ COLOR_SPACE_2020_YCBCR, -+ COLOR_SPACE_ADOBERGB, - }; - - enum dc_quantization_range { -diff --git a/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c b/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c -index ee393a1..e9fd83e 100644 ---- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c -+++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c -@@ -594,39 +594,88 @@ static bool dce110_translate_regamma_to_hw_format(const struct dc_transfer_func - struct fixed31_32 y3_max; - - int32_t segment_start, segment_end; -- uint32_t hw_points, start_index; -- uint32_t i, j; -+ uint32_t i, j, k, seg_distr[16], increment, start_index; -+ uint32_t hw_points = 0; - - memset(regamma_params, 0, sizeof(struct pwl_params)); - - if (output_tf->tf == TRANSFER_FUNCTION_PQ) { -- /* 16 segments x 16 points -+ /* 16 segments - * segments are from 2^-11 to 2^5 - */ - segment_start = -11; - segment_end = 5; - -+ seg_distr[0] = 2; -+ seg_distr[1] = 2; -+ seg_distr[2] = 2; -+ seg_distr[3] = 2; -+ seg_distr[4] = 2; -+ seg_distr[5] = 2; -+ seg_distr[6] = 3; -+ seg_distr[7] = 4; -+ seg_distr[8] = 4; -+ seg_distr[9] = 4; -+ seg_distr[10] = 4; -+ seg_distr[11] = 5; -+ seg_distr[12] = 5; -+ seg_distr[13] = 5; -+ seg_distr[14] = 5; -+ seg_distr[15] = 5; -+ - } else { -- /* 10 segments x 16 points -+ /* 10 segments - * segment is from 2^-10 to 2^0 - */ - segment_start = -10; - segment_end = 0; -+ -+ seg_distr[0] = 3; -+ seg_distr[1] = 4; -+ seg_distr[2] = 4; -+ seg_distr[3] = 4; -+ seg_distr[4] = 4; -+ seg_distr[5] = 4; -+ seg_distr[6] = 4; -+ seg_distr[7] = 4; -+ seg_distr[8] = 5; -+ seg_distr[9] = 5; -+ seg_distr[10] = -1; -+ seg_distr[11] = -1; -+ seg_distr[12] = -1; -+ seg_distr[13] = -1; -+ seg_distr[14] = -1; -+ seg_distr[15] = -1; -+ } -+ -+ for (k = 0; k < 16; k++) { -+ if (seg_distr[k] != -1) -+ hw_points += (1 << seg_distr[k]); - } - -- hw_points = (segment_end - segment_start) * 16; - j = 0; -- /* (segment + 25) * 32, every 2nd point */ -- start_index = (segment_start + 25) * 32; -- for (i = start_index; i <= 1025; i += 2) { -- if (j > hw_points) -- break; -- rgb_resulted[j].red = output_tf->tf_pts.red[i]; -- rgb_resulted[j].green = output_tf->tf_pts.green[i]; -- rgb_resulted[j].blue = output_tf->tf_pts.blue[i]; -- j++; -+ for (k = 0; k < (segment_end - segment_start); k++) { -+ increment = 32 / (1 << seg_distr[k]); -+ start_index = (segment_start + k + 25) * 32; -+ for (i = start_index; i < start_index + 32; i += increment) { -+ if (j == hw_points - 1) -+ break; -+ rgb_resulted[j].red = output_tf->tf_pts.red[i]; -+ rgb_resulted[j].green = output_tf->tf_pts.green[i]; -+ rgb_resulted[j].blue = output_tf->tf_pts.blue[i]; -+ j++; -+ } - } - -+ /* last point */ -+ start_index = (segment_end + 25) * 32; -+ rgb_resulted[hw_points - 1].red = -+ output_tf->tf_pts.red[start_index]; -+ rgb_resulted[hw_points - 1].green = -+ output_tf->tf_pts.green[start_index]; -+ rgb_resulted[hw_points - 1].blue = -+ output_tf->tf_pts.blue[start_index]; -+ - arr_points[0].x = dal_fixed31_32_pow(dal_fixed31_32_from_int(2), - dal_fixed31_32_from_int(segment_start)); - arr_points[1].x = dal_fixed31_32_pow(dal_fixed31_32_from_int(2), -@@ -677,11 +726,22 @@ static bool dce110_translate_regamma_to_hw_format(const struct dc_transfer_func - - regamma_params->hw_points_num = hw_points; - -- for (i = 0; i < segment_end - segment_start; i++) { -- regamma_params->arr_curve_points[i].offset = i * 16; -- regamma_params->arr_curve_points[i].segments_num = 4; -+ i = 1; -+ for (k = 0; k < 16 && i < 16; k++) { -+ if (seg_distr[k] != -1) { -+ regamma_params->arr_curve_points[k].segments_num = -+ seg_distr[k]; -+ regamma_params->arr_curve_points[i].offset = -+ regamma_params->arr_curve_points[k]. -+ offset + (1 << seg_distr[k]); -+ } -+ i++; - } - -+ if (seg_distr[k] != -1) -+ regamma_params->arr_curve_points[k].segments_num = -+ seg_distr[k]; -+ - struct pwl_result_data *rgb = rgb_resulted; - struct pwl_result_data *rgb_plus_1 = rgb_resulted + 1; - -diff --git a/drivers/gpu/drm/amd/display/dc/inc/hw/transform.h b/drivers/gpu/drm/amd/display/dc/inc/hw/transform.h -index ef743b7..a510d3f 100644 ---- a/drivers/gpu/drm/amd/display/dc/inc/hw/transform.h -+++ b/drivers/gpu/drm/amd/display/dc/inc/hw/transform.h -@@ -47,6 +47,17 @@ enum colorimetry { - COLORIMETRY_EXTENDED = 3 - }; - -+enum colorimetry_ext { -+ COLORIMETRYEX_XVYCC601 = 0, -+ COLORIMETRYEX_XVYCC709 = 1, -+ COLORIMETRYEX_SYCC601 = 2, -+ COLORIMETRYEX_ADOBEYCC601 = 3, -+ COLORIMETRYEX_ADOBERGB = 4, -+ COLORIMETRYEX_BT2020YCC = 5, -+ COLORIMETRYEX_BT2020RGBYCBCR = 6, -+ COLORIMETRYEX_RESERVED = 7 -+}; -+ - enum active_format_info { - ACTIVE_FORMAT_NO_DATA = 0, - ACTIVE_FORMAT_VALID = 1 --- -2.7.4 - |