tegra: clk: correct divider algo
Negative divider_ux1 values previously were resolved by extra checks and caused undefined behavior with div1_5_not_allowed
This commit is contained in:
@@ -12,11 +12,11 @@
|
||||
int div_frac_get(unsigned long rate, unsigned parent_rate, u8 width,
|
||||
u8 frac_width, u8 flags)
|
||||
{
|
||||
u64 divider_ux1 = parent_rate;
|
||||
s64 divider_ux1 = parent_rate;
|
||||
int mul;
|
||||
|
||||
if (!rate)
|
||||
return 0;
|
||||
return div_mask(width);
|
||||
|
||||
mul = 1 << frac_width;
|
||||
|
||||
@@ -31,9 +31,6 @@ int div_frac_get(unsigned long rate, unsigned parent_rate, u8 width,
|
||||
if (flags & TEGRA_DIVIDER_INT)
|
||||
divider_ux1 *= mul;
|
||||
|
||||
if (!div1_5_not_allowed && divider_ux1 < mul)
|
||||
return 0;
|
||||
|
||||
divider_ux1 -= mul;
|
||||
|
||||
if (divider_ux1 > div_mask(width))
|
||||
|
||||
Reference in New Issue
Block a user