kernel ported from ELDK 3.0 hangs (loops in idled()) on my custom MPC870 Board
It looks like the BDI2000 debugger caused the problem. The kernel boots fine after removing the debugger. Thank you very much for all your replies! Edward On 6/6/05, Edward Hong edward.qin.hong at gmail.com wrote: On 6/6/05, Randy Vinson rvinson at mvista.com wrote: 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()); I got MSR = 9032 just before cpu_idle which means EE (the most significant bit) was enabled. Thank you! Edward
kernel ported from ELDK 3.0 hangs (loops in idled()) on my custom MPC870 Board
On 6/4/05, Wolfgang Denk wd at denx.de wrote: With beginning of init you mean init() in init/main.c, right? So gets rest_init() called? Did you add a few printk's to start_kernel()? How far does it get? Yes. rest_init() got called and executed kernel_thread(init,...) ... and got into cpu_idle(). Any suggestions for debugging? Attach a BDI2000 and start GDB... I have a BDI2000. But I am not sure how to further debug in my situation since I know the kernel execution was looping inside idled(). Thank you! Edward
kernel ported from ELDK 3.0 hangs (loops in idled()) on my custom MPC870 Board
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
kernel ported from ELDK 3.0 hangs (loops in idled()) on my custom MPC870 Board
On 6/6/05, Randy Vinson rvinson at mvista.com wrote: 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()); I got MSR = 9032 just before cpu_idle which means EE (the most significant bit) was enabled. Thank you! Edward
kernel ported from ELDK 3.0 hangs (loops in idled()) on my custom MPC870 Board
In message 21fb73bc0506041640736e3020 at mail.gmail.com you wrote: My debug lines at the beginning of init never get printed on the console or in the log_buf. With beginning of init you mean init() in init/main.c, right? So gets rest_init() called? Did you add a few printk's to start_kernel()? How far does it get? Any suggestions for debugging? Attach a BDI2000 and start GDB... Best regards, Wolfgang Denk -- Software Engineering: Embedded and Realtime Systems, Embedded Linux Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de If something is different, it's either better or worse, and usually both.- Larry Wall
kernel ported from ELDK 3.0 hangs (loops in idled()) on my custom MPC870 Board
In message 21fb73bc05060316102325f94d at mail.gmail.com you wrote: I am trying to bring up Linux on a custom MPC870 Board using ELDK 3.0. Why are you using old (not to say ancient) tools? The ported kernel from ELDK 3.0 hangs (loops in idled()) and the kernel_thread init never gets started!??? How do you know that init didn't run? Runningthe idle loop is a perfectly normal situation. Linux version 2.4.24-pre2 (ehong at chico) (gcc version 3.2.2 20030217 (Yellow Dog Linux 3.0 3.2.2-2a_1)) #8 Fri Jun 3 10:13:10 MDT 2005 On node 0 totalpages: 16384 zone(0): 16384 pages. zone(1): 0 pages. zone(2): 0 pages. Kernel command line: root=/dev/nfs rw nfsroot=10.15.10.170:/opt/eldk/pp c_8xx ip=10.15.2.101:10.15.10.170eth0:off panic=1 Decrementer Frequency = 49500/60 Calibrating delay loop... 131.48 BogoMIPS Memory: 63132k available (1204k kernel code, 360k data, 60k init, 0k highme m) Dentry cache hash table entries: 8192 (order: 4, 65536 bytes) Inode cache hash table entries: 4096 (order: 3, 32768 bytes) Mount cache hash table entries: 512 (order: 0, 4096 bytes) Buffer cache hash table entries: 4096 (order: 2, 16384 bytes) Page-cache hash table entries: 16384 (order: 4, 65536 bytes) POSIX conformance testing by UNIFIX (kernel loops in idled() after kernel_thread(init, ...) in rest_init().) Are you sure that your kernel configuration is sensible? For example, did you configure a console port that matches your hardware? Did you configure the serial ports (SMC / SCC) at all? Best regards, Wolfgang Denk -- Software Engineering: Embedded and Realtime Systems, Embedded Linux Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de I read part of it all the way through.
kernel ported from ELDK 3.0 hangs (loops in idled()) on my custom MPC870 Board
On 6/3/05, Wolfgang Denk wd at denx.de wrote: In message 21fb73bc05060316102325f94d at mail.gmail.com you wrote: I am trying to bring up Linux on a custom MPC870 Board using ELDK 3.0. Why are you using old (not to say ancient) tools? I had the tool ready for a while. After porting u-boot, I realized that there had been several new tool releases. The ported kernel from ELDK 3.0 hangs (loops in idled()) and the kernel_thread init never gets started!??? How do you know that init didn't run? Runningthe idle loop is a perfectly normal situation. My debug lines at the beginning of init never get printed on the console or in the log_buf. Are you sure that your kernel configuration is sensible? For example, did you configure a console port that matches your hardware? Did you configure the serial ports (SMC / SCC) at all? I am positive about the kernel configuration. SMC1 was configured as my console. Any suggestions for debugging? Best regards, Wolfgang Denk -- Software Engineering: Embedded and Realtime Systems, Embedded Linux Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de I read part of it all the way through. Thank you! Edward
kernel ported from ELDK 3.0 hangs (loops in idled()) on my custom MPC870 Board
I am trying to bring up Linux on a custom MPC870 Board using ELDK 3.0. The ported kernel from ELDK 3.0 hangs (loops in idled()) and the kernel_thread init never gets started!??? The board boots with the following messages: U-Boot 1.0.2 (May 12 2005 - 15:05:46) CPU: MPC885ZPnn at 132 MHz: 8 kB I-Cache 8 kB D-Cache FEC present Board: Custom MPC870 I2C: ready DRAM: 64 MB FLASH: 64 MB In:serial Out: serial Err: serial Net: FEC ETHERNET, FEC2 ETHERNET Hit any key to stop autoboot: 0 = run net_nfs Using FEC ETHERNET device TFTP from server 10.15.10.170; our IP address is 10.15.2.101 Filename 'vmlinux.UBoot'. Load address: 0x20 Loading: # # ## done Bytes transferred = 691764 (a8e34 hex) ## Booting image at 0020 ... Image Name: Linux-2.4.24-pre2 Created: 2005-06-03 16:17:44 UTC Image Type: PowerPC Linux Kernel Image (gzip compressed) Data Size:691700 Bytes = 675.5 kB Load Address: Entry Point: Verifying Checksum ... OK Uncompressing Kernel Image ... OK Linux version 2.4.24-pre2 (ehong at chico) (gcc version 3.2.2 20030217 (Yellow Dog Linux 3.0 3.2.2-2a_1)) #8 Fri Jun 3 10:13:10 MDT 2005 On node 0 totalpages: 16384 zone(0): 16384 pages. zone(1): 0 pages. zone(2): 0 pages. Kernel command line: root=/dev/nfs rw nfsroot=10.15.10.170:/opt/eldk/ppc_8xx ip=10.15.2.101:10.15.10.170eth0:off panic=1 Decrementer Frequency = 49500/60 Calibrating delay loop... 131.48 BogoMIPS Memory: 63132k available (1204k kernel code, 360k data, 60k init, 0k highmem) Dentry cache hash table entries: 8192 (order: 4, 65536 bytes) Inode cache hash table entries: 4096 (order: 3, 32768 bytes) Mount cache hash table entries: 512 (order: 0, 4096 bytes) Buffer cache hash table entries: 4096 (order: 2, 16384 bytes) Page-cache hash table entries: 16384 (order: 4, 65536 bytes) POSIX conformance testing by UNIFIX (kernel loops in idled() after kernel_thread(init, ...) in rest_init().) Here is the board info printed under u-boot: = bdinfo memstart= 0x memsize = 0x0400 flashstart = 0xF000 flashsize = 0x0400 flashoffset = 0x0001F100 sramstart = 0x sramsize= 0x immr_base = 0xFFF0 bootflags = 0x0001 intfreq =132 MHz busfreq = 66 MHz ethaddr = 00:D0:1C:01:02:00 IP addr = 10.15.2.101 baudrate= 38400 bps The bd_info of kernel is copied from u-boot. The IMAP_ADDR of kernel uses the same value as the U-Boot CFG_IMMR. Thanks in advance for your help! Edward