[U-Boot] PATCH mtd CFI flash: timeout calculation underflow if imprecise 1kHz timer: fix

Wolfgang Denk
2009-08-07T09:16:47Z

Dear Renato Andreola,

In message <4A7BE28A.8080701@imagos.it> you wrote:
>
> I'd like to clarify what is the problem with the timeout and the Intel
> flash (even if the following comments can be obvious or already well
> known) and to ask you an opinion on a small code change.

Thanks.

...
> I think that an expression like this
>
> #if CONFIG_SYS_HZ != 1000
> if ((ulong)CONFIG_SYS_HZ > 10000)
> tout *= ((ulong)CONFIG_SYS_HZ)/1000; /* for a big HZ, avoid
> overflow */
> else
> tout = (tout * (ulong)CONFIG_SYS_HZ + 500) / 1000;
> #endif
>
> could be better because
> - it forces the data type of the system dependent CONFIG_SYS_HZ value to
> ulong (no float!)
> - it rounds tout to 0.5 timer tick and leaves tout unchanged if
> CONFIG_SYS_HZ == 1000
>
> What do you think about?

I'd prefer "tout = DIV_ROUND_UP(tout*CONFIG_SYS_HZ, 1000);"

Best regards,

Wolfgang Denk

--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
I came home the other night and tried to open the door with my car
keys...and the building started up. So I took it out for a drive. A
cop pulled me over for speeding. He asked me where I live... "Right
here". - Steven Wright