Commit 4cda3243 authored by Max.Tseng's avatar Max.Tseng Committed by Alex Deucher

drm/amd/display: Add flag for building infopacket

[why]
Add flag to build infopacket in SDP v1.3 format
Tested-by: default avatarDaniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: default avatarMax.Tseng <Max.Tseng@amd.com>
Reviewed-by: default avatarAnthony Koo <Anthony.Koo@amd.com>
Acked-by: default avatarRodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent e1f4328f
...@@ -7763,6 +7763,7 @@ static void update_freesync_state_on_stream( ...@@ -7763,6 +7763,7 @@ static void update_freesync_state_on_stream(
struct amdgpu_device *adev = dm->adev; struct amdgpu_device *adev = dm->adev;
struct amdgpu_crtc *acrtc = to_amdgpu_crtc(new_crtc_state->base.crtc); struct amdgpu_crtc *acrtc = to_amdgpu_crtc(new_crtc_state->base.crtc);
unsigned long flags; unsigned long flags;
bool pack_sdp_v1_3 = false;
if (!new_stream) if (!new_stream)
return; return;
...@@ -7804,7 +7805,8 @@ static void update_freesync_state_on_stream( ...@@ -7804,7 +7805,8 @@ static void update_freesync_state_on_stream(
&vrr_params, &vrr_params,
PACKET_TYPE_VRR, PACKET_TYPE_VRR,
TRANSFER_FUNC_UNKNOWN, TRANSFER_FUNC_UNKNOWN,
&vrr_infopacket); &vrr_infopacket,
pack_sdp_v1_3);
new_crtc_state->freesync_timing_changed |= new_crtc_state->freesync_timing_changed |=
(memcmp(&acrtc->dm_irq_params.vrr_params.adjust, (memcmp(&acrtc->dm_irq_params.vrr_params.adjust,
......
...@@ -903,12 +903,31 @@ static void build_vrr_infopacket_v3(enum signal_type signal, ...@@ -903,12 +903,31 @@ static void build_vrr_infopacket_v3(enum signal_type signal,
infopacket->valid = true; infopacket->valid = true;
} }
static void build_vrr_infopacket_sdp_v1_3(enum vrr_packet_type packet_type,
struct dc_info_packet *infopacket)
{
uint8_t idx = 0, size = 0;
size = ((packet_type == PACKET_TYPE_FS_V1) ? 0x08 :
(packet_type == PACKET_TYPE_FS_V3) ? 0x10 :
0x09);
for (idx = infopacket->hb2; idx > 1; idx--) // Data Byte Count: 0x1B
infopacket->sb[idx] = infopacket->sb[idx-1];
infopacket->sb[1] = size; // Length
infopacket->sb[0] = (infopacket->hb3 >> 2) & 0x3F;//Version
infopacket->hb3 = (0x13 << 2); // Header,SDP 1.3
infopacket->hb2 = 0x1D;
}
void mod_freesync_build_vrr_infopacket(struct mod_freesync *mod_freesync, void mod_freesync_build_vrr_infopacket(struct mod_freesync *mod_freesync,
const struct dc_stream_state *stream, const struct dc_stream_state *stream,
const struct mod_vrr_params *vrr, const struct mod_vrr_params *vrr,
enum vrr_packet_type packet_type, enum vrr_packet_type packet_type,
enum color_transfer_func app_tf, enum color_transfer_func app_tf,
struct dc_info_packet *infopacket) struct dc_info_packet *infopacket,
bool pack_sdp_v1_3)
{ {
/* SPD info packet for FreeSync /* SPD info packet for FreeSync
* VTEM info packet for HdmiVRR * VTEM info packet for HdmiVRR
...@@ -941,6 +960,12 @@ void mod_freesync_build_vrr_infopacket(struct mod_freesync *mod_freesync, ...@@ -941,6 +960,12 @@ void mod_freesync_build_vrr_infopacket(struct mod_freesync *mod_freesync,
default: default:
build_vrr_infopacket_v1(stream->signal, vrr, infopacket); build_vrr_infopacket_v1(stream->signal, vrr, infopacket);
} }
if (true == pack_sdp_v1_3 &&
true == dc_is_dp_signal(stream->signal) &&
packet_type != PACKET_TYPE_VRR &&
packet_type != PACKET_TYPE_VTEM)
build_vrr_infopacket_sdp_v1_3(packet_type, infopacket);
} }
void mod_freesync_build_vrr_params(struct mod_freesync *mod_freesync, void mod_freesync_build_vrr_params(struct mod_freesync *mod_freesync,
...@@ -1304,4 +1329,3 @@ bool mod_freesync_is_valid_range(uint32_t min_refresh_cap_in_uhz, ...@@ -1304,4 +1329,3 @@ bool mod_freesync_is_valid_range(uint32_t min_refresh_cap_in_uhz,
return true; return true;
} }
...@@ -150,7 +150,8 @@ void mod_freesync_build_vrr_infopacket(struct mod_freesync *mod_freesync, ...@@ -150,7 +150,8 @@ void mod_freesync_build_vrr_infopacket(struct mod_freesync *mod_freesync,
const struct mod_vrr_params *vrr, const struct mod_vrr_params *vrr,
enum vrr_packet_type packet_type, enum vrr_packet_type packet_type,
enum color_transfer_func app_tf, enum color_transfer_func app_tf,
struct dc_info_packet *infopacket); struct dc_info_packet *infopacket,
bool pack_sdp_v1_3);
void mod_freesync_build_vrr_params(struct mod_freesync *mod_freesync, void mod_freesync_build_vrr_params(struct mod_freesync *mod_freesync,
const struct dc_stream_state *stream, const struct dc_stream_state *stream,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment