[U-Boot-Users] Linux kernel crash in the early_init function
llandre
r&d at wawnet.biz
Mon May 12 09:27:21 CEST 2003
I have a problem with U-Boot on the 405EP eval. board. Everything works
fine until the kernel takes control and the system hangs:
------------------------------------------------------------------------------------
U-Boot 0.2.0 (May 6 2003 - 12:04:15)
CPU: IBM PowerPC 405EP Rev. A at 266.666 MHz (PLB=133, OPB=66, EBC=66 MHz)
PCI async ext clock used (sync mode not supported), internal
PCI arbd 16 kB I-Cache 16 kB D-Cache
Board: ### No HW ID - assuming WALNUT405
I2C: ready
DRAM: 128 MB
Top of RAM usable for U-Boot at: 08000000
Reserving 192k for U-Boot at: 07fd0000
Reserving 132k for malloc() at: 07faf000
Reserving 112 Bytes for Board Info at: 07faef90
Reserving 44 Bytes for Global Data at: 07faef64
Stack Pointer at: 07faef48
New Stack Pointer is: 07faef48
Now running in RAM - U-Boot at: 07fd0000
FLASH: 512 kB
[board.c, 767] Calling env_relocate ...
env_relocate[203] offset = 0x8050000
env_relocate[221] malloced ENV at 07faf008
In: serial
Out: serial
Err: serial
KGDB: kgdb ready
ready
U-Boot relocated to 07fd0000
[board.c, 913] Calling interrupt_init ...
### main_loop entered: bootdelay=3
### main_loop: bootcmd="tftpboot 0x400000 vmlinux.PPCBoot"
Hit any key to stop autoboot: 0
ENET Speed is 10 Mbps - HALF duplex connection
TX_BUFF 0 @ 0x07fb0228
RX_BUFF 0 @ 0x07ff3fc0
RX_BUFF 1 @ 0x07ff45c0
RX_BUFF 2 @ 0x07ff4bc0
RX_BUFF 3 @ 0x07ff51c0
Install interrupt for vector 9 ==> 07fd49c0
Install interrupt for vector 10 ==> 07fd49c0
Install interrupt for vector 11 ==> 07fd49c0
Install interrupt for vector 12 ==> 07fd49c0
Install interrupt for vector 13 ==> 07fd49c0
Install interrupt for vector 14 ==> 07fd49c0
Install interrupt for vector 15 ==> 07fd49c0
ARP broadcast 1
Got good ARP - start TFTP
TFTP from server 192.168.10.6; our IP address is 192.168.10.203
Filename 'vmlinux.PPCBoot'.
Load address: 0x400000
Loading: #################################################################
#########################################
done
Bytes transferred = 539758 (83c6e hex)
Automatic boot of image at addr 0x00400000 ...
## Booting image at 00400000 ...
Image Name: Linux-2.4.21-pre5
Created: 2003-05-06 11:42:31 UTC
Image Type: PowerPC Linux Kernel Image (gzip compressed)
Data Size: 539694 Bytes = 527 kB
Load Address: 00000000
Entry Point: 00000000
Verifying Checksum ... OK
Uncompressing Kernel Image ... OK
## Current stack ends at 0x07FAE5B8 => set upper limit to 0x00800000
## cmdline at 0x007FFC00 ... 0x007FFC16
bd address = 0x07FAEF90
memstart = 0x00000000
memsize = 0x08000000
flashstart = 0xFFF80000
flashsize = 0x00080000
flashoffset = 0x00030000
sramstart = 0x00000000
sramsize = 0x00000000
bootflags = 0x6BBA3A55
procfreq = 266.666 MHz
plb_busfreq = 133.333 MHz
pci_busfreq = 33.333 MHz
ethaddr = 00:50:C2:1E:AF:FE
IP addr = 192.168.10.203
baudrate = 115200 bps
No initrd
## Transferring control to Linux (at address 00000000) ...
------------------------------------------------------------------------------------
I found that the function memset_io, invoked by early_init, corrupts the
memory region where the function identify_cpu is located.
This is the disassembled produced by objdump:
c0006774 <identify_cpu>:
c0006774: 3d 03 c0 12 addis r8,r3,-16366
c0006778: 39 08 e1 40 addi r8,r8,-7872
c000677c: 7c ff 42 a6 mfpvr r7
c0006780: 80 a8 00 00 lwz r5,0(r8)
c0006784: 7c a5 38 38 and r5,r5,r7
c0006788: 80 c8 00 04 lwz r6,4(r8)
c000678c: 7c 06 28 40 cmplw r6,r5
c0006790: 41 82 00 0c beq- c000679c <identify_cpu+0x28>
c0006794: 39 08 00 20 addi r8,r8,32
c0006798: 4b ff ff e8 b c0006780 <identify_cpu+0xc>
c000679c: 3c c3 c0 14 addis r6,r3,-16364
c00067a0: 38 c6 f0 bc addi r6,r6,-3908
c00067a4: 54 84 10 3a rlwinm r4,r4,2,0,29
c00067a8: 7d 03 40 50 subf r8,r3,r8
c00067ac: 7d 04 31 2e stwx r8,r4,r6
c00067b0: 4e 80 00 20 blr
This is what I see in memory before executing the memset_io:
PPC405EP>go
- TARGET: target has entered debug mode
PPC405EP>md 0xc0006774 8
c0006774 : 0x3d03c012 1023655954 =...
c0006778 : 0x3908e140 956883264 9..@
c000677c : 0x7cff42a6 2097103526 |.B.
c0006780 : 0x80a80000 -2136473600 ....
c0006784 : 0x7ca53838 2091202616 |.88
c0006788 : 0x80c80004 -2134376444 ....
c000678c : 0x7c062840 2080778304 |.(@
c0006790 : 0x4182000c 1099038732 A...
PPC405EP>go
- TARGET: target has entered debug mode
This is what I see in memory after executing the memset_io:
PPC405EP>md 0xc0006774 8
c0006774 : 0xff03ffff - 16515073 ....
c0006778 : 0xff08ffff - 16187393 ....
c000677c : 0xff08ffff - 16187393 ....
c0006780 : 0x80a80000 -2136473600 ....
c0006784 : 0x7ca53838 2091202616 |.88
c0006788 : 0x80c80004 -2134376444 ....
c000678c : 0x3c060840 1007028288 <..@
c0006790 : 0x7c062840 2080778304 |.(@
PPC405EP>
Anybody have already seen something like that?
Is it possible that this has to do with an erroneous cache initialization?
Many thanks in advance.
llandre
More information about the U-Boot
mailing list