[U-Boot-Users] MPC85xx: Question about Local Bus initialization
Detlev Zundel
dzu at denx.de
Mon Dec 3 16:39:31 CET 2007
Hi Jens,
> I took a look into the files board/mpc8560ads.c and board/tqm85xx.c and
> found something strange:
>
> 1. In the function local_bus_init() the current CLKDIV is read from the
> register LCRR as was set by Hardreset. After that, the decision is made,
> wether the DLL has to be enabled/disabled/overridden. Inside the if-else
> blocks the new CLKDIV is changed. But IMO the CLKDIV has to be set
> before the query.
>
> This is the current code:
> clkdiv = lbc->lcrr & 0x0f;
> lbc_hz = sysinfo.freqSystemBus / 1000000 / clkdiv;
>
> if (lbc_hz < 66) {
> lbc->lcrr = CFG_LBC_LCRR | 0x80000000; /* DLL Bypass */
>
> } else if (lbc_hz >= 133) {
> lbc->lcrr = CFG_LBC_LCRR & (~0x80000000); /* DLL Enabled
> ...
> This may be the situation on other 85xx boards, too. I didn't check them
> all.
> What was the intention, DLL modification dependent on the clock set by
> the MPC at hardreset or dependent on the targeted frequency?
I am definitely not the specialist on these chips, but checking the
8555 and 8560 manuals, it seems that LCRR comes out of reset with
0x8000,0008. I cannot find any reference to LCRR from the POR
description.
Keeping this in mind, "clkdiv" in the above code will always be 8 and
so it looks to me indeed like the tests really were intended to check
(CFG_LBC_LCRR & 0x0f). Can anyone more knowledgable in this area
confirm this suspicion?
> 2. The variable is named lbc_hz, but it contains a value in units of
> MHz. I suggest to use the name lbc_mhz or to use Hertz values by
> removing the division by 1,000,000 and replacing 66 and 133 by 66666667
> and 133333333.
> What's your opinion?
Personally I would second your reasoning. But for others to comment,
it is really best to implement your proposed change and send a diff to
comment on. Such a suggestion is more likely by several magnitudes to
be considered ;)
> 3. I assume, the function above is called while the MPC executes this
> code from flash memory (array init_sequence[] in lib_ppc/board.c). Is
> there a potential that the U-Boot would hang when it changed the CLKDIV?
If you get the timings wrong, of course things could get hairy, or am
I missing something?
Cheers
Detlev
--
Man is a fool, and woman, for tolerating him, is a damned fool
-- Mark Twain
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-40 Fax: (+49)-8142-66989-80 Email: dzu at denx.de
More information about the U-Boot
mailing list