[U-Boot] Illegal use of FP ops in clock_ti814x.c

Måns Rullgård mans at mansr.com
Tue Oct 29 01:54:06 CET 2013


Wolfgang Denk <wd at denx.de> writes:

> Dear Måns Rullgård,
>
> In message <yw1xd2mp0yqu.fsf at 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.

-- 
Måns Rullgård
mans at mansr.com


More information about the U-Boot mailing list