This patch set introduces Freesync Panel Replay capability on DCN 3.1.4 and newer These patches are enabling panel replay in static screen use-cases. Other use cases will be added as they are ready *Please note that there is a bug I am seeing with these patches where there is a hang after the screen is idle for a few minutes. I am actively debugging this and will send an updated patch set once the fix is found The importance of Replay ************************ In some instances, the GPU is transmitting repeated frames to the sink without any updates or changes in the content. These repeat transmission are wasteful, resulting in power draw in different aspects of the system 1. DCN is fetching the frame of data from DF/UMC/DRAM. This memory traffic prevents power down of parts of this HW path. 2. GPU is transmitting pixel data to the display through the main link of the DisplayPort interface. This prevents power down of both the Source transmitter (TX) and the Sink receiver (RX) How it improves on PSR ************************ The concepts of utilizing replay is similar to PSR, but there is a benefit of: Source and Sink remaining synchronized which allows for - lower latency when switching from replay to live frames - enable the possibility of more use cases - easy control of the sink's refresh rate during replay Due to Source and Sink remaining timing synchronized, Replay can be activated in more UI scenarios. Regards, Bhawan Bhawanpreet Lakha (6): drm/amd/display: Add structs for Freesync Panel Replay drm/amd/display: Add Functions to enable Freesync Panel Replay drm/amd/display: Add Freesync Panel DM code drm/amd/display: Read replay data from sink drm/amd/display: Enable Replay for static screen use cases drm/amd/display: Get replay info from VSDB .../gpu/drm/amd/display/amdgpu_dm/Makefile | 2 +- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 56 +++ .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h | 14 + .../amd/display/amdgpu_dm/amdgpu_dm_crtc.c | 4 + .../amd/display/amdgpu_dm/amdgpu_dm_replay.c | 184 ++++++++ .../amd/display/amdgpu_dm/amdgpu_dm_replay.h | 46 ++ .../drm/amd/display/dc/core/dc_link_exports.c | 5 + drivers/gpu/drm/amd/display/dc/dc.h | 5 + drivers/gpu/drm/amd/display/dc/dc_dp_types.h | 29 ++ drivers/gpu/drm/amd/display/dc/dc_types.h | 41 ++ drivers/gpu/drm/amd/display/dc/dce/Makefile | 2 +- .../gpu/drm/amd/display/dc/dce/dmub_replay.c | 303 +++++++++++++ .../gpu/drm/amd/display/dc/dce/dmub_replay.h | 58 +++ .../drm/amd/display/dc/dcn31/dcn31_resource.c | 12 + .../amd/display/dc/dcn314/dcn314_resource.c | 12 + .../gpu/drm/amd/display/dc/inc/core_types.h | 19 + drivers/gpu/drm/amd/display/dc/inc/link.h | 14 + .../drm/amd/display/dc/link/link_factory.c | 7 + .../dc/link/protocols/link_dp_capability.c | 10 + .../link/protocols/link_edp_panel_control.c | 165 +++++++ .../link/protocols/link_edp_panel_control.h | 8 + .../gpu/drm/amd/display/dmub/inc/dmub_cmd.h | 408 ++++++++++++++++++ .../gpu/drm/amd/display/include/dpcd_defs.h | 4 +- .../amd/display/modules/power/power_helpers.c | 5 + .../amd/display/modules/power/power_helpers.h | 2 + drivers/gpu/drm/amd/include/amd_shared.h | 2 + 26 files changed, 1414 insertions(+), 3 deletions(-) create mode 100644 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_replay.c create mode 100644 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_replay.h create mode 100644 drivers/gpu/drm/amd/display/dc/dce/dmub_replay.c create mode 100644 drivers/gpu/drm/amd/display/dc/dce/dmub_replay.h -- 2.25.1