From: Dennis Chan <dennis.c...@amd.com>

[why]
If Panel max link off frame count is low, it will cause low residency
for Replay, then Disabled timing sync check in Full screen Video Case.

Reviewed-by: Robin Chen <robin.c...@amd.com>
Acked-by: Hamza Mahfooz <hamza.mahf...@amd.com>
Signed-off-by: Dennis Chan <dennis.c...@amd.com>
---
 drivers/gpu/drm/amd/display/dc/dc_types.h     | 66 +++++++++++++------
 .../gpu/drm/amd/display/dmub/inc/dmub_cmd.h   |  9 ++-
 2 files changed, 51 insertions(+), 24 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/dc/dc_types.h 
b/drivers/gpu/drm/amd/display/dc/dc_types.h
index a2f6c994a2a9..7313cfe69498 100644
--- a/drivers/gpu/drm/amd/display/dc/dc_types.h
+++ b/drivers/gpu/drm/amd/display/dc/dc_types.h
@@ -1018,6 +1018,12 @@ enum replay_coasting_vtotal_type {
        PR_COASTING_TYPE_NUM,
 };
 
+enum replay_link_off_frame_count_level {
+       PR_LINK_OFF_FRAME_COUNT_FAIL = 0x0,
+       PR_LINK_OFF_FRAME_COUNT_GOOD = 0x2,
+       PR_LINK_OFF_FRAME_COUNT_BEST = 0x6,
+};
+
 /*
  * This is general Interface for Replay to
  * set an 32 bit variable to dmub
@@ -1041,26 +1047,48 @@ union replay_error_status {
 };
 
 struct replay_config {
-       bool replay_supported;                          // Replay feature is 
supported
-       unsigned int replay_power_opt_supported;        // Power opt flags that 
are supported
-       bool replay_smu_opt_supported;                  // SMU optimization is 
supported
-       unsigned int replay_enable_option;              // Replay enablement 
option
-       uint32_t debug_flags;                           // Replay debug flags
-       bool replay_timing_sync_supported; // Replay desync is supported
-       bool force_disable_desync_error_check;             // Replay desync is 
supported
-       bool received_desync_error_hpd; //Replay Received Desync Error HPD.
-       union replay_error_status replay_error_status; // Replay error status
-};
-
-/* Replay feature flags */
+       /* Replay feature is supported */
+       bool replay_supported;
+       /* Power opt flags that are supported */
+       unsigned int replay_power_opt_supported;
+       /* SMU optimization is supported */
+       bool replay_smu_opt_supported;
+       /* Replay enablement option */
+       unsigned int replay_enable_option;
+       /* Replay debug flags */
+       uint32_t debug_flags;
+       /* Replay sync is supported */
+       bool replay_timing_sync_supported;
+       /* Replay Disable desync error check. */
+       bool force_disable_desync_error_check;
+       /* Replay Received Desync Error HPD. */
+       bool received_desync_error_hpd;
+       /* Replay feature is supported long vblank */
+       bool replay_support_fast_resync_in_ultra_sleep_mode;
+       /* Replay error status */
+       union replay_error_status replay_error_status;
+};
+
+/* Replay feature flags*/
 struct replay_settings {
-       struct replay_config config;            // Replay configuration
-       bool replay_feature_enabled;            // Replay feature is ready for 
activating
-       bool replay_allow_active;               // Replay is currently active
-       unsigned int replay_power_opt_active;   // Power opt flags that are 
activated currently
-       bool replay_smu_opt_enable;             // SMU optimization is enabled
-       uint16_t coasting_vtotal;               // Current Coasting vtotal
-       uint16_t coasting_vtotal_table[PR_COASTING_TYPE_NUM]; // Coasting 
vtotal table
+       /* Replay configuration */
+       struct replay_config config;
+       /* Replay feature is ready for activating */
+       bool replay_feature_enabled;
+       /* Replay is currently active */
+       bool replay_allow_active;
+       /* Replay is currently active */
+       bool replay_allow_long_vblank;
+       /* Power opt flags that are activated currently */
+       unsigned int replay_power_opt_active;
+       /* SMU optimization is enabled */
+       bool replay_smu_opt_enable;
+       /* Current Coasting vtotal */
+       uint16_t coasting_vtotal;
+       /* Coasting vtotal table */
+       uint16_t coasting_vtotal_table[PR_COASTING_TYPE_NUM];
+       /* Maximum link off frame count */
+       enum replay_link_off_frame_count_level link_off_frame_count_level;
 };
 
 /* To split out "global" and "per-panel" config settings.
diff --git a/drivers/gpu/drm/amd/display/dmub/inc/dmub_cmd.h 
b/drivers/gpu/drm/amd/display/dmub/inc/dmub_cmd.h
index d1becbb5aa29..a08073fc92ae 100644
--- a/drivers/gpu/drm/amd/display/dmub/inc/dmub_cmd.h
+++ b/drivers/gpu/drm/amd/display/dmub/inc/dmub_cmd.h
@@ -3056,15 +3056,14 @@ struct dmub_cmd_replay_set_timing_sync_data {
         * Currently the support is only for 0 or 1
         */
        uint8_t panel_inst;
-
        /**
-        * Explicit padding to 4 byte boundary.
+        * REPLAY set_timing_sync
         */
-       uint8_t pad[3];
+       uint8_t timing_sync_supported;
        /**
-        * REPLAY set_timing_sync
+        * Explicit padding to 4 byte boundary.
         */
-       bool timing_sync_supported;
+       uint8_t pad[2];
 };
 
 /**
-- 
2.42.0

Reply via email to