diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4059-drm-amd-display-Properly-round-nominal-frequency-for.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4059-drm-amd-display-Properly-round-nominal-frequency-for.patch | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4059-drm-amd-display-Properly-round-nominal-frequency-for.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4059-drm-amd-display-Properly-round-nominal-frequency-for.patch new file mode 100644 index 00000000..c97411d2 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4059-drm-amd-display-Properly-round-nominal-frequency-for.patch @@ -0,0 +1,58 @@ +From 68d784353e0efa0f218da7226fc82d59b721b20d Mon Sep 17 00:00:00 2001 +From: Aric Cyr <aric.cyr@amd.com> +Date: Wed, 11 Sep 2019 16:17:08 -0400 +Subject: [PATCH 4059/4256] drm/amd/display: Properly round nominal frequency + for SPD + +[Why] +Some displays rely on the SPD verticle frequency maximum value. +Must round the calculated refresh rate to the nearest integer. + +[How] +Round the nominal calculated refresh rate to the nearest whole +integer. + +Signed-off-by: Aric Cyr <aric.cyr@amd.com> +Reviewed-by: Anthony Koo <Anthony.Koo@amd.com> +Acked-by: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com> +--- + .../gpu/drm/amd/display/modules/freesync/freesync.c | 13 ++++++++----- + 1 file changed, 8 insertions(+), 5 deletions(-) + +diff --git a/drivers/gpu/drm/amd/display/modules/freesync/freesync.c b/drivers/gpu/drm/amd/display/modules/freesync/freesync.c +index a978afac8b79..65faaf6802e0 100644 +--- a/drivers/gpu/drm/amd/display/modules/freesync/freesync.c ++++ b/drivers/gpu/drm/amd/display/modules/freesync/freesync.c +@@ -741,6 +741,10 @@ void mod_freesync_build_vrr_params(struct mod_freesync *mod_freesync, + nominal_field_rate_in_uhz = + mod_freesync_calc_nominal_field_rate(stream); + ++ /* Rounded to the nearest Hz */ ++ nominal_field_rate_in_uhz = 1000000ULL * ++ div_u64(nominal_field_rate_in_uhz + 500000, 1000000); ++ + min_refresh_in_uhz = in_config->min_refresh_in_uhz; + max_refresh_in_uhz = in_config->max_refresh_in_uhz; + +@@ -996,14 +1000,13 @@ unsigned long long mod_freesync_calc_nominal_field_rate( + const struct dc_stream_state *stream) + { + unsigned long long nominal_field_rate_in_uhz = 0; ++ unsigned int total = stream->timing.h_total * stream->timing.v_total; + +- /* Calculate nominal field rate for stream */ ++ /* Calculate nominal field rate for stream, rounded up to nearest integer */ + 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); +- nominal_field_rate_in_uhz = div_u64(nominal_field_rate_in_uhz, +- stream->timing.v_total); ++ ++ nominal_field_rate_in_uhz = div_u64(nominal_field_rate_in_uhz, total); + + return nominal_field_rate_in_uhz; + } +-- +2.17.1 + |