[U-Boot-Users] MPC5840 local bus speed
Clemens Koller
clemens.koller at anagramm.de
Mon Oct 2 17:08:16 CEST 2006
Hi, Gerrit!
Gerrit Van de Velde wrote:
> Hi all,
>
> I'm not sure if it's entirely on topic but here we go:
> We've been trying to set the local bus speed of the MPC8540 to 82MHz
> without much success until now. We're using Uboot 1.1.4 with our own
> board.c code mostly ripped from the 8540ADS board.
> In the code there's some info about a workaround for the DLL of te cpu:
>
> /*
> * Errata LBC11.
> * Fix Local Bus clock glitch when DLL is enabled.
> *
> * If localbus freq is < 66Mhz, DLL bypass mode must be used.
> * If localbus freq is > 133Mhz, DLL can be safely enabled.
> * Between 66 and 133, the DLL is enabled with an override
> workaround.
> */
>
> But actually, the 82Mhz is in between those values. In this code, the
> U-Boot stops working after the LCRR is assigned and doesn't even get to
> the udelay part (checked with printfs)
>
> lbc->lcrr = CFG_LBC_LCRR & (~0x80000000); /* DLL Enabled */
> Udelay(200);
>
> Disabling or enabling has the same result, the clock speed of the bus
> has changed though to 82MHz (checked it with the scope).
>
> Has anyone of you some pointers on what to check or what to try out?
Hmm, not really. I didn't run into the LBC11 Errata yet.
I did some experiments with the LBC some time ago on 82MHz as well as on
166MHz when I did my UPM coding for the MPC8540 - no problems so far.
See some code snippets below, YMMV using U-Boot:
MPC8540 code examples to illustrate the Local Bus Clock setup from my
Linux 2.6.18 kernel module:
-----8<-----
/* 0. map the phys area to be able to write the UPM RAM patterns*/
ecam_map.virt = ioremap_nocache(ecam_map.phys, ecam_map.size);
/* speed up the local bus */
/* immap->im_lbc.lcrr=0x00010002; */ /* 166MHz fast */
immap->im_lbc.lcrr=0x00030004; /* 83MHz slow */
/* LCRR
* 0000 0000 0000 0001 0000 0000 0000 0010 0x00030004
* 0 DPY DLL bypass 0 DLL enabled
* 1 reserved 0
* 2-3 BUFCMDC 00. 4 (doesn't matter)
* 4-5 reserved 00
* 6-7 ECL Ext CAS latency 00. 4 (minimum)
* 8-13 reserved 0000.00
* 14-15 EADC ext addr delay 01. 1 cycle (minimum)
* 16-27 reserved 0000.0000.0000.
* 28-31 CLKDIV CCB to LBC 0010 div by 2
*/
/*local bus configuration register*/
immap->im_lbc.lbcr=0x00200000;
/* LBCR
* 0000 0000 0010 0000 0000 0000 0000 0000 0x00200000
* 0 LDIS local bus disable 0 enabled
* 1-7 reserved 000.0000.
* 8-9 BCTLC buf ctrl 00 W/#R control
* 10 AHD addr hold disable 1 highspeed
* 11-13 reserved 0.00
* 14 LPBSE parity 0 disabled
* 15 EPAR parity 0. odd
* 16-23 BMT bus monitor timing 0000.0000 default
* 24-31 reserved 0000
*/
/* 1. set up BRn and ORn registers */
/* set up BR4 and OR4 registers for 64k command io window */
immap->im_lbc.br4 = 0x00000000; /* clear br before touching or */
immap->im_lbc.or4 = (0x00000000-ECAM_FPGACMDSIZE)+0x6100; /*no bursts*/
//immap->im_lbc.or4 = 0xffff6100; /* 64kb, no bursts */
/* 1111 1111 1111 1111 0000 0001 0000 0000 */
immap->im_lbc.br4 = ECAM_FPGACMD+0x1881; /*ps=32bit, UPMA, set base and valid */
//immap->im_lbc.br4 = 0xfc101881; /* @fc01, PS=32bit, UPMA, set base and valid */
/* 1111 1100 0000 0000 0001 1000 1000 0001 */
/* set up CR5 and OR5 registers for 64k data io window */
/* clear valid bit, otherwise ORx is not programmable!!! */
immap->im_lbc.br5=0x00000000;
#if BURST
immap->im_lbc.or5 = (0x00000000-ECAM_FPGADATASIZE)+0x6000; /*bursts*/
//immap->im_lbc.or5 = 0xfff06000; /* 1MByte, bursts */
DBG("Bursts enabled!\n");
#else
immap->im_lbc.or5 = (0x00000000-ECAM_FPGADATASIZE)+0x6100; /*bursts inhibited*/
//immap->im_lbc.or5 = 0xfff06100; /* 1MByte, bursts inhibited */
DBG("Bursts disabled!\n");
#endif
/* default: 0xff006f67 */
/* OR5
* 1111 1111 0000 0000 0110 0000 0000 0111 0xff006816
* 00-16 AM address mask 0xff00.0 16 MBytes
* 17-18 reserved?? 11 manual unclear!
* 19 BCTLD buf ctrl disable 0. enabled
* 20-22 reserved 000
* 23 BI burst inhibit 0. bursts allowed
* 24-28 reserved 0000.0
* 29 TRLX timing relaxed 0 relax
* 30 EHTR ext. hold time 0 extend
* 31 EAD ext AL delay 0 delayes
*/
immap->im_lbc.br5 = ECAM_FPGADATA+0x1881; /* PS=32bit, UPMA, set base and valid */
//immap->im_lbc.br5=0xfc001881; /* @fc00, PS=32bit, UPMA, set base and valid */
/* BR5
* 1111 1100 0000 0000 0001 1000 1000 0001 0xfc001801
* 00-16 BA base address 0xfc00.0
* 17-18 reserved 00
* 19-20 PS port size 1.1 32bit
* 21-22 DECC error checking 00 disabled
* 23 WP Write Protect 0. r/w
* 24-26 MSEL Machine Select 100 UPMA
* 27 reserved 0.
* 28-29 ATOM 00 no atomic oprtations
* 30 reserved 0
* 31 V valid 1 valid
*/
-----8<-----
Good luck!
Clemens Koller
_______________________________
R&D Imaging Devices
Anagramm GmbH
Rupert-Mayer-Str. 45/1
81379 Muenchen
Germany
http://www.anagramm.de
Phone: +49-89-741518-50
Fax: +49-89-741518-19
More information about the U-Boot
mailing list