[PATCH 1/1] ARM iMX28: incorrect frac/div calculation
Lothar Waßmann
LW at KARO-electronics.de
Fri Mar 23 03:13:28 EDT 2012
Hi,
Matt Burtch writes:
> The frac and div values in _CLK_SET_RATE are calculated incorrectly
> for some clock rates ie. CPU clk of 454.73MHz, 392.72MHz, 261.81Mhz,
> etc.
>
> Now the frac and div values which result in the closest actual clock
> rate to that requested is selected. Also there are no limitations
> on what frac values can be used, as long as they fall in the valid
> (18 < frac < 35) range.
>
> Tested on custom iMX28 board.
>
> Signed-off-by: Matt Burtch <matt at grid-net.com>
> ---
> arch/arm/mach-mxs/clock-mx28.c | 8 ++------
> 1 files changed, 2 insertions(+), 6 deletions(-)
>
> diff --git a/arch/arm/mach-mxs/clock-mx28.c b/arch/arm/mach-mxs/clock-mx28.c
> index 5d68e41..a058b99 100644
> --- a/arch/arm/mach-mxs/clock-mx28.c
> +++ b/arch/arm/mach-mxs/clock-mx28.c
> @@ -354,19 +354,15 @@ static int name##_set_rate(struct clk *clk, unsigned long rate) \
> } \
> for (d = 1; d <= div_max; d++) { \
> f = parent_rate * 18 / d / rate; \
> - if ((parent_rate * 18 / d) % rate) \
> - f++; \
> if (f < 18 || f > 35) \
> continue; \
> \
> calc_rate = parent_rate * 18 / f / d; \
> - if (calc_rate > rate) \
> - continue; \
> \
> - if (rate - calc_rate < diff) { \
> + if (abs(rate - calc_rate) < diff) { \
Shouldn't this actually be '<=' (also in the original code)?
Lothar Waßmann
--
___________________________________________________________
Ka-Ro electronics GmbH | Pascalstraße 22 | D - 52076 Aachen
Phone: +49 2408 1402-0 | Fax: +49 2408 1402-10
Geschäftsführer: Matthias Kaussen
Handelsregistereintrag: Amtsgericht Aachen, HRB 4996
www.karo-electronics.de | info at karo-electronics.de
___________________________________________________________
More information about the linux-arm-kernel
mailing list