
Wolfgang Denk wd@denx.de writes:
Dear Måns Rullgård,
In message yw1xd2mp0yqu.fsf@unicorn.mansr.com you wrote:
Something like this should be equivalent. That said, it looks suspiciously like it's meant to simply do a division and round up. If that is the case, +225 should be +249. It probably makes no difference for the values actually encountered.
Umm... this is the part which I do not understand.
The original code adds 90%; you add 90%, too. However, to round up, one usually adds only 50% ?
Adding 50% would round to nearest. For integer division to round up, you must add one less than the divisor.
diff --git a/arch/arm/cpu/armv7/am33xx/clock_ti814x.c b/arch/arm/cpu/armv7/am33xx/clock_ti814x.c index ef14f47..9b5a47b 100644 --- a/arch/arm/cpu/armv7/am33xx/clock_ti814x.c +++ b/arch/arm/cpu/armv7/am33xx/clock_ti814x.c @@ -211,11 +211,8 @@ static u32 pll_dco_freq_sel(u32 clkout_dco) static u32 pll_sigma_delta_val(u32 clkout_dco) { u32 sig_val = 0;
float frac_div;
frac_div = (float) clkout_dco / 250;
frac_div = frac_div + 0.90;
sig_val = (int)frac_div;
sig_val = (clkout_dco + 225) / 250; sig_val = sig_val << 24;
Where are these 90% coming from? Are they in any way meaningful, or even critical?
My guess is that it was someone's approximation of 249 / 250. I don't know the hardware, so it's conceivable that it really should be this way, although it seems unlikely.