Как пришлось решить схожую проблему с Freesync https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux...Открытый драйвер AMD поддерживает Freesync на DP и HDMI дисплеях:
/**
* amdgpu_dm_update_freesync_caps - Update Freesync capabilities
*
* @connector: Connector to query.
* @edid: EDID from monitor
*
* Amdgpu supports Freesync in DP and HDMI displays, and it is required to keep
* track of some of the display information in the internal data struct used by
* amdgpu_dm. This function checks which type of connector we need to set the
* FreeSync parameters.
*/
Вот код для HDMI https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux...
} else if (edid && sink->sink_signal == SIGNAL_TYPE_HDMI_TYPE_A) {
i = parse_hdmi_amd_vsdb(amdgpu_dm_connector, edid, &vsdb_info);
if (i >= 0 && vsdb_info.freesync_supported) {
timing = &edid->detailed_timings[i];
data = &timing->data.other_data; amdgpu_dm_connector->min_vfreq = vsdb_info.min_refresh_rate_hz;
amdgpu_dm_connector->max_vfreq = vsdb_info.max_refresh_rate_hz;
if (amdgpu_dm_connector->max_vfreq - amdgpu_dm_connector->min_vfreq > 10)
freesync_capable = true;
connector->display_info.monitor_range.min_vfreq = vsdb_info.min_refresh_rate_hz;
connector->display_info.monitor_range.max_vfreq = vsdb_info.max_refresh_rate_hz;
}
}
Если копнуть глубже, то parse_hdmi_amd_vsdb() вызывает
static bool parse_edid_cea_dmub(struct amdgpu_display_manager *dm,
u8 *edid_ext, int len,
struct amdgpu_hdmi_vsdb_info *vsdb_info)
{
int i; /* send extension block to DMCU for parsing */
for (i = 0; i < len; i += 8) {
/* send 8 bytes a time */
if (!dm_edid_parser_send_cea(dm, i, len, &edid_ext[i], 8, vsdb_info))
return false;
}
return vsdb_info->freesync_supported;
}
То есть код для определения параметров исполняет Display Management Control Unit (DMCU) - сопроцессор видеоконтроллера, этот код закрыт и находится в фирмвари. Таким образом требования HDMI консорциума выполняются и поддержка Freesync обеспечивается в открытом драйвере.
Проблема касается старых карт серии Polaris https://www.reddit.com/r/linux_gaming/comments/upc1lx/psa_hd.../
где у AMD нет возможности закрыть код в фирмвари, потому пользователям приходится самостоятельно патчить драйвер.