aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/4768-drm-amd-display-rename-dce_disp_clk-to-dccg.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/4768-drm-amd-display-rename-dce_disp_clk-to-dccg.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/4768-drm-amd-display-rename-dce_disp_clk-to-dccg.patch432
1 files changed, 432 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/4768-drm-amd-display-rename-dce_disp_clk-to-dccg.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/4768-drm-amd-display-rename-dce_disp_clk-to-dccg.patch
new file mode 100644
index 00000000..a90c327a
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/4768-drm-amd-display-rename-dce_disp_clk-to-dccg.patch
@@ -0,0 +1,432 @@
+From 62d3670e317f8861c85aa87857e0f84af007120c Mon Sep 17 00:00:00 2001
+From: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
+Date: Thu, 24 May 2018 16:48:38 -0400
+Subject: [PATCH 4768/5725] drm/amd/display: rename dce_disp_clk to dccg
+
+No functional change.
+
+Signed-off-by: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
+Reviewed-by: Nikola Cornij <Nikola.Cornij@amd.com>
+Acked-by: Harry Wentland <harry.wentland@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/display/dc/dce/dce_clocks.c | 115 +++++++++------------
+ drivers/gpu/drm/amd/display/dc/dce/dce_clocks.h | 41 +++++---
+ drivers/gpu/drm/amd/display/dc/dce/dce_hwseq.h | 3 -
+ .../drm/amd/display/dc/dce100/dce100_resource.c | 6 +-
+ .../drm/amd/display/dc/dce110/dce110_resource.c | 6 +-
+ .../drm/amd/display/dc/dce112/dce112_resource.c | 6 +-
+ .../gpu/drm/amd/display/dc/dce80/dce80_resource.c | 6 +-
+ 7 files changed, 88 insertions(+), 95 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_clocks.c b/drivers/gpu/drm/amd/display/dc/dce/dce_clocks.c
+index 6e3bfdf..242e8ae 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce/dce_clocks.c
++++ b/drivers/gpu/drm/amd/display/dc/dce/dce_clocks.c
+@@ -139,7 +139,34 @@ static int dentist_get_divider_from_did(int did)
+ }
+ }
+
+-static int dce_clocks_get_dp_ref_freq(struct dccg *clk)
++/* SW will adjust DP REF Clock average value for all purposes
++ * (DP DTO / DP Audio DTO and DP GTC)
++ if clock is spread for all cases:
++ -if SS enabled on DP Ref clock and HW de-spreading enabled with SW
++ calculations for DS_INCR/DS_MODULO (this is planned to be default case)
++ -if SS enabled on DP Ref clock and HW de-spreading enabled with HW
++ calculations (not planned to be used, but average clock should still
++ be valid)
++ -if SS enabled on DP Ref clock and HW de-spreading disabled
++ (should not be case with CIK) then SW should program all rates
++ generated according to average value (case as with previous ASICs)
++ */
++static int dccg_adjust_dp_ref_freq_for_ss(struct dce_dccg *clk_dce, int dp_ref_clk_khz)
++{
++ if (clk_dce->ss_on_dprefclk && clk_dce->dprefclk_ss_divider != 0) {
++ struct fixed31_32 ss_percentage = dc_fixpt_div_int(
++ dc_fixpt_from_fraction(clk_dce->dprefclk_ss_percentage,
++ clk_dce->dprefclk_ss_divider), 200);
++ struct fixed31_32 adj_dp_ref_clk_khz;
++
++ ss_percentage = dc_fixpt_sub(dc_fixpt_one, ss_percentage);
++ adj_dp_ref_clk_khz = dc_fixpt_mul_int(ss_percentage, dp_ref_clk_khz);
++ dp_ref_clk_khz = dc_fixpt_floor(adj_dp_ref_clk_khz);
++ }
++ return dp_ref_clk_khz;
++}
++
++static int dce_get_dp_ref_freq_khz(struct dccg *clk)
+ {
+ struct dce_dccg *clk_dce = TO_DCE_CLOCKS(clk);
+ int dprefclk_wdivider;
+@@ -162,54 +189,16 @@ static int dce_clocks_get_dp_ref_freq(struct dccg *clk)
+ dp_ref_clk_khz = (dentist_divider_range_scale_factor
+ * clk_dce->dentist_vco_freq_khz) / target_div;
+
+- /* SW will adjust DP REF Clock average value for all purposes
+- * (DP DTO / DP Audio DTO and DP GTC)
+- if clock is spread for all cases:
+- -if SS enabled on DP Ref clock and HW de-spreading enabled with SW
+- calculations for DS_INCR/DS_MODULO (this is planned to be default case)
+- -if SS enabled on DP Ref clock and HW de-spreading enabled with HW
+- calculations (not planned to be used, but average clock should still
+- be valid)
+- -if SS enabled on DP Ref clock and HW de-spreading disabled
+- (should not be case with CIK) then SW should program all rates
+- generated according to average value (case as with previous ASICs)
+- */
+- if (clk_dce->ss_on_dprefclk && clk_dce->dprefclk_ss_divider != 0) {
+- struct fixed31_32 ss_percentage = dc_fixpt_div_int(
+- dc_fixpt_from_fraction(clk_dce->dprefclk_ss_percentage,
+- clk_dce->dprefclk_ss_divider), 200);
+- struct fixed31_32 adj_dp_ref_clk_khz;
+-
+- ss_percentage = dc_fixpt_sub(dc_fixpt_one, ss_percentage);
+- adj_dp_ref_clk_khz = dc_fixpt_mul_int(ss_percentage, dp_ref_clk_khz);
+- dp_ref_clk_khz = dc_fixpt_floor(adj_dp_ref_clk_khz);
+- }
+-
+- return dp_ref_clk_khz;
++ return dccg_adjust_dp_ref_freq_for_ss(clk_dce, dp_ref_clk_khz);
+ }
+
+-/* TODO: This is DCN DPREFCLK: it could be program by DENTIST by VBIOS
+- * or CLK0_CLK11 by SMU. For DCE120, it is wlays 600Mhz. Will re-visit
+- * clock implementation
+- */
+-static int dce_clocks_get_dp_ref_freq_wrkaround(struct dccg *clk)
++static int dce12_get_dp_ref_freq_khz(struct dccg *clk)
+ {
+ struct dce_dccg *clk_dce = TO_DCE_CLOCKS(clk);
+- int dp_ref_clk_khz = 600000;
+-
+- if (clk_dce->ss_on_dprefclk && clk_dce->dprefclk_ss_divider != 0) {
+- struct fixed31_32 ss_percentage = dc_fixpt_div_int(
+- dc_fixpt_from_fraction(clk_dce->dprefclk_ss_percentage,
+- clk_dce->dprefclk_ss_divider), 200);
+- struct fixed31_32 adj_dp_ref_clk_khz;
+-
+- ss_percentage = dc_fixpt_sub(dc_fixpt_one, ss_percentage);
+- adj_dp_ref_clk_khz = dc_fixpt_mul_int(ss_percentage, dp_ref_clk_khz);
+- dp_ref_clk_khz = dc_fixpt_floor(adj_dp_ref_clk_khz);
+- }
+
+- return dp_ref_clk_khz;
++ return dccg_adjust_dp_ref_freq_for_ss(clk_dce, 600000);
+ }
++
+ static enum dm_pp_clocks_state dce_get_required_clocks_state(
+ struct dccg *clk,
+ struct dc_clocks *req_clocks)
+@@ -590,8 +579,7 @@ static void dcn1_update_clocks(struct dccg *dccg,
+ /* make sure dcf clk is before dpp clk to
+ * make sure we have enough voltage to run dpp clk
+ */
+- if (send_request_to_increase
+- ) {
++ if (send_request_to_increase) {
+ /*use dcfclk to request voltage*/
+ clock_voltage_req.clk_type = DM_PP_CLOCK_TYPE_DCFCLK;
+ clock_voltage_req.clocks_in_khz = dcn_find_dcfclk_suits_all(dc, new_clocks);
+@@ -644,8 +632,7 @@ static void dcn1_update_clocks(struct dccg *dccg,
+ }
+
+ #ifdef CONFIG_DRM_AMD_DC_DCN1_0
+- if (!send_request_to_increase && send_request_to_lower
+- ) {
++ if (!send_request_to_increase && send_request_to_lower) {
+ /*use dcfclk to request voltage*/
+ clock_voltage_req.clk_type = DM_PP_CLOCK_TYPE_DCFCLK;
+ clock_voltage_req.clocks_in_khz = dcn_find_dcfclk_suits_all(dc, new_clocks);
+@@ -685,31 +672,31 @@ static void dce_update_clocks(struct dccg *dccg,
+ }
+
+ static const struct display_clock_funcs dcn1_funcs = {
+- .get_dp_ref_clk_frequency = dce_clocks_get_dp_ref_freq_wrkaround,
++ .get_dp_ref_clk_frequency = dce12_get_dp_ref_freq_khz,
+ .set_dispclk = dce112_set_clock,
+ .update_clocks = dcn1_update_clocks
+ };
+
+ static const struct display_clock_funcs dce120_funcs = {
+- .get_dp_ref_clk_frequency = dce_clocks_get_dp_ref_freq_wrkaround,
++ .get_dp_ref_clk_frequency = dce12_get_dp_ref_freq_khz,
+ .set_dispclk = dce112_set_clock,
+ .update_clocks = dce12_update_clocks
+ };
+
+ static const struct display_clock_funcs dce112_funcs = {
+- .get_dp_ref_clk_frequency = dce_clocks_get_dp_ref_freq,
++ .get_dp_ref_clk_frequency = dce_get_dp_ref_freq_khz,
+ .set_dispclk = dce112_set_clock,
+ .update_clocks = dce_update_clocks
+ };
+
+ static const struct display_clock_funcs dce110_funcs = {
+- .get_dp_ref_clk_frequency = dce_clocks_get_dp_ref_freq,
++ .get_dp_ref_clk_frequency = dce_get_dp_ref_freq_khz,
+ .set_dispclk = dce_psr_set_clock,
+ .update_clocks = dce_update_clocks
+ };
+
+ static const struct display_clock_funcs dce_funcs = {
+- .get_dp_ref_clk_frequency = dce_clocks_get_dp_ref_freq,
++ .get_dp_ref_clk_frequency = dce_get_dp_ref_freq_khz,
+ .set_dispclk = dce_set_clock,
+ .update_clocks = dce_update_clocks
+ };
+@@ -717,9 +704,9 @@ static const struct display_clock_funcs dce_funcs = {
+ static void dce_dccg_construct(
+ struct dce_dccg *clk_dce,
+ struct dc_context *ctx,
+- const struct dce_disp_clk_registers *regs,
+- const struct dce_disp_clk_shift *clk_shift,
+- const struct dce_disp_clk_mask *clk_mask)
++ const struct dccg_registers *regs,
++ const struct dccg_shift *clk_shift,
++ const struct dccg_mask *clk_mask)
+ {
+ struct dccg *base = &clk_dce->base;
+
+@@ -745,9 +732,9 @@ static void dce_dccg_construct(
+
+ struct dccg *dce_dccg_create(
+ struct dc_context *ctx,
+- const struct dce_disp_clk_registers *regs,
+- const struct dce_disp_clk_shift *clk_shift,
+- const struct dce_disp_clk_mask *clk_mask)
++ const struct dccg_registers *regs,
++ const struct dccg_shift *clk_shift,
++ const struct dccg_mask *clk_mask)
+ {
+ struct dce_dccg *clk_dce = kzalloc(sizeof(*clk_dce), GFP_KERNEL);
+
+@@ -768,9 +755,9 @@ struct dccg *dce_dccg_create(
+
+ struct dccg *dce110_dccg_create(
+ struct dc_context *ctx,
+- const struct dce_disp_clk_registers *regs,
+- const struct dce_disp_clk_shift *clk_shift,
+- const struct dce_disp_clk_mask *clk_mask)
++ const struct dccg_registers *regs,
++ const struct dccg_shift *clk_shift,
++ const struct dccg_mask *clk_mask)
+ {
+ struct dce_dccg *clk_dce = kzalloc(sizeof(*clk_dce), GFP_KERNEL);
+
+@@ -793,9 +780,9 @@ struct dccg *dce110_dccg_create(
+
+ struct dccg *dce112_dccg_create(
+ struct dc_context *ctx,
+- const struct dce_disp_clk_registers *regs,
+- const struct dce_disp_clk_shift *clk_shift,
+- const struct dce_disp_clk_mask *clk_mask)
++ const struct dccg_registers *regs,
++ const struct dccg_shift *clk_shift,
++ const struct dccg_mask *clk_mask)
+ {
+ struct dce_dccg *clk_dce = kzalloc(sizeof(*clk_dce), GFP_KERNEL);
+
+diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_clocks.h b/drivers/gpu/drm/amd/display/dc/dce/dce_clocks.h
+index 04a9e3c..be5b68d 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce/dce_clocks.h
++++ b/drivers/gpu/drm/amd/display/dc/dce/dce_clocks.h
+@@ -33,6 +33,9 @@
+ .DPREFCLK_CNTL = mmDPREFCLK_CNTL, \
+ .DENTIST_DISPCLK_CNTL = mmDENTIST_DISPCLK_CNTL
+
++#define CLK_COMMON_REG_LIST_DCN_BASE() \
++ SR(DENTIST_DISPCLK_CNTL)
++
+ #define CLK_SF(reg_name, field_name, post_fix)\
+ .field_name = reg_name ## __ ## field_name ## post_fix
+
+@@ -40,28 +43,34 @@
+ CLK_SF(DPREFCLK_CNTL, DPREFCLK_SRC_SEL, mask_sh), \
+ CLK_SF(DENTIST_DISPCLK_CNTL, DENTIST_DPREFCLK_WDIVIDER, mask_sh)
+
++#define CLK_COMMON_MASK_SH_LIST_DCN_COMMON_BASE(mask_sh) \
++ CLK_SF(DENTIST_DISPCLK_CNTL, DENTIST_DPPCLK_WDIVIDER, mask_sh),\
++ CLK_SF(DENTIST_DISPCLK_CNTL, DENTIST_DISPCLK_WDIVIDER, mask_sh)
++
+ #define CLK_REG_FIELD_LIST(type) \
+ type DPREFCLK_SRC_SEL; \
+- type DENTIST_DPREFCLK_WDIVIDER;
++ type DENTIST_DPREFCLK_WDIVIDER; \
++ type DENTIST_DISPCLK_WDIVIDER; \
++ type DENTIST_DPPCLK_WDIVIDER;
+
+-struct dce_disp_clk_shift {
++struct dccg_shift {
+ CLK_REG_FIELD_LIST(uint8_t)
+ };
+
+-struct dce_disp_clk_mask {
++struct dccg_mask {
+ CLK_REG_FIELD_LIST(uint32_t)
+ };
+
+-struct dce_disp_clk_registers {
++struct dccg_registers {
+ uint32_t DPREFCLK_CNTL;
+ uint32_t DENTIST_DISPCLK_CNTL;
+ };
+
+ struct dce_dccg {
+ struct dccg base;
+- const struct dce_disp_clk_registers *regs;
+- const struct dce_disp_clk_shift *clk_shift;
+- const struct dce_disp_clk_mask *clk_mask;
++ const struct dccg_registers *regs;
++ const struct dccg_shift *clk_shift;
++ const struct dccg_mask *clk_mask;
+
+ struct state_dependent_clocks max_clks_by_state[DM_PP_CLOCKS_MAX_STATES];
+
+@@ -84,21 +93,21 @@ struct dce_dccg {
+
+ struct dccg *dce_dccg_create(
+ struct dc_context *ctx,
+- const struct dce_disp_clk_registers *regs,
+- const struct dce_disp_clk_shift *clk_shift,
+- const struct dce_disp_clk_mask *clk_mask);
++ const struct dccg_registers *regs,
++ const struct dccg_shift *clk_shift,
++ const struct dccg_mask *clk_mask);
+
+ struct dccg *dce110_dccg_create(
+ struct dc_context *ctx,
+- const struct dce_disp_clk_registers *regs,
+- const struct dce_disp_clk_shift *clk_shift,
+- const struct dce_disp_clk_mask *clk_mask);
++ const struct dccg_registers *regs,
++ const struct dccg_shift *clk_shift,
++ const struct dccg_mask *clk_mask);
+
+ struct dccg *dce112_dccg_create(
+ struct dc_context *ctx,
+- const struct dce_disp_clk_registers *regs,
+- const struct dce_disp_clk_shift *clk_shift,
+- const struct dce_disp_clk_mask *clk_mask);
++ const struct dccg_registers *regs,
++ const struct dccg_shift *clk_shift,
++ const struct dccg_mask *clk_mask);
+
+ struct dccg *dce120_dccg_create(struct dc_context *ctx);
+
+diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_hwseq.h b/drivers/gpu/drm/amd/display/dc/dce/dce_hwseq.h
+index 057b8af..0574078 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce/dce_hwseq.h
++++ b/drivers/gpu/drm/amd/display/dc/dce/dce_hwseq.h
+@@ -249,7 +249,6 @@ struct dce_hwseq_registers {
+ uint32_t DISPCLK_FREQ_CHANGE_CNTL;
+ uint32_t RBBMIF_TIMEOUT_DIS;
+ uint32_t RBBMIF_TIMEOUT_DIS_2;
+- uint32_t DENTIST_DISPCLK_CNTL;
+ uint32_t DCHUBBUB_CRC_CTRL;
+ uint32_t DPP_TOP0_DPP_CRC_CTRL;
+ uint32_t DPP_TOP0_DPP_CRC_VAL_R_G;
+@@ -496,8 +495,6 @@ struct dce_hwseq_registers {
+ type DOMAIN7_PGFSM_PWR_STATUS; \
+ type DCFCLK_GATE_DIS; \
+ type DCHUBBUB_GLOBAL_TIMER_REFDIV; \
+- type DENTIST_DPPCLK_WDIVIDER; \
+- type DENTIST_DISPCLK_WDIVIDER; \
+ type VGA_TEST_ENABLE; \
+ type VGA_TEST_RENDER_START; \
+ type D1VGA_MODE_ENABLE; \
+diff --git a/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c b/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c
+index a90c9a6..ad8ad4e 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c
++++ b/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c
+@@ -135,15 +135,15 @@ static const struct dce110_timing_generator_offsets dce100_tg_offsets[] = {
+ .reg_name = mm ## block ## id ## _ ## reg_name
+
+
+-static const struct dce_disp_clk_registers disp_clk_regs = {
++static const struct dccg_registers disp_clk_regs = {
+ CLK_COMMON_REG_LIST_DCE_BASE()
+ };
+
+-static const struct dce_disp_clk_shift disp_clk_shift = {
++static const struct dccg_shift disp_clk_shift = {
+ CLK_COMMON_MASK_SH_LIST_DCE_COMMON_BASE(__SHIFT)
+ };
+
+-static const struct dce_disp_clk_mask disp_clk_mask = {
++static const struct dccg_mask disp_clk_mask = {
+ CLK_COMMON_MASK_SH_LIST_DCE_COMMON_BASE(_MASK)
+ };
+
+diff --git a/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c b/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c
+index 71a401f..3edaa00 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c
++++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c
+@@ -146,15 +146,15 @@ static const struct dce110_timing_generator_offsets dce110_tg_offsets[] = {
+ #define SRI(reg_name, block, id)\
+ .reg_name = mm ## block ## id ## _ ## reg_name
+
+-static const struct dce_disp_clk_registers disp_clk_regs = {
++static const struct dccg_registers disp_clk_regs = {
+ CLK_COMMON_REG_LIST_DCE_BASE()
+ };
+
+-static const struct dce_disp_clk_shift disp_clk_shift = {
++static const struct dccg_shift disp_clk_shift = {
+ CLK_COMMON_MASK_SH_LIST_DCE_COMMON_BASE(__SHIFT)
+ };
+
+-static const struct dce_disp_clk_mask disp_clk_mask = {
++static const struct dccg_mask disp_clk_mask = {
+ CLK_COMMON_MASK_SH_LIST_DCE_COMMON_BASE(_MASK)
+ };
+
+diff --git a/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c b/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c
+index ae5b19d..7529100 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c
++++ b/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c
+@@ -146,15 +146,15 @@ static const struct dce110_timing_generator_offsets dce112_tg_offsets[] = {
+ .reg_name = mm ## block ## id ## _ ## reg_name
+
+
+-static const struct dce_disp_clk_registers disp_clk_regs = {
++static const struct dccg_registers disp_clk_regs = {
+ CLK_COMMON_REG_LIST_DCE_BASE()
+ };
+
+-static const struct dce_disp_clk_shift disp_clk_shift = {
++static const struct dccg_shift disp_clk_shift = {
+ CLK_COMMON_MASK_SH_LIST_DCE_COMMON_BASE(__SHIFT)
+ };
+
+-static const struct dce_disp_clk_mask disp_clk_mask = {
++static const struct dccg_mask disp_clk_mask = {
+ CLK_COMMON_MASK_SH_LIST_DCE_COMMON_BASE(_MASK)
+ };
+
+diff --git a/drivers/gpu/drm/amd/display/dc/dce80/dce80_resource.c b/drivers/gpu/drm/amd/display/dc/dce80/dce80_resource.c
+index 7070053..2ac95ec 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce80/dce80_resource.c
++++ b/drivers/gpu/drm/amd/display/dc/dce80/dce80_resource.c
+@@ -153,15 +153,15 @@ static const struct dce110_timing_generator_offsets dce80_tg_offsets[] = {
+ .reg_name = mm ## block ## id ## _ ## reg_name
+
+
+-static const struct dce_disp_clk_registers disp_clk_regs = {
++static const struct dccg_registers disp_clk_regs = {
+ CLK_COMMON_REG_LIST_DCE_BASE()
+ };
+
+-static const struct dce_disp_clk_shift disp_clk_shift = {
++static const struct dccg_shift disp_clk_shift = {
+ CLK_COMMON_MASK_SH_LIST_DCE_COMMON_BASE(__SHIFT)
+ };
+
+-static const struct dce_disp_clk_mask disp_clk_mask = {
++static const struct dccg_mask disp_clk_mask = {
+ CLK_COMMON_MASK_SH_LIST_DCE_COMMON_BASE(_MASK)
+ };
+
+--
+2.7.4
+