aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3841-drm-amd-display-Optimize-clocks-on-clock-change.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3841-drm-amd-display-Optimize-clocks-on-clock-change.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3841-drm-amd-display-Optimize-clocks-on-clock-change.patch67
1 files changed, 67 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3841-drm-amd-display-Optimize-clocks-on-clock-change.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3841-drm-amd-display-Optimize-clocks-on-clock-change.patch
new file mode 100644
index 00000000..55b7abe3
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3841-drm-amd-display-Optimize-clocks-on-clock-change.patch
@@ -0,0 +1,67 @@
+From 9f6396ff839b5c8bbd295039e70e08c39dc8066c Mon Sep 17 00:00:00 2001
+From: Wesley Chalmers <Wesley.Chalmers@amd.com>
+Date: Fri, 30 Aug 2019 14:59:00 -0400
+Subject: [PATCH 3841/4256] drm/amd/display: Optimize clocks on clock change
+
+[WHY]
+Presently, there is no way for clocks to be lowered, only raised.
+
+[HOW]
+Compare clock status against previous known clock status, and optimize
+if different.
+This requires re-ordering the layout of the dc_clocks structure, as the
+current ordering allows identical clock states to appear different.
+
+Signed-off-by: Wesley Chalmers <Wesley.Chalmers@amd.com>
+Reviewed-by: Aric Cyr <Aric.Cyr@amd.com>
+Acked-by: Anthony Koo <Anthony.Koo@amd.com>
+Acked-by: Leo Li <sunpeng.li@amd.com>
+---
+ drivers/gpu/drm/amd/display/dc/core/dc.c | 3 +++
+ drivers/gpu/drm/amd/display/dc/dc.h | 8 ++++----
+ 2 files changed, 7 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c
+index 3affefd6d427..ffa6544f1e25 100644
+--- a/drivers/gpu/drm/amd/display/dc/core/dc.c
++++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
+@@ -1655,6 +1655,9 @@ enum surface_update_type dc_check_update_surfaces_for_stream(
+ updates[i].surface->update_flags.raw = 0xFFFFFFFF;
+ }
+
++ if (type == UPDATE_TYPE_FAST && memcmp(&dc->current_state->bw_ctx.bw.dcn.clk, &dc->clk_mgr->clks, offsetof(struct dc_clocks, prev_p_state_change_support)) != 0)
++ dc->optimized_required = true;
++
+ return type;
+ }
+
+diff --git a/drivers/gpu/drm/amd/display/dc/dc.h b/drivers/gpu/drm/amd/display/dc/dc.h
+index a1697486b352..afbcf052f478 100644
+--- a/drivers/gpu/drm/amd/display/dc/dc.h
++++ b/drivers/gpu/drm/amd/display/dc/dc.h
+@@ -255,11 +255,7 @@ enum wm_report_mode {
+ */
+ struct dc_clocks {
+ int dispclk_khz;
+- int max_supported_dppclk_khz;
+- int max_supported_dispclk_khz;
+ int dppclk_khz;
+- int bw_dppclk_khz; /*a copy of dppclk_khz*/
+- int bw_dispclk_khz;
+ int dcfclk_khz;
+ int socclk_khz;
+ int dcfclk_deep_sleep_khz;
+@@ -273,6 +269,10 @@ struct dc_clocks {
+ * optimization required
+ */
+ bool prev_p_state_change_support;
++ int max_supported_dppclk_khz;
++ int max_supported_dispclk_khz;
++ int bw_dppclk_khz; /*a copy of dppclk_khz*/
++ int bw_dispclk_khz;
+ };
+
+ struct dc_bw_validation_profile {
+--
+2.17.1
+