aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/1018-drm-amd-display-Use-100-Hz-precision-for-pipe-pixel-.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/1018-drm-amd-display-Use-100-Hz-precision-for-pipe-pixel-.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/1018-drm-amd-display-Use-100-Hz-precision-for-pipe-pixel-.patch1384
1 files changed, 1384 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/1018-drm-amd-display-Use-100-Hz-precision-for-pipe-pixel-.patch b/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/1018-drm-amd-display-Use-100-Hz-precision-for-pipe-pixel-.patch
new file mode 100644
index 00000000..c09d8df9
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/1018-drm-amd-display-Use-100-Hz-precision-for-pipe-pixel-.patch
@@ -0,0 +1,1384 @@
+From a348ee60a1f499f7bdea6c9a31d027cf9990d3c0 Mon Sep 17 00:00:00 2001
+From: Ken Chalmers <ken.chalmers@amd.com>
+Date: Tue, 6 Nov 2018 14:24:12 -0500
+Subject: [PATCH 1018/2940] drm/amd/display: Use 100 Hz precision for pipe
+ pixel clocks
+
+[Why]
+Users would like more accurate pixel clocks, especially for fractional
+"TV" frame rates like 59.94 Hz.
+
+[How]
+Store and communicate pixel clocks with 100 Hz accuracy from
+dc_crtc_timing through to BIOS command table setpixelclock call.
+
+Signed-off-by: Ken Chalmers <ken.chalmers@amd.com>
+Reviewed-by: Charlene Liu <Charlene.Liu@amd.com>
+Acked-by: Leo Li <sunpeng.li@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 8 +-
+ .../amd/display/amdgpu_dm/amdgpu_dm_helpers.c | 2 +-
+ .../drm/amd/display/dc/bios/command_table.c | 19 +-
+ .../drm/amd/display/dc/bios/command_table2.c | 6 +-
+ .../gpu/drm/amd/display/dc/calcs/dce_calcs.c | 10 +-
+ .../gpu/drm/amd/display/dc/calcs/dcn_calcs.c | 10 +-
+ drivers/gpu/drm/amd/display/dc/core/dc.c | 2 +-
+ drivers/gpu/drm/amd/display/dc/core/dc_link.c | 22 +-
+ .../gpu/drm/amd/display/dc/core/dc_link_dp.c | 4 +-
+ .../drm/amd/display/dc/core/dc_link_hwss.c | 4 +-
+ .../gpu/drm/amd/display/dc/core/dc_resource.c | 10 +-
+ .../gpu/drm/amd/display/dc/core/dc_stream.c | 4 +-
+ drivers/gpu/drm/amd/display/dc/dc_hw_types.h | 2 +-
+ .../gpu/drm/amd/display/dc/dce/dce_clk_mgr.c | 12 +-
+ .../drm/amd/display/dc/dce/dce_clock_source.c | 196 +++++++++---------
+ .../drm/amd/display/dc/dce/dce_link_encoder.c | 6 +-
+ .../amd/display/dc/dce/dce_stream_encoder.c | 4 +-
+ .../display/dc/dce110/dce110_hw_sequencer.c | 20 +-
+ .../amd/display/dc/dce110/dce110_resource.c | 10 +-
+ .../display/dc/dce80/dce80_timing_generator.c | 8 +-
+ .../amd/display/dc/dcn10/dcn10_hw_sequencer.c | 2 +-
+ .../dc/dcn10/dcn10_hw_sequencer_debug.c | 2 +-
+ .../amd/display/dc/dcn10/dcn10_link_encoder.c | 18 +-
+ .../gpu/drm/amd/display/dc/dcn10/dcn10_optc.c | 2 +-
+ .../drm/amd/display/dc/dcn10/dcn10_resource.c | 6 +-
+ .../display/dc/dcn10/dcn10_stream_encoder.c | 2 +-
+ .../gpu/drm/amd/display/dc/inc/clock_source.h | 8 +-
+ .../amd/display/include/bios_parser_types.h | 4 +-
+ .../amd/display/modules/freesync/freesync.c | 12 +-
+ 29 files changed, 206 insertions(+), 209 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+index 99bee5f136b7..09acccfbffec 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+@@ -2596,7 +2596,7 @@ get_output_color_space(const struct dc_crtc_timing *dc_crtc_timing)
+ * according to HDMI spec, we use YCbCr709 and YCbCr601
+ * respectively
+ */
+- if (dc_crtc_timing->pix_clk_khz > 27030) {
++ if (dc_crtc_timing->pix_clk_100hz > 270300) {
+ if (dc_crtc_timing->flags.Y_ONLY)
+ color_space =
+ COLOR_SPACE_YCBCR709_LIMITED;
+@@ -2639,7 +2639,7 @@ static void adjust_colour_depth_from_display_info(struct dc_crtc_timing *timing_
+ if (timing_out->display_color_depth <= COLOR_DEPTH_888)
+ return;
+ do {
+- normalized_clk = timing_out->pix_clk_khz;
++ normalized_clk = timing_out->pix_clk_100hz / 10;
+ /* YCbCr 4:2:0 requires additional adjustment of 1/2 */
+ if (timing_out->pixel_encoding == PIXEL_ENCODING_YCBCR420)
+ normalized_clk /= 2;
+@@ -2720,7 +2720,7 @@ fill_stream_properties_from_drm_display_mode(struct dc_stream_state *stream,
+ mode_in->crtc_vsync_start - mode_in->crtc_vdisplay;
+ timing_out->v_sync_width =
+ mode_in->crtc_vsync_end - mode_in->crtc_vsync_start;
+- timing_out->pix_clk_khz = mode_in->crtc_clock;
++ timing_out->pix_clk_100hz = mode_in->crtc_clock * 10;
+ timing_out->aspect_ratio = get_aspect_ratio(mode_in);
+
+ stream->output_color_space = get_output_color_space(timing_out);
+@@ -2848,7 +2848,7 @@ static void set_master_stream(struct dc_stream_state *stream_set[],
+ if (stream_set[j] && stream_set[j]->triggered_crtc_reset.enabled) {
+ int refresh_rate = 0;
+
+- refresh_rate = (stream_set[j]->timing.pix_clk_khz*1000)/
++ refresh_rate = (stream_set[j]->timing.pix_clk_100hz*100)/
+ (stream_set[j]->timing.h_total*stream_set[j]->timing.v_total);
+ if (refresh_rate > highest_rfr) {
+ highest_rfr = refresh_rate;
+diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c
+index b0bc8314c6d5..e6ab0186955c 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c
+@@ -205,7 +205,7 @@ bool dm_helpers_dp_mst_write_payload_allocation_table(
+ mst_port = aconnector->port;
+
+ if (enable) {
+- clock = stream->timing.pix_clk_khz;
++ clock = stream->timing.pix_clk_100hz / 10;
+
+ switch (stream->timing.display_color_depth) {
+
+diff --git a/drivers/gpu/drm/amd/display/dc/bios/command_table.c b/drivers/gpu/drm/amd/display/dc/bios/command_table.c
+index 2bd7cd97e00d..67c119bf6bf7 100644
+--- a/drivers/gpu/drm/amd/display/dc/bios/command_table.c
++++ b/drivers/gpu/drm/amd/display/dc/bios/command_table.c
+@@ -964,9 +964,9 @@ static enum bp_result set_pixel_clock_v3(
+ allocation.sPCLKInput.ucPostDiv =
+ (uint8_t)bp_params->pixel_clock_post_divider;
+
+- /* We need to convert from KHz units into 10KHz units */
++ /* We need to convert from 100Hz units into 10KHz units */
+ allocation.sPCLKInput.usPixelClock =
+- cpu_to_le16((uint16_t)(bp_params->target_pixel_clock / 10));
++ cpu_to_le16((uint16_t)(bp_params->target_pixel_clock_100hz / 100));
+
+ params = (PIXEL_CLOCK_PARAMETERS_V3 *)&allocation.sPCLKInput;
+ params->ucTransmitterId =
+@@ -1042,9 +1042,9 @@ static enum bp_result set_pixel_clock_v5(
+ (uint8_t)bp->cmd_helper->encoder_mode_bp_to_atom(
+ bp_params->signal_type, false);
+
+- /* We need to convert from KHz units into 10KHz units */
++ /* We need to convert from 100Hz units into 10KHz units */
+ clk.sPCLKInput.usPixelClock =
+- cpu_to_le16((uint16_t)(bp_params->target_pixel_clock / 10));
++ cpu_to_le16((uint16_t)(bp_params->target_pixel_clock_100hz / 100));
+
+ if (bp_params->flags.FORCE_PROGRAMMING_OF_PLL)
+ clk.sPCLKInput.ucMiscInfo |=
+@@ -1118,9 +1118,9 @@ static enum bp_result set_pixel_clock_v6(
+ (uint8_t) bp->cmd_helper->encoder_mode_bp_to_atom(
+ bp_params->signal_type, false);
+
+- /* We need to convert from KHz units into 10KHz units */
++ /* We need to convert from 100 Hz units into 10KHz units */
+ clk.sPCLKInput.ulCrtcPclkFreq.ulPixelClock =
+- cpu_to_le32(bp_params->target_pixel_clock / 10);
++ cpu_to_le32(bp_params->target_pixel_clock_100hz / 100);
+
+ if (bp_params->flags.FORCE_PROGRAMMING_OF_PLL) {
+ clk.sPCLKInput.ucMiscInfo |=
+@@ -1182,8 +1182,7 @@ static enum bp_result set_pixel_clock_v7(
+ clk.ucTransmitterID = bp->cmd_helper->encoder_id_to_atom(dal_graphics_object_id_get_encoder_id(bp_params->encoder_object_id));
+ clk.ucEncoderMode = (uint8_t) bp->cmd_helper->encoder_mode_bp_to_atom(bp_params->signal_type, false);
+
+- /* We need to convert from KHz units into 10KHz units */
+- clk.ulPixelClock = cpu_to_le32(bp_params->target_pixel_clock * 10);
++ clk.ulPixelClock = cpu_to_le32(bp_params->target_pixel_clock_100hz);
+
+ clk.ucDeepColorRatio = (uint8_t) bp->cmd_helper->transmitter_color_depth_to_atom(bp_params->color_depth);
+
+@@ -2164,7 +2163,7 @@ static enum bp_result program_clock_v5(
+ /* We need to convert from KHz units into 10KHz units */
+ params.sPCLKInput.ucPpll = (uint8_t) atom_pll_id;
+ params.sPCLKInput.usPixelClock =
+- cpu_to_le16((uint16_t) (bp_params->target_pixel_clock / 10));
++ cpu_to_le16((uint16_t) (bp_params->target_pixel_clock_100hz / 100));
+ params.sPCLKInput.ucCRTC = (uint8_t) ATOM_CRTC_INVALID;
+
+ if (bp_params->flags.SET_EXTERNAL_REF_DIV_SRC)
+@@ -2196,7 +2195,7 @@ static enum bp_result program_clock_v6(
+ /* We need to convert from KHz units into 10KHz units */
+ params.sPCLKInput.ucPpll = (uint8_t)atom_pll_id;
+ params.sPCLKInput.ulDispEngClkFreq =
+- cpu_to_le32(bp_params->target_pixel_clock / 10);
++ cpu_to_le32(bp_params->target_pixel_clock_100hz / 100);
+
+ if (bp_params->flags.SET_EXTERNAL_REF_DIV_SRC)
+ params.sPCLKInput.ucMiscInfo |= PIXEL_CLOCK_MISC_REF_DIV_SRC;
+diff --git a/drivers/gpu/drm/amd/display/dc/bios/command_table2.c b/drivers/gpu/drm/amd/display/dc/bios/command_table2.c
+index 2b5dc499a35e..7d3e57765eb2 100644
+--- a/drivers/gpu/drm/amd/display/dc/bios/command_table2.c
++++ b/drivers/gpu/drm/amd/display/dc/bios/command_table2.c
+@@ -301,9 +301,7 @@ static enum bp_result set_pixel_clock_v7(
+ cmd_helper->encoder_mode_bp_to_atom(
+ bp_params->signal_type, false);
+
+- /* We need to convert from KHz units into 10KHz units */
+- clk.pixclk_100hz = cpu_to_le32(bp_params->target_pixel_clock *
+- 10);
++ clk.pixclk_100hz = cpu_to_le32(bp_params->target_pixel_clock_100hz);
+
+ clk.deep_color_ratio =
+ (uint8_t) bp->cmd_helper->
+@@ -311,7 +309,7 @@ static enum bp_result set_pixel_clock_v7(
+ bp_params->color_depth);
+ DC_LOG_BIOS("%s:program display clock = %d"\
+ "colorDepth = %d\n", __func__,\
+- bp_params->target_pixel_clock, bp_params->color_depth);
++ bp_params->target_pixel_clock_100hz, bp_params->color_depth);
+
+ if (bp_params->flags.FORCE_PROGRAMMING_OF_PLL)
+ clk.miscinfo |= PIXEL_CLOCK_V7_MISC_FORCE_PROG_PPLL;
+diff --git a/drivers/gpu/drm/amd/display/dc/calcs/dce_calcs.c b/drivers/gpu/drm/amd/display/dc/calcs/dce_calcs.c
+index 9ebe30ba4dab..f3aa7b53d2aa 100644
+--- a/drivers/gpu/drm/amd/display/dc/calcs/dce_calcs.c
++++ b/drivers/gpu/drm/amd/display/dc/calcs/dce_calcs.c
+@@ -2792,7 +2792,7 @@ static void populate_initial_data(
+ data->lpt_en[num_displays + 4] = false;
+ data->h_total[num_displays + 4] = bw_int_to_fixed(pipe[i].stream->timing.h_total);
+ data->v_total[num_displays + 4] = bw_int_to_fixed(pipe[i].stream->timing.v_total);
+- data->pixel_rate[num_displays + 4] = bw_frc_to_fixed(pipe[i].stream->timing.pix_clk_khz, 1000);
++ data->pixel_rate[num_displays + 4] = bw_frc_to_fixed(pipe[i].stream->timing.pix_clk_100hz, 10000);
+ data->src_width[num_displays + 4] = bw_int_to_fixed(pipe[i].plane_res.scl_data.viewport.width);
+ data->pitch_in_pixels[num_displays + 4] = data->src_width[num_displays + 4];
+ data->src_height[num_displays + 4] = bw_int_to_fixed(pipe[i].plane_res.scl_data.viewport.height);
+@@ -2881,7 +2881,7 @@ static void populate_initial_data(
+
+ /* Pipes without underlay after */
+ for (i = 0; i < pipe_count; i++) {
+- unsigned int pixel_clock_khz;
++ unsigned int pixel_clock_100hz;
+ if (!pipe[i].stream || pipe[i].bottom_pipe)
+ continue;
+
+@@ -2890,10 +2890,10 @@ static void populate_initial_data(
+ data->lpt_en[num_displays + 4] = false;
+ data->h_total[num_displays + 4] = bw_int_to_fixed(pipe[i].stream->timing.h_total);
+ data->v_total[num_displays + 4] = bw_int_to_fixed(pipe[i].stream->timing.v_total);
+- pixel_clock_khz = pipe[i].stream->timing.pix_clk_khz;
++ pixel_clock_100hz = pipe[i].stream->timing.pix_clk_100hz;
+ if (pipe[i].stream->timing.timing_3d_format == TIMING_3D_FORMAT_HW_FRAME_PACKING)
+- pixel_clock_khz *= 2;
+- data->pixel_rate[num_displays + 4] = bw_frc_to_fixed(pixel_clock_khz, 1000);
++ pixel_clock_100hz *= 2;
++ data->pixel_rate[num_displays + 4] = bw_frc_to_fixed(pixel_clock_100hz, 10000);
+ if (pipe[i].plane_state) {
+ data->src_width[num_displays + 4] = bw_int_to_fixed(pipe[i].plane_res.scl_data.viewport.width);
+ data->pitch_in_pixels[num_displays + 4] = data->src_width[num_displays + 4];
+diff --git a/drivers/gpu/drm/amd/display/dc/calcs/dcn_calcs.c b/drivers/gpu/drm/amd/display/dc/calcs/dcn_calcs.c
+index a9566d5ce533..953b4efbcffe 100644
+--- a/drivers/gpu/drm/amd/display/dc/calcs/dcn_calcs.c
++++ b/drivers/gpu/drm/amd/display/dc/calcs/dcn_calcs.c
+@@ -416,7 +416,7 @@ static void pipe_ctx_to_e2e_pipe_params (
+ - pipe->stream->timing.v_addressable
+ - pipe->stream->timing.v_border_bottom
+ - pipe->stream->timing.v_border_top;
+- input->dest.pixel_rate_mhz = pipe->stream->timing.pix_clk_khz/1000.0;
++ input->dest.pixel_rate_mhz = pipe->stream->timing.pix_clk_100hz/10000.0;
+ input->dest.vstartup_start = pipe->pipe_dlg_param.vstartup_start;
+ input->dest.vupdate_offset = pipe->pipe_dlg_param.vupdate_offset;
+ input->dest.vupdate_offset = pipe->pipe_dlg_param.vupdate_offset;
+@@ -663,9 +663,9 @@ static void hack_disable_optional_pipe_split(struct dcn_bw_internal_vars *v)
+ }
+
+ static void hack_force_pipe_split(struct dcn_bw_internal_vars *v,
+- unsigned int pixel_rate_khz)
++ unsigned int pixel_rate_100hz)
+ {
+- float pixel_rate_mhz = pixel_rate_khz / 1000;
++ float pixel_rate_mhz = pixel_rate_100hz / 10000;
+
+ /*
+ * force enabling pipe split by lower dpp clock for DPM0 to just
+@@ -688,7 +688,7 @@ static void hack_bounding_box(struct dcn_bw_internal_vars *v,
+
+ if (context->stream_count == 1 &&
+ dbg->force_single_disp_pipe_split)
+- hack_force_pipe_split(v, context->streams[0]->timing.pix_clk_khz);
++ hack_force_pipe_split(v, context->streams[0]->timing.pix_clk_100hz);
+ }
+
+ bool dcn_validate_bandwidth(
+@@ -845,7 +845,7 @@ bool dcn_validate_bandwidth(
+ v->v_sync_plus_back_porch[input_idx] = pipe->stream->timing.v_total
+ - v->vactive[input_idx]
+ - pipe->stream->timing.v_front_porch;
+- v->pixel_clock[input_idx] = pipe->stream->timing.pix_clk_khz/1000.0;
++ v->pixel_clock[input_idx] = pipe->stream->timing.pix_clk_100hz/10000.0;
+ if (pipe->stream->timing.timing_3d_format == TIMING_3D_FORMAT_HW_FRAME_PACKING)
+ v->pixel_clock[input_idx] *= 2;
+ if (!pipe->plane_state) {
+diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c
+index 8c215f41a0e4..d0971df201c8 100644
+--- a/drivers/gpu/drm/amd/display/dc/core/dc.c
++++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
+@@ -1079,7 +1079,7 @@ static enum dc_status dc_commit_state_no_check(struct dc *dc, struct dc_state *c
+ context->streams[i]->timing.v_addressable,
+ context->streams[i]->timing.h_total,
+ context->streams[i]->timing.v_total,
+- context->streams[i]->timing.pix_clk_khz);
++ context->streams[i]->timing.pix_clk_100hz / 10);
+ }
+
+ dc_enable_stereo(dc, context, dc_streams, context->stream_count);
+diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link.c b/drivers/gpu/drm/amd/display/dc/core/dc_link.c
+index 14bd422d8b86..4bd49aafb5bd 100644
+--- a/drivers/gpu/drm/amd/display/dc/core/dc_link.c
++++ b/drivers/gpu/drm/amd/display/dc/core/dc_link.c
+@@ -1934,7 +1934,7 @@ static void enable_link_hdmi(struct pipe_ctx *pipe_ctx)
+ && (stream->timing.v_addressable == 480);
+
+ if (stream->phy_pix_clk == 0)
+- stream->phy_pix_clk = stream->timing.pix_clk_khz;
++ stream->phy_pix_clk = stream->timing.pix_clk_100hz / 10;
+ if (stream->phy_pix_clk > 340000)
+ is_over_340mhz = true;
+
+@@ -1988,7 +1988,7 @@ static void enable_link_lvds(struct pipe_ctx *pipe_ctx)
+ struct dc_link *link = stream->link;
+
+ if (stream->phy_pix_clk == 0)
+- stream->phy_pix_clk = stream->timing.pix_clk_khz;
++ stream->phy_pix_clk = stream->timing.pix_clk_100hz / 10;
+
+ memset(&stream->link->cur_link_settings, 0,
+ sizeof(struct dc_link_settings));
+@@ -2063,7 +2063,7 @@ static bool dp_active_dongle_validate_timing(
+ const struct dc_crtc_timing *timing,
+ const struct dpcd_caps *dpcd_caps)
+ {
+- unsigned int required_pix_clk = timing->pix_clk_khz;
++ unsigned int required_pix_clk_100hz = timing->pix_clk_100hz;
+ const struct dc_dongle_caps *dongle_caps = &dpcd_caps->dongle_caps;
+
+ switch (dpcd_caps->dongle_type) {
+@@ -2103,9 +2103,9 @@ static bool dp_active_dongle_validate_timing(
+
+ /* Check Color Depth and Pixel Clock */
+ if (timing->pixel_encoding == PIXEL_ENCODING_YCBCR420)
+- required_pix_clk /= 2;
++ required_pix_clk_100hz /= 2;
+ else if (timing->pixel_encoding == PIXEL_ENCODING_YCBCR422)
+- required_pix_clk = required_pix_clk * 2 / 3;
++ required_pix_clk_100hz = required_pix_clk_100hz * 2 / 3;
+
+ switch (timing->display_color_depth) {
+ case COLOR_DEPTH_666:
+@@ -2115,12 +2115,12 @@ static bool dp_active_dongle_validate_timing(
+ case COLOR_DEPTH_101010:
+ if (dongle_caps->dp_hdmi_max_bpc < 10)
+ return false;
+- required_pix_clk = required_pix_clk * 10 / 8;
++ required_pix_clk_100hz = required_pix_clk_100hz * 10 / 8;
+ break;
+ case COLOR_DEPTH_121212:
+ if (dongle_caps->dp_hdmi_max_bpc < 12)
+ return false;
+- required_pix_clk = required_pix_clk * 12 / 8;
++ required_pix_clk_100hz = required_pix_clk_100hz * 12 / 8;
+ break;
+
+ case COLOR_DEPTH_141414:
+@@ -2130,7 +2130,7 @@ static bool dp_active_dongle_validate_timing(
+ return false;
+ }
+
+- if (required_pix_clk > dongle_caps->dp_hdmi_max_pixel_clk)
++ if (required_pix_clk_100hz > (dongle_caps->dp_hdmi_max_pixel_clk * 10))
+ return false;
+
+ return true;
+@@ -2141,7 +2141,7 @@ enum dc_status dc_link_validate_mode_timing(
+ struct dc_link *link,
+ const struct dc_crtc_timing *timing)
+ {
+- uint32_t max_pix_clk = stream->link->dongle_max_pix_clk;
++ uint32_t max_pix_clk = stream->link->dongle_max_pix_clk * 10;
+ struct dpcd_caps *dpcd_caps = &link->dpcd_caps;
+
+ /* A hack to avoid failing any modes for EDID override feature on
+@@ -2151,7 +2151,7 @@ enum dc_status dc_link_validate_mode_timing(
+ return DC_OK;
+
+ /* Passive Dongle */
+- if (0 != max_pix_clk && timing->pix_clk_khz > max_pix_clk)
++ if (0 != max_pix_clk && timing->pix_clk_100hz > max_pix_clk)
+ return DC_EXCEED_DONGLE_CAP;
+
+ /* Active Dongle*/
+@@ -2301,7 +2301,7 @@ static struct fixed31_32 get_pbn_from_timing(struct pipe_ctx *pipe_ctx)
+ uint32_t denominator;
+
+ bpc = get_color_depth(pipe_ctx->stream_res.pix_clk_params.color_depth);
+- kbps = pipe_ctx->stream_res.pix_clk_params.requested_pix_clk * bpc * 3;
++ kbps = pipe_ctx->stream_res.pix_clk_params.requested_pix_clk_100hz / 10 * bpc * 3;
+
+ /*
+ * margin 5300ppm + 300ppm ~ 0.6% as per spec, factor is 1.006
+diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c b/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c
+index 39562c93808d..568fdc9423e6 100644
+--- a/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c
++++ b/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c
+@@ -1542,7 +1542,7 @@ static uint32_t bandwidth_in_kbps_from_timing(
+
+ ASSERT(bits_per_channel != 0);
+
+- kbps = timing->pix_clk_khz;
++ kbps = timing->pix_clk_100hz / 10;
+ kbps *= bits_per_channel;
+
+ if (timing->flags.Y_ONLY != 1) {
+@@ -1584,7 +1584,7 @@ bool dp_validate_mode_timing(
+ const struct dc_link_settings *link_setting;
+
+ /*always DP fail safe mode*/
+- if (timing->pix_clk_khz == (uint32_t) 25175 &&
++ if ((timing->pix_clk_100hz / 10) == (uint32_t) 25175 &&
+ timing->h_addressable == (uint32_t) 640 &&
+ timing->v_addressable == (uint32_t) 480)
+ return true;
+diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link_hwss.c b/drivers/gpu/drm/amd/display/dc/core/dc_link_hwss.c
+index a179c09580c3..16d441d3af8a 100644
+--- a/drivers/gpu/drm/amd/display/dc/core/dc_link_hwss.c
++++ b/drivers/gpu/drm/amd/display/dc/core/dc_link_hwss.c
+@@ -74,8 +74,8 @@ void dp_enable_link_phy(
+ if (pipes[i].clock_source != NULL &&
+ pipes[i].clock_source->id != CLOCK_SOURCE_ID_DP_DTO) {
+ pipes[i].clock_source = dp_cs;
+- pipes[i].stream_res.pix_clk_params.requested_pix_clk =
+- pipes[i].stream->timing.pix_clk_khz;
++ pipes[i].stream_res.pix_clk_params.requested_pix_clk_100hz =
++ pipes[i].stream->timing.pix_clk_100hz;
+ pipes[i].clock_source->funcs->program_pix_clk(
+ pipes[i].clock_source,
+ &pipes[i].stream_res.pix_clk_params,
+diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
+index d0af542adf19..e97f210c3146 100644
+--- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
++++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
+@@ -355,8 +355,8 @@ bool resource_are_streams_timing_synchronizable(
+ != stream2->timing.v_addressable)
+ return false;
+
+- if (stream1->timing.pix_clk_khz
+- != stream2->timing.pix_clk_khz)
++ if (stream1->timing.pix_clk_100hz
++ != stream2->timing.pix_clk_100hz)
+ return false;
+
+ if (stream1->clamping.c_depth != stream2->clamping.c_depth)
+@@ -1759,7 +1759,7 @@ static struct dc_stream_state *find_pll_sharable_stream(
+
+ static int get_norm_pix_clk(const struct dc_crtc_timing *timing)
+ {
+- uint32_t pix_clk = timing->pix_clk_khz;
++ uint32_t pix_clk = timing->pix_clk_100hz;
+ uint32_t normalized_pix_clk = pix_clk;
+
+ if (timing->pixel_encoding == PIXEL_ENCODING_YCBCR420)
+@@ -1791,10 +1791,10 @@ static void calculate_phy_pix_clks(struct dc_stream_state *stream)
+ /* update actual pixel clock on all streams */
+ if (dc_is_hdmi_signal(stream->signal))
+ stream->phy_pix_clk = get_norm_pix_clk(
+- &stream->timing);
++ &stream->timing) / 10;
+ else
+ stream->phy_pix_clk =
+- stream->timing.pix_clk_khz;
++ stream->timing.pix_clk_100hz / 10;
+
+ if (stream->timing.timing_3d_format == TIMING_3D_FORMAT_HW_FRAME_PACKING)
+ stream->phy_pix_clk *= 2;
+diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_stream.c b/drivers/gpu/drm/amd/display/dc/core/dc_stream.c
+index 336586ba4639..e498a9aa8035 100644
+--- a/drivers/gpu/drm/amd/display/dc/core/dc_stream.c
++++ b/drivers/gpu/drm/amd/display/dc/core/dc_stream.c
+@@ -44,7 +44,7 @@ void update_stream_signal(struct dc_stream_state *stream, struct dc_sink *sink)
+
+ if (dc_is_dvi_signal(stream->signal)) {
+ if (stream->ctx->dc->caps.dual_link_dvi &&
+- stream->timing.pix_clk_khz > TMDS_MAX_PIXEL_CLOCK &&
++ (stream->timing.pix_clk_100hz / 10) > TMDS_MAX_PIXEL_CLOCK &&
+ sink->sink_signal != SIGNAL_TYPE_DVI_SINGLE_LINK)
+ stream->signal = SIGNAL_TYPE_DVI_DUAL_LINK;
+ else
+@@ -339,7 +339,7 @@ void dc_stream_log(const struct dc *dc, const struct dc_stream_state *stream)
+ stream->output_color_space);
+ DC_LOG_DC(
+ "\tpix_clk_khz: %d, h_total: %d, v_total: %d, pixelencoder:%d, displaycolorDepth:%d\n",
+- stream->timing.pix_clk_khz,
++ stream->timing.pix_clk_100hz / 10,
+ stream->timing.h_total,
+ stream->timing.v_total,
+ stream->timing.pixel_encoding,
+diff --git a/drivers/gpu/drm/amd/display/dc/dc_hw_types.h b/drivers/gpu/drm/amd/display/dc/dc_hw_types.h
+index e72fce4eca65..04f279a76d70 100644
+--- a/drivers/gpu/drm/amd/display/dc/dc_hw_types.h
++++ b/drivers/gpu/drm/amd/display/dc/dc_hw_types.h
+@@ -730,7 +730,7 @@ struct dc_crtc_timing {
+ uint32_t v_front_porch;
+ uint32_t v_sync_width;
+
+- uint32_t pix_clk_khz;
++ uint32_t pix_clk_100hz;
+
+ uint32_t vic;
+ uint32_t hdmi_vic;
+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 0174183c97d7..9a10fd8d1a52 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
+@@ -191,8 +191,8 @@ static uint32_t get_max_pixel_clock_for_all_paths(struct dc_state *context)
+ if (pipe_ctx->top_pipe)
+ continue;
+
+- if (pipe_ctx->stream_res.pix_clk_params.requested_pix_clk > max_pix_clk)
+- max_pix_clk = pipe_ctx->stream_res.pix_clk_params.requested_pix_clk;
++ if (pipe_ctx->stream_res.pix_clk_params.requested_pix_clk_100hz / 10 > max_pix_clk)
++ max_pix_clk = pipe_ctx->stream_res.pix_clk_params.requested_pix_clk_100hz / 10;
+
+ /* raise clock state for HBR3/2 if required. Confirmed with HW DCE/DPCS
+ * logic for HBR3 still needs Nominal (0.8V) on VDDC rail
+@@ -254,7 +254,7 @@ static int dce_set_clock(
+ clk_mgr_dce->dentist_vco_freq_khz / 64);
+
+ /* Prepare to program display clock*/
+- pxl_clk_params.target_pixel_clock = requested_clk_khz;
++ pxl_clk_params.target_pixel_clock_100hz = requested_clk_khz * 10;
+ pxl_clk_params.pll_id = CLOCK_SOURCE_ID_DFS;
+
+ if (clk_mgr_dce->dfs_bypass_active)
+@@ -491,7 +491,7 @@ void dce110_fill_display_configs(
+ stream->link->cur_link_settings.link_spread;
+ cfg->sym_clock = stream->phy_pix_clk;
+ /* Round v_refresh*/
+- cfg->v_refresh = stream->timing.pix_clk_khz * 1000;
++ cfg->v_refresh = stream->timing.pix_clk_100hz * 100;
+ cfg->v_refresh /= stream->timing.h_total;
+ cfg->v_refresh = (cfg->v_refresh + stream->timing.v_total / 2)
+ / stream->timing.v_total;
+@@ -515,7 +515,7 @@ static uint32_t dce110_get_min_vblank_time_us(const struct dc_state *context)
+ - stream->timing.v_addressable);
+
+ vertical_blank_time = vertical_blank_in_pixels
+- * 1000 / stream->timing.pix_clk_khz;
++ * 10000 / stream->timing.pix_clk_100hz;
+
+ if (min_vertical_blank_time > vertical_blank_time)
+ min_vertical_blank_time = vertical_blank_time;
+@@ -609,7 +609,7 @@ static void dce11_pplib_apply_display_requirements(
+
+ pp_display_cfg->crtc_index =
+ pp_display_cfg->disp_configs[0].pipe_idx;
+- pp_display_cfg->line_time_in_us = timing->h_total * 1000 / timing->pix_clk_khz;
++ pp_display_cfg->line_time_in_us = timing->h_total * 10000 / timing->pix_clk_100hz;
+ }
+
+ if (memcmp(&dc->current_state->pp_display_cfg, pp_display_cfg, sizeof(*pp_display_cfg)) != 0)
+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 723ce80ed89c..c67e90e5c339 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
+@@ -108,28 +108,28 @@ static const struct spread_spectrum_data *get_ss_data_entry(
+ }
+
+ /**
+-* Function: calculate_fb_and_fractional_fb_divider
+-*
+-* * DESCRIPTION: Calculates feedback and fractional feedback dividers values
+-*
+-*PARAMETERS:
+-* targetPixelClock Desired frequency in 10 KHz
+-* ref_divider Reference divider (already known)
+-* postDivider Post Divider (already known)
+-* feedback_divider_param Pointer where to store
+-* calculated feedback divider value
+-* fract_feedback_divider_param Pointer where to store
+-* calculated fract feedback divider value
+-*
+-*RETURNS:
+-* It fills the locations pointed by feedback_divider_param
+-* and fract_feedback_divider_param
+-* It returns - true if feedback divider not 0
+-* - false should never happen)
+-*/
++ * Function: calculate_fb_and_fractional_fb_divider
++ *
++ * * DESCRIPTION: Calculates feedback and fractional feedback dividers values
++ *
++ *PARAMETERS:
++ * targetPixelClock Desired frequency in 100 Hz
++ * ref_divider Reference divider (already known)
++ * postDivider Post Divider (already known)
++ * feedback_divider_param Pointer where to store
++ * calculated feedback divider value
++ * fract_feedback_divider_param Pointer where to store
++ * calculated fract feedback divider value
++ *
++ *RETURNS:
++ * It fills the locations pointed by feedback_divider_param
++ * and fract_feedback_divider_param
++ * It returns - true if feedback divider not 0
++ * - false should never happen)
++ */
+ static bool calculate_fb_and_fractional_fb_divider(
+ struct calc_pll_clock_source *calc_pll_cs,
+- uint32_t target_pix_clk_khz,
++ uint32_t target_pix_clk_100hz,
+ uint32_t ref_divider,
+ uint32_t post_divider,
+ uint32_t *feedback_divider_param,
+@@ -138,11 +138,11 @@ static bool calculate_fb_and_fractional_fb_divider(
+ uint64_t feedback_divider;
+
+ feedback_divider =
+- (uint64_t)target_pix_clk_khz * ref_divider * post_divider;
++ (uint64_t)target_pix_clk_100hz * ref_divider * post_divider;
+ feedback_divider *= 10;
+ /* additional factor, since we divide by 10 afterwards */
+ feedback_divider *= (uint64_t)(calc_pll_cs->fract_fb_divider_factor);
+- feedback_divider = div_u64(feedback_divider, calc_pll_cs->ref_freq_khz);
++ feedback_divider = div_u64(feedback_divider, calc_pll_cs->ref_freq_khz * 10ull);
+
+ /*Round to the number of precision
+ * The following code replace the old code (ullfeedbackDivider + 5)/10
+@@ -195,36 +195,36 @@ static bool calc_fb_divider_checking_tolerance(
+ {
+ uint32_t feedback_divider;
+ uint32_t fract_feedback_divider;
+- uint32_t actual_calculated_clock_khz;
++ uint32_t actual_calculated_clock_100hz;
+ uint32_t abs_err;
+- uint64_t actual_calc_clk_khz;
++ uint64_t actual_calc_clk_100hz;
+
+ calculate_fb_and_fractional_fb_divider(
+ calc_pll_cs,
+- pll_settings->adjusted_pix_clk,
++ pll_settings->adjusted_pix_clk_100hz,
+ ref_divider,
+ post_divider,
+ &feedback_divider,
+ &fract_feedback_divider);
+
+ /*Actual calculated value*/
+- actual_calc_clk_khz = (uint64_t)feedback_divider *
++ actual_calc_clk_100hz = (uint64_t)feedback_divider *
+ calc_pll_cs->fract_fb_divider_factor +
+ fract_feedback_divider;
+- actual_calc_clk_khz *= calc_pll_cs->ref_freq_khz;
+- actual_calc_clk_khz =
+- div_u64(actual_calc_clk_khz,
++ actual_calc_clk_100hz *= calc_pll_cs->ref_freq_khz * 10;
++ actual_calc_clk_100hz =
++ div_u64(actual_calc_clk_100hz,
+ ref_divider * post_divider *
+ calc_pll_cs->fract_fb_divider_factor);
+
+- actual_calculated_clock_khz = (uint32_t)(actual_calc_clk_khz);
++ actual_calculated_clock_100hz = (uint32_t)(actual_calc_clk_100hz);
+
+- abs_err = (actual_calculated_clock_khz >
+- pll_settings->adjusted_pix_clk)
+- ? actual_calculated_clock_khz -
+- pll_settings->adjusted_pix_clk
+- : pll_settings->adjusted_pix_clk -
+- actual_calculated_clock_khz;
++ abs_err = (actual_calculated_clock_100hz >
++ pll_settings->adjusted_pix_clk_100hz)
++ ? actual_calculated_clock_100hz -
++ pll_settings->adjusted_pix_clk_100hz
++ : pll_settings->adjusted_pix_clk_100hz -
++ actual_calculated_clock_100hz;
+
+ if (abs_err <= tolerance) {
+ /*found good values*/
+@@ -233,10 +233,10 @@ static bool calc_fb_divider_checking_tolerance(
+ pll_settings->feedback_divider = feedback_divider;
+ pll_settings->fract_feedback_divider = fract_feedback_divider;
+ pll_settings->pix_clk_post_divider = post_divider;
+- pll_settings->calculated_pix_clk =
+- actual_calculated_clock_khz;
++ pll_settings->calculated_pix_clk_100hz =
++ actual_calculated_clock_100hz;
+ pll_settings->vco_freq =
+- actual_calculated_clock_khz * post_divider;
++ actual_calculated_clock_100hz * post_divider / 10;
+ return true;
+ }
+ return false;
+@@ -257,8 +257,8 @@ static bool calc_pll_dividers_in_range(
+
+ /* This is err_tolerance / 10000 = 0.0025 - acceptable error of 0.25%
+ * This is errorTolerance / 10000 = 0.0001 - acceptable error of 0.01%*/
+- tolerance = (pll_settings->adjusted_pix_clk * err_tolerance) /
+- 10000;
++ tolerance = (pll_settings->adjusted_pix_clk_100hz * err_tolerance) /
++ 100000;
+ if (tolerance < CALC_PLL_CLK_SRC_ERR_TOLERANCE)
+ tolerance = CALC_PLL_CLK_SRC_ERR_TOLERANCE;
+
+@@ -294,7 +294,7 @@ static uint32_t calculate_pixel_clock_pll_dividers(
+ uint32_t min_ref_divider;
+ uint32_t max_ref_divider;
+
+- if (pll_settings->adjusted_pix_clk == 0) {
++ if (pll_settings->adjusted_pix_clk_100hz == 0) {
+ DC_LOG_ERROR(
+ "%s Bad requested pixel clock", __func__);
+ return MAX_PLL_CALC_ERROR;
+@@ -306,21 +306,21 @@ static uint32_t calculate_pixel_clock_pll_dividers(
+ max_post_divider = pll_settings->pix_clk_post_divider;
+ } else {
+ min_post_divider = calc_pll_cs->min_pix_clock_pll_post_divider;
+- if (min_post_divider * pll_settings->adjusted_pix_clk <
+- calc_pll_cs->min_vco_khz) {
+- min_post_divider = calc_pll_cs->min_vco_khz /
+- pll_settings->adjusted_pix_clk;
++ if (min_post_divider * pll_settings->adjusted_pix_clk_100hz <
++ calc_pll_cs->min_vco_khz * 10) {
++ min_post_divider = calc_pll_cs->min_vco_khz * 10 /
++ pll_settings->adjusted_pix_clk_100hz;
+ if ((min_post_divider *
+- pll_settings->adjusted_pix_clk) <
+- calc_pll_cs->min_vco_khz)
++ pll_settings->adjusted_pix_clk_100hz) <
++ calc_pll_cs->min_vco_khz * 10)
+ min_post_divider++;
+ }
+
+ max_post_divider = calc_pll_cs->max_pix_clock_pll_post_divider;
+- if (max_post_divider * pll_settings->adjusted_pix_clk
+- > calc_pll_cs->max_vco_khz)
+- max_post_divider = calc_pll_cs->max_vco_khz /
+- pll_settings->adjusted_pix_clk;
++ if (max_post_divider * pll_settings->adjusted_pix_clk_100hz
++ > calc_pll_cs->max_vco_khz * 10)
++ max_post_divider = calc_pll_cs->max_vco_khz * 10 /
++ pll_settings->adjusted_pix_clk_100hz;
+ }
+
+ /* 2) Find Reference divider ranges
+@@ -392,47 +392,47 @@ static bool pll_adjust_pix_clk(
+ struct pixel_clk_params *pix_clk_params,
+ struct pll_settings *pll_settings)
+ {
+- uint32_t actual_pix_clk_khz = 0;
+- uint32_t requested_clk_khz = 0;
++ uint32_t actual_pix_clk_100hz = 0;
++ uint32_t requested_clk_100hz = 0;
+ struct bp_adjust_pixel_clock_parameters bp_adjust_pixel_clock_params = {
+ 0 };
+ enum bp_result bp_result;
+ switch (pix_clk_params->signal_type) {
+ case SIGNAL_TYPE_HDMI_TYPE_A: {
+- requested_clk_khz = pix_clk_params->requested_pix_clk;
++ requested_clk_100hz = pix_clk_params->requested_pix_clk_100hz;
+ if (pix_clk_params->pixel_encoding != PIXEL_ENCODING_YCBCR422) {
+ switch (pix_clk_params->color_depth) {
+ case COLOR_DEPTH_101010:
+- requested_clk_khz = (requested_clk_khz * 5) >> 2;
++ requested_clk_100hz = (requested_clk_100hz * 5) >> 2;
+ break; /* x1.25*/
+ case COLOR_DEPTH_121212:
+- requested_clk_khz = (requested_clk_khz * 6) >> 2;
++ requested_clk_100hz = (requested_clk_100hz * 6) >> 2;
+ break; /* x1.5*/
+ case COLOR_DEPTH_161616:
+- requested_clk_khz = requested_clk_khz * 2;
++ requested_clk_100hz = requested_clk_100hz * 2;
+ break; /* x2.0*/
+ default:
+ break;
+ }
+ }
+- actual_pix_clk_khz = requested_clk_khz;
++ actual_pix_clk_100hz = requested_clk_100hz;
+ }
+ break;
+
+ case SIGNAL_TYPE_DISPLAY_PORT:
+ case SIGNAL_TYPE_DISPLAY_PORT_MST:
+ case SIGNAL_TYPE_EDP:
+- requested_clk_khz = pix_clk_params->requested_sym_clk;
+- actual_pix_clk_khz = pix_clk_params->requested_pix_clk;
++ requested_clk_100hz = pix_clk_params->requested_sym_clk * 10;
++ actual_pix_clk_100hz = pix_clk_params->requested_pix_clk_100hz;
+ break;
+
+ default:
+- requested_clk_khz = pix_clk_params->requested_pix_clk;
+- actual_pix_clk_khz = pix_clk_params->requested_pix_clk;
++ requested_clk_100hz = pix_clk_params->requested_pix_clk_100hz;
++ actual_pix_clk_100hz = pix_clk_params->requested_pix_clk_100hz;
+ break;
+ }
+
+- bp_adjust_pixel_clock_params.pixel_clock = requested_clk_khz;
++ bp_adjust_pixel_clock_params.pixel_clock = requested_clk_100hz / 10;
+ bp_adjust_pixel_clock_params.
+ encoder_object_id = pix_clk_params->encoder_object_id;
+ bp_adjust_pixel_clock_params.signal_type = pix_clk_params->signal_type;
+@@ -441,9 +441,9 @@ static bool pll_adjust_pix_clk(
+ bp_result = clk_src->bios->funcs->adjust_pixel_clock(
+ clk_src->bios, &bp_adjust_pixel_clock_params);
+ if (bp_result == BP_RESULT_OK) {
+- pll_settings->actual_pix_clk = actual_pix_clk_khz;
+- pll_settings->adjusted_pix_clk =
+- bp_adjust_pixel_clock_params.adjusted_pixel_clock;
++ pll_settings->actual_pix_clk_100hz = actual_pix_clk_100hz;
++ pll_settings->adjusted_pix_clk_100hz =
++ bp_adjust_pixel_clock_params.adjusted_pixel_clock * 10;
+ pll_settings->reference_divider =
+ bp_adjust_pixel_clock_params.reference_divider;
+ pll_settings->pix_clk_post_divider =
+@@ -490,7 +490,7 @@ static uint32_t dce110_get_pix_clk_dividers_helper (
+ const struct spread_spectrum_data *ss_data = get_ss_data_entry(
+ clk_src,
+ pix_clk_params->signal_type,
+- pll_settings->adjusted_pix_clk);
++ pll_settings->adjusted_pix_clk_100hz / 10);
+
+ if (NULL != ss_data)
+ pll_settings->ss_percentage = ss_data->percentage;
+@@ -502,13 +502,13 @@ static uint32_t dce110_get_pix_clk_dividers_helper (
+ * to continue. */
+ DC_LOG_ERROR(
+ "%s: Failed to adjust pixel clock!!", __func__);
+- pll_settings->actual_pix_clk =
+- pix_clk_params->requested_pix_clk;
+- pll_settings->adjusted_pix_clk =
+- pix_clk_params->requested_pix_clk;
++ pll_settings->actual_pix_clk_100hz =
++ pix_clk_params->requested_pix_clk_100hz;
++ pll_settings->adjusted_pix_clk_100hz =
++ pix_clk_params->requested_pix_clk_100hz;
+
+ if (dc_is_dp_signal(pix_clk_params->signal_type))
+- pll_settings->adjusted_pix_clk = 100000;
++ pll_settings->adjusted_pix_clk_100hz = 1000000;
+ }
+
+ /* Calculate Dividers */
+@@ -533,28 +533,28 @@ static void dce112_get_pix_clk_dividers_helper (
+ struct pll_settings *pll_settings,
+ struct pixel_clk_params *pix_clk_params)
+ {
+- uint32_t actualPixelClockInKHz;
++ uint32_t actual_pixel_clock_100hz;
+
+- actualPixelClockInKHz = pix_clk_params->requested_pix_clk;
++ actual_pixel_clock_100hz = pix_clk_params->requested_pix_clk_100hz;
+ /* Calculate Dividers */
+ if (pix_clk_params->signal_type == SIGNAL_TYPE_HDMI_TYPE_A) {
+ switch (pix_clk_params->color_depth) {
+ case COLOR_DEPTH_101010:
+- actualPixelClockInKHz = (actualPixelClockInKHz * 5) >> 2;
++ actual_pixel_clock_100hz = (actual_pixel_clock_100hz * 5) >> 2;
+ break;
+ case COLOR_DEPTH_121212:
+- actualPixelClockInKHz = (actualPixelClockInKHz * 6) >> 2;
++ actual_pixel_clock_100hz = (actual_pixel_clock_100hz * 6) >> 2;
+ break;
+ case COLOR_DEPTH_161616:
+- actualPixelClockInKHz = actualPixelClockInKHz * 2;
++ actual_pixel_clock_100hz = actual_pixel_clock_100hz * 2;
+ break;
+ default:
+ break;
+ }
+ }
+- pll_settings->actual_pix_clk = actualPixelClockInKHz;
+- pll_settings->adjusted_pix_clk = actualPixelClockInKHz;
+- pll_settings->calculated_pix_clk = pix_clk_params->requested_pix_clk;
++ pll_settings->actual_pix_clk_100hz = actual_pixel_clock_100hz;
++ pll_settings->adjusted_pix_clk_100hz = actual_pixel_clock_100hz;
++ pll_settings->calculated_pix_clk_100hz = pix_clk_params->requested_pix_clk_100hz;
+ }
+
+ static uint32_t dce110_get_pix_clk_dividers(
+@@ -567,7 +567,7 @@ static uint32_t dce110_get_pix_clk_dividers(
+ DC_LOGGER_INIT();
+
+ if (pix_clk_params == NULL || pll_settings == NULL
+- || pix_clk_params->requested_pix_clk == 0) {
++ || pix_clk_params->requested_pix_clk_100hz == 0) {
+ DC_LOG_ERROR(
+ "%s: Invalid parameters!!\n", __func__);
+ return pll_calc_error;
+@@ -577,10 +577,10 @@ static uint32_t dce110_get_pix_clk_dividers(
+
+ 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;
++ pll_settings->adjusted_pix_clk_100hz = clk_src->ext_clk_khz * 10;
++ pll_settings->calculated_pix_clk_100hz = clk_src->ext_clk_khz * 10;
++ pll_settings->actual_pix_clk_100hz =
++ pix_clk_params->requested_pix_clk_100hz;
+ return 0;
+ }
+
+@@ -599,7 +599,7 @@ static uint32_t dce112_get_pix_clk_dividers(
+ DC_LOGGER_INIT();
+
+ if (pix_clk_params == NULL || pll_settings == NULL
+- || pix_clk_params->requested_pix_clk == 0) {
++ || pix_clk_params->requested_pix_clk_100hz == 0) {
+ DC_LOG_ERROR(
+ "%s: Invalid parameters!!\n", __func__);
+ return -1;
+@@ -609,10 +609,10 @@ static uint32_t dce112_get_pix_clk_dividers(
+
+ 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;
++ pll_settings->adjusted_pix_clk_100hz = clk_src->ext_clk_khz * 10;
++ pll_settings->calculated_pix_clk_100hz = clk_src->ext_clk_khz * 10;
++ pll_settings->actual_pix_clk_100hz =
++ pix_clk_params->requested_pix_clk_100hz;
+ return -1;
+ }
+
+@@ -714,7 +714,7 @@ static bool enable_spread_spectrum(
+ ss_data = get_ss_data_entry(
+ clk_src,
+ signal,
+- pll_settings->calculated_pix_clk);
++ pll_settings->calculated_pix_clk_100hz / 10);
+
+ /* Pixel clock PLL has been programmed to generate desired pixel clock,
+ * now enable SS on pixel clock */
+@@ -853,7 +853,7 @@ static bool dce110_program_pix_clk(
+ /*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.target_pixel_clock_100hz = pll_settings->actual_pix_clk_100hz;
+ bp_pc_params.encoder_object_id = pix_clk_params->encoder_object_id;
+ bp_pc_params.signal_type = pix_clk_params->signal_type;
+
+@@ -903,12 +903,12 @@ static bool dce112_program_pix_clk(
+ #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;
+- unsigned clock_kHz = pll_settings->actual_pix_clk;
++ unsigned dp_dto_ref_100hz = 7000000;
++ unsigned clock_100hz = pll_settings->actual_pix_clk_100hz;
+
+ /* Set DTO values: phase = target clock, modulo = reference clock */
+- REG_WRITE(PHASE[inst], clock_kHz);
+- REG_WRITE(MODULO[inst], dp_dto_ref_kHz);
++ REG_WRITE(PHASE[inst], clock_100hz);
++ REG_WRITE(MODULO[inst], dp_dto_ref_100hz);
+
+ /* Enable DTO */
+ REG_UPDATE(PIXEL_RATE_CNTL[inst], DP_DTO0_ENABLE, 1);
+@@ -927,7 +927,7 @@ static bool dce112_program_pix_clk(
+ /*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.target_pixel_clock_100hz = pll_settings->actual_pix_clk_100hz;
+ bp_pc_params.encoder_object_id = pix_clk_params->encoder_object_id;
+ bp_pc_params.signal_type = pix_clk_params->signal_type;
+
+diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_link_encoder.c b/drivers/gpu/drm/amd/display/dc/dce/dce_link_encoder.c
+index 1d794c65cc8b..314c04a915d2 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce/dce_link_encoder.c
++++ b/drivers/gpu/drm/amd/display/dc/dce/dce_link_encoder.c
+@@ -599,12 +599,12 @@ bool dce110_link_encoder_validate_dvi_output(
+ if ((connector_signal == SIGNAL_TYPE_DVI_SINGLE_LINK ||
+ connector_signal == SIGNAL_TYPE_HDMI_TYPE_A) &&
+ signal != SIGNAL_TYPE_HDMI_TYPE_A &&
+- crtc_timing->pix_clk_khz > TMDS_MAX_PIXEL_CLOCK)
++ crtc_timing->pix_clk_100hz > (TMDS_MAX_PIXEL_CLOCK * 10))
+ return false;
+- if (crtc_timing->pix_clk_khz < TMDS_MIN_PIXEL_CLOCK)
++ if (crtc_timing->pix_clk_100hz < (TMDS_MIN_PIXEL_CLOCK * 10))
+ return false;
+
+- if (crtc_timing->pix_clk_khz > max_pixel_clock)
++ if (crtc_timing->pix_clk_100hz > (max_pixel_clock * 10))
+ return false;
+
+ /* DVI supports 6/8bpp single-link and 10/16bpp dual-link */
+diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_stream_encoder.c b/drivers/gpu/drm/amd/display/dc/dce/dce_stream_encoder.c
+index f518f34f7507..f372af3c833c 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce/dce_stream_encoder.c
++++ b/drivers/gpu/drm/amd/display/dc/dce/dce_stream_encoder.c
+@@ -662,7 +662,7 @@ static void dce110_stream_encoder_dvi_set_stream_attribute(
+ cntl.signal = is_dual_link ?
+ SIGNAL_TYPE_DVI_DUAL_LINK : SIGNAL_TYPE_DVI_SINGLE_LINK;
+ cntl.enable_dp_audio = false;
+- cntl.pixel_clock = crtc_timing->pix_clk_khz;
++ cntl.pixel_clock = crtc_timing->pix_clk_100hz / 10;
+ cntl.lanes_number = (is_dual_link) ? LANE_COUNT_EIGHT : LANE_COUNT_FOUR;
+
+ if (enc110->base.bp->funcs->encoder_control(
+@@ -686,7 +686,7 @@ static void dce110_stream_encoder_lvds_set_stream_attribute(
+ cntl.engine_id = enc110->base.id;
+ cntl.signal = SIGNAL_TYPE_LVDS;
+ cntl.enable_dp_audio = false;
+- cntl.pixel_clock = crtc_timing->pix_clk_khz;
++ cntl.pixel_clock = crtc_timing->pix_clk_100hz / 10;
+ cntl.lanes_number = LANE_COUNT_FOUR;
+
+ if (enc110->base.bp->funcs->encoder_control(
+diff --git a/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c b/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c
+index 43159acc8bb9..783d4b9c828f 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c
++++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c
+@@ -1074,7 +1074,7 @@ void dce110_unblank_stream(struct pipe_ctx *pipe_ctx,
+
+ /* only 3 items below are used by unblank */
+ params.pixel_clk_khz =
+- pipe_ctx->stream->timing.pix_clk_khz;
++ pipe_ctx->stream->timing.pix_clk_100hz / 10;
+ params.link_settings.link_rate = link_settings->link_rate;
+
+ if (dc_is_dp_signal(pipe_ctx->stream->signal))
+@@ -1160,27 +1160,27 @@ static void build_audio_output(
+ stream->timing.flags.INTERLACE;
+
+ audio_output->crtc_info.refresh_rate =
+- (stream->timing.pix_clk_khz*1000)/
++ (stream->timing.pix_clk_100hz*10000)/
+ (stream->timing.h_total*stream->timing.v_total);
+
+ audio_output->crtc_info.color_depth =
+ stream->timing.display_color_depth;
+
+ audio_output->crtc_info.requested_pixel_clock =
+- pipe_ctx->stream_res.pix_clk_params.requested_pix_clk;
++ pipe_ctx->stream_res.pix_clk_params.requested_pix_clk_100hz / 10;
+
+ audio_output->crtc_info.calculated_pixel_clock =
+- pipe_ctx->stream_res.pix_clk_params.requested_pix_clk;
++ pipe_ctx->stream_res.pix_clk_params.requested_pix_clk_100hz / 10;
+
+ /*for HDMI, audio ACR is with deep color ratio factor*/
+ if (dc_is_hdmi_signal(pipe_ctx->stream->signal) &&
+ audio_output->crtc_info.requested_pixel_clock ==
+- stream->timing.pix_clk_khz) {
++ (stream->timing.pix_clk_100hz / 10)) {
+ if (pipe_ctx->stream_res.pix_clk_params.pixel_encoding == PIXEL_ENCODING_YCBCR420) {
+ audio_output->crtc_info.requested_pixel_clock =
+ audio_output->crtc_info.requested_pixel_clock/2;
+ audio_output->crtc_info.calculated_pixel_clock =
+- pipe_ctx->stream_res.pix_clk_params.requested_pix_clk/2;
++ pipe_ctx->stream_res.pix_clk_params.requested_pix_clk_100hz/20;
+
+ }
+ }
+@@ -1621,8 +1621,8 @@ static uint32_t compute_pstate_blackout_duration(
+ pstate_blackout_duration_ns = 1000 * blackout_duration.value >> 24;
+
+ total_dest_line_time_ns = 1000000UL *
+- stream->timing.h_total /
+- stream->timing.pix_clk_khz +
++ (stream->timing.h_total * 10) /
++ stream->timing.pix_clk_100hz +
+ pstate_blackout_duration_ns;
+
+ return total_dest_line_time_ns;
+@@ -2567,7 +2567,7 @@ static void dce110_apply_ctx_for_surface(
+ pipe_ctx->plane_res.mi,
+ pipe_ctx->stream->timing.h_total,
+ pipe_ctx->stream->timing.v_total,
+- pipe_ctx->stream->timing.pix_clk_khz,
++ pipe_ctx->stream->timing.pix_clk_100hz / 10,
+ context->stream_count);
+
+ dce110_program_front_end_for_pipe(dc, pipe_ctx);
+@@ -2622,7 +2622,7 @@ void dce110_set_cursor_position(struct pipe_ctx *pipe_ctx)
+ struct input_pixel_processor *ipp = pipe_ctx->plane_res.ipp;
+ struct mem_input *mi = pipe_ctx->plane_res.mi;
+ struct dc_cursor_mi_param param = {
+- .pixel_clk_khz = pipe_ctx->stream->timing.pix_clk_khz,
++ .pixel_clk_khz = pipe_ctx->stream->timing.pix_clk_100hz / 10,
+ .ref_clk_khz = pipe_ctx->stream->ctx->dc->res_pool->ref_clock_inKhz,
+ .viewport = pipe_ctx->plane_res.scl_data.viewport,
+ .h_scale_ratio = pipe_ctx->plane_res.scl_data.ratios.horz,
+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 3c989b8e1ae3..3c27c31eaf7c 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c
++++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c
+@@ -779,7 +779,7 @@ static void get_pixel_clock_parameters(
+ * the pixel clock normalization for hdmi up to here instead of doing it
+ * in pll_adjust_pix_clk
+ */
+- pixel_clk_params->requested_pix_clk = stream->timing.pix_clk_khz;
++ pixel_clk_params->requested_pix_clk_100hz = stream->timing.pix_clk_100hz;
+ pixel_clk_params->encoder_object_id = stream->link->link_enc->id;
+ pixel_clk_params->signal_type = pipe_ctx->stream->signal;
+ pixel_clk_params->controller_id = pipe_ctx->stream_res.tg->inst + 1;
+@@ -797,10 +797,10 @@ static void get_pixel_clock_parameters(
+ pixel_clk_params->color_depth = COLOR_DEPTH_888;
+ }
+ if (stream->timing.pixel_encoding == PIXEL_ENCODING_YCBCR420) {
+- pixel_clk_params->requested_pix_clk = pixel_clk_params->requested_pix_clk / 2;
++ pixel_clk_params->requested_pix_clk_100hz = pixel_clk_params->requested_pix_clk_100hz / 2;
+ }
+ if (stream->timing.timing_3d_format == TIMING_3D_FORMAT_HW_FRAME_PACKING)
+- pixel_clk_params->requested_pix_clk *= 2;
++ pixel_clk_params->requested_pix_clk_100hz *= 2;
+
+ }
+
+@@ -874,7 +874,7 @@ static bool dce110_validate_bandwidth(
+ __func__,
+ context->streams[0]->timing.h_addressable,
+ context->streams[0]->timing.v_addressable,
+- context->streams[0]->timing.pix_clk_khz);
++ context->streams[0]->timing.pix_clk_100hz / 10);
+
+ if (memcmp(&dc->current_state->bw.dce,
+ &context->bw.dce, sizeof(context->bw.dce))) {
+@@ -1055,7 +1055,7 @@ static struct pipe_ctx *dce110_acquire_underlay(
+ pipe_ctx->plane_res.mi->funcs->allocate_mem_input(pipe_ctx->plane_res.mi,
+ stream->timing.h_total,
+ stream->timing.v_total,
+- stream->timing.pix_clk_khz,
++ stream->timing.pix_clk_100hz / 10,
+ context->stream_count);
+
+ color_space_to_black_color(dc,
+diff --git a/drivers/gpu/drm/amd/display/dc/dce80/dce80_timing_generator.c b/drivers/gpu/drm/amd/display/dc/dce80/dce80_timing_generator.c
+index 3ba4712a35ab..5c629ae487ec 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce80/dce80_timing_generator.c
++++ b/drivers/gpu/drm/amd/display/dc/dce80/dce80_timing_generator.c
+@@ -84,17 +84,17 @@ static const struct dce110_timing_generator_offsets reg_offsets[] = {
+ #define DCP_REG(reg) (reg + tg110->offsets.dcp)
+ #define DMIF_REG(reg) (reg + tg110->offsets.dmif)
+
+-static void program_pix_dur(struct timing_generator *tg, uint32_t pix_clk_khz)
++static void program_pix_dur(struct timing_generator *tg, uint32_t pix_clk_100hz)
+ {
+ uint64_t pix_dur;
+ uint32_t addr = mmDMIF_PG0_DPG_PIPE_ARBITRATION_CONTROL1
+ + DCE110TG_FROM_TG(tg)->offsets.dmif;
+ uint32_t value = dm_read_reg(tg->ctx, addr);
+
+- if (pix_clk_khz == 0)
++ if (pix_clk_100hz == 0)
+ return;
+
+- pix_dur = 1000000000 / pix_clk_khz;
++ pix_dur = 10000000000ull / pix_clk_100hz;
+
+ set_reg_field_value(
+ value,
+@@ -110,7 +110,7 @@ static void program_timing(struct timing_generator *tg,
+ bool use_vbios)
+ {
+ if (!use_vbios)
+- program_pix_dur(tg, timing->pix_clk_khz);
++ program_pix_dur(tg, timing->pix_clk_100hz);
+
+ dce110_tg_program_timing(tg, timing, use_vbios);
+ }
+diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
+index 231df1f3e473..c096375bc059 100644
+--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
++++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
+@@ -2654,7 +2654,7 @@ static void dcn10_set_cursor_position(struct pipe_ctx *pipe_ctx)
+ struct hubp *hubp = pipe_ctx->plane_res.hubp;
+ struct dpp *dpp = pipe_ctx->plane_res.dpp;
+ struct dc_cursor_mi_param param = {
+- .pixel_clk_khz = pipe_ctx->stream->timing.pix_clk_khz,
++ .pixel_clk_khz = pipe_ctx->stream->timing.pix_clk_100hz / 10,
+ .ref_clk_khz = pipe_ctx->stream->ctx->dc->res_pool->ref_clock_inKhz,
+ .viewport = pipe_ctx->plane_res.scl_data.viewport,
+ .h_scale_ratio = pipe_ctx->plane_res.scl_data.ratios.horz,
+diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer_debug.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer_debug.c
+index ae4fd5ec9f74..19d15ec46642 100644
+--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer_debug.c
++++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer_debug.c
+@@ -429,7 +429,7 @@ static unsigned int dcn10_get_otg_states(struct dc *dc, char *pBuf, unsigned int
+ int pix_clk = 0;
+
+ optc1_read_otg_state(DCN10TG_FROM_TG(tg), &s);
+- pix_clk = dc->current_state->res_ctx.pipe_ctx[i].stream_res.pix_clk_params.requested_pix_clk;
++ pix_clk = dc->current_state->res_ctx.pipe_ctx[i].stream_res.pix_clk_params.requested_pix_clk_100hz / 10;
+
+ //only print if OTG master is enabled
+ if (s.otg_enabled & 1) {
+diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_link_encoder.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_link_encoder.c
+index aefe8974469d..af0bcff0b01a 100644
+--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_link_encoder.c
++++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_link_encoder.c
+@@ -543,12 +543,12 @@ bool dcn10_link_encoder_validate_dvi_output(
+ if ((connector_signal == SIGNAL_TYPE_DVI_SINGLE_LINK ||
+ connector_signal == SIGNAL_TYPE_HDMI_TYPE_A) &&
+ signal != SIGNAL_TYPE_HDMI_TYPE_A &&
+- crtc_timing->pix_clk_khz > TMDS_MAX_PIXEL_CLOCK)
++ crtc_timing->pix_clk_100hz > (TMDS_MAX_PIXEL_CLOCK * 10))
+ return false;
+- if (crtc_timing->pix_clk_khz < TMDS_MIN_PIXEL_CLOCK)
++ if (crtc_timing->pix_clk_100hz < (TMDS_MIN_PIXEL_CLOCK * 10))
+ return false;
+
+- if (crtc_timing->pix_clk_khz > max_pixel_clock)
++ if (crtc_timing->pix_clk_100hz > (max_pixel_clock * 10))
+ return false;
+
+ /* DVI supports 6/8bpp single-link and 10/16bpp dual-link */
+@@ -571,7 +571,7 @@ bool dcn10_link_encoder_validate_dvi_output(
+ static bool dcn10_link_encoder_validate_hdmi_output(
+ const struct dcn10_link_encoder *enc10,
+ const struct dc_crtc_timing *crtc_timing,
+- int adjusted_pix_clk_khz)
++ int adjusted_pix_clk_100hz)
+ {
+ enum dc_color_depth max_deep_color =
+ enc10->base.features.max_hdmi_deep_color;
+@@ -581,11 +581,11 @@ static bool dcn10_link_encoder_validate_hdmi_output(
+
+ if (crtc_timing->display_color_depth < COLOR_DEPTH_888)
+ return false;
+- if (adjusted_pix_clk_khz < TMDS_MIN_PIXEL_CLOCK)
++ if (adjusted_pix_clk_100hz < (TMDS_MIN_PIXEL_CLOCK * 10))
+ return false;
+
+- if ((adjusted_pix_clk_khz == 0) ||
+- (adjusted_pix_clk_khz > enc10->base.features.max_hdmi_pixel_clock))
++ if ((adjusted_pix_clk_100hz == 0) ||
++ (adjusted_pix_clk_100hz > (enc10->base.features.max_hdmi_pixel_clock * 10)))
+ return false;
+
+ /* DCE11 HW does not support 420 */
+@@ -594,7 +594,7 @@ static bool dcn10_link_encoder_validate_hdmi_output(
+ return false;
+
+ if (!enc10->base.features.flags.bits.HDMI_6GB_EN &&
+- adjusted_pix_clk_khz >= 300000)
++ adjusted_pix_clk_100hz >= 3000000)
+ return false;
+ if (enc10->base.ctx->dc->debug.hdmi20_disable &&
+ crtc_timing->pixel_encoding == PIXEL_ENCODING_YCBCR420)
+@@ -746,7 +746,7 @@ bool dcn10_link_encoder_validate_output_with_stream(
+ is_valid = dcn10_link_encoder_validate_hdmi_output(
+ enc10,
+ &stream->timing,
+- stream->phy_pix_clk);
++ stream->phy_pix_clk * 10);
+ break;
+ case SIGNAL_TYPE_DISPLAY_PORT:
+ case SIGNAL_TYPE_DISPLAY_PORT_MST:
+diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_optc.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_optc.c
+index 57d00d660462..eb019d404928 100644
+--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_optc.c
++++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_optc.c
+@@ -126,7 +126,7 @@ void optc1_program_vline_interrupt(
+ struct optc *optc1 = DCN10TG_FROM_TG(optc);
+
+ unsigned long long req_delta_tens_of_usec = div64_u64((vsync_delta + 9999), 10000);
+- unsigned long long pix_clk_hundreds_khz = div64_u64((dc_crtc_timing->pix_clk_khz + 99), 100);
++ unsigned long long pix_clk_hundreds_khz = div64_u64((dc_crtc_timing->pix_clk_100hz + 999), 1000);
+ uint32_t req_delta_lines = (uint32_t) div64_u64(
+ (req_delta_tens_of_usec * pix_clk_hundreds_khz + dc_crtc_timing->h_total - 1),
+ dc_crtc_timing->h_total);
+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 83447cde6a75..add84f9df90c 100644
+--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c
++++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c
+@@ -974,7 +974,7 @@ static void get_pixel_clock_parameters(
+ struct pixel_clk_params *pixel_clk_params)
+ {
+ const struct dc_stream_state *stream = pipe_ctx->stream;
+- pixel_clk_params->requested_pix_clk = stream->timing.pix_clk_khz;
++ pixel_clk_params->requested_pix_clk_100hz = stream->timing.pix_clk_100hz;
+ pixel_clk_params->encoder_object_id = stream->link->link_enc->id;
+ pixel_clk_params->signal_type = pipe_ctx->stream->signal;
+ pixel_clk_params->controller_id = pipe_ctx->stream_res.tg->inst + 1;
+@@ -991,9 +991,9 @@ static void get_pixel_clock_parameters(
+ pixel_clk_params->color_depth = COLOR_DEPTH_888;
+
+ if (stream->timing.pixel_encoding == PIXEL_ENCODING_YCBCR420)
+- pixel_clk_params->requested_pix_clk /= 2;
++ pixel_clk_params->requested_pix_clk_100hz /= 2;
+ if (stream->timing.timing_3d_format == TIMING_3D_FORMAT_HW_FRAME_PACKING)
+- pixel_clk_params->requested_pix_clk *= 2;
++ pixel_clk_params->requested_pix_clk_100hz *= 2;
+
+ }
+
+diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_stream_encoder.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_stream_encoder.c
+index b8b5525a389a..0b0e06fe5c53 100644
+--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_stream_encoder.c
++++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_stream_encoder.c
+@@ -594,7 +594,7 @@ void enc1_stream_encoder_dvi_set_stream_attribute(
+ cntl.signal = is_dual_link ?
+ SIGNAL_TYPE_DVI_DUAL_LINK : SIGNAL_TYPE_DVI_SINGLE_LINK;
+ cntl.enable_dp_audio = false;
+- cntl.pixel_clock = crtc_timing->pix_clk_khz;
++ cntl.pixel_clock = crtc_timing->pix_clk_100hz / 10;
+ cntl.lanes_number = (is_dual_link) ? LANE_COUNT_EIGHT : LANE_COUNT_FOUR;
+
+ if (enc1->base.bp->funcs->encoder_control(
+diff --git a/drivers/gpu/drm/amd/display/dc/inc/clock_source.h b/drivers/gpu/drm/amd/display/dc/inc/clock_source.h
+index 47ef90495376..43d1fbd8ace5 100644
+--- a/drivers/gpu/drm/amd/display/dc/inc/clock_source.h
++++ b/drivers/gpu/drm/amd/display/dc/inc/clock_source.h
+@@ -78,7 +78,7 @@ struct csdp_ref_clk_ds_params {
+ };
+
+ struct pixel_clk_params {
+- uint32_t requested_pix_clk; /* in KHz */
++ uint32_t requested_pix_clk_100hz;
+ /*> Requested Pixel Clock
+ * (based on Video Timing standard used for requested mode)*/
+ uint32_t requested_sym_clk; /* in KHz */
+@@ -104,9 +104,9 @@ struct pixel_clk_params {
+ * with actually calculated Clock and reference Crystal frequency
+ */
+ struct pll_settings {
+- uint32_t actual_pix_clk;
+- uint32_t adjusted_pix_clk;
+- uint32_t calculated_pix_clk;
++ uint32_t actual_pix_clk_100hz;
++ uint32_t adjusted_pix_clk_100hz;
++ uint32_t calculated_pix_clk_100hz;
+ uint32_t vco_freq;
+ uint32_t reference_freq;
+ uint32_t reference_divider;
+diff --git a/drivers/gpu/drm/amd/display/include/bios_parser_types.h b/drivers/gpu/drm/amd/display/include/bios_parser_types.h
+index 7fd78a696800..01bf01a34a08 100644
+--- a/drivers/gpu/drm/amd/display/include/bios_parser_types.h
++++ b/drivers/gpu/drm/amd/display/include/bios_parser_types.h
+@@ -211,8 +211,8 @@ struct bp_pixel_clock_parameters {
+ /* signal_type -> Encoder Mode - needed by VBIOS Exec table */
+ enum signal_type signal_type;
+ /* Adjusted Pixel Clock (after VBIOS exec table)
+- * that becomes Target Pixel Clock (KHz) */
+- uint32_t target_pixel_clock;
++ * that becomes Target Pixel Clock (100 Hz units) */
++ uint32_t target_pixel_clock_100hz;
+ /* Calculated Reference divider of Display PLL */
+ uint32_t reference_divider;
+ /* Calculated Feedback divider of Display PLL */
+diff --git a/drivers/gpu/drm/amd/display/modules/freesync/freesync.c b/drivers/gpu/drm/amd/display/modules/freesync/freesync.c
+index 1544ed3f1747..d967ac001f59 100644
+--- a/drivers/gpu/drm/amd/display/modules/freesync/freesync.c
++++ b/drivers/gpu/drm/amd/display/modules/freesync/freesync.c
+@@ -108,8 +108,8 @@ static unsigned int calc_duration_in_us_from_v_total(
+ {
+ unsigned int duration_in_us =
+ (unsigned int)(div64_u64(((unsigned long long)(v_total)
+- * 1000) * stream->timing.h_total,
+- stream->timing.pix_clk_khz));
++ * 10000) * stream->timing.h_total,
++ stream->timing.pix_clk_100hz));
+
+ return duration_in_us;
+ }
+@@ -126,7 +126,7 @@ static unsigned int calc_v_total_from_refresh(
+ refresh_in_uhz)));
+
+ v_total = div64_u64(div64_u64(((unsigned long long)(
+- frame_duration_in_ns) * stream->timing.pix_clk_khz),
++ frame_duration_in_ns) * (stream->timing.pix_clk_100hz / 10)),
+ stream->timing.h_total), 1000000);
+
+ /* v_total cannot be less than nominal */
+@@ -152,7 +152,7 @@ static unsigned int calc_v_total_from_duration(
+ duration_in_us = vrr->max_duration_in_us;
+
+ v_total = div64_u64(div64_u64(((unsigned long long)(
+- duration_in_us) * stream->timing.pix_clk_khz),
++ duration_in_us) * (stream->timing.pix_clk_100hz / 10)),
+ stream->timing.h_total), 1000);
+
+ /* v_total cannot be less than nominal */
+@@ -227,7 +227,7 @@ static void update_v_total_for_static_ramp(
+ }
+
+ v_total = div64_u64(div64_u64(((unsigned long long)(
+- current_duration_in_us) * stream->timing.pix_clk_khz),
++ current_duration_in_us) * (stream->timing.pix_clk_100hz / 10)),
+ stream->timing.h_total), 1000);
+
+ in_out_vrr->adjust.v_total_min = v_total;
+@@ -972,7 +972,7 @@ unsigned long long mod_freesync_calc_nominal_field_rate(
+ unsigned long long nominal_field_rate_in_uhz = 0;
+
+ /* Calculate nominal field rate for stream */
+- nominal_field_rate_in_uhz = stream->timing.pix_clk_khz;
++ nominal_field_rate_in_uhz = stream->timing.pix_clk_100hz / 10;
+ nominal_field_rate_in_uhz *= 1000ULL * 1000ULL * 1000ULL;
+ nominal_field_rate_in_uhz = div_u64(nominal_field_rate_in_uhz,
+ stream->timing.h_total);
+--
+2.17.1
+