Subject: Re: kernel ported from ELDK 3.0 hangs (loops in idled()) on my custom MPC870 Board

From: Randy Vinson <[email-masked]>
Date: Mon, 06 Jun 2005 11:48:32 -0700

Edward Hong wrote:
> 
> Yes. rest_init() got called and executed kernel_thread(init,...) ...
> and got into cpu_idle().

Hi Edward,
   I've seen these symptoms before. The problem was traced to external 
interrupts being disabled (MSR[EE] not set). Without external 
interrupts, there is no decrementer interrupt (at least on 7xx 
processors). Without the decrementer, there in no system clock tick and 
without the clock tick, the scheduler won't run which means that the 
init task won't start. To verify that this is the problem, use mfmsr() 
to get the MSR and print it. I'd suggest that you add something like:

     printk("MSR = %x\n", mfmsr());

to rest_init just before call to cpu_idle. Or you can use:

     if (irqs_disabled()) printk(....

if you don't want to decode the MSR yourself.

			Randy Vinson