[PATCH 1/1] ARM iMX28: incorrect frac/div calculation
Matt Burtch
matt at grid-net.com
Fri Mar 23 14:38:58 EDT 2012
On 03/23/2012 12:13 AM, Lothar Waßmann wrote:
> 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)?
Hi Lothar,
It shouldn't make a difference. If it was '<=' it would result in a
different frac and higher div value but the difference between the
requested rate and actual would be the same.
Thanks,
Matt Burtch
> Lothar Waßmann
More information about the linux-arm-kernel
mailing list