[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