aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/0103-drm-amd-display-DAL3-HDR10-Infoframe-encoding.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/0103-drm-amd-display-DAL3-HDR10-Infoframe-encoding.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/0103-drm-amd-display-DAL3-HDR10-Infoframe-encoding.patch472
1 files changed, 0 insertions, 472 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/0103-drm-amd-display-DAL3-HDR10-Infoframe-encoding.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/0103-drm-amd-display-DAL3-HDR10-Infoframe-encoding.patch
deleted file mode 100644
index 87fdc3d3..00000000
--- a/common/recipes-kernel/linux/linux-yocto-4.14.71/0103-drm-amd-display-DAL3-HDR10-Infoframe-encoding.patch
+++ /dev/null
@@ -1,472 +0,0 @@
-From 0254325ac3a0bfd6013577871b7224e5f4e4abec Mon Sep 17 00:00:00 2001
-From: Andrew Wong <andrew.wong1@amd.com>
-Date: Thu, 22 Dec 2016 15:41:30 -0500
-Subject: [PATCH 0103/4131] drm/amd/display: DAL3: HDR10 Infoframe encoding
-
-- Add HDR metadata struct
-- Add register programming calculations
-- Added HDR metadata to surface and update_surface
-- Add HDR info packet programming for DP port
-
-Signed-off-by: Andrew Wong <andrew.wong1@amd.com>
-Reviewed-by: Aric Cyr <Aric.Cyr@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 | 7 ++
- drivers/gpu/drm/amd/display/dc/core/dc_resource.c | 115 ++++++++++++++++++++-
- drivers/gpu/drm/amd/display/dc/core/dc_stream.c | 1 -
- drivers/gpu/drm/amd/display/dc/core/dc_surface.c | 2 +
- drivers/gpu/drm/amd/display/dc/dc.h | 23 ++++-
- .../drm/amd/display/dc/dce/dce_stream_encoder.c | 20 +++-
- .../gpu/drm/amd/display/dc/inc/hw/stream_encoder.h | 2 +
- .../drm/amd/display/include/hw_sequencer_types.h | 3 +-
- drivers/gpu/drm/amd/display/modules/color/color.c | 16 +--
- .../gpu/drm/amd/display/modules/inc/mod_color.h | 20 +---
- 10 files changed, 176 insertions(+), 33 deletions(-)
-
-diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c
-index 5e60640..e368d66 100644
---- a/drivers/gpu/drm/amd/display/dc/core/dc.c
-+++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
-@@ -1489,6 +1489,9 @@ void dc_update_surfaces_for_target(struct dc *dc, struct dc_surface_update *upda
- stream->public.out_transfer_func =
- updates[i].out_transfer_func;
- }
-+ if (updates[i].hdr_static_metadata)
-+ surface->public.hdr_static_ctx =
-+ *(updates[i].hdr_static_metadata);
- }
- }
-
-@@ -1522,6 +1525,10 @@ void dc_update_surfaces_for_target(struct dc *dc, struct dc_surface_update *upda
- }
- }
-
-+ if (updates[i].hdr_static_metadata) {
-+ resource_build_info_frame(pipe_ctx);
-+ core_dc->hwss.update_info_frame(pipe_ctx);
-+ }
- if (is_new_pipe_surface[j] ||
- updates[i].in_transfer_func)
- core_dc->hwss.set_input_transfer_func(
-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 386b3cc..2b08f5a 100644
---- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
-+++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
-@@ -32,7 +32,6 @@
- #include "timing_generator.h"
- #include "transform.h"
- #include "set_mode_types.h"
--
- #include "virtual/virtual_stream_encoder.h"
-
- #include "dce80/dce80_resource.h"
-@@ -1303,6 +1302,13 @@ static void translate_info_frame(const struct hw_info_frame *hw_info_frame,
- &hw_info_frame->vsc_packet,
- sizeof(struct hw_info_packet));
- }
-+
-+ if (hw_info_frame->hdrsmd_packet.valid) {
-+ memmove(
-+ &encoder_info_frame->hdrsmd,
-+ &hw_info_frame->hdrsmd_packet,
-+ sizeof(struct hw_info_packet));
-+ }
- }
-
- static void set_avi_info_frame(
-@@ -1720,6 +1726,108 @@ static void set_spd_info_packet(struct core_stream *stream,
- info_packet->valid = true;
- }
-
-+static void set_hdr_static_info_packet(
-+ struct core_surface *surface,
-+ struct core_stream *stream,
-+ struct hw_info_packet *info_packet)
-+{
-+ uint16_t i;
-+ enum signal_type signal = stream->signal;
-+
-+ if (!surface)
-+ return;
-+
-+ struct dc_hdr_static_metadata hdr_metadata =
-+ surface->public.hdr_static_ctx;
-+
-+ if (dc_is_hdmi_signal(signal)) {
-+ info_packet->valid = true;
-+
-+ info_packet->hb0 = 0x87;
-+ info_packet->hb1 = 0x01;
-+ info_packet->hb2 = 0x1A;
-+ i = 1;
-+ } else if (dc_is_dp_signal(signal)) {
-+ info_packet->valid = true;
-+
-+ info_packet->hb0 = 0x00;
-+ info_packet->hb1 = 0x87;
-+ info_packet->hb2 = 0x1D;
-+ info_packet->hb3 = (0x13 << 2);
-+ i = 2;
-+ }
-+
-+ uint32_t data;
-+
-+ data = hdr_metadata.is_hdr;
-+ info_packet->sb[i++] = data ? 0x02 : 0x00;
-+ info_packet->sb[i++] = 0x00;
-+
-+ data = hdr_metadata.chromaticity_green_x / 2;
-+ info_packet->sb[i++] = data & 0xFF;
-+ info_packet->sb[i++] = (data & 0xFF00) >> 8;
-+
-+ data = hdr_metadata.chromaticity_green_y / 2;
-+ info_packet->sb[i++] = data & 0xFF;
-+ info_packet->sb[i++] = (data & 0xFF00) >> 8;
-+
-+ data = hdr_metadata.chromaticity_blue_x / 2;
-+ info_packet->sb[i++] = data & 0xFF;
-+ info_packet->sb[i++] = (data & 0xFF00) >> 8;
-+
-+ data = hdr_metadata.chromaticity_blue_y / 2;
-+ info_packet->sb[i++] = data & 0xFF;
-+ info_packet->sb[i++] = (data & 0xFF00) >> 8;
-+
-+ data = hdr_metadata.chromaticity_red_x / 2;
-+ info_packet->sb[i++] = data & 0xFF;
-+ info_packet->sb[i++] = (data & 0xFF00) >> 8;
-+
-+ data = hdr_metadata.chromaticity_red_y / 2;
-+ info_packet->sb[i++] = data & 0xFF;
-+ info_packet->sb[i++] = (data & 0xFF00) >> 8;
-+
-+ data = hdr_metadata.chromaticity_white_point_x / 2;
-+ info_packet->sb[i++] = data & 0xFF;
-+ info_packet->sb[i++] = (data & 0xFF00) >> 8;
-+
-+ data = hdr_metadata.chromaticity_white_point_y / 2;
-+ info_packet->sb[i++] = data & 0xFF;
-+ info_packet->sb[i++] = (data & 0xFF00) >> 8;
-+
-+ data = hdr_metadata.max_luminance;
-+ info_packet->sb[i++] = data & 0xFF;
-+ info_packet->sb[i++] = (data & 0xFF00) >> 8;
-+
-+ data = hdr_metadata.min_luminance;
-+ info_packet->sb[i++] = data & 0xFF;
-+ info_packet->sb[i++] = (data & 0xFF00) >> 8;
-+
-+ data = hdr_metadata.maximum_content_light_level;
-+ info_packet->sb[i++] = data & 0xFF;
-+ info_packet->sb[i++] = (data & 0xFF00) >> 8;
-+
-+ data = hdr_metadata.maximum_frame_average_light_level;
-+ info_packet->sb[i++] = data & 0xFF;
-+ info_packet->sb[i++] = (data & 0xFF00) >> 8;
-+
-+ if (dc_is_hdmi_signal(signal)) {
-+ uint32_t checksum = 0;
-+
-+ checksum += info_packet->hb0;
-+ checksum += info_packet->hb1;
-+ checksum += info_packet->hb2;
-+
-+ for (i = 1; i <= info_packet->hb2; i++)
-+ checksum += info_packet->sb[i];
-+
-+ info_packet->sb[0] = 0x100 - checksum;
-+ } else if (dc_is_dp_signal(signal)) {
-+ info_packet->sb[0] = 0x01;
-+ info_packet->sb[1] = 0x1A;
-+ }
-+}
-+
- static void set_vsc_info_packet(struct core_stream *stream,
- struct hw_info_packet *info_packet)
- {
-@@ -1830,6 +1938,7 @@ void resource_build_info_frame(struct pipe_ctx *pipe_ctx)
- info_frame.vendor_info_packet.valid = false;
- info_frame.spd_packet.valid = false;
- info_frame.vsc_packet.valid = false;
-+ info_frame.hdrsmd_packet.valid = false;
-
- signal = pipe_ctx->stream->signal;
-
-@@ -1840,9 +1949,13 @@ void resource_build_info_frame(struct pipe_ctx *pipe_ctx)
- set_vendor_info_packet(
- pipe_ctx->stream, &info_frame.vendor_info_packet);
- set_spd_info_packet(pipe_ctx->stream, &info_frame.spd_packet);
-+ set_hdr_static_info_packet(pipe_ctx->surface,
-+ pipe_ctx->stream, &info_frame.hdrsmd_packet);
- } else if (dc_is_dp_signal(signal)) {
- set_vsc_info_packet(pipe_ctx->stream, &info_frame.vsc_packet);
- set_spd_info_packet(pipe_ctx->stream, &info_frame.spd_packet);
-+ set_hdr_static_info_packet(pipe_ctx->surface,
-+ pipe_ctx->stream, &info_frame.hdrsmd_packet);
- }
-
- translate_info_frame(&info_frame,
-diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_stream.c b/drivers/gpu/drm/amd/display/dc/core/dc_stream.c
-index 39a6124..cda67a7 100644
---- a/drivers/gpu/drm/amd/display/dc/core/dc_stream.c
-+++ b/drivers/gpu/drm/amd/display/dc/core/dc_stream.c
-@@ -82,7 +82,6 @@ static bool construct(struct core_stream *stream,
- stream->public.timing.flags.LTE_340MCSC_SCRAMBLE = dc_sink_data->edid_caps.lte_340mcsc_scramble;
-
- stream->status.link = &stream->sink->link->public;
--
- return true;
- }
-
-diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_surface.c b/drivers/gpu/drm/amd/display/dc/core/dc_surface.c
-index 6b4c75a..d962baa 100644
---- a/drivers/gpu/drm/amd/display/dc/core/dc_surface.c
-+++ b/drivers/gpu/drm/amd/display/dc/core/dc_surface.c
-@@ -66,6 +66,8 @@ struct transfer_func {
- static bool construct(struct dc_context *ctx, struct surface *surface)
- {
- surface->protected.ctx = ctx;
-+ memset(&surface->protected.public.hdr_static_ctx,
-+ 0, sizeof(struct dc_hdr_static_metadata));
- return true;
- }
-
-diff --git a/drivers/gpu/drm/amd/display/dc/dc.h b/drivers/gpu/drm/amd/display/dc/dc.h
-index 0ee6f41..ef9a697 100644
---- a/drivers/gpu/drm/amd/display/dc/dc.h
-+++ b/drivers/gpu/drm/amd/display/dc/dc.h
-@@ -186,6 +186,25 @@ enum {
- TRANSFER_FUNC_POINTS = 1025
- };
-
-+struct dc_hdr_static_metadata {
-+ bool is_hdr;
-+
-+ /* display chromaticities and white point in units of 0.00001 */
-+ unsigned int chromaticity_green_x;
-+ unsigned int chromaticity_green_y;
-+ unsigned int chromaticity_blue_x;
-+ unsigned int chromaticity_blue_y;
-+ unsigned int chromaticity_red_x;
-+ unsigned int chromaticity_red_y;
-+ unsigned int chromaticity_white_point_x;
-+ unsigned int chromaticity_white_point_y;
-+
-+ uint32_t min_luminance;
-+ uint32_t max_luminance;
-+ uint32_t maximum_content_light_level;
-+ uint32_t maximum_frame_average_light_level;
-+};
-+
- enum dc_transfer_func_type {
- TF_TYPE_PREDEFINED,
- TF_TYPE_DISTRIBUTED_POINTS,
-@@ -232,6 +251,8 @@ struct dc_surface {
- bool horizontal_mirror;
- enum plane_stereo_format stereo_format;
-
-+ struct dc_hdr_static_metadata hdr_static_ctx;
-+
- const struct dc_gamma *gamma_correction;
- const struct dc_transfer_func *in_transfer_func;
- };
-@@ -267,7 +288,7 @@ struct dc_surface_update {
- */
- /* gamma TO BE REMOVED */
- struct dc_gamma *gamma;
--
-+ struct dc_hdr_static_metadata *hdr_static_metadata;
- struct dc_transfer_func *in_transfer_func;
- struct dc_transfer_func *out_transfer_func;
-
-diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_stream_encoder.c b/drivers/gpu/drm/amd/display/dc/dce/dce_stream_encoder.c
-index b74a29b..82133ab 100644
---- a/drivers/gpu/drm/amd/display/dc/dce/dce_stream_encoder.c
-+++ b/drivers/gpu/drm/amd/display/dc/dce/dce_stream_encoder.c
-@@ -518,6 +518,7 @@ static void dce110_stream_encoder_update_hdmi_info_packets(
- dce110_update_hdmi_info_packet(enc110, 0, &info_frame->vendor);
- dce110_update_hdmi_info_packet(enc110, 1, &info_frame->gamut);
- dce110_update_hdmi_info_packet(enc110, 2, &info_frame->spd);
-+ dce110_update_hdmi_info_packet(enc110, 3, &info_frame->hdrsmd);
- }
-
- }
-@@ -554,16 +555,25 @@ static void dce110_stream_encoder_update_dp_info_packets(
- struct dce110_stream_encoder *enc110 = DCE110STRENC_FROM_STRENC(enc);
- uint32_t value = REG_READ(DP_SEC_CNTL);
-
-- if (info_frame->vsc.valid)
-- dce110_update_generic_info_packet(
-+ dce110_update_generic_info_packet(
-+ enc110,
-+ 0, /* packetIndex */
-+ &info_frame->vsc);
-+ dce110_update_generic_info_packet(
-+ enc110,
-+ 2, /* packetIndex */
-+ &info_frame->spd);
-+ dce110_update_generic_info_packet(
- enc110,
-- 0, /* packetIndex */
-- &info_frame->vsc);
-+ 3, /* packetIndex */
-+ &info_frame->hdrsmd);
-
- /* enable/disable transmission of packet(s).
- * If enabled, packet transmission begins on the next frame
- */
-- REG_UPDATE(DP_SEC_CNTL, DP_SEC_GSP0_ENABLE, info_frame->vsc.valid);
-+ REG_UPDATE(DP_SEC_CNTL, DP_SEC_GSP0_ENABLE, info_frame->vsc.valid);
-+ REG_UPDATE(DP_SEC_CNTL, DP_SEC_GSP2_ENABLE, info_frame->spd.valid);
-+ REG_UPDATE(DP_SEC_CNTL, DP_SEC_GSP3_ENABLE, info_frame->hdrsmd.valid);
-
- /* This bit is the master enable bit.
- * When enabling secondary stream engine,
-diff --git a/drivers/gpu/drm/amd/display/dc/inc/hw/stream_encoder.h b/drivers/gpu/drm/amd/display/dc/inc/hw/stream_encoder.h
-index 9caf2b3..8b4a304 100644
---- a/drivers/gpu/drm/amd/display/dc/inc/hw/stream_encoder.h
-+++ b/drivers/gpu/drm/amd/display/dc/inc/hw/stream_encoder.h
-@@ -31,6 +31,8 @@ struct encoder_info_frame {
- struct encoder_info_packet spd;
- /* video stream configuration */
- struct encoder_info_packet vsc;
-+ /* HDR Static MetaData */
-+ struct encoder_info_packet hdrsmd;
- };
-
- struct encoder_unblank_param {
-diff --git a/drivers/gpu/drm/amd/display/include/hw_sequencer_types.h b/drivers/gpu/drm/amd/display/include/hw_sequencer_types.h
-index 9a78097..6bbca1b 100644
---- a/drivers/gpu/drm/amd/display/include/hw_sequencer_types.h
-+++ b/drivers/gpu/drm/amd/display/include/hw_sequencer_types.h
-@@ -88,7 +88,7 @@ struct hw_info_packet {
- uint8_t hb1;
- uint8_t hb2;
- uint8_t hb3;
-- uint8_t sb[28];
-+ uint8_t sb[32];
- };
-
- struct hw_info_frame {
-@@ -100,6 +100,7 @@ struct hw_info_frame {
- struct hw_info_packet spd_packet;
- /* Video Stream Configuration */
- struct hw_info_packet vsc_packet;
-+ struct hw_info_packet hdrsmd_packet;
- };
-
- #endif
-diff --git a/drivers/gpu/drm/amd/display/modules/color/color.c b/drivers/gpu/drm/amd/display/modules/color/color.c
-index 5c578aec..599d9f9 100644
---- a/drivers/gpu/drm/amd/display/modules/color/color.c
-+++ b/drivers/gpu/drm/amd/display/modules/color/color.c
-@@ -74,7 +74,7 @@ struct color_state {
- struct color_gamut_data destination_gamut;
- enum color_transfer_func input_transfer_function;
- enum color_transfer_func output_transfer_function;
-- struct color_mastering_info mastering_info;
-+ struct dc_hdr_static_metadata mastering_info;
- };
-
- struct core_color {
-@@ -1970,7 +1970,7 @@ bool mod_color_set_white_point(struct mod_color *mod_color,
-
- bool mod_color_set_mastering_info(struct mod_color *mod_color,
- const struct dc_stream **streams, int num_streams,
-- struct color_mastering_info *mastering_info)
-+ const struct dc_hdr_static_metadata *mastering_info)
- {
- struct core_color *core_color = MOD_COLOR_TO_CORE(mod_color);
- unsigned int stream_index, sink_index;
-@@ -1980,14 +1980,14 @@ bool mod_color_set_mastering_info(struct mod_color *mod_color,
- streams[stream_index]->sink);
- memcpy(&core_color->state[sink_index].mastering_info,
- mastering_info,
-- sizeof(struct color_mastering_info));
-+ sizeof(struct dc_hdr_static_metadata));
- }
- return true;
- }
-
- bool mod_color_get_mastering_info(struct mod_color *mod_color,
- const struct dc_sink *sink,
-- struct color_mastering_info *mastering_info)
-+ struct dc_hdr_static_metadata *mastering_info)
- {
- struct core_color *core_color =
- MOD_COLOR_TO_CORE(mod_color);
-@@ -1995,7 +1995,7 @@ bool mod_color_get_mastering_info(struct mod_color *mod_color,
- unsigned int sink_index = sink_index_from_sink(core_color, sink);
-
- memcpy(mastering_info, &core_color->state[sink_index].mastering_info,
-- sizeof(struct color_mastering_info));
-+ sizeof(struct dc_hdr_static_metadata));
-
- return true;
- }
-@@ -2756,8 +2756,10 @@ bool mod_color_update_gamut_info(struct mod_color *mod_color,
- else
- output_tf->tf = TRANSFER_FUNCTION_SRGB;
- }
-+ /* 5. ---- POPULATE HDR METADATA ---- */
-+ core_color->state[sink_index].mastering_info.is_hdr = is_hdr;
-
-- /* 5. ---- TODO: UPDATE INFOPACKETS ---- */
-+ /* 6. ---- TODO: UPDATE INFOPACKETS ---- */
-
- if (!mod_color_update_gamut_to_stream(
- mod_color, streams, num_streams))
-@@ -2769,6 +2771,8 @@ bool mod_color_update_gamut_info(struct mod_color *mod_color,
- updates[0].gamma = core_color->state[sink_index].gamma;
- updates[0].in_transfer_func = input_tf;
- updates[0].out_transfer_func = output_tf;
-+ updates[0].hdr_static_metadata =
-+ &core_color->state[sink_index].mastering_info;
-
- dc_update_surfaces_for_target(core_color->dc, updates, 1, NULL);
-
-diff --git a/drivers/gpu/drm/amd/display/modules/inc/mod_color.h b/drivers/gpu/drm/amd/display/modules/inc/mod_color.h
-index 670b87fb..70349a8 100644
---- a/drivers/gpu/drm/amd/display/modules/inc/mod_color.h
-+++ b/drivers/gpu/drm/amd/display/modules/inc/mod_color.h
-@@ -87,22 +87,6 @@ enum hdr_tf_support_flag {
- smpte_st2084 = 0x04
- };
-
--struct color_mastering_info {
-- unsigned int chromaticity_green_x;
-- unsigned int chromaticity_green_y;
-- unsigned int chromaticity_blue_x;
-- unsigned int chromaticity_blue_y;
-- unsigned int chromaticity_red_x;
-- unsigned int chromaticity_red_y;
-- unsigned int chromaticity_white_point_x;
-- unsigned int chromaticity_white_point_y;
--
-- unsigned int min_luminance;
-- unsigned int max_luminance;
-- unsigned int maximum_content_light_level;
-- unsigned int maximum_frame_average_light_level;
--};
--
- struct mod_color {
- int dummy;
- };
-@@ -206,11 +190,11 @@ bool mod_color_get_user_enable(struct mod_color *mod_color,
-
- bool mod_color_set_mastering_info(struct mod_color *mod_color,
- const struct dc_stream **streams, int num_streams,
-- struct color_mastering_info *mastering_info);
-+ const struct dc_hdr_static_metadata *mastering_info);
-
- bool mod_color_get_mastering_info(struct mod_color *mod_color,
- const struct dc_sink *sink,
-- struct color_mastering_info *mastering_info);
-+ struct dc_hdr_static_metadata *mastering_info);
-
- bool mod_color_set_user_enable(struct mod_color *mod_color,
- const struct dc_stream **streams, int num_streams,
---
-2.7.4
-