drm/amd/display: add a func to disable accelerated mode
authorYao Wang1 <Yao.Wang1@amd.com>
Tue, 9 Mar 2021 09:51:58 +0000 (17:51 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 24 Mar 2021 03:33:36 +0000 (23:33 -0400)
[Why]
When driver disabled, we driver force the YCbCr420 to RGB,
which means some register will be changed, such as
RDPCS_PHY_DP_MPLLB_TX_CLK_DIV changed from 1 to 0
When driver re-enabled, OS will Set Mode YCbCr420 again,
which means the register RDPCS_PHY_DP_MPLLB_TX_CLK_DIV
should to be 1 again, but dmub fw can’t update the
register to 1 due to the mpll is not off

[How]
Adds an interface to disable accelerated mode bit,
which allows DM to decide to call during driver
disable/unload scenarios.

Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Yao Wang1 <Yao.Wang1@amd.com>
Reviewed-by: Anthony Koo <Anthony.Koo@amd.com>
Acked-by: Solomon Chiu <solomon.chiu@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/bios/bios_parser_helper.c
drivers/gpu/drm/amd/display/dc/bios/bios_parser_helper.h
drivers/gpu/drm/amd/display/dc/core/dc.c
drivers/gpu/drm/amd/display/dc/dc.h
drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c

index fce46ab54c5436e92bd8175835e9edca199f256b..53d7513b50832a66251a626d08900149bf3bda17 100644 (file)
@@ -64,9 +64,10 @@ bool bios_is_accelerated_mode(
 
 
 void bios_set_scratch_acc_mode_change(
-       struct dc_bios *bios)
+       struct dc_bios *bios,
+       uint32_t state)
 {
-       REG_UPDATE(BIOS_SCRATCH_6, S6_ACC_MODE, 1);
+       REG_UPDATE(BIOS_SCRATCH_6, S6_ACC_MODE, state);
 }
 
 
index 75a29e68fb2782ad667f858b4f235aeccdcc8ace..e1b4a40a353db1cc3a56840f6999f6e9a84c1cc2 100644 (file)
@@ -32,7 +32,7 @@ uint8_t *bios_get_image(struct dc_bios *bp, uint32_t offset,
        uint32_t size);
 
 bool bios_is_accelerated_mode(struct dc_bios *bios);
-void bios_set_scratch_acc_mode_change(struct dc_bios *bios);
+void bios_set_scratch_acc_mode_change(struct dc_bios *bios, uint32_t state);
 void bios_set_scratch_critical_state(struct dc_bios *bios, bool state);
 uint32_t bios_get_vga_enabled_displays(struct dc_bios *bios);
 
index dffd150180ec73dbf051b7ad48d48773da69e8e8..8e6c815b55d2dc590f5f27a579bb210679587816 100644 (file)
@@ -41,6 +41,7 @@
 #include "dc_bios_types.h"
 
 #include "bios_parser_interface.h"
+#include "bios/bios_parser_helper.h"
 #include "include/irq_service_interface.h"
 #include "transform.h"
 #include "dmcu.h"
@@ -3372,3 +3373,20 @@ bool dc_process_dmub_aux_transfer_async(struct dc *dc,
 
        return true;
 }
+
+/**
+ *****************************************************************************
+ *  Function: dc_disable_accelerated_mode
+ *
+ *  @brief
+ *             disable accelerated mode
+ *
+ *  @param
+ *             [in] dc: dc structure
+ *
+ *****************************************************************************
+ */
+void dc_disable_accelerated_mode(struct dc *dc)
+{
+       bios_set_scratch_acc_mode_change(dc->ctx->dc_bios, 0);
+}
index 352651c805ffd464ffe9dcc168913d0c8e25c645..d163007e057c877c89c18890e0de23f4a1e5fb02 100644 (file)
@@ -1313,4 +1313,10 @@ bool dc_process_dmub_aux_transfer_async(struct dc *dc,
  * DSC Interfaces
  ******************************************************************************/
 #include "dc_dsc.h"
+
+/*******************************************************************************
+ * Disable acc mode Interfaces
+ ******************************************************************************/
+void dc_disable_accelerated_mode(struct dc *dc);
+
 #endif /* DC_INTERFACE_H_ */
index 08047802d04010faa0a56a4b688b53eb8f1dc7de..804092f81f85807e4cc10729f69f78a6ff5fffb9 100644 (file)
@@ -1750,7 +1750,7 @@ void dce110_enable_accelerated_mode(struct dc *dc, struct dc_state *context)
                if (edp_link_with_sink && !keep_edp_vdd_on)
                        dc->hwss.edp_power_control(edp_link_with_sink, false);
        }
-       bios_set_scratch_acc_mode_change(dc->ctx->dc_bios);
+       bios_set_scratch_acc_mode_change(dc->ctx->dc_bios, 1);
 }
 
 static uint32_t compute_pstate_blackout_duration(