reboot related questions

Jason Chen jason_chen at
Tue Sep 6 00:25:31 EST 2005

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 */
	mfmsr	r0
	rlwinm	r0,r0,0,17,15	/* clear MSR_EE in r0 */
	mtmsr	r0
	mfspr	r11, HID0
	lis	r10, 0
	ori	r10,r10,HID0_ICE|HID0_DCE
	andc	r11, r11, r10
	mtspr	HID0, r11
	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
	mtlr	r4
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...



More information about the Linuxppc-embedded mailing list