This adds clear_tiling callbacks to the mi structure that
will be used for drm panic support to clear the tiling on
a display.  Mem input (mi) is used on DCE based display
IPs.

Signed-off-by: Alex Deucher <alexander.deuc...@amd.com>
Cc: Lu Yao <ya...@kylinos.cn>
Cc: Jocelyn Falempe <jfale...@redhat.com>
---
 .../drm/amd/display/dc/dce/dce_mem_input.c    | 34 ++++++++++++++++---
 .../gpu/drm/amd/display/dc/inc/hw/mem_input.h |  2 ++
 2 files changed, 31 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_mem_input.c 
b/drivers/gpu/drm/amd/display/dc/dce/dce_mem_input.c
index f5e1d9caee4c..ebd174be5786 100644
--- a/drivers/gpu/drm/amd/display/dc/dce/dce_mem_input.c
+++ b/drivers/gpu/drm/amd/display/dc/dce/dce_mem_input.c
@@ -481,7 +481,6 @@ static void program_tiling(
        }
 }
 
-
 static void program_size_and_rotation(
        struct dce_mem_input *dce_mi,
        enum dc_rotation_angle rotation,
@@ -627,6 +626,27 @@ static void program_grph_pixel_format(
                        GRPH_PRESCALE_B_SIGN, sign);
 }
 
+static void dce_mi_clear_tiling(
+       struct mem_input *mi)
+{
+       struct dce_mem_input *dce_mi = TO_DCE_MEM_INPUT(mi);
+
+       if (dce_mi->masks->GRPH_SW_MODE) { /* GFX9 */
+               REG_UPDATE(GRPH_CONTROL,
+                          GRPH_SW_MODE, DC_SW_LINEAR);
+       }
+
+       if (dce_mi->masks->GRPH_MICRO_TILE_MODE) { /* GFX8 */
+               REG_UPDATE(GRPH_CONTROL,
+                          GRPH_ARRAY_MODE, DC_SW_LINEAR);
+       }
+
+       if (dce_mi->masks->GRPH_ARRAY_MODE) { /* GFX6 but reuses gfx8 struct */
+               REG_UPDATE(GRPH_CONTROL,
+                          GRPH_ARRAY_MODE, DC_SW_LINEAR);
+       }
+}
+
 static void dce_mi_program_surface_config(
        struct mem_input *mi,
        enum surface_pixel_format format,
@@ -884,7 +904,8 @@ static const struct mem_input_funcs dce_mi_funcs = {
        .mem_input_program_pte_vm = dce_mi_program_pte_vm,
        .mem_input_program_surface_config =
                        dce_mi_program_surface_config,
-       .mem_input_is_flip_pending = dce_mi_is_flip_pending
+       .mem_input_is_flip_pending = dce_mi_is_flip_pending,
+       .mem_input_clear_tiling = dce_mi_clear_tiling,
 };
 
 #if defined(CONFIG_DRM_AMD_DC_SI)
@@ -897,7 +918,8 @@ static const struct mem_input_funcs dce60_mi_funcs = {
        .mem_input_program_pte_vm = dce_mi_program_pte_vm,
        .mem_input_program_surface_config =
                        dce60_mi_program_surface_config,
-       .mem_input_is_flip_pending = dce_mi_is_flip_pending
+       .mem_input_is_flip_pending = dce_mi_is_flip_pending,
+       .mem_input_clear_tiling = dce_mi_clear_tiling,
 };
 #endif
 
@@ -910,7 +932,8 @@ static const struct mem_input_funcs dce112_mi_funcs = {
        .mem_input_program_pte_vm = dce_mi_program_pte_vm,
        .mem_input_program_surface_config =
                        dce_mi_program_surface_config,
-       .mem_input_is_flip_pending = dce_mi_is_flip_pending
+       .mem_input_is_flip_pending = dce_mi_is_flip_pending,
+       .mem_input_clear_tiling = dce_mi_clear_tiling,
 };
 
 static const struct mem_input_funcs dce120_mi_funcs = {
@@ -922,7 +945,8 @@ static const struct mem_input_funcs dce120_mi_funcs = {
        .mem_input_program_pte_vm = dce_mi_program_pte_vm,
        .mem_input_program_surface_config =
                        dce_mi_program_surface_config,
-       .mem_input_is_flip_pending = dce_mi_is_flip_pending
+       .mem_input_is_flip_pending = dce_mi_is_flip_pending,
+       .mem_input_clear_tiling = dce_mi_clear_tiling,
 };
 
 void dce_mem_input_construct(
diff --git a/drivers/gpu/drm/amd/display/dc/inc/hw/mem_input.h 
b/drivers/gpu/drm/amd/display/dc/inc/hw/mem_input.h
index a8b44f398ce6..4f5d102455ca 100644
--- a/drivers/gpu/drm/amd/display/dc/inc/hw/mem_input.h
+++ b/drivers/gpu/drm/amd/display/dc/inc/hw/mem_input.h
@@ -187,6 +187,8 @@ struct mem_input_funcs {
                        const struct dc_cursor_position *pos,
                        const struct dc_cursor_mi_param *param);
 
+       void (*mem_input_clear_tiling)(
+               struct mem_input *mem_input);
 };
 
 #endif
-- 
2.47.0

Reply via email to