.. | .. |
---|
22 | 22 | * Authors: Alex Deucher |
---|
23 | 23 | */ |
---|
24 | 24 | |
---|
25 | | -#include <drm/drmP.h> |
---|
26 | 25 | #include "radeon.h" |
---|
27 | 26 | #include "rv740d.h" |
---|
28 | 27 | #include "r600_dpm.h" |
---|
.. | .. |
---|
251 | 250 | ASIC_INTERNAL_MEMORY_SS, vco_freq)) { |
---|
252 | 251 | u32 reference_clock = rdev->clock.mpll.reference_freq; |
---|
253 | 252 | u32 decoded_ref = rv740_get_decoded_reference_divider(dividers.ref_div); |
---|
254 | | - u32 clk_s = reference_clock * 5 / (decoded_ref * ss.rate); |
---|
255 | | - u32 clk_v = 0x40000 * ss.percentage * |
---|
| 253 | + u32 clk_s, clk_v; |
---|
| 254 | + |
---|
| 255 | + if (!decoded_ref) |
---|
| 256 | + return -EINVAL; |
---|
| 257 | + clk_s = reference_clock * 5 / (decoded_ref * ss.rate); |
---|
| 258 | + clk_v = 0x40000 * ss.percentage * |
---|
256 | 259 | (dividers.whole_fb_div + (dividers.frac_fb_div / 8)) / (clk_s * 10000); |
---|
257 | 260 | |
---|
258 | 261 | mpll_ss1 &= ~CLKV_MASK; |
---|