summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTony Cheng <tony.cheng@amd.com>2017-01-14 20:36:14 -0500
committerAlex Deucher <alexander.deucher@amd.com>2017-09-26 17:10:26 -0400
commit6e4d6beec6dae279ec7ac27c9034b2208898f382 (patch)
treeb29763c6c62c8ee0e9255f9a4cb460c28f65b001
parent6235b23cb92ba5bf30430400b216ea2114afe777 (diff)
downloadlinux-stable-6e4d6beec6dae279ec7ac27c9034b2208898f382.tar.gz
linux-stable-6e4d6beec6dae279ec7ac27c9034b2208898f382.tar.bz2
linux-stable-6e4d6beec6dae279ec7ac27c9034b2208898f382.zip
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>
-rw-r--r--drivers/gpu/drm/amd/display/dc/core/dc_resource.c124
-rw-r--r--drivers/gpu/drm/amd/display/include/hw_sequencer_types.h23
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 6037ee25598c..fe79a2890247 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 f99a03266149..6f0475c25566 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