Date: Tue, 31 Jul 2012 00:28:12 +0200 From: Daan Vreeken <Daan@vitsch.nl> To: svn-src-all@freebsd.org Cc: svn-src-head@freebsd.org, src-committers@freebsd.org, Warner Losh <imp@freebsd.org> Subject: Re: svn commit: r237742 - in head/sys/arm: at91 conf Message-ID: <201207310028.12533.Daan@vitsch.nl> In-Reply-To: <201206290418.q5T4IqpX018099@svn.freebsd.org> References: <201206290418.q5T4IqpX018099@svn.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Hi Warner, On Friday 29 June 2012 06:18:52 Warner Losh wrote: > Author: imp > Date: Fri Jun 29 04:18:52 2012 > New Revision: 237742 > URL: http://svn.freebsd.org/changeset/base/237742 > > Log: > Initital support for AT91SAM9X25 SoC and the SAM9X25-EK evaluation > board. Much work remains. ... > Added: head/sys/arm/at91/at91sam9x25.c > =========================================================================== >=== --- /dev/null 00:00:00 1970 (empty, because file is newly added) > +++ head/sys/arm/at91/at91sam9x25.c Fri Jun 29 04:18:52 2012 (r237742) > @@ -0,0 +1,343 @@ ... > +static uint32_t > +at91_pll_outa(int freq) > +{ > + > + switch (freq / 10000000) { You seem to be dividing freq into multiples of 10MHz instead of 1MHz here. I think dividing by 1e6 was the intention. > + case 747 ... 801: return ((1 << 29) | (0 << 14)); > + case 697 ... 746: return ((1 << 29) | (1 << 14)); > + case 647 ... 696: return ((1 << 29) | (2 << 14)); > + case 597 ... 646: return ((1 << 29) | (3 << 14)); > + case 547 ... 596: return ((1 << 29) | (1 << 14)); > + case 497 ... 546: return ((1 << 29) | (2 << 14)); > + case 447 ... 496: return ((1 << 29) | (3 << 14)); > + case 397 ... 446: return ((1 << 29) | (4 << 14)); The (4 << 14) looks a bit strange here, as OUTA only occupies bit 14 and 15 of CKGR_PLLAR. (See Atmel doc11054, page 201 and 1103.) Maybe this entire routine could be written as something like: uint8_t outa; freq /= 1000000; // optional: //freq += 3; // see doc11054, page 1103 outa = 3 - ((freq / 50) & 3); return ((1 << 29) | (outa << 14)); Just glancing at the code, setting ICPLLA in PMC_PLLICPR for frequencies <= 600MHz seems to be missing at this moment (or I'm just not seeing it). (see page 212 and 1103) Regards, -- Daan Vreeken Vitsch Electronics http://Vitsch.nl/ http://VitschVPN.nl/ tel: +31-(0)40-7113051 KvK nr: 17174380
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201207310028.12533.Daan>