[U-Boot-Users] A question about sdram_init

Frank Young young726 at hotmail.com
Fri May 14 01:12:21 CEST 2004


>In message <BAY2-F150B8F0GuRQm600014934 at hotmail.com> you wrote:
> > To explain the problem easier, I stripped down the sdram_init() to three 
>DCR
> > instructions:
>
>I guess this is on a MIPS64 system? Or ARM9? Or x86, or what?

I am using PPC405 on a custom board, similiar as WALNUT.


>
> > 1. The sdram() hanged after 2nd line, i.e. after set up 4MB. But it 
>didn't
> > go through 3rd line and didn't return.
>
>How did you know where it hangs? Did you use a debugger?
>

I don't have a debugger. But I do have LEDs on the board, so I simply use 
LEDs to indicate where the program stops. I turn on a yellow LED right 
before the 2nd line and a green LED right after the 2nd line. Yellow LED was 
turned on but nothing happened to green one.

I am using IOC to control LED. The code to control LED is pretty simple. For 
example, to turn on yellow LED:
lis 20, 0xF0000030 at h
ori 20, 20, 0xF0000030 at l
li21, 0xC0
stb 21, 0(20)

I have been using this LED control for a while. Never got any problem with 
it.


> > 2. If the 1st line is commented, i.e. not disable everything, sdram() 
>could
> > return.
>
>How do you know your code is correct?
>

I didn't write any code. All these three lines were in original 
sdram_init(). Original sdram_init() tried to detect sdram with different 
size. I have 8MB SDRAM on my board, so I just eliminated all the code for 
128M, 64M, ..., but keep the code for 4M SDRAM. The codes left only have 
three lines:
void sdram(void) {
/*1st*/ mtsdram0(mem_mcopt1, 0x00000000);
/*2nd*/ mtsdram0(mem_mb0cf, 0x00008001);
/*3rd*/ mtsdram0(mem_mcopt1, 0x80800000);
return;
}

BTW, I commented out udelay(200). But I don't think it will have any affect.


> > 3. Since sdram() is called from start.S, I rewrote all these code in 
>start.S
> > in assembly language and let them run in start.S (commented out "bl
> > sdram_init"), these three lines can run without any problem. They didn't
> > interfere each other.
>
>There is no difference between C code and assembly - unless you wrote
>different code.

That is why I am confused... ;*(

My doubt is the first line:
/*1st*/ mtsdram0(mem_mcopt1, 0x00000000);

It disabled the memory controller. Will this cause any memory problem?


Thanks!
Frank

_________________________________________________________________
FREE pop-up blocking with the new MSN Toolbar – get it now! 
http://toolbar.msn.com/go/onm00200415ave/direct/01/





More information about the U-Boot mailing list