This patch series tackles a few things: - Fixes VRR not detected if monitor uses GTF flag for ranges instead of Range Limits Only - Detects if AMD vsdb carries a wider VRR range and uses it instead - DP->HDMI PCON changes which includes a module property to override PCON ID check - Parses HDMI gaming features in generic drm - Reintroduces proper HF-VSIF and VTEM info packets - Adds support for Auto Low Latency Mode - Adds support for HDMI VRR
VRR range fixes are simple and fix VRR support for many monitors. They close about 5 issues on the amdgpu issue tracker. Adaptive Sync over PCON is only available as FreeSync over HDMI. TVs which do not support FreeSync, do not have working VRR with DP -> HDMI 2.1 adapters even though adapters will take care of HDMI VRR info packets. I myself validated these changes with my Samsung S95B + Bernhard validated on LG C4 + FreeSync-less Sony Bravia 8. I used Alienware AW3423DWF that only has HDMI 2.0 to check that FreeSync still triggers properly for "older" hardware For missing VRRmax or VRRmax == 0, the upper boundary is the currently selected video mode refresh rate. I wasn't sure how best to implement it but ended up on a great solution. We first check if maybe there is a VRR range in AMD vsdb. If not, rely on limitation of base refresh rate in VTEM vsif. More history on previous shape of HF-VSIF and VTEM in their respective patches but the info packets were previously included in the driver code. HF-VSIF was improperly handled and VTEM doesn't seem to have been plumbed as it had no use before. I recoded these and this code should be much easier to understand and maintain. ALLM support uses the info from EDID to determine if ALLM is supported by sink and if that's the case, always signals for ALLM to be enabled. In PC use, be it for gaming, desktop use, work etc. we always want the lowest latency and less processing + possibly higher available refresh rates when gaming mode is turned on. HDMI VRR support relies on sending VTEM info packet in place of FreeSync info packets. Though VTEM has it's own place in the info packet pipeline, I didn't touch it as it already replaces FreeSync info packets. If there's a need to change this, please let me know for v2. Both features were tested and work just like they were intended to. Gaming mode is automatically triggered and HDMI VRR is used in place of FreeSync (if available). This HDMI VRR preference actually fixes VRR-induced flickering on many TVs (S95B in my case) with somehow subpar FreeSync implementation. If you don't agree with this preference, I can add a module setting that will let users control this behavior. For example, FreeSync would be preferred by default, but amdgpu.prefer_hdmi_vrr=true would change that. I still think it's better to not force users to search for solutions manually especially since it seems like DP and eDP don't save info about FreeSync version and completely rely on basic VRR support. This would then be mirrored. There's still an issue with some TVs behaving like a mode change is happening when VRR is triggered and I'd like to maybe tackle this too. When using HDMI through PCON, VRR is always active, like it's in VRR_STATE_ACTIVE_FIXED mode. This makes my TV much nicer to use and replication this behavior would be worthwhile IMO. Everything in this patch series has been based on already public code/knowledge or trying things out until they work/break. This patch series supersedes previous patches/series: https://lore.kernel.org/amd-gfx/[email protected]/ https://lore.kernel.org/amd-gfx/[email protected]/ https://lore.kernel.org/amd-gfx/[email protected]/ Tomasz Pakuła (17): drm/amd/display: Return if DisplayID not found in parse_amd_vsdb() drm/amd/display: Refactor amdgpu_dm_update_freesync_caps() drm/amd/display: Check for VRR range in CEA AMD vsdb drm/amd/display: Use bigger VRR range if found in AMD vsdb drm/amd/display: Refactor PCON VRR compatibility check drm/amd/display: Add PCON VRR ID check override drm/amd/display: Add CH7218 PCON ID drm/edid: Parse more info from HDMI Forum vsdb drm/amd/display: Rename PCON adaptive sync types drm/amd/display: Enable HDMI VRR over PCON drm/amd/display: Support HDMI VRRmax=0 drm/amd/display: Build HDMI vsif in correct slot drm/amd/display: Save HDMI gaming info to edid caps drm/amd/display: Restore ALLM support in HDMI vsif drm/amd/display: Trigger ALLM if it's available drm/amd/display: Reintroduce VTEM info frame drm/amd/display: Enable HDMI VRR .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 206 +++++++++--- .../amd/display/amdgpu_dm/amdgpu_dm_helpers.c | 49 ++- .../gpu/drm/amd/display/dc/core/dc_resource.c | 4 +- drivers/gpu/drm/amd/display/dc/dc.h | 1 + drivers/gpu/drm/amd/display/dc/dc_types.h | 7 +- drivers/gpu/drm/amd/display/dc/dm_helpers.h | 2 +- .../amd/display/include/ddc_service_types.h | 1 + .../amd/display/modules/freesync/freesync.c | 4 + .../amd/display/modules/inc/mod_info_packet.h | 17 +- .../display/modules/info_packet/info_packet.c | 295 ++++++++++++------ drivers/gpu/drm/amd/include/amd_shared.h | 6 + drivers/gpu/drm/drm_edid.c | 41 ++- include/drm/drm_connector.h | 47 +++ 13 files changed, 489 insertions(+), 191 deletions(-) -- 2.52.0
