Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 30 Jul 2012 17:11:07 -0600
From:      Warner Losh <imp@bsdimp.com>
To:        Daan Vreeken <Daan@vitsch.nl>
Cc:        svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org, Warner Losh <imp@freebsd.org>
Subject:   Re: svn commit: r237742 - in head/sys/arm: at91 conf
Message-ID:  <1E3463C8-3D39-4FC6-9163-A0298502A3E0@bsdimp.com>
In-Reply-To: <201207310028.12533.Daan@vitsch.nl>
References:  <201206290418.q5T4IqpX018099@svn.freebsd.org> <201207310028.12533.Daan@vitsch.nl>

next in thread | previous in thread | raw e-mail | index | archive | help
Thanks for the review.  I'm pretty sure that code is wrong.  I'll go =
over your comments with a printed datasheet.  They are likely correct.  =
This code suffers a bitt too much from being cut and pasted too many =
times.

Warner


On Jul 30, 2012, at 4:28 PM, Daan Vreeken wrote:

> Hi Warner,
>=20
>=20
> 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
>>=20
>> Log:
>>  Initital support for AT91SAM9X25 SoC and the SAM9X25-EK evaluation
>>  board.  Much work remains.
> ...
>> Added: head/sys/arm/at91/at91sam9x25.c
>> =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=

>> =3D=3D=3D --- /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) {
>=20
> You seem to be dividing freq into multiples of 10MHz instead of 1MHz =
here. I=20
> think dividing by 1e6 was the intention.
>=20
>> +		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));
>=20
>> +		case 397 ... 446: return ((1 << 29) | (4 << 14));
>=20
> The (4 << 14) looks a bit strange here, as OUTA only occupies bit 14 =
and 15 of=20
> CKGR_PLLAR. (See Atmel doc11054, page 201 and 1103.)
>=20
> Maybe this entire routine could be written as something like:
> 	uint8_t		outa;
>=20
> 	freq /=3D 1000000;
> 	// optional:
> 	//freq +=3D 3;
> 	// see doc11054, page 1103
> 	outa =3D 3 - ((freq / 50) & 3);
>=20
> 	return ((1 << 29) | (outa << 14));
>=20
> Just glancing at the code, setting ICPLLA in PMC_PLLICPR for =
frequencies <=3D=20
> 600MHz seems to be missing at this moment (or I'm just not seeing it).
> (see page 212 and 1103)
>=20
>=20
> Regards,
> --=20
> 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?1E3463C8-3D39-4FC6-9163-A0298502A3E0>