Commit 9a4c9de4 authored by Ahmad Othman's avatar Ahmad Othman Committed by Alex Deucher
Browse files

drm/amd/display: Adding VTEM to dc



[Why]
Video Timing Extended Metadata packet (VTEM) is required for features
like VRR and FVA

[How]
Adding support for VTEM transmission to stream encoders in DCN20 and DCN30
as part of FVA support

Acked-by: default avatarAlan Liu <HaoPing.Liu@amd.com>
Signed-off-by: default avatarAhmad Othman <ahmad.othman@amd.com>
Tested-by: default avatarDaniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 28fdd0c3
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -2661,6 +2661,9 @@ static void copy_stream_update_to_stream(struct dc *dc,
	if (update->hfvsif_infopacket)
		stream->hfvsif_infopacket = *update->hfvsif_infopacket;

	if (update->vtem_infopacket)
		stream->vtem_infopacket = *update->vtem_infopacket;

	if (update->vsc_infopacket)
		stream->vsc_infopacket = *update->vsc_infopacket;

@@ -2736,7 +2739,8 @@ static void commit_planes_do_stream_update(struct dc *dc,
					stream_update->vrr_infopacket ||
					stream_update->vsc_infopacket ||
					stream_update->vsp_infopacket ||
					stream_update->hfvsif_infopacket) {
					stream_update->hfvsif_infopacket ||
					stream_update->vtem_infopacket) {
				resource_build_info_frame(pipe_ctx);
				dc->hwss.update_info_frame(pipe_ctx);

+13 −1
Original line number Diff line number Diff line
@@ -2816,6 +2816,17 @@ static void set_hfvs_info_packet(
	*info_packet = stream->hfvsif_infopacket;
}


static void set_vtem_info_packet(
		struct dc_info_packet *info_packet,
		struct dc_stream_state *stream)
{
	if (!stream->vtem_infopacket.valid)
		return;

	*info_packet = stream->vtem_infopacket;
}

void dc_resource_state_destruct(struct dc_state *context)
{
	int i, j;
@@ -2896,7 +2907,7 @@ void resource_build_info_frame(struct pipe_ctx *pipe_ctx)
	info->hdrsmd.valid = false;
	info->vsc.valid = false;
	info->hfvsif.valid = false;

	info->vtem.valid = false;
	signal = pipe_ctx->stream->signal;

	/* HDMi and DP have different info packets*/
@@ -2905,6 +2916,7 @@ void resource_build_info_frame(struct pipe_ctx *pipe_ctx)

		set_vendor_info_packet(&info->vendor, pipe_ctx->stream);
		set_hfvs_info_packet(&info->hfvsif, pipe_ctx->stream);
		set_vtem_info_packet(&info->vtem, pipe_ctx->stream);

		set_spd_info_packet(&info->spd, pipe_ctx->stream);

+2 −0
Original line number Diff line number Diff line
@@ -181,6 +181,7 @@ struct dc_stream_state {
	struct dc_info_packet vsc_infopacket;
	struct dc_info_packet vsp_infopacket;
	struct dc_info_packet hfvsif_infopacket;
	struct dc_info_packet vtem_infopacket;
	uint8_t dsc_packed_pps[128];
	struct rect src; /* composition area */
	struct rect dst; /* stream addressable area */
@@ -298,6 +299,7 @@ struct dc_stream_update {
	struct dc_info_packet *vsc_infopacket;
	struct dc_info_packet *vsp_infopacket;
	struct dc_info_packet *hfvsif_infopacket;
	struct dc_info_packet *vtem_infopacket;
	bool *dpms_off;
	bool integer_scaling_update;
	bool *allow_freesync;
+1 −0
Original line number Diff line number Diff line
@@ -159,6 +159,7 @@ static void enc2_stream_encoder_update_hdmi_info_packets(
	enc2_update_hdmi_info_packet(enc1, 3, &info_frame->vendor);
	enc2_update_hdmi_info_packet(enc1, 4, &info_frame->spd);
	enc2_update_hdmi_info_packet(enc1, 5, &info_frame->hdrsmd);
	enc2_update_hdmi_info_packet(enc1, 6, &info_frame->vtem);
}

static void enc2_stream_encoder_stop_hdmi_info_packets(
+1 −0
Original line number Diff line number Diff line
@@ -212,6 +212,7 @@ void enc3_stream_encoder_update_hdmi_info_packets(
	enc3_update_hdmi_info_packet(enc1, 1, &info_frame->vendor);
	enc3_update_hdmi_info_packet(enc1, 3, &info_frame->spd);
	enc3_update_hdmi_info_packet(enc1, 4, &info_frame->hdrsmd);
	enc3_update_hdmi_info_packet(enc1, 6, &info_frame->vtem);
}

void enc3_stream_encoder_stop_hdmi_info_packets(
Loading