.. | .. |
---|
22 | 22 | * Authors: Alex Deucher |
---|
23 | 23 | */ |
---|
24 | 24 | |
---|
25 | | -#include <drm/drmP.h> |
---|
26 | | -#include "radeon.h" |
---|
27 | | -#include "radeon_asic.h" |
---|
| 25 | +#include <linux/pci.h> |
---|
| 26 | + |
---|
| 27 | +#include "atom.h" |
---|
| 28 | +#include "cypress_dpm.h" |
---|
28 | 29 | #include "evergreend.h" |
---|
29 | 30 | #include "r600_dpm.h" |
---|
30 | | -#include "cypress_dpm.h" |
---|
31 | | -#include "atom.h" |
---|
| 31 | +#include "radeon.h" |
---|
| 32 | +#include "radeon_asic.h" |
---|
32 | 33 | |
---|
33 | 34 | #define SMC_RAM_END 0x8000 |
---|
34 | 35 | |
---|
.. | .. |
---|
558 | 559 | ASIC_INTERNAL_MEMORY_SS, vco_freq)) { |
---|
559 | 560 | u32 reference_clock = rdev->clock.mpll.reference_freq; |
---|
560 | 561 | u32 decoded_ref = rv740_get_decoded_reference_divider(dividers.ref_div); |
---|
561 | | - u32 clk_s = reference_clock * 5 / (decoded_ref * ss.rate); |
---|
562 | | - u32 clk_v = ss.percentage * |
---|
| 562 | + u32 clk_s, clk_v; |
---|
| 563 | + |
---|
| 564 | + if (!decoded_ref) |
---|
| 565 | + return -EINVAL; |
---|
| 566 | + clk_s = reference_clock * 5 / (decoded_ref * ss.rate); |
---|
| 567 | + clk_v = ss.percentage * |
---|
563 | 568 | (0x4000 * dividers.whole_fb_div + 0x800 * dividers.frac_fb_div) / (clk_s * 625); |
---|
564 | 569 | |
---|
565 | 570 | mpll_ss1 &= ~CLKV_MASK; |
---|