From: Dave Airlie <airl...@redhat.com>

feel free to split this back up and merge it into the individual commits.

should probably also confirm its doing sane things.

Signed-off-by: Dave Airlie <airl...@redhat.com>
---
 drivers/gpu/drm/radeon/ni_dpm.c    |   10 +++++-----
 drivers/gpu/drm/radeon/rv730_dpm.c |    6 +++---
 drivers/gpu/drm/radeon/rv740_dpm.c |    6 +++---
 drivers/gpu/drm/radeon/rv770_dpm.c |    6 +++---
 drivers/gpu/drm/radeon/si_dpm.c    |   11 ++++++-----
 5 files changed, 20 insertions(+), 19 deletions(-)

diff --git a/drivers/gpu/drm/radeon/ni_dpm.c b/drivers/gpu/drm/radeon/ni_dpm.c
index ee82495..d547c42 100644
--- a/drivers/gpu/drm/radeon/ni_dpm.c
+++ b/drivers/gpu/drm/radeon/ni_dpm.c
@@ -1376,8 +1376,8 @@ static u32 ni_calculate_power_boost_limit(struct 
radeon_device *rdev,
                if (ret)
                        return 0;
 
-               tmp = ((u64)near_tdp_limit * ((u64)std_vddc_med * 
(u64)std_vddc_med) * 90) /
-                       ((u64)std_vddc_high * (u64)std_vddc_high * 100);
+               tmp = ((u64)near_tdp_limit * ((u64)std_vddc_med * 
(u64)std_vddc_med) * 90);
+               do_div(tmp, ((u64)std_vddc_high * (u64)std_vddc_high * 100));
                if (tmp >> 32)
                        return 0;
                power_boost_limit = (u32)tmp;
@@ -1978,9 +1978,9 @@ static int ni_calculate_sclk_params(struct radeon_device 
*rdev,
 
        reference_divider = 1 + dividers.ref_div;
 
-       tmp = (u64) engine_clock * reference_divider * dividers.post_div;
-
-       fbdiv = (u32) ((16384 * tmp) / reference_clock);
+       tmp = (u64) engine_clock * reference_divider * dividers.post_div * 
16834;
+       do_div(tmp, reference_clock);
+       fbdiv = (u32) tmp;
 
        spll_func_cntl &= ~(SPLL_PDIV_A_MASK | SPLL_REF_DIV_MASK);
        spll_func_cntl |= SPLL_REF_DIV(dividers.ref_div);
diff --git a/drivers/gpu/drm/radeon/rv730_dpm.c 
b/drivers/gpu/drm/radeon/rv730_dpm.c
index b23be71..3f5e1cf 100644
--- a/drivers/gpu/drm/radeon/rv730_dpm.c
+++ b/drivers/gpu/drm/radeon/rv730_dpm.c
@@ -67,9 +67,9 @@ int rv730_populate_sclk_value(struct radeon_device *rdev,
        else
                post_divider = 1;
 
-       tmp = (u64) engine_clock * reference_divider * post_divider;
-
-       fbdiv = (u32) ((16384 * tmp) / reference_clock);
+       tmp = (u64) engine_clock * reference_divider * post_divider * 16384;
+       do_div(tmp, reference_clock);
+       fbdiv = (u32) tmp;
 
        /* set up registers */
        if (dividers.enable_post_div)
diff --git a/drivers/gpu/drm/radeon/rv740_dpm.c 
b/drivers/gpu/drm/radeon/rv740_dpm.c
index 7aa1608..c4c8da5 100644
--- a/drivers/gpu/drm/radeon/rv740_dpm.c
+++ b/drivers/gpu/drm/radeon/rv740_dpm.c
@@ -141,9 +141,9 @@ int rv740_populate_sclk_value(struct radeon_device *rdev, 
u32 engine_clock,
 
        reference_divider = 1 + dividers.ref_div;
 
-       tmp = (u64) engine_clock * reference_divider * dividers.post_div;
-
-       fbdiv = (u32) ((16384 * tmp) / reference_clock);
+       tmp = (u64) engine_clock * reference_divider * dividers.post_div * 
16384;
+       do_div(tmp, reference_clock);
+       fbdiv = (u32) tmp;
 
        spll_func_cntl &= ~(SPLL_PDIV_A_MASK | SPLL_REF_DIV_MASK);
        spll_func_cntl |= SPLL_REF_DIV(dividers.ref_div);
diff --git a/drivers/gpu/drm/radeon/rv770_dpm.c 
b/drivers/gpu/drm/radeon/rv770_dpm.c
index 038c013..e58f8b6 100644
--- a/drivers/gpu/drm/radeon/rv770_dpm.c
+++ b/drivers/gpu/drm/radeon/rv770_dpm.c
@@ -511,9 +511,9 @@ static int rv770_populate_sclk_value(struct radeon_device 
*rdev,
        else
                post_divider = 1;
 
-       tmp = (u64) engine_clock * reference_divider * post_divider;
-
-       fbdiv = (u32) ((16384 * tmp) / reference_clock);
+       tmp = (u64) engine_clock * reference_divider * post_divider * 16384;
+       do_div(tmp, reference_clock);
+       fbdiv = (u32) tmp;
 
        if (dividers.enable_post_div)
                spll_func_cntl |= SPLL_DIVEN;
diff --git a/drivers/gpu/drm/radeon/si_dpm.c b/drivers/gpu/drm/radeon/si_dpm.c
index 4c5b258..98450d8 100644
--- a/drivers/gpu/drm/radeon/si_dpm.c
+++ b/drivers/gpu/drm/radeon/si_dpm.c
@@ -2243,8 +2243,9 @@ static u16 si_calculate_power_efficiency_ratio(struct 
radeon_device *rdev,
        if ((prev_vddc == 0) || (curr_vddc == 0))
                return 0;
 
-       pwr_efficiency_ratio = ((u64)1024 * curr_vddc * curr_vddc * ((u64)1000 
+ margin) /
-                               (u64)1000) / (prev_vddc * prev_vddc);
+       pwr_efficiency_ratio = (u64)1024 * curr_vddc * curr_vddc * ((u64)1000 + 
margin);
+       do_div(pwr_efficiency_ratio, 1000);
+       do_div(pwr_efficiency_ratio, (prev_vddc * prev_vddc));
 
        if (pwr_efficiency_ratio > (u64)0xFFFF)
                return 0;
@@ -4532,9 +4533,9 @@ static int si_calculate_sclk_params(struct radeon_device 
*rdev,
 
        reference_divider = 1 + dividers.ref_div;
 
-       tmp = (uint64_t) engine_clock * reference_divider * dividers.post_div;
-
-       fbdiv = (u32) ((16384 * tmp) / reference_clock);
+       tmp = engine_clock * reference_divider * dividers.post_div * 16384;
+       do_div(tmp, reference_clock);
+       fbdiv = (u32) tmp;
 
        spll_func_cntl &= ~(SPLL_PDIV_A_MASK | SPLL_REF_DIV_MASK);
        spll_func_cntl |= SPLL_REF_DIV(dividers.ref_div);
-- 
1.7.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to