From: Charlene Liu <charlene....@amd.com>

[WHY & HOW]
1) We did linear/non linear transition properly long ago
2) We used that path to handle SystemDisplayEnable
3) We fixed a SystemDisplayEnable inability to fallback to passive by
   impacting the transition flow generically
4) AFMF later relied on the generic transition behavior

Separating the two flows to make (3) non-generic is the best immediate
coarse of action.

DC can discern SSAMPO3 very easily from SDE.

Cc: Mario Limonciello <mario.limoncie...@amd.com>
Cc: Alex Deucher <alexander.deuc...@amd.com>
Cc: sta...@vger.kernel.org
Reviewed-by: Chris Park <chris.p...@amd.com>
Signed-off-by: Charlene Liu <charlene....@amd.com>
Signed-off-by: Alex Hung <alex.h...@amd.com>
---
 drivers/gpu/drm/amd/display/dc/core/dc.c | 6 +++---
 drivers/gpu/drm/amd/display/dc/dc.h      | 1 +
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c 
b/drivers/gpu/drm/amd/display/dc/core/dc.c
index 67812fbbb006..a1652130e4be 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
@@ -2376,7 +2376,7 @@ static bool is_surface_in_context(
        return false;
 }
 
-static enum surface_update_type get_plane_info_update_type(const struct 
dc_surface_update *u)
+static enum surface_update_type get_plane_info_update_type(const struct dc 
*dc, const struct dc_surface_update *u)
 {
        union surface_update_flags *update_flags = &u->surface->update_flags;
        enum surface_update_type update_type = UPDATE_TYPE_FAST;
@@ -2455,7 +2455,7 @@ static enum surface_update_type 
get_plane_info_update_type(const struct dc_surfa
                /* todo: below are HW dependent, we should add a hook to
                 * DCE/N resource and validated there.
                 */
-               if (u->plane_info->tiling_info.gfx9.swizzle != DC_SW_LINEAR) {
+               if (!dc->debug.skip_full_updated_if_possible) {
                        /* swizzled mode requires RQ to be setup properly,
                         * thus need to run DML to calculate RQ settings
                         */
@@ -2547,7 +2547,7 @@ static enum surface_update_type det_surface_update(const 
struct dc *dc,
 
        update_flags->raw = 0; // Reset all flags
 
-       type = get_plane_info_update_type(u);
+       type = get_plane_info_update_type(dc, u);
        elevate_update_type(&overall_type, type);
 
        type = get_scaling_info_update_type(dc, u);
diff --git a/drivers/gpu/drm/amd/display/dc/dc.h 
b/drivers/gpu/drm/amd/display/dc/dc.h
index e659f4fed19f..78ebe636389e 100644
--- a/drivers/gpu/drm/amd/display/dc/dc.h
+++ b/drivers/gpu/drm/amd/display/dc/dc.h
@@ -1060,6 +1060,7 @@ struct dc_debug_options {
        bool enable_ips_visual_confirm;
        unsigned int sharpen_policy;
        unsigned int scale_to_sharpness_policy;
+       bool skip_full_updated_if_possible;
 };
 
 
-- 
2.34.1

Reply via email to