On Fri, May 21, 2010 at 1:59 PM, Timur Tabi <timur.t...@gmail.com> wrote:
> Is this rounding algorithm the reason why I get output like this: > > Clock Configuration: > CPU0:799.992 MHz, CPU1:799.992 MHz, > CCB:399.996 MHz, > DDR:299.997 MHz (599.994 MT/s data rate) (Asynchronous), LBC:25 > MHz > > If so, maybe we should fix it? To answer my own question: yes. So here's a better version of that function that rounds to the nearest MHz and is of a proper coding style: static const unsigned long ics307_clk_freq(unsigned char cw0, unsigned char cw1, unsigned char cw2) { static const u8 s2od[] = { 10, 2, 8, 4, 5, 7, 3, 6 }; unsigned long vdw = (cw1 << 1) | (cw2 >> 7); unsigned long rdw = cw2 & 0x7f; unsigned long od = s2od[cw0 & 0x7]; unsigned long freq; freq = 2 * CONFIG_ICS307_REFCLK_HZ * (vdw + 8) / ((rdw + 2) * od); /* Round freq to the nearest MHz */ freq += 500000; freq /= 1000000; freq *= 1000000; debug("ICS307: CW[0-2]: %02X %02X %02X => %lu Hz\n", cw0, cw1, cw2, freq); return freq; } And the result: Clock Configuration: CPU0:800 MHz, CPU1:800 MHz, CCB:400 MHz, DDR:300 MHz (600 MT/s data rate) (Asynchronous), LBC:25 MHz -- Timur Tabi Linux kernel developer at Freescale _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot