[U-Boot] [patch u-boot git arm/next] davinci: display correct clock info
David Brownell
david-b at pacbell.net
Thu Apr 30 02:13:38 CEST 2009
On Wednesday 29 April 2009, Jean-Christophe PLAGNIOL-VILLARD wrote:
> On 15:38 Wed 29 Apr , David Brownell wrote:
> > From: David Brownell <dbrownell at users.sourceforge.net>
> >
> > Make the DaVinci clock display code work on the dm355 too ... there
> > are pre- and post- dividers on its PLLs, which most other DaVinci
> > processors don't use; and it uses different PLL dividers. Stubbed
> > in support for the DM6467 too. Verified on dm355 and dm6446.
> >
> > Signed-off-by: David Brownell <dbrownell at users.sourceforge.net>
> > ---
> > This should move to cpu/arm926ejs/davinci (cpuinfo.c?) someday,
> > like the other SoC-specific code. For another patch.
>
> good idea
>
> cpu.c will be better
I was thinking of using CONFIG_DISPLAY_CPUINFO hooks for that,
and those seem to be in cpuinfo.c files. (Someday, when time
allows.)
> btw a clock design as done for at91 & avr32 will be nice too
It's missing from at91rm9200 ... ;)
Those seem to be useful if U-Boot is the first stage boot
loader, running out of NOR flash and needing to do lots of
low level setup: configure PLLs, clock divisors, memory
timings, start DRAM, and so on.
But most DaVinci boards boot from NAND flash nowadays, making
U-boot be a third stage loader with no lowlevel init. So
it doesn't need such code ... but if it did, it would touch
the PLL controllers in very different ways (modifying the
registers and handshaking, not just reading like this).
> > +/* offsets from PLL controller base */
> > +#define PLLC_PLLCTL 0x100
> > +#define PLLC_PLLM 0x110
> > +#define PLLC_PREDIV 0x114
> > +#define PLLC_PLLDIV1 0x118
> > +#define PLLC_PLLDIV2 0x11c
> > +#define PLLC_PLLDIV3 0x120
> > +#define PLLC_POSTDIV 0x128
> > +#define PLLC_BPDIV 0x12c
> > +#define PLLC_PLLDIV4 0x160
> > +#define PLLC_PLLDIV5 0x164
> > +#define PLLC_PLLDIV6 0x168
> > +#define PLLC_PLLDIV8 0x170
> > +#define PLLC_PLLDIV9 0x174
>
> who will init the PLL?
> can we detect it if they are already init?
PLL setup is part of lowlevel init ... usually it's
done by the second stage boot loader (UBL) if this
is booting from anything except NOR flash. For NOR
boot that's now done in cpu/.../lowlevel_init.S code.
By the time this code is called, that's been done a
long time ago ... we're running out of DRAM, which
can't work without active PLLs. (The oscillator is
from 20-30 MHz, the DRAM clock must be 125 MHz and
up, QED.)
> > +
> > +#define BIT(x) (1 << (x))
> please remove
When there's a standard definition somewhere ... the
one in include/asm/arch-ixp/ixp425.h is unusable here.
> > +
> > +static inline unsigned pll_prediv(volatile void *pllbase)
> > +{
> > +#ifdef CONFIG_SOC_DM355
> > + /* this register read seems to fail on pll0 */
>
> maybe an errata?
I didn't see it published, if so. I noticed that issue
when doing similar code on Linux.
> > void dv_display_clk_infos(void)
> > {
> > - printf("ARM Clock: %dMHz\n", dv_get_pllm_output(REG(PLL1_PLLM)) / 2);
> > - printf("DDR Clock: %dMHz\n", dv_get_pllm_output(REG(PLL2_PLLM)) /
> > - ((REG(PLL2_DIV2) & 0x1f) + 1) / 2);
> > + printf("ARM Clock: %dMHz\n",
> > + pll_sysclk_mhz(DAVINCI_PLL_CNTRL0_BASE, ARM_PLLDIV));
> > + printf("DDR Clock: %dMHz\n",
> > + /* DDR PHY uses an x2 input clock */
> > + pll_sysclk_mhz(DAVINCI_PLL_CNTRL1_BASE, DDR_PLLDIV)
> > + / 2);
> > + printf("\n");
> puts("");
OK
>
> Best Regards,
> J.
>
>
More information about the U-Boot
mailing list