aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1900-drm-amd-display-move-back-vbios-cmd-table-for-set-dp.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1900-drm-amd-display-move-back-vbios-cmd-table-for-set-dp.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1900-drm-amd-display-move-back-vbios-cmd-table-for-set-dp.patch128
1 files changed, 128 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1900-drm-amd-display-move-back-vbios-cmd-table-for-set-dp.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1900-drm-amd-display-move-back-vbios-cmd-table-for-set-dp.patch
new file mode 100644
index 00000000..818e22d8
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1900-drm-amd-display-move-back-vbios-cmd-table-for-set-dp.patch
@@ -0,0 +1,128 @@
+From 9e6a1184679905f554eeba127d9ad18510a989c0 Mon Sep 17 00:00:00 2001
+From: Eric Yang <Eric.Yang2@amd.com>
+Date: Wed, 24 Apr 2019 19:18:12 -0400
+Subject: [PATCH 1900/2940] drm/amd/display: move back vbios cmd table for set
+ dprefclk
+
+[Why]
+Upon closer inspection, our previous implementation is missing
+code for programming de-spread and DP DTO. Porting this logic
+into driver is rather involved, as there are a lot of table
+look ups. So for now move back to calling vbios cmd table
+
+[How]
+Go back to calling vbios cmd table for set dp_refclk
+
+Change-Id: Ie47800cce40c180673140976f862847b0329d9e3
+Signed-off-by: Eric Yang <Eric.Yang2@amd.com>
+Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
+Acked-by: Bhawanpreet Lakha <Bhawanpreet Lakha@amd.com>
+---
+ .../gpu/drm/amd/display/dc/dce/dce_clk_mgr.c | 70 +++++++++++++++++++
+ .../gpu/drm/amd/display/dc/dce/dce_clk_mgr.h | 2 +
+ 2 files changed, 72 insertions(+)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_clk_mgr.c b/drivers/gpu/drm/amd/display/dc/dce/dce_clk_mgr.c
+index df093e6200b6..a3b6b97796b7 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce/dce_clk_mgr.c
++++ b/drivers/gpu/drm/amd/display/dc/dce/dce_clk_mgr.c
+@@ -238,6 +238,7 @@ static enum dm_pp_clocks_state dce_get_required_clocks_state(
+ return low_req_clk;
+ }
+
++/* TODO: remove use the two broken down functions */
+ static int dce_set_clock(
+ struct clk_mgr *clk_mgr,
+ int requested_clk_khz)
+@@ -333,6 +334,75 @@ int dce112_set_clock(struct clk_mgr *clk_mgr, int requested_clk_khz)
+ return actual_clock;
+ }
+
++int dce112_set_dispclk(struct clk_mgr *clk_mgr, int requested_clk_khz)
++{
++ struct dce_clk_mgr *clk_mgr_dce = TO_DCE_CLK_MGR(clk_mgr);
++ struct bp_set_dce_clock_parameters dce_clk_params;
++ struct dc_bios *bp = clk_mgr->ctx->dc_bios;
++ struct dc *core_dc = clk_mgr->ctx->dc;
++ struct dmcu *dmcu = core_dc->res_pool->dmcu;
++ int actual_clock = requested_clk_khz;
++ /* Prepare to program display clock*/
++ memset(&dce_clk_params, 0, sizeof(dce_clk_params));
++
++ /* Make sure requested clock isn't lower than minimum threshold*/
++ if (requested_clk_khz > 0)
++ requested_clk_khz = max(requested_clk_khz,
++ clk_mgr_dce->dentist_vco_freq_khz / 62);
++
++ dce_clk_params.target_clock_frequency = requested_clk_khz;
++ dce_clk_params.pll_id = CLOCK_SOURCE_ID_DFS;
++ dce_clk_params.clock_type = DCECLOCK_TYPE_DISPLAY_CLOCK;
++
++ bp->funcs->set_dce_clock(bp, &dce_clk_params);
++ actual_clock = dce_clk_params.target_clock_frequency;
++
++ /*
++ * from power down, we need mark the clock state as ClocksStateNominal
++ * from HWReset, so when resume we will call pplib voltage regulator.
++ */
++ if (requested_clk_khz == 0)
++ clk_mgr_dce->cur_min_clks_state = DM_PP_CLOCKS_STATE_NOMINAL;
++
++
++ if (!IS_FPGA_MAXIMUS_DC(core_dc->ctx->dce_environment)) {
++ if (dmcu && dmcu->funcs->is_dmcu_initialized(dmcu)) {
++ if (clk_mgr_dce->dfs_bypass_disp_clk != actual_clock)
++ dmcu->funcs->set_psr_wait_loop(dmcu,
++ actual_clock / 1000 / 7);
++ }
++ }
++
++ clk_mgr_dce->dfs_bypass_disp_clk = actual_clock;
++ return actual_clock;
++
++}
++
++int dce112_set_dprefclk(struct clk_mgr *clk_mgr)
++{
++ struct bp_set_dce_clock_parameters dce_clk_params;
++ struct dc_bios *bp = clk_mgr->ctx->dc_bios;
++
++ memset(&dce_clk_params, 0, sizeof(dce_clk_params));
++
++ /*Program DP ref Clock*/
++ /*VBIOS will determine DPREFCLK frequency, so we don't set it*/
++ dce_clk_params.target_clock_frequency = 0;
++ dce_clk_params.pll_id = CLOCK_SOURCE_ID_DFS;
++ dce_clk_params.clock_type = DCECLOCK_TYPE_DPREFCLK;
++ if (!ASICREV_IS_VEGA20_P(clk_mgr->ctx->asic_id.hw_internal_rev))
++ dce_clk_params.flags.USE_GENLOCK_AS_SOURCE_FOR_DPREFCLK =
++ (dce_clk_params.pll_id ==
++ CLOCK_SOURCE_COMBO_DISPLAY_PLL0);
++ else
++ dce_clk_params.flags.USE_GENLOCK_AS_SOURCE_FOR_DPREFCLK = false;
++
++ bp->funcs->set_dce_clock(bp, &dce_clk_params);
++
++ /* Returns the dp_refclk that was set */
++ return dce_clk_params.target_clock_frequency;
++}
++
+ static void dce_clock_read_integrated_info(struct dce_clk_mgr *clk_mgr_dce)
+ {
+ struct dc_debug_options *debug = &clk_mgr_dce->base.ctx->dc->debug;
+diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_clk_mgr.h b/drivers/gpu/drm/amd/display/dc/dce/dce_clk_mgr.h
+index 36942ab022a2..cca0c95d8cc8 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce/dce_clk_mgr.h
++++ b/drivers/gpu/drm/amd/display/dc/dce/dce_clk_mgr.h
+@@ -189,6 +189,8 @@ void dce110_fill_display_configs(
+ struct dm_pp_display_configuration *pp_display_cfg);
+
+ int dce112_set_clock(struct clk_mgr *dccg, int requested_clk_khz);
++int dce112_set_dispclk(struct clk_mgr *clk_mgr, int requested_clk_khz);
++int dce112_set_dprefclk(struct clk_mgr *clk_mgr);
+
+ struct clk_mgr *dce_clk_mgr_create(
+ struct dc_context *ctx,
+--
+2.17.1
+