diff options
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.patch | 259 |
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 + |