From: Ovidiu Bunea <[email protected]>

[why * how]
DCHUBBUB_ARB_FRAC_URG_BW_* registers only have 10 programmable bits that are 
formatted in
U0.10 fixed point. Multiplying the fraction by 1000 is incorrect, and 
understates the
fraction by 2.34%.

Rounding or truncating is not correct either since it can cut off 0.1% of the 
fraction
which has direct implications on the assumed deadlines and TTU, albeit minor.

Scale the fraction by the correct 1024 value, use ceiling to ensure the assumed 
fraction is
maintained, and clamp to 1023 since the register field is only 10 bits wide.
Clamping from 1024 -> 1023 only impacts modes at > 99.9% fractions.

Reviewed-by: Dillon Varone <[email protected]>
Signed-off-by: Ovidiu Bunea <[email protected]>
Signed-off-by: Ivan Lipski <[email protected]>
---
 .../src/dml2_core/dml2_core_dcn4_calcs.c      |  7 ++++---
 .../dml2_core/dml2_core_dcn5_calcs_dchub.c    |  5 +++--
 .../dml2_core/dml2_core_dcn6_calcs_dchub.c    |  5 +++--
 .../dml21/src/dml2_dpmm/dml2_dpmm_dcn4.c      | 20 ++++++++++---------
 .../dml21/src/dml2_dpmm/dml2_dpmm_dcn5.c      | 13 ++++++------
 5 files changed, 28 insertions(+), 22 deletions(-)

diff --git 
a/drivers/gpu/drm/amd/display/dc/dml2_0/dml21/src/dml2_core/dml2_core_dcn4_calcs.c
 
b/drivers/gpu/drm/amd/display/dc/dml2_0/dml21/src/dml2_core/dml2_core_dcn4_calcs.c
index 2d43a35c4c42..a4a77e375d9f 100644
--- 
a/drivers/gpu/drm/amd/display/dc/dml2_0/dml21/src/dml2_core/dml2_core_dcn4_calcs.c
+++ 
b/drivers/gpu/drm/amd/display/dc/dml2_0/dml21/src/dml2_core/dml2_core_dcn4_calcs.c
@@ -12315,6 +12315,7 @@ static unsigned int dml_get_plane_idx(const struct 
dml2_core_internal_display_mo
 static void rq_dlg_get_wm_regs(const struct dml2_display_cfg *display_cfg, 
const struct dml2_core_internal_display_mode_lib *mode_lib, struct 
dml2_dchub_watermark_regs *wm_regs)
 {
        double refclk_freq_in_mhz = (display_cfg->overrides.hw.dlg_ref_clk_mhz 
> 0) ? (double)display_cfg->overrides.hw.dlg_ref_clk_mhz : 
mode_lib->soc.dchub_refclk_mhz;
+       unsigned int u0_10_fixed_point_scale = 1U << 10;
 
        wm_regs->fclk_pstate = (unsigned 
int)(mode_lib->mp.Watermark.FCLKChangeWatermark * refclk_freq_in_mhz);
        wm_regs->sr_enter = (unsigned 
int)(mode_lib->mp.Watermark.StutterEnterPlusExitWatermark * refclk_freq_in_mhz);
@@ -12327,9 +12328,9 @@ static void rq_dlg_get_wm_regs(const struct 
dml2_display_cfg *display_cfg, const
        wm_regs->usr = (unsigned 
int)(mode_lib->mp.Watermark.USRRetrainingWatermark * refclk_freq_in_mhz);
        wm_regs->refcyc_per_trip_to_mem = (unsigned 
int)(mode_lib->mp.UrgentLatency * refclk_freq_in_mhz);
        wm_regs->refcyc_per_meta_trip_to_mem = (unsigned 
int)(mode_lib->mp.MetaTripToMemory * refclk_freq_in_mhz);
-       wm_regs->frac_urg_bw_flip = (unsigned 
int)(mode_lib->mp.FractionOfUrgentBandwidthImmediateFlip * 1000);
-       wm_regs->frac_urg_bw_nom = (unsigned 
int)(mode_lib->mp.FractionOfUrgentBandwidth * 1000);
-       wm_regs->frac_urg_bw_mall = (unsigned 
int)(mode_lib->mp.FractionOfUrgentBandwidthMALL * 1000);
+       wm_regs->frac_urg_bw_flip = (unsigned 
int)math_min2(math_ceil(mode_lib->mp.FractionOfUrgentBandwidthImmediateFlip * 
u0_10_fixed_point_scale), u0_10_fixed_point_scale - 1);
+       wm_regs->frac_urg_bw_nom = (unsigned 
int)math_min2(math_ceil(mode_lib->mp.FractionOfUrgentBandwidth * 
u0_10_fixed_point_scale), u0_10_fixed_point_scale - 1);
+       wm_regs->frac_urg_bw_mall = (unsigned 
int)math_min2(math_ceil(mode_lib->mp.FractionOfUrgentBandwidthMALL * 
u0_10_fixed_point_scale), u0_10_fixed_point_scale - 1);
 }
 
 static unsigned int log_and_substract_if_non_zero(unsigned int a, unsigned int 
subtrahend)
diff --git 
a/drivers/gpu/drm/amd/display/dc/dml2_0/dml21/src/dml2_core/dml2_core_dcn5_calcs_dchub.c
 
b/drivers/gpu/drm/amd/display/dc/dml2_0/dml21/src/dml2_core/dml2_core_dcn5_calcs_dchub.c
index f407afefb37f..262b8e098343 100644
--- 
a/drivers/gpu/drm/amd/display/dc/dml2_0/dml21/src/dml2_core/dml2_core_dcn5_calcs_dchub.c
+++ 
b/drivers/gpu/drm/amd/display/dc/dml2_0/dml21/src/dml2_core/dml2_core_dcn5_calcs_dchub.c
@@ -5344,6 +5344,7 @@ void 
dcn5_adjust_pixel_clock_for_progressive_to_interlace_unit(const struct dml2
 static void dcn5_rq_dlg_get_wm_regs(const struct dml2_display_cfg 
*display_cfg, const struct dml2_core_internal_display_mode_lib *mode_lib, const 
struct dml2_utm_soc_bb *utm_soc_bb, struct dml2_dchub_watermark_regs *wm_regs)
 {
        double refclk_freq_in_mhz = (display_cfg->overrides.hw.dlg_ref_clk_mhz 
> 0) ? (double)display_cfg->overrides.hw.dlg_ref_clk_mhz : 
utm_soc_bb->dchub_refclk_mhz;
+       unsigned int u0_10_fixed_point_scale = 1U << 10;
 
        wm_regs->fclk_pstate = (int 
unsigned)(mode_lib->mp.Watermark.FCLKChangeWatermark * refclk_freq_in_mhz);
        wm_regs->sr_enter = (int 
unsigned)(mode_lib->mp.Watermark.StutterEnterPlusExitWatermark * 
refclk_freq_in_mhz);
@@ -5356,8 +5357,8 @@ static void dcn5_rq_dlg_get_wm_regs(const struct 
dml2_display_cfg *display_cfg,
        wm_regs->usr = (int 
unsigned)(mode_lib->mp.Watermark.USRRetrainingWatermark * refclk_freq_in_mhz);
        wm_regs->refcyc_per_trip_to_mem = (unsigned 
int)(mode_lib->mp.UrgentLatency * refclk_freq_in_mhz);
        wm_regs->refcyc_per_meta_trip_to_mem = (unsigned 
int)(mode_lib->mp.MetaTripToMemory * refclk_freq_in_mhz);
-       wm_regs->frac_urg_bw_flip = (unsigned 
int)(mode_lib->mp.FractionOfUrgentBandwidthImmediateFlip * 1000);
-       wm_regs->frac_urg_bw_nom = (unsigned 
int)(mode_lib->mp.FractionOfUrgentBandwidth * 1000);
+       wm_regs->frac_urg_bw_flip = (unsigned 
int)math_min2(math_ceil(mode_lib->mp.FractionOfUrgentBandwidthImmediateFlip * 
u0_10_fixed_point_scale), u0_10_fixed_point_scale - 1);
+       wm_regs->frac_urg_bw_nom = (unsigned 
int)math_min2(math_ceil(mode_lib->mp.FractionOfUrgentBandwidth * 
u0_10_fixed_point_scale), u0_10_fixed_point_scale - 1);
 }
 
 void dcn5_get_mcif_arb_params(const struct dml2_core_internal_display_mode_lib 
*mode_lib, struct dml2_mcif_global_register_set *out)
diff --git 
a/drivers/gpu/drm/amd/display/dc/dml2_0/dml21/src/dml2_core/dml2_core_dcn6_calcs_dchub.c
 
b/drivers/gpu/drm/amd/display/dc/dml2_0/dml21/src/dml2_core/dml2_core_dcn6_calcs_dchub.c
index 6ad41846a73a..ce6eb94230c1 100644
--- 
a/drivers/gpu/drm/amd/display/dc/dml2_0/dml21/src/dml2_core/dml2_core_dcn6_calcs_dchub.c
+++ 
b/drivers/gpu/drm/amd/display/dc/dml2_0/dml21/src/dml2_core/dml2_core_dcn6_calcs_dchub.c
@@ -1059,6 +1059,7 @@ static void dcn6_rq_dlg_get_dlg_reg(
 static void dcn6_rq_dlg_get_wm_regs(const struct dml2_display_cfg 
*display_cfg, const struct dml2_core_internal_display_mode_lib *mode_lib, const 
struct dml2_utm_soc_bb *utm_soc_bb, struct dml2_dchub_watermark_regs *wm_regs)
 {
        double refclk_freq_in_mhz = (display_cfg->overrides.hw.dlg_ref_clk_mhz 
> 0) ? (double)display_cfg->overrides.hw.dlg_ref_clk_mhz : 
utm_soc_bb->dchub_refclk_mhz;
+       unsigned int u0_10_fixed_point_scale = 1U << 10;
 
        wm_regs->fclk_pstate = (int 
unsigned)(mode_lib->mp.Watermark.FCLKChangeWatermark * refclk_freq_in_mhz);
        wm_regs->sr_enter = (int 
unsigned)(mode_lib->mp.Watermark.StutterEnterPlusExitWatermark * 
refclk_freq_in_mhz);
@@ -1074,8 +1075,8 @@ static void dcn6_rq_dlg_get_wm_regs(const struct 
dml2_display_cfg *display_cfg,
        wm_regs->usr = (int 
unsigned)(mode_lib->mp.Watermark.USRRetrainingWatermark * refclk_freq_in_mhz);
        wm_regs->refcyc_per_trip_to_mem = (unsigned 
int)(mode_lib->mp.UrgentLatency * refclk_freq_in_mhz);
        wm_regs->refcyc_per_meta_trip_to_mem = (unsigned 
int)(mode_lib->mp.MetaTripToMemory * refclk_freq_in_mhz);
-       wm_regs->frac_urg_bw_flip = (unsigned 
int)(mode_lib->mp.FractionOfUrgentBandwidthImmediateFlip * 1000);
-       wm_regs->frac_urg_bw_nom = (unsigned 
int)(mode_lib->mp.FractionOfUrgentBandwidth * 1000);
+       wm_regs->frac_urg_bw_flip = (unsigned 
int)math_min2(math_ceil(mode_lib->mp.FractionOfUrgentBandwidthImmediateFlip * 
u0_10_fixed_point_scale), u0_10_fixed_point_scale - 1);
+       wm_regs->frac_urg_bw_nom = (unsigned 
int)math_min2(math_ceil(mode_lib->mp.FractionOfUrgentBandwidth * 
u0_10_fixed_point_scale), u0_10_fixed_point_scale - 1);
 }
 
 void dcn6_get_pipe_regs(const struct dml2_display_cfg *display_cfg,
diff --git 
a/drivers/gpu/drm/amd/display/dc/dml2_0/dml21/src/dml2_dpmm/dml2_dpmm_dcn4.c 
b/drivers/gpu/drm/amd/display/dc/dml2_0/dml21/src/dml2_dpmm/dml2_dpmm_dcn4.c
index 54a1f9c13dbf..7fa50ccfcfd1 100644
--- a/drivers/gpu/drm/amd/display/dc/dml2_0/dml21/src/dml2_dpmm/dml2_dpmm_dcn4.c
+++ b/drivers/gpu/drm/amd/display/dc/dml2_0/dml21/src/dml2_dpmm/dml2_dpmm_dcn4.c
@@ -898,6 +898,7 @@ bool dpmm_dcn4_map_watermarks(struct 
dml2_dpmm_map_watermarks_params_in_out *in_
        struct dml2_dchub_global_register_set *dchubbub_regs = 
&in_out->programming->global_regs;
 
        double refclk_freq_in_mhz = (display_cfg->overrides.hw.dlg_ref_clk_mhz 
> 0) ? (double)display_cfg->overrides.hw.dlg_ref_clk_mhz : 
mode_lib->soc.dchub_refclk_mhz;
+       unsigned int u0_10_fixed_point_scale = 1U << 10;
 
        /* set A */
        dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_A].fclk_pstate = (int 
unsigned)(mode_lib->mp.Watermark.FCLKChangeWatermark * refclk_freq_in_mhz);
@@ -911,9 +912,9 @@ bool dpmm_dcn4_map_watermarks(struct 
dml2_dpmm_map_watermarks_params_in_out *in_
        dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_A].usr = (int 
unsigned)(mode_lib->mp.Watermark.USRRetrainingWatermark * refclk_freq_in_mhz);
        
dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_A].refcyc_per_trip_to_mem = 
(unsigned int)(mode_lib->mp.Watermark.UrgentWatermark * refclk_freq_in_mhz);
        
dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_A].refcyc_per_meta_trip_to_mem 
= (unsigned int)(mode_lib->mp.Watermark.UrgentWatermark * refclk_freq_in_mhz);
-       dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_A].frac_urg_bw_flip = 
(unsigned int)(mode_lib->mp.FractionOfUrgentBandwidthImmediateFlip * 1000);
-       dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_A].frac_urg_bw_nom = 
(unsigned int)(mode_lib->mp.FractionOfUrgentBandwidth * 1000);
-       dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_A].frac_urg_bw_mall = 
(unsigned int)(mode_lib->mp.FractionOfUrgentBandwidthMALL * 1000);
+       dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_A].frac_urg_bw_flip = 
(unsigned 
int)math_min2(math_ceil(mode_lib->mp.FractionOfUrgentBandwidthImmediateFlip * 
u0_10_fixed_point_scale), u0_10_fixed_point_scale - 1);
+       dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_A].frac_urg_bw_nom = 
(unsigned int)math_min2(math_ceil(mode_lib->mp.FractionOfUrgentBandwidth * 
u0_10_fixed_point_scale), u0_10_fixed_point_scale - 1);
+       dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_A].frac_urg_bw_mall = 
(unsigned int)math_min2(math_ceil(mode_lib->mp.FractionOfUrgentBandwidthMALL * 
u0_10_fixed_point_scale), u0_10_fixed_point_scale - 1);
 
        /* set B */
        dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_B].fclk_pstate = (int 
unsigned)(mode_lib->mp.Watermark.FCLKChangeWatermark * refclk_freq_in_mhz);
@@ -927,9 +928,9 @@ bool dpmm_dcn4_map_watermarks(struct 
dml2_dpmm_map_watermarks_params_in_out *in_
        dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_B].usr = (int 
unsigned)(mode_lib->mp.Watermark.USRRetrainingWatermark * refclk_freq_in_mhz);
        
dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_B].refcyc_per_trip_to_mem = 
(unsigned int)(mode_lib->mp.Watermark.UrgentWatermark * refclk_freq_in_mhz);
        
dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_B].refcyc_per_meta_trip_to_mem 
= (unsigned int)(mode_lib->mp.Watermark.UrgentWatermark * refclk_freq_in_mhz);
-       dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_B].frac_urg_bw_flip = 
(unsigned int)(mode_lib->mp.FractionOfUrgentBandwidthImmediateFlip * 1000);
-       dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_B].frac_urg_bw_nom = 
(unsigned int)(mode_lib->mp.FractionOfUrgentBandwidth * 1000);
-       dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_B].frac_urg_bw_mall = 
(unsigned int)(mode_lib->mp.FractionOfUrgentBandwidthMALL * 1000);
+       dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_B].frac_urg_bw_flip = 
(unsigned 
int)math_min2(math_ceil(mode_lib->mp.FractionOfUrgentBandwidthImmediateFlip * 
u0_10_fixed_point_scale), u0_10_fixed_point_scale - 1);
+       dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_B].frac_urg_bw_nom = 
(unsigned int)math_min2(math_ceil(mode_lib->mp.FractionOfUrgentBandwidth * 
u0_10_fixed_point_scale), u0_10_fixed_point_scale - 1);
+       dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_B].frac_urg_bw_mall = 
(unsigned int)math_min2(math_ceil(mode_lib->mp.FractionOfUrgentBandwidthMALL * 
u0_10_fixed_point_scale), u0_10_fixed_point_scale - 1);
 
        dchubbub_regs->num_watermark_sets = 2;
 
@@ -944,6 +945,7 @@ bool dpmm_dcn42_map_watermarks(struct 
dml2_dpmm_map_watermarks_params_in_out *in
        struct dml2_dchub_global_register_set *dchubbub_regs = 
&in_out->programming->global_regs;
 
        double refclk_freq_in_mhz = (display_cfg->overrides.hw.dlg_ref_clk_mhz 
> 0) ? (double)display_cfg->overrides.hw.dlg_ref_clk_mhz : 
mode_lib->soc.dchub_refclk_mhz;
+       unsigned int u0_10_fixed_point_scale = 1U << 10;
 
        /* set A */
        dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_A].fclk_pstate = (int 
unsigned)(mode_lib->mp.Watermark.FCLKChangeWatermark * refclk_freq_in_mhz);
@@ -957,9 +959,9 @@ bool dpmm_dcn42_map_watermarks(struct 
dml2_dpmm_map_watermarks_params_in_out *in
        dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_A].usr = (int 
unsigned)(mode_lib->mp.Watermark.USRRetrainingWatermark * refclk_freq_in_mhz);
        
dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_A].refcyc_per_trip_to_mem = 
(unsigned int)(mode_lib->mp.Watermark.UrgentWatermark * refclk_freq_in_mhz);
        
dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_A].refcyc_per_meta_trip_to_mem 
= (unsigned int)(mode_lib->mp.Watermark.UrgentWatermark * refclk_freq_in_mhz);
-       dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_A].frac_urg_bw_flip = 
(unsigned int)(mode_lib->mp.FractionOfUrgentBandwidthImmediateFlip * 1000);
-       dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_A].frac_urg_bw_nom = 
(unsigned int)(mode_lib->mp.FractionOfUrgentBandwidth * 1000);
-       dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_A].frac_urg_bw_mall = 
(unsigned int)(mode_lib->mp.FractionOfUrgentBandwidthMALL * 1000);
+       dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_A].frac_urg_bw_flip = 
(unsigned 
int)math_min2(math_ceil(mode_lib->mp.FractionOfUrgentBandwidthImmediateFlip * 
u0_10_fixed_point_scale), u0_10_fixed_point_scale - 1);
+       dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_A].frac_urg_bw_nom = 
(unsigned int)math_min2(math_ceil(mode_lib->mp.FractionOfUrgentBandwidth * 
u0_10_fixed_point_scale), u0_10_fixed_point_scale - 1);
+       dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_A].frac_urg_bw_mall = 
(unsigned int)math_min2(math_ceil(mode_lib->mp.FractionOfUrgentBandwidthMALL * 
u0_10_fixed_point_scale), u0_10_fixed_point_scale - 1);
 
        /* set B */
        dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_B] = 
dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_A];
diff --git 
a/drivers/gpu/drm/amd/display/dc/dml2_0/dml21/src/dml2_dpmm/dml2_dpmm_dcn5.c 
b/drivers/gpu/drm/amd/display/dc/dml2_0/dml21/src/dml2_dpmm/dml2_dpmm_dcn5.c
index f6230f8f9127..e607d763f5a3 100644
--- a/drivers/gpu/drm/amd/display/dc/dml2_0/dml21/src/dml2_dpmm/dml2_dpmm_dcn5.c
+++ b/drivers/gpu/drm/amd/display/dc/dml2_0/dml21/src/dml2_dpmm/dml2_dpmm_dcn5.c
@@ -397,6 +397,7 @@ bool dpmm_dcn5_map_watermarks(struct 
dml2_dpmm_map_watermarks_params_in_out *in_
        struct dml2_mcif_global_register_set *mcif_regs = 
&in_out->programming->mcif_global_regs;
 
        double refclk_freq_in_mhz = (display_cfg->overrides.hw.dlg_ref_clk_mhz 
> 0) ? (double)display_cfg->overrides.hw.dlg_ref_clk_mhz : 
in_out->core->utm_soc_bb->dchub_refclk_mhz;
+       unsigned int u0_10_fixed_point_scale = 1U << 10;
 
        /* set A */
        dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_A].fclk_pstate = (int 
unsigned)(mode_lib->mp.Watermark.FCLKChangeWatermark * refclk_freq_in_mhz);
@@ -410,9 +411,9 @@ bool dpmm_dcn5_map_watermarks(struct 
dml2_dpmm_map_watermarks_params_in_out *in_
        dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_A].usr = (int 
unsigned)(mode_lib->mp.Watermark.USRRetrainingWatermark * refclk_freq_in_mhz);
        
dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_A].refcyc_per_trip_to_mem = 
(unsigned int)(mode_lib->mp.Watermark.UrgentWatermark * refclk_freq_in_mhz);
        
dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_A].refcyc_per_meta_trip_to_mem 
= (unsigned int)(mode_lib->mp.Watermark.UrgentWatermark * refclk_freq_in_mhz);
-       dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_A].frac_urg_bw_flip = 
(unsigned int)(mode_lib->mp.FractionOfUrgentBandwidthImmediateFlip * 1000);
-       dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_A].frac_urg_bw_nom = 
(unsigned int)(mode_lib->mp.FractionOfUrgentBandwidth * 1000);
-       dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_A].frac_urg_bw_mall = 
(unsigned int)(mode_lib->mp.FractionOfUrgentBandwidthMALL * 1000);
+       dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_A].frac_urg_bw_flip = 
(unsigned 
int)math_min2(math_ceil(mode_lib->mp.FractionOfUrgentBandwidthImmediateFlip * 
u0_10_fixed_point_scale), u0_10_fixed_point_scale - 1);
+       dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_A].frac_urg_bw_nom = 
(unsigned int)math_min2(math_ceil(mode_lib->mp.FractionOfUrgentBandwidth * 
u0_10_fixed_point_scale), u0_10_fixed_point_scale - 1);
+       dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_A].frac_urg_bw_mall = 
(unsigned int)math_min2(math_ceil(mode_lib->mp.FractionOfUrgentBandwidthMALL * 
u0_10_fixed_point_scale), u0_10_fixed_point_scale - 1);
 
        /* set B */
        dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_B].fclk_pstate = (int 
unsigned)(mode_lib->mp.Watermark.FCLKChangeWatermark * refclk_freq_in_mhz);
@@ -426,9 +427,9 @@ bool dpmm_dcn5_map_watermarks(struct 
dml2_dpmm_map_watermarks_params_in_out *in_
        dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_B].usr = (int 
unsigned)(mode_lib->mp.Watermark.USRRetrainingWatermark * refclk_freq_in_mhz);
        
dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_B].refcyc_per_trip_to_mem = 
(unsigned int)(mode_lib->mp.Watermark.UrgentWatermark * refclk_freq_in_mhz);
        
dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_B].refcyc_per_meta_trip_to_mem 
= (unsigned int)(mode_lib->mp.Watermark.UrgentWatermark * refclk_freq_in_mhz);
-       dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_B].frac_urg_bw_flip = 
(unsigned int)(mode_lib->mp.FractionOfUrgentBandwidthImmediateFlip * 1000);
-       dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_B].frac_urg_bw_nom = 
(unsigned int)(mode_lib->mp.FractionOfUrgentBandwidth * 1000);
-       dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_B].frac_urg_bw_mall = 
(unsigned int)(mode_lib->mp.FractionOfUrgentBandwidthMALL * 1000);
+       dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_B].frac_urg_bw_flip = 
(unsigned 
int)math_min2(math_ceil(mode_lib->mp.FractionOfUrgentBandwidthImmediateFlip * 
u0_10_fixed_point_scale), u0_10_fixed_point_scale - 1);
+       dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_B].frac_urg_bw_nom = 
(unsigned int)math_min2(math_ceil(mode_lib->mp.FractionOfUrgentBandwidth * 
u0_10_fixed_point_scale), u0_10_fixed_point_scale - 1);
+       dchubbub_regs->wm_regs[DML2_DCHUB_WATERMARK_SET_B].frac_urg_bw_mall = 
(unsigned int)math_min2(math_ceil(mode_lib->mp.FractionOfUrgentBandwidthMALL * 
u0_10_fixed_point_scale), u0_10_fixed_point_scale - 1);
 
        dchubbub_regs->num_watermark_sets = 2;
 
-- 
2.43.0

Reply via email to