[U-Boot-Users] MPC85xx: Question about Local Bus initialization

Clemens Koller clemens.koller at anagramm.de
Mon Dec 3 17:30:07 CET 2007

 > Hi,
 > 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?

MPC8540 Reference Manual, Page 13-23, LCRR Field Descriptions:
"DLL bypass. This bit should be set when using low bus clock
frequencies if the DLL is unable to lock. When in DLL bypass mode,
incoming data is captured in the middle of the bus clock cycle."

Usually 85xx boot from Flash connected to the Local Bus, so the bootstrap
configuration out of a hard reset need to be correct at first place.
Then, if the bootloader (or later, the kernel) wants to (re-)set it
during runtime, it also has to set the DLL enable bit depending on the
desired target frequency.

Clemens Koller
R&D Imaging Devices
Anagramm GmbH
Rupert-Mayer-Straße 45/1
Linhof Werksgelände
D-81379 München
Fax 089-741518-19

More information about the U-Boot mailing list