aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3597-drm-amd-display-flicking-observed-while-installing-d.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3597-drm-amd-display-flicking-observed-while-installing-d.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3597-drm-amd-display-flicking-observed-while-installing-d.patch106
1 files changed, 106 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3597-drm-amd-display-flicking-observed-while-installing-d.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3597-drm-amd-display-flicking-observed-while-installing-d.patch
new file mode 100644
index 00000000..b19cc9de
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3597-drm-amd-display-flicking-observed-while-installing-d.patch
@@ -0,0 +1,106 @@
+From 7dd9326342944b266c07c1abcdabb4e01a5a3fd8 Mon Sep 17 00:00:00 2001
+From: hersen wu <hersenxs.wu@amd.com>
+Date: Fri, 2 Aug 2019 16:01:37 -0400
+Subject: [PATCH 3597/4256] drm/amd/display: flicking observed while installing
+ driver on Navi10 CF
+
+[WHY] value of dchub_ref_clock is decided by dchubbub global timer
+settings which is programmed by vbios command table disp_init.
+for multi-GPU case, vbios is posted only for primary GPU. without
+vbios posted for the secondary GPU, value of dchub_ref_clock is not
+set properly. this value will affect dcn bandwidth calcuation and
+cause underflow. user will see screen flicking during driver
+installation for dual GPU case.
+
+[HOW] dc init_hw always call vbios command table disp_init to
+make sure dchubbub global timer is configured and enable.
+
+Signed-off-by: hersen wu <hersenxs.wu@amd.com>
+Reviewed-by: Jun Lei <Jun.Lei@amd.com>
+Acked-by: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com>
+---
+ .../gpu/drm/amd/display/dc/core/dc_resource.c | 1 +
+ .../amd/display/dc/dcn10/dcn10_hw_sequencer.c | 54 +++++++++----------
+ 2 files changed, 28 insertions(+), 27 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
+index 6e88cb0fffce..adbf2d4e1723 100644
+--- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
++++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
+@@ -169,6 +169,7 @@ struct resource_pool *dc_create_resource_pool(struct dc *dc,
+ default:
+ break;
+ }
++
+ if (res_pool != NULL) {
+ if (dc->ctx->dc_bios->fw_info_valid) {
+ res_pool->ref_clocks.xtalin_clock_inKhz =
+diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
+index b981ea849cc9..866705ea45a7 100644
+--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
++++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
+@@ -1208,34 +1208,34 @@ static void dcn10_init_hw(struct dc *dc)
+ return;
+ }
+
+- if (!dcb->funcs->is_accelerated_mode(dcb)) {
+- dc->hwss.bios_golden_init(dc);
+- if (dc->ctx->dc_bios->fw_info_valid) {
+- res_pool->ref_clocks.xtalin_clock_inKhz =
+- dc->ctx->dc_bios->fw_info.pll_info.crystal_frequency;
+-
+- if (!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) {
+- if (res_pool->dccg && res_pool->hubbub) {
+-
+- (res_pool->dccg->funcs->get_dccg_ref_freq)(res_pool->dccg,
+- dc->ctx->dc_bios->fw_info.pll_info.crystal_frequency,
+- &res_pool->ref_clocks.dccg_ref_clock_inKhz);
+-
+- (res_pool->hubbub->funcs->get_dchub_ref_freq)(res_pool->hubbub,
+- res_pool->ref_clocks.dccg_ref_clock_inKhz,
+- &res_pool->ref_clocks.dchub_ref_clock_inKhz);
+- } else {
+- // Not all ASICs have DCCG sw component
+- res_pool->ref_clocks.dccg_ref_clock_inKhz =
+- res_pool->ref_clocks.xtalin_clock_inKhz;
+- res_pool->ref_clocks.dchub_ref_clock_inKhz =
+- res_pool->ref_clocks.xtalin_clock_inKhz;
+- }
+- }
+- } else
+- ASSERT_CRITICAL(false);
++ if (!dcb->funcs->is_accelerated_mode(dcb))
+ dc->hwss.disable_vga(dc->hwseq);
+- }
++
++ dc->hwss.bios_golden_init(dc);
++ if (dc->ctx->dc_bios->fw_info_valid) {
++ res_pool->ref_clocks.xtalin_clock_inKhz =
++ dc->ctx->dc_bios->fw_info.pll_info.crystal_frequency;
++
++ if (!IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) {
++ if (res_pool->dccg && res_pool->hubbub) {
++
++ (res_pool->dccg->funcs->get_dccg_ref_freq)(res_pool->dccg,
++ dc->ctx->dc_bios->fw_info.pll_info.crystal_frequency,
++ &res_pool->ref_clocks.dccg_ref_clock_inKhz);
++
++ (res_pool->hubbub->funcs->get_dchub_ref_freq)(res_pool->hubbub,
++ res_pool->ref_clocks.dccg_ref_clock_inKhz,
++ &res_pool->ref_clocks.dchub_ref_clock_inKhz);
++ } else {
++ // Not all ASICs have DCCG sw component
++ res_pool->ref_clocks.dccg_ref_clock_inKhz =
++ res_pool->ref_clocks.xtalin_clock_inKhz;
++ res_pool->ref_clocks.dchub_ref_clock_inKhz =
++ res_pool->ref_clocks.xtalin_clock_inKhz;
++ }
++ }
++ } else
++ ASSERT_CRITICAL(false);
+
+ for (i = 0; i < dc->link_count; i++) {
+ /* Power up AND update implementation according to the
+--
+2.17.1
+