drm/amd/display: Add flag for building infopacket
[why] Add flag to build infopacket in SDP v1.3 format Tested-by: Daniel Wheeler <daniel.wheeler@amd.com> Signed-off-by: Max.Tseng <Max.Tseng@amd.com> Reviewed-by: Anthony Koo <Anthony.Koo@amd.com> Acked-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
@@ -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(
|
|||||||
&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,
|
|||||||
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,
|
|||||||
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,
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user