aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.19.8/0277-drm-amd-display-stop-using-switch-for-different-CS-r.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/0277-drm-amd-display-stop-using-switch-for-different-CS-r.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.19.8/0277-drm-amd-display-stop-using-switch-for-different-CS-r.patch521
1 files changed, 521 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/0277-drm-amd-display-stop-using-switch-for-different-CS-r.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/0277-drm-amd-display-stop-using-switch-for-different-CS-r.patch
new file mode 100644
index 00000000..71bf9bde
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/0277-drm-amd-display-stop-using-switch-for-different-CS-r.patch
@@ -0,0 +1,521 @@
+From 76a7ad576572672481ff98c49fc75194964c7c75 Mon Sep 17 00:00:00 2001
+From: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
+Date: Wed, 29 Aug 2018 16:23:59 -0400
+Subject: [PATCH 0277/2940] drm/amd/display: stop using switch for different CS
+ revisions
+
+Clock sources currently have support for asic specific
+function pointers. But actual separation into functions
+was never performed, leaving us with giant functions that
+rely on switch.
+
+This change creates separate functions, removing switch use.
+
+Change-Id: I28e514e57ea5fcd93b44f6d3298ba2323d90a885
+Signed-off-by: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
+Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
+Acked-by: Leo Li <sunpeng.li@amd.com>
+---
+ .../drm/amd/display/dc/dce/dce_clock_source.c | 371 ++++++++++--------
+ .../drm/amd/display/dc/dce/dce_clock_source.h | 9 +
+ .../amd/display/dc/dce112/dce112_resource.c | 2 +-
+ .../amd/display/dc/dce120/dce120_resource.c | 2 +-
+ .../drm/amd/display/dc/dcn10/dcn10_resource.c | 2 +-
+ 5 files changed, 218 insertions(+), 168 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_clock_source.c b/drivers/gpu/drm/amd/display/dc/dce/dce_clock_source.c
+index 7c991c1986a2..00764913f616 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce/dce_clock_source.c
++++ b/drivers/gpu/drm/amd/display/dc/dce/dce_clock_source.c
+@@ -584,34 +584,42 @@ static uint32_t dce110_get_pix_clk_dividers(
+ return 0;
+ }
+
+- switch (cs->ctx->dce_version) {
+- case DCE_VERSION_8_0:
+- case DCE_VERSION_8_1:
+- case DCE_VERSION_8_3:
+- case DCE_VERSION_10_0:
+- case DCE_VERSION_11_0:
+- pll_calc_error =
+- dce110_get_pix_clk_dividers_helper(clk_src,
++ pll_calc_error = dce110_get_pix_clk_dividers_helper(clk_src,
+ pll_settings, pix_clk_params);
+- break;
+- case DCE_VERSION_11_2:
+- case DCE_VERSION_11_22:
+- case DCE_VERSION_12_0:
+-#ifdef CONFIG_X86
+- case DCN_VERSION_1_0:
+-#endif
+
+-#if defined(CONFIG_DRM_AMD_DC_DCN1_01)
+- case DCN_VERSION_1_01:
+-#endif
+- dce112_get_pix_clk_dividers_helper(clk_src,
+- pll_settings, pix_clk_params);
+- break;
+- default:
+- break;
++ return pll_calc_error;
++}
++
++static uint32_t dce112_get_pix_clk_dividers(
++ struct clock_source *cs,
++ struct pixel_clk_params *pix_clk_params,
++ struct pll_settings *pll_settings)
++{
++ struct dce110_clk_src *clk_src = TO_DCE110_CLK_SRC(cs);
++ DC_LOGGER_INIT();
++
++ if (pix_clk_params == NULL || pll_settings == NULL
++ || pix_clk_params->requested_pix_clk == 0) {
++ DC_LOG_ERROR(
++ "%s: Invalid parameters!!\n", __func__);
++ return -1;
+ }
+
+- return pll_calc_error;
++ memset(pll_settings, 0, sizeof(*pll_settings));
++
++ if (cs->id == CLOCK_SOURCE_ID_DP_DTO ||
++ cs->id == CLOCK_SOURCE_ID_EXTERNAL) {
++ pll_settings->adjusted_pix_clk = clk_src->ext_clk_khz;
++ pll_settings->calculated_pix_clk = clk_src->ext_clk_khz;
++ pll_settings->actual_pix_clk =
++ pix_clk_params->requested_pix_clk;
++ return -1;
++ }
++
++ dce112_get_pix_clk_dividers_helper(clk_src,
++ pll_settings, pix_clk_params);
++
++ return 0;
+ }
+
+ static uint32_t dce110_get_pll_pixel_rate_in_hz(
+@@ -917,7 +925,66 @@ static bool dce110_program_pix_clk(
+ struct dce110_clk_src *clk_src = TO_DCE110_CLK_SRC(clock_source);
+ struct bp_pixel_clock_parameters bp_pc_params = {0};
+
+-#ifdef CONFIG_X86
++ /* First disable SS
++ * ATOMBIOS will enable by default SS on PLL for DP,
++ * do not disable it here
++ */
++ if (clock_source->id != CLOCK_SOURCE_ID_EXTERNAL &&
++ !dc_is_dp_signal(pix_clk_params->signal_type) &&
++ clock_source->ctx->dce_version <= DCE_VERSION_11_0)
++ disable_spread_spectrum(clk_src);
++
++ /*ATOMBIOS expects pixel rate adjusted by deep color ratio)*/
++ bp_pc_params.controller_id = pix_clk_params->controller_id;
++ bp_pc_params.pll_id = clock_source->id;
++ bp_pc_params.target_pixel_clock = pll_settings->actual_pix_clk;
++ bp_pc_params.encoder_object_id = pix_clk_params->encoder_object_id;
++ bp_pc_params.signal_type = pix_clk_params->signal_type;
++
++ bp_pc_params.reference_divider = pll_settings->reference_divider;
++ bp_pc_params.feedback_divider = pll_settings->feedback_divider;
++ bp_pc_params.fractional_feedback_divider =
++ pll_settings->fract_feedback_divider;
++ bp_pc_params.pixel_clock_post_divider =
++ pll_settings->pix_clk_post_divider;
++ bp_pc_params.flags.SET_EXTERNAL_REF_DIV_SRC =
++ pll_settings->use_external_clk;
++
++ if (clk_src->bios->funcs->set_pixel_clock(
++ clk_src->bios, &bp_pc_params) != BP_RESULT_OK)
++ return false;
++ /* Enable SS
++ * ATOMBIOS will enable by default SS for DP on PLL ( DP ID clock),
++ * based on HW display PLL team, SS control settings should be programmed
++ * during PLL Reset, but they do not have effect
++ * until SS_EN is asserted.*/
++ if (clock_source->id != CLOCK_SOURCE_ID_EXTERNAL
++ && !dc_is_dp_signal(pix_clk_params->signal_type)) {
++
++ if (pix_clk_params->flags.ENABLE_SS)
++ if (!enable_spread_spectrum(clk_src,
++ pix_clk_params->signal_type,
++ pll_settings))
++ return false;
++
++ /* Resync deep color DTO */
++ dce110_program_pixel_clk_resync(clk_src,
++ pix_clk_params->signal_type,
++ pix_clk_params->color_depth);
++ }
++
++ return true;
++}
++
++static bool dce112_program_pix_clk(
++ struct clock_source *clock_source,
++ struct pixel_clk_params *pix_clk_params,
++ struct pll_settings *pll_settings)
++{
++ struct dce110_clk_src *clk_src = TO_DCE110_CLK_SRC(clock_source);
++ struct bp_pixel_clock_parameters bp_pc_params = {0};
++
++#if defined(CONFIG_DRM_AMD_DC_DCN1_0)
+ if (IS_FPGA_MAXIMUS_DC(clock_source->ctx->dce_environment)) {
+ unsigned int inst = pix_clk_params->controller_id - CONTROLLER_ID_D0;
+ unsigned dp_dto_ref_kHz = 700000;
+@@ -948,82 +1015,29 @@ static bool dce110_program_pix_clk(
+ bp_pc_params.encoder_object_id = pix_clk_params->encoder_object_id;
+ bp_pc_params.signal_type = pix_clk_params->signal_type;
+
+- switch (clock_source->ctx->dce_version) {
+- case DCE_VERSION_8_0:
+- case DCE_VERSION_8_1:
+- case DCE_VERSION_8_3:
+- case DCE_VERSION_10_0:
+- case DCE_VERSION_11_0:
+- bp_pc_params.reference_divider = pll_settings->reference_divider;
+- bp_pc_params.feedback_divider = pll_settings->feedback_divider;
+- bp_pc_params.fractional_feedback_divider =
+- pll_settings->fract_feedback_divider;
+- bp_pc_params.pixel_clock_post_divider =
+- pll_settings->pix_clk_post_divider;
+- bp_pc_params.flags.SET_EXTERNAL_REF_DIV_SRC =
++ if (clock_source->id != CLOCK_SOURCE_ID_DP_DTO) {
++ bp_pc_params.flags.SET_GENLOCK_REF_DIV_SRC =
+ pll_settings->use_external_clk;
+-
+- if (clk_src->bios->funcs->set_pixel_clock(
+- clk_src->bios, &bp_pc_params) != BP_RESULT_OK)
+- return false;
+- /* Enable SS
+- * ATOMBIOS will enable by default SS for DP on PLL ( DP ID clock),
+- * based on HW display PLL team, SS control settings should be programmed
+- * during PLL Reset, but they do not have effect
+- * until SS_EN is asserted.*/
+- if (clock_source->id != CLOCK_SOURCE_ID_EXTERNAL
+- && !dc_is_dp_signal(pix_clk_params->signal_type)) {
+-
+- if (pix_clk_params->flags.ENABLE_SS)
+- if (!enable_spread_spectrum(clk_src,
+- pix_clk_params->signal_type,
+- pll_settings))
+- return false;
+-
+- /* Resync deep color DTO */
+- dce110_program_pixel_clk_resync(clk_src,
+- pix_clk_params->signal_type,
+- pix_clk_params->color_depth);
++ bp_pc_params.flags.SET_XTALIN_REF_SRC =
++ !pll_settings->use_external_clk;
++ if (pix_clk_params->flags.SUPPORT_YCBCR420) {
++ bp_pc_params.flags.SUPPORT_YUV_420 = 1;
+ }
+-
+- break;
+- case DCE_VERSION_11_2:
+- case DCE_VERSION_11_22:
+- case DCE_VERSION_12_0:
+-#ifdef CONFIG_X86
+- case DCN_VERSION_1_0:
+-#endif
+-
+-#if defined(CONFIG_DRM_AMD_DC_DCN1_01)
+- case DCN_VERSION_1_01:
+-#endif
+-
+- if (clock_source->id != CLOCK_SOURCE_ID_DP_DTO) {
+- bp_pc_params.flags.SET_GENLOCK_REF_DIV_SRC =
+- pll_settings->use_external_clk;
+- bp_pc_params.flags.SET_XTALIN_REF_SRC =
+- !pll_settings->use_external_clk;
+- if (pix_clk_params->flags.SUPPORT_YCBCR420) {
+- bp_pc_params.flags.SUPPORT_YUV_420 = 1;
+- }
+- }
+- if (clk_src->bios->funcs->set_pixel_clock(
+- clk_src->bios, &bp_pc_params) != BP_RESULT_OK)
+- return false;
+- /* Resync deep color DTO */
+- if (clock_source->id != CLOCK_SOURCE_ID_DP_DTO)
+- dce112_program_pixel_clk_resync(clk_src,
+- pix_clk_params->signal_type,
+- pix_clk_params->color_depth,
+- pix_clk_params->flags.SUPPORT_YCBCR420);
+- break;
+- default:
+- break;
+ }
++ if (clk_src->bios->funcs->set_pixel_clock(
++ clk_src->bios, &bp_pc_params) != BP_RESULT_OK)
++ return false;
++ /* Resync deep color DTO */
++ if (clock_source->id != CLOCK_SOURCE_ID_DP_DTO)
++ dce112_program_pixel_clk_resync(clk_src,
++ pix_clk_params->signal_type,
++ pix_clk_params->color_depth,
++ pix_clk_params->flags.SUPPORT_YCBCR420);
+
+ return true;
+ }
+
++
+ static bool dce110_clock_source_power_down(
+ struct clock_source *clk_src)
+ {
+@@ -1050,6 +1064,12 @@ static bool dce110_clock_source_power_down(
+ /*****************************************/
+ /* Constructor */
+ /*****************************************/
++
++static const struct clock_source_funcs dce112_clk_src_funcs = {
++ .cs_power_down = dce110_clock_source_power_down,
++ .program_pix_clk = dce112_program_pix_clk,
++ .get_pix_clk_dividers = dce112_get_pix_clk_dividers
++};
+ static const struct clock_source_funcs dce110_clk_src_funcs = {
+ .cs_power_down = dce110_clock_source_power_down,
+ .program_pix_clk = dce110_program_pix_clk,
+@@ -1057,6 +1077,7 @@ static const struct clock_source_funcs dce110_clk_src_funcs = {
+ .get_pix_rate_in_hz = dce110_get_pix_rate_in_hz
+ };
+
++
+ static void get_ss_info_from_atombios(
+ struct dce110_clk_src *clk_src,
+ enum as_signal_type as_signal,
+@@ -1312,81 +1333,70 @@ bool dce110_clk_src_construct(
+ clk_src->ext_clk_khz =
+ fw_info.external_clock_source_frequency_for_dp;
+
+- switch (clk_src->base.ctx->dce_version) {
+- case DCE_VERSION_8_0:
+- case DCE_VERSION_8_1:
+- case DCE_VERSION_8_3:
+- case DCE_VERSION_10_0:
+- case DCE_VERSION_11_0:
+-
+- /* structure normally used with PLL ranges from ATOMBIOS; DS on by default */
+- calc_pll_cs_init_data.bp = bios;
+- calc_pll_cs_init_data.min_pix_clk_pll_post_divider = 1;
+- calc_pll_cs_init_data.max_pix_clk_pll_post_divider =
+- clk_src->cs_mask->PLL_POST_DIV_PIXCLK;
+- calc_pll_cs_init_data.min_pll_ref_divider = 1;
+- calc_pll_cs_init_data.max_pll_ref_divider = clk_src->cs_mask->PLL_REF_DIV;
+- /* when 0 use minInputPxlClkPLLFrequencyInKHz from firmwareInfo*/
+- calc_pll_cs_init_data.min_override_input_pxl_clk_pll_freq_khz = 0;
+- /* when 0 use maxInputPxlClkPLLFrequencyInKHz from firmwareInfo*/
+- calc_pll_cs_init_data.max_override_input_pxl_clk_pll_freq_khz = 0;
+- /*numberOfFractFBDividerDecimalPoints*/
+- calc_pll_cs_init_data.num_fract_fb_divider_decimal_point =
+- FRACT_FB_DIVIDER_DEC_POINTS_MAX_NUM;
+- /*number of decimal point to round off for fractional feedback divider value*/
+- calc_pll_cs_init_data.num_fract_fb_divider_decimal_point_precision =
+- FRACT_FB_DIVIDER_DEC_POINTS_MAX_NUM;
+- calc_pll_cs_init_data.ctx = ctx;
+-
+- /*structure for HDMI, no SS or SS% <= 0.06% for 27 MHz Ref clock */
+- calc_pll_cs_init_data_hdmi.bp = bios;
+- calc_pll_cs_init_data_hdmi.min_pix_clk_pll_post_divider = 1;
+- calc_pll_cs_init_data_hdmi.max_pix_clk_pll_post_divider =
+- clk_src->cs_mask->PLL_POST_DIV_PIXCLK;
+- calc_pll_cs_init_data_hdmi.min_pll_ref_divider = 1;
+- calc_pll_cs_init_data_hdmi.max_pll_ref_divider = clk_src->cs_mask->PLL_REF_DIV;
+- /* when 0 use minInputPxlClkPLLFrequencyInKHz from firmwareInfo*/
+- calc_pll_cs_init_data_hdmi.min_override_input_pxl_clk_pll_freq_khz = 13500;
+- /* when 0 use maxInputPxlClkPLLFrequencyInKHz from firmwareInfo*/
+- calc_pll_cs_init_data_hdmi.max_override_input_pxl_clk_pll_freq_khz = 27000;
+- /*numberOfFractFBDividerDecimalPoints*/
+- calc_pll_cs_init_data_hdmi.num_fract_fb_divider_decimal_point =
+- FRACT_FB_DIVIDER_DEC_POINTS_MAX_NUM;
+- /*number of decimal point to round off for fractional feedback divider value*/
+- calc_pll_cs_init_data_hdmi.num_fract_fb_divider_decimal_point_precision =
+- FRACT_FB_DIVIDER_DEC_POINTS_MAX_NUM;
+- calc_pll_cs_init_data_hdmi.ctx = ctx;
+-
+- clk_src->ref_freq_khz = fw_info.pll_info.crystal_frequency;
+-
+- if (clk_src->base.id == CLOCK_SOURCE_ID_EXTERNAL)
+- return true;
+-
+- /* PLL only from here on */
+- ss_info_from_atombios_create(clk_src);
+-
+- if (!calc_pll_max_vco_construct(
+- &clk_src->calc_pll,
+- &calc_pll_cs_init_data)) {
+- ASSERT_CRITICAL(false);
+- goto unexpected_failure;
+- }
++ /* structure normally used with PLL ranges from ATOMBIOS; DS on by default */
++ calc_pll_cs_init_data.bp = bios;
++ calc_pll_cs_init_data.min_pix_clk_pll_post_divider = 1;
++ calc_pll_cs_init_data.max_pix_clk_pll_post_divider =
++ clk_src->cs_mask->PLL_POST_DIV_PIXCLK;
++ calc_pll_cs_init_data.min_pll_ref_divider = 1;
++ calc_pll_cs_init_data.max_pll_ref_divider = clk_src->cs_mask->PLL_REF_DIV;
++ /* when 0 use minInputPxlClkPLLFrequencyInKHz from firmwareInfo*/
++ calc_pll_cs_init_data.min_override_input_pxl_clk_pll_freq_khz = 0;
++ /* when 0 use maxInputPxlClkPLLFrequencyInKHz from firmwareInfo*/
++ calc_pll_cs_init_data.max_override_input_pxl_clk_pll_freq_khz = 0;
++ /*numberOfFractFBDividerDecimalPoints*/
++ calc_pll_cs_init_data.num_fract_fb_divider_decimal_point =
++ FRACT_FB_DIVIDER_DEC_POINTS_MAX_NUM;
++ /*number of decimal point to round off for fractional feedback divider value*/
++ calc_pll_cs_init_data.num_fract_fb_divider_decimal_point_precision =
++ FRACT_FB_DIVIDER_DEC_POINTS_MAX_NUM;
++ calc_pll_cs_init_data.ctx = ctx;
++
++ /*structure for HDMI, no SS or SS% <= 0.06% for 27 MHz Ref clock */
++ calc_pll_cs_init_data_hdmi.bp = bios;
++ calc_pll_cs_init_data_hdmi.min_pix_clk_pll_post_divider = 1;
++ calc_pll_cs_init_data_hdmi.max_pix_clk_pll_post_divider =
++ clk_src->cs_mask->PLL_POST_DIV_PIXCLK;
++ calc_pll_cs_init_data_hdmi.min_pll_ref_divider = 1;
++ calc_pll_cs_init_data_hdmi.max_pll_ref_divider = clk_src->cs_mask->PLL_REF_DIV;
++ /* when 0 use minInputPxlClkPLLFrequencyInKHz from firmwareInfo*/
++ calc_pll_cs_init_data_hdmi.min_override_input_pxl_clk_pll_freq_khz = 13500;
++ /* when 0 use maxInputPxlClkPLLFrequencyInKHz from firmwareInfo*/
++ calc_pll_cs_init_data_hdmi.max_override_input_pxl_clk_pll_freq_khz = 27000;
++ /*numberOfFractFBDividerDecimalPoints*/
++ calc_pll_cs_init_data_hdmi.num_fract_fb_divider_decimal_point =
++ FRACT_FB_DIVIDER_DEC_POINTS_MAX_NUM;
++ /*number of decimal point to round off for fractional feedback divider value*/
++ calc_pll_cs_init_data_hdmi.num_fract_fb_divider_decimal_point_precision =
++ FRACT_FB_DIVIDER_DEC_POINTS_MAX_NUM;
++ calc_pll_cs_init_data_hdmi.ctx = ctx;
++
++ clk_src->ref_freq_khz = fw_info.pll_info.crystal_frequency;
++
++ if (clk_src->base.id == CLOCK_SOURCE_ID_EXTERNAL)
++ return true;
+
++ /* PLL only from here on */
++ ss_info_from_atombios_create(clk_src);
+
+- calc_pll_cs_init_data_hdmi.
+- min_override_input_pxl_clk_pll_freq_khz = clk_src->ref_freq_khz/2;
+- calc_pll_cs_init_data_hdmi.
+- max_override_input_pxl_clk_pll_freq_khz = clk_src->ref_freq_khz;
++ if (!calc_pll_max_vco_construct(
++ &clk_src->calc_pll,
++ &calc_pll_cs_init_data)) {
++ ASSERT_CRITICAL(false);
++ goto unexpected_failure;
++ }
+
+
+- if (!calc_pll_max_vco_construct(
+- &clk_src->calc_pll_hdmi, &calc_pll_cs_init_data_hdmi)) {
+- ASSERT_CRITICAL(false);
+- goto unexpected_failure;
+- }
+- break;
+- default:
+- break;
++ calc_pll_cs_init_data_hdmi.
++ min_override_input_pxl_clk_pll_freq_khz = clk_src->ref_freq_khz/2;
++ calc_pll_cs_init_data_hdmi.
++ max_override_input_pxl_clk_pll_freq_khz = clk_src->ref_freq_khz;
++
++
++ if (!calc_pll_max_vco_construct(
++ &clk_src->calc_pll_hdmi, &calc_pll_cs_init_data_hdmi)) {
++ ASSERT_CRITICAL(false);
++ goto unexpected_failure;
+ }
+
+ return true;
+@@ -1395,3 +1405,34 @@ bool dce110_clk_src_construct(
+ return false;
+ }
+
++bool dce112_clk_src_construct(
++ struct dce110_clk_src *clk_src,
++ struct dc_context *ctx,
++ struct dc_bios *bios,
++ enum clock_source_id id,
++ const struct dce110_clk_src_regs *regs,
++ const struct dce110_clk_src_shift *cs_shift,
++ const struct dce110_clk_src_mask *cs_mask)
++{
++ struct dc_firmware_info fw_info = { { 0 } };
++
++ clk_src->base.ctx = ctx;
++ clk_src->bios = bios;
++ clk_src->base.id = id;
++ clk_src->base.funcs = &dce112_clk_src_funcs;
++
++ clk_src->regs = regs;
++ clk_src->cs_shift = cs_shift;
++ clk_src->cs_mask = cs_mask;
++
++ if (clk_src->bios->funcs->get_firmware_info(
++ clk_src->bios, &fw_info) != BP_RESULT_OK) {
++ ASSERT_CRITICAL(false);
++ return false;
++ }
++
++ clk_src->ext_clk_khz = fw_info.external_clock_source_frequency_for_dp;
++
++ return true;
++}
++
+diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_clock_source.h b/drivers/gpu/drm/amd/display/dc/dce/dce_clock_source.h
+index e1f20ed18e3e..b8e0e2c2c465 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce/dce_clock_source.h
++++ b/drivers/gpu/drm/amd/display/dc/dce/dce_clock_source.h
+@@ -144,4 +144,13 @@ bool dce110_clk_src_construct(
+ const struct dce110_clk_src_shift *cs_shift,
+ const struct dce110_clk_src_mask *cs_mask);
+
++bool dce112_clk_src_construct(
++ struct dce110_clk_src *clk_src,
++ struct dc_context *ctx,
++ struct dc_bios *bios,
++ enum clock_source_id id,
++ const struct dce110_clk_src_regs *regs,
++ const struct dce110_clk_src_shift *cs_shift,
++ const struct dce110_clk_src_mask *cs_mask);
++
+ #endif
+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 d35dc730e01c..f3d55a614300 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c
++++ b/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c
+@@ -668,7 +668,7 @@ struct clock_source *dce112_clock_source_create(
+ if (!clk_src)
+ return NULL;
+
+- if (dce110_clk_src_construct(clk_src, ctx, bios, id,
++ if (dce112_clk_src_construct(clk_src, ctx, bios, id,
+ regs, &cs_shift, &cs_mask)) {
+ clk_src->base.dp_clk_src = dp_clk_src;
+ return &clk_src->base;
+diff --git a/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c b/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c
+index b2fb06f37648..8afa43a77d6f 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c
++++ b/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c
+@@ -455,7 +455,7 @@ struct clock_source *dce120_clock_source_create(
+ if (!clk_src)
+ return NULL;
+
+- if (dce110_clk_src_construct(clk_src, ctx, bios, id,
++ if (dce112_clk_src_construct(clk_src, ctx, bios, id,
+ regs, &cs_shift, &cs_mask)) {
+ clk_src->base.dp_clk_src = dp_clk_src;
+ return &clk_src->base;
+diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c
+index e44031e0548b..e8a22d5ebc83 100644
+--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c
++++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c
+@@ -748,7 +748,7 @@ struct clock_source *dcn10_clock_source_create(
+ if (!clk_src)
+ return NULL;
+
+- if (dce110_clk_src_construct(clk_src, ctx, bios, id,
++ if (dce112_clk_src_construct(clk_src, ctx, bios, id,
+ regs, &cs_shift, &cs_mask)) {
+ clk_src->base.dp_clk_src = dp_clk_src;
+ return &clk_src->base;
+--
+2.17.1
+