reboot related questions
Jason Chen
jason_chen at usish.com
Tue Sep 6 00:25:31 EST 2005
hi,all,
I built up a system which based on MPC8248,32M NOR flash,128M SDRAM.I set the HRCW to boot from 0x0 address(CIP = 0 & BMS=1);and BR0 = 0xfe00xxxx for flash(base addr = 0xfe000000,my u-boot was burned from 0xfe000000);BR2 = 0x000000xx for sdram(base addr = 0x00).
it's Ok,the u-boot and kernel all run successfully; but I met a problem -- reboot cmd failed.After some effort, I found it can run successfully by modify /linux/arch/ppc/kernel/head.S m8260_gorom function below:
.globl m8260_gorom /* r4 = addr in the rom */
m8260_gorom:
mfmsr r0
rlwinm r0,r0,0,17,15 /* clear MSR_EE in r0 */
sync
mtmsr r0
sync
mfspr r11, HID0
lis r10, 0
ori r10,r10,HID0_ICE|HID0_DCE
andc r11, r11, r10
mtspr HID0, r11
isync
li r5, MSR_
lis r6,2f at h
addis r6,r6,-KERNELBASE at h
ori r6,r6,2f at l
mtspr SRR0,r6
mtspr SRR1,r5
isync
sync
rfi
2:
mtlr r4
blr
In these codes, MSR_ equal MSR_ME|MSR_RI originally,after be set to MSR_ME|MSR_RI|MSR_IP,the reboot can run successfully.
My questions come out:
1) You know,the bit MSR_IP represent that exceptions are vectored to the physical address 0xFFFn_nnnn(IP = 1) or 0x000n_nnnn(IP = 0);but in my system,the real exception vector was set to 0xfe00_0x00,so how CPU could find them in 0xFFFn_nnnn ??
2) why m8260_gorom has to used a rfi instruction? why not just to set the MSR to appropriate value and move PC to rom?
3) there are not interrupts happened in u-boot? Because in my system,after reset,the BR0 soon be changed to 0xfe00xxxx,at the same time,MSR[ip] = 0 (HRCW show this),the vector will be in the sdram(0x000n_nnnn) where are not initiated,so while u-boot running,there are not interrupts happened? am i right?
4) assuming 3) was right, then why the m8260_gorom function above has to set the MSR_ to MSR_ME|MSR_RI|MSR_IP? Because no interrupts,where are the vectors seems not important?
It's boring...
Jason
More information about the Linuxppc-embedded
mailing list