aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4681-drm-amd-display-have-two-different-sr-and-pstate-lat.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4681-drm-amd-display-have-two-different-sr-and-pstate-lat.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4681-drm-amd-display-have-two-different-sr-and-pstate-lat.patch164
1 files changed, 164 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4681-drm-amd-display-have-two-different-sr-and-pstate-lat.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4681-drm-amd-display-have-two-different-sr-and-pstate-lat.patch
new file mode 100644
index 00000000..f7407cc3
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4681-drm-amd-display-have-two-different-sr-and-pstate-lat.patch
@@ -0,0 +1,164 @@
+From 14f863bbcbc727e06ca1257e9802fb6cf74a0b60 Mon Sep 17 00:00:00 2001
+From: Joseph Gravenor <joseph.gravenor@amd.com>
+Date: Fri, 8 Nov 2019 14:30:34 -0500
+Subject: [PATCH 4681/4736] drm/amd/display: have two different sr and pstate
+ latency tables for renoir
+
+[Why]
+new sr and pstate latencies are optimized for the case when we are not
+using lpddr4 memory
+
+[How]
+have two different wm tables, one for the lpddr case and one for
+non lpddr case
+
+Signed-off-by: Joseph Gravenor <joseph.gravenor@amd.com>
+Reviewed-by: Eric Yang <eric.yang2@amd.com>
+Acked-by: Leo Li <sunpeng.li@amd.com>
+---
+ .../amd/display/dc/clk_mgr/dcn21/rn_clk_mgr.c | 114 ++++++++++++------
+ 1 file changed, 80 insertions(+), 34 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn21/rn_clk_mgr.c b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn21/rn_clk_mgr.c
+index 9f0381c68844..89ed230cdb26 100644
+--- a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn21/rn_clk_mgr.c
++++ b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn21/rn_clk_mgr.c
+@@ -518,44 +518,83 @@ struct clk_bw_params rn_bw_params = {
+ .num_entries = 4,
+ },
+
+- .wm_table = {
+- .entries = {
+- {
+- .wm_inst = WM_A,
+- .wm_type = WM_TYPE_PSTATE_CHG,
+- .pstate_latency_us = 11.72,
+- .sr_exit_time_us = 6.09,
+- .sr_enter_plus_exit_time_us = 7.14,
+- .valid = true,
+- },
+- {
+- .wm_inst = WM_B,
+- .wm_type = WM_TYPE_PSTATE_CHG,
+- .pstate_latency_us = 11.72,
+- .sr_exit_time_us = 10.12,
+- .sr_enter_plus_exit_time_us = 11.48,
+- .valid = true,
+- },
+- {
+- .wm_inst = WM_C,
+- .wm_type = WM_TYPE_PSTATE_CHG,
+- .pstate_latency_us = 11.72,
+- .sr_exit_time_us = 10.12,
+- .sr_enter_plus_exit_time_us = 11.48,
+- .valid = true,
+- },
+- {
+- .wm_inst = WM_D,
+- .wm_type = WM_TYPE_PSTATE_CHG,
+- .pstate_latency_us = 11.72,
+- .sr_exit_time_us = 10.12,
+- .sr_enter_plus_exit_time_us = 11.48,
+- .valid = true,
+- },
++};
++
++struct wm_table ddr4_wm_table = {
++ .entries = {
++ {
++ .wm_inst = WM_A,
++ .wm_type = WM_TYPE_PSTATE_CHG,
++ .pstate_latency_us = 11.72,
++ .sr_exit_time_us = 6.09,
++ .sr_enter_plus_exit_time_us = 7.14,
++ .valid = true,
++ },
++ {
++ .wm_inst = WM_B,
++ .wm_type = WM_TYPE_PSTATE_CHG,
++ .pstate_latency_us = 11.72,
++ .sr_exit_time_us = 10.12,
++ .sr_enter_plus_exit_time_us = 11.48,
++ .valid = true,
++ },
++ {
++ .wm_inst = WM_C,
++ .wm_type = WM_TYPE_PSTATE_CHG,
++ .pstate_latency_us = 11.72,
++ .sr_exit_time_us = 10.12,
++ .sr_enter_plus_exit_time_us = 11.48,
++ .valid = true,
++ },
++ {
++ .wm_inst = WM_D,
++ .wm_type = WM_TYPE_PSTATE_CHG,
++ .pstate_latency_us = 11.72,
++ .sr_exit_time_us = 10.12,
++ .sr_enter_plus_exit_time_us = 11.48,
++ .valid = true,
+ },
+ }
+ };
+
++struct wm_table lpddr4_wm_table = {
++ .entries = {
++ {
++ .wm_inst = WM_A,
++ .wm_type = WM_TYPE_PSTATE_CHG,
++ .pstate_latency_us = 23.84,
++ .sr_exit_time_us = 12.5,
++ .sr_enter_plus_exit_time_us = 17.0,
++ .valid = true,
++ },
++ {
++ .wm_inst = WM_B,
++ .wm_type = WM_TYPE_PSTATE_CHG,
++ .pstate_latency_us = 23.84,
++ .sr_exit_time_us = 12.5,
++ .sr_enter_plus_exit_time_us = 17.0,
++ .valid = true,
++ },
++ {
++ .wm_inst = WM_C,
++ .wm_type = WM_TYPE_PSTATE_CHG,
++ .pstate_latency_us = 23.84,
++ .sr_exit_time_us = 12.5,
++ .sr_enter_plus_exit_time_us = 17.0,
++ .valid = true,
++ },
++ {
++ .wm_inst = WM_D,
++ .wm_type = WM_TYPE_PSTATE_CHG,
++ .pstate_latency_us = 23.84,
++ .sr_exit_time_us = 12.5,
++ .sr_enter_plus_exit_time_us = 17.0,
++ .valid = true,
++ },
++ }
++};
++
++
+ static unsigned int find_dcfclk_for_voltage(struct dpm_clocks *clock_table, unsigned int voltage)
+ {
+ int i;
+@@ -677,10 +716,17 @@ void rn_clk_mgr_construct(
+ ASSERT(clk_mgr->base.dprefclk_khz == 600000);
+ clk_mgr->base.dprefclk_khz = 600000;
+ }
++
++ if (ctx->dc_bios->integrated_info->memory_type == LpDdr4MemType) {
++ rn_bw_params.wm_table = lpddr4_wm_table;
++ } else {
++ rn_bw_params.wm_table = ddr4_wm_table;
++ }
+ }
+
+ dce_clock_read_ss_info(clk_mgr);
+
++
+ clk_mgr->base.bw_params = &rn_bw_params;
+
+ if (pp_smu && pp_smu->rn_funcs.get_dpm_clock_table) {
+--
+2.17.1
+