aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0151-drm-amd-display-remove-hw_info_frame.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0151-drm-amd-display-remove-hw_info_frame.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0151-drm-amd-display-remove-hw_info_frame.patch259
1 files changed, 259 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0151-drm-amd-display-remove-hw_info_frame.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0151-drm-amd-display-remove-hw_info_frame.patch
new file mode 100644
index 00000000..6393fef6
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/0151-drm-amd-display-remove-hw_info_frame.patch
@@ -0,0 +1,259 @@
+From 10d0e84ed32c446652542046507bf5ba22504cd9 Mon Sep 17 00:00:00 2001
+From: Tony Cheng <tony.cheng@amd.com>
+Date: Sat, 14 Jan 2017 20:36:14 -0500
+Subject: [PATCH 0151/4131] drm/amd/display: remove hw_info_frame
+
+- construct using encoder_info_frame directly
+
+Signed-off-by: Tony Cheng <tony.cheng@amd.com>
+Reviewed-by: Harry Wentland <Harry.Wentland@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/display/dc/core/dc_resource.c | 124 +++++++--------------
+ .../drm/amd/display/include/hw_sequencer_types.h | 23 ----
+ 2 files changed, 40 insertions(+), 107 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 6037ee2..fe79a28 100644
+--- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
++++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
+@@ -1211,70 +1211,27 @@ void validate_guaranteed_copy_streams(
+ }
+ }
+
+-static void translate_info_frame(const struct hw_info_frame *hw_info_frame,
+- struct encoder_info_frame *encoder_info_frame)
++static void patch_gamut_packet_checksum(
++ struct encoder_info_packet *gamut_packet)
+ {
+- memset(
+- encoder_info_frame, 0, sizeof(struct encoder_info_frame));
+-
+ /* For gamut we recalc checksum */
+- if (hw_info_frame->gamut_packet.valid) {
++ if (gamut_packet->valid) {
+ uint8_t chk_sum = 0;
+ uint8_t *ptr;
+ uint8_t i;
+
+- memmove(
+- &encoder_info_frame->gamut,
+- &hw_info_frame->gamut_packet,
+- sizeof(struct hw_info_packet));
+-
+ /*start of the Gamut data. */
+- ptr = &encoder_info_frame->gamut.sb[3];
++ ptr = &gamut_packet->sb[3];
+
+- for (i = 0; i <= encoder_info_frame->gamut.sb[1]; i++)
++ for (i = 0; i <= gamut_packet->sb[1]; i++)
+ chk_sum += ptr[i];
+
+- encoder_info_frame->gamut.sb[2] = (uint8_t) (0x100 - chk_sum);
+- }
+-
+- if (hw_info_frame->avi_info_packet.valid) {
+- memmove(
+- &encoder_info_frame->avi,
+- &hw_info_frame->avi_info_packet,
+- sizeof(struct hw_info_packet));
+- }
+-
+- if (hw_info_frame->vendor_info_packet.valid) {
+- memmove(
+- &encoder_info_frame->vendor,
+- &hw_info_frame->vendor_info_packet,
+- sizeof(struct hw_info_packet));
+- }
+-
+- if (hw_info_frame->spd_packet.valid) {
+- memmove(
+- &encoder_info_frame->spd,
+- &hw_info_frame->spd_packet,
+- sizeof(struct hw_info_packet));
+- }
+-
+- if (hw_info_frame->vsc_packet.valid) {
+- memmove(
+- &encoder_info_frame->vsc,
+- &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));
++ gamut_packet->sb[2] = (uint8_t) (0x100 - chk_sum);
+ }
+ }
+
+ static void set_avi_info_frame(
+- struct hw_info_packet *info_packet,
++ struct encoder_info_packet *info_packet,
+ struct pipe_ctx *pipe_ctx)
+ {
+ struct core_stream *stream = pipe_ctx->stream;
+@@ -1288,9 +1245,6 @@ static void set_avi_info_frame(
+ uint8_t *check_sum = NULL;
+ uint8_t byte_index = 0;
+
+- if (info_packet == NULL)
+- return;
+-
+ color_space = pipe_ctx->stream->public.output_color_space;
+
+ /* Initialize header */
+@@ -1458,8 +1412,9 @@ static void set_avi_info_frame(
+ info_packet->valid = true;
+ }
+
+-static void set_vendor_info_packet(struct core_stream *stream,
+- struct hw_info_packet *info_packet)
++static void set_vendor_info_packet(
++ struct encoder_info_packet *info_packet,
++ struct core_stream *stream)
+ {
+ uint32_t length = 0;
+ bool hdmi_vic_mode = false;
+@@ -1467,9 +1422,6 @@ static void set_vendor_info_packet(struct core_stream *stream,
+ uint32_t i = 0;
+ enum dc_timing_3d_format format;
+
+- ASSERT_CRITICAL(stream != NULL);
+- ASSERT_CRITICAL(info_packet != NULL);
+-
+ format = stream->public.timing.timing_3d_format;
+
+ /* Can be different depending on packet content */
+@@ -1567,8 +1519,9 @@ static void set_vendor_info_packet(struct core_stream *stream,
+ info_packet->valid = true;
+ }
+
+-static void set_spd_info_packet(struct core_stream *stream,
+- struct hw_info_packet *info_packet)
++static void set_spd_info_packet(
++ struct encoder_info_packet *info_packet,
++ struct core_stream *stream)
+ {
+ /* SPD info packet for FreeSync */
+
+@@ -1688,9 +1641,9 @@ static void set_spd_info_packet(struct core_stream *stream,
+ }
+
+ static void set_hdr_static_info_packet(
++ struct encoder_info_packet *info_packet,
+ struct core_surface *surface,
+- struct core_stream *stream,
+- struct hw_info_packet *info_packet)
++ struct core_stream *stream)
+ {
+ uint16_t i = 0;
+ enum signal_type signal = stream->signal;
+@@ -1791,8 +1744,9 @@ static void set_hdr_static_info_packet(
+ }
+ }
+
+-static void set_vsc_info_packet(struct core_stream *stream,
+- struct hw_info_packet *info_packet)
++static void set_vsc_info_packet(
++ struct encoder_info_packet *info_packet,
++ struct core_stream *stream)
+ {
+ unsigned int vscPacketRevision = 0;
+ unsigned int i;
+@@ -1894,36 +1848,38 @@ struct clock_source *dc_resource_find_first_free_pll(
+ void resource_build_info_frame(struct pipe_ctx *pipe_ctx)
+ {
+ enum signal_type signal = SIGNAL_TYPE_NONE;
+- struct hw_info_frame info_frame = { { 0 } };
++ struct encoder_info_frame *info = &pipe_ctx->encoder_info_frame;
+
+ /* default all packets to invalid */
+- info_frame.avi_info_packet.valid = false;
+- info_frame.gamut_packet.valid = false;
+- 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;
++ info->avi.valid = false;
++ info->gamut.valid = false;
++ info->vendor.valid = false;
++ info->hdrsmd.valid = false;
++ info->vsc.valid = false;
+
+ signal = pipe_ctx->stream->signal;
+
+ /* HDMi and DP have different info packets*/
+ if (dc_is_hdmi_signal(signal)) {
+- set_avi_info_frame(
+- &info_frame.avi_info_packet, 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);
++ set_avi_info_frame(&info->avi, pipe_ctx);
++
++ set_vendor_info_packet(&info->vendor, pipe_ctx->stream);
++
++ set_spd_info_packet(&info->spd, pipe_ctx->stream);
++
++ set_hdr_static_info_packet(&info->hdrsmd,
++ pipe_ctx->surface, pipe_ctx->stream);
++
+ } 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);
++ set_vsc_info_packet(&info->vsc, pipe_ctx->stream);
++
++ set_spd_info_packet(&info->spd, pipe_ctx->stream);
++
++ set_hdr_static_info_packet(&info->hdrsmd,
++ pipe_ctx->surface, pipe_ctx->stream);
+ }
+
+- translate_info_frame(&info_frame,
+- &pipe_ctx->encoder_info_frame);
++ patch_gamut_packet_checksum(&info->gamut);
+ }
+
+ enum dc_status resource_map_clock_resources(
+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 f99a032..6f0475c 100644
+--- a/drivers/gpu/drm/amd/display/include/hw_sequencer_types.h
++++ b/drivers/gpu/drm/amd/display/include/hw_sequencer_types.h
+@@ -40,27 +40,4 @@ struct drr_params {
+ uint32_t vertical_total_max;
+ };
+
+-/* TODO hw_info_frame and hw_info_packet structures are same as in encoder
+- * merge it*/
+-struct hw_info_packet {
+- bool valid;
+- uint8_t hb0;
+- uint8_t hb1;
+- uint8_t hb2;
+- uint8_t hb3;
+- uint8_t sb[32];
+-};
+-
+-struct hw_info_frame {
+- /* Auxiliary Video Information */
+- struct hw_info_packet avi_info_packet;
+- struct hw_info_packet gamut_packet;
+- struct hw_info_packet vendor_info_packet;
+- /* Source Product Description */
+- struct hw_info_packet spd_packet;
+- /* Video Stream Configuration */
+- struct hw_info_packet vsc_packet;
+- struct hw_info_packet hdrsmd_packet;
+-};
+-
+ #endif
+--
+2.7.4
+