muram in device tree for mpc8250 in arch/powerpc

James Black jblack547 at gmail.com
Fri Mar 21 05:02:46 EST 2008


Scott,

>  > That's strange... how in particular was it killing it?  Which allocator?
>  >
>  > Do you know which particular line of code is crashing?
>  >

I made the changes you suggested to the device tree and recompiled and
still get the same problem. The line that code execution stops is in


arch/powerpc/mm/mem.c: paging_init(),line 256, calls
                                    : free_area_init_nodes(), line 284, calls
                                    : free_area_init_node(), line 3902, calls
                                    : alloc_node_mem_map(), line 3460
<-- never returns

This is the device tree command line. If I don't pad the device tree
to 0x1000, then
I get this complaint from u-boot.

   Loading Device Tree to 007ff000, end 007ff909 ... OK
fdt_chosen: FDT_ERR_NOSPACE
ERROR: /chosen node create failed - must RESET the bo

I've also compiled without the -b option.
dtc -I dts -O dtb -S 0x1000 -b 0
../../linux-2.6.24/arch/powerpc/boot/dts/cta5000s.dts -o cta5000s.dtb


The following is the early kernel debugging output with debug turned
on in prom.c.


U-Boot 1.3.2 (Mar 14 2008 - 10:36:25)

MPC8250 Reset Status: External Soft, External Hard

MPC8250 Clock Configuration
 - Bus-to-Core Mult 2x, VCO Div 2, 60x Bus Freq  50-150, Core Freq 100-300
 - dfbrg 1, corecnf 0x04, busdf 3, cpmdf 1, plldf 0, pllmf 1, pcidf 3
 - vco_out  264000000, scc_clk   66000000, brg_clk   16500000
 - cpu_clk  132000000, cpm_clk  132000000, bus_clk   66000000

CPU:   MPC8250 (HiP4 Rev 14, Mask C.0 5K25A) at 132 MHz
Manuf: Aztek Networks, Inc.
Board: CTA5000S
       Watchdog enabled
DRAM:  64 MB
FLASH:  2 MB
In:    serial
Out:   serial
Err:   serial
Net:   FCC1 ETHERNET
IDE:   Bus 0: not available
Hit any key to stop autoboot:  0
Using FCC1 ETHERNET device
TFTP from server 192.168.1.20; our IP address is 192.168.1.10
Filename 'uImage'.
Load address: 0x2000000
Loading: #################################################################
         ######
done
Bytes transferred = 1035332 (fcc44 hex)
Using FCC1 ETHERNET device
TFTP from server 192.168.1.20; our IP address is 192.168.1.10
Filename 'uRamdisk'.
Load address: 0x2200000
Loading: #################################################################
         #####################################################
done
Bytes transferred = 1731966 (1a6d7e hex)
Using FCC1 ETHERNET device
TFTP from server 192.168.1.20; our IP address is 192.168.1.10
Filename 'cta5000s.dtb'.
Load address: 0x2400000
Loading: #
done
Bytes transferred = 4096 (1000 hex)
## Booting image at 02000000 ...
   Image Name:   Linux-2.6.24.2
   Image Type:   PowerPC Linux Kernel Image (gzip compressed)
   Data Size:    1035268 Bytes = 1011 kB
   Load Address: 00000000
   Entry Point:  00000000
   Verifying Checksum ... OK
   Uncompressing Kernel Image ... OK
## Loading RAMDisk Image at 02200000 ...
   Image Name:   Simple Embedded Linux Framework
   Image Type:   PowerPC Linux RAMDisk Image (gzip compressed)
   Data Size:    1731902 Bytes =  1.7 MB
   Load Address: 00000000
   Entry Point:  00000000
   Verifying Checksum ... OK
   Booting using the fdt at 0x2400000
   Loading Ramdisk to 039d9000, end 03b7fd3e ... OK
   Loading Device Tree to 007fe000, end 007fefff ... OK
Xid mach(): done
MMU:enter
MMU:hw init
MMU:mapin
MMU:setio
MMU:exit
 -> early_init_devtree(c07fe000)
search "chosen", depth: 0, uname:
search "chosen", depth: 1, uname: cpus
search "chosen", depth: 2, uname: PowerPC,8250 at 0
search "chosen", depth: 1, uname: memory
search "chosen", depth: 1, uname: localbus at f0010100
search "chosen", depth: 2, uname: flash at fe000000,0
search "chosen", depth: 1, uname: soc at f0000000
search "chosen", depth: 2, uname: cpm at 119c0
search "chosen", depth: 3, uname: muram at 0
search "chosen", depth: 4, uname: data at 0
search "chosen", depth: 3, uname: brg at 119f0
search "chosen", depth: 3, uname: serial at 11a00
search "chosen", depth: 3, uname: serial at 11a40
search "chosen", depth: 3, uname: ethernet at 11300
search "chosen", depth: 2, uname: interrupt-controller at 10c00
search "chosen", depth: 1, uname: chosen
Looking for initrd properties... <3>initrd_start=0xc39d9000  initrd_end=0xc3b7fe
Command line is:
dt_root_size_cells = 1
dt_root_addr_cells = 1
memory scan node memory, reg size 8, data: 0 4000000 2 1,
 - 0 ,  4000000
reserving: 39d9000 -> 1a6d3f
Phys. mem: 4000000
-> move_device_tree
<- move_device_tree
Scanning CPUs ...
boot cpu: logical 0 physical 0
 <- early_init_devtree()
Using Aztek Networks cta5000s machine description
Linux version 2.6.24.2 (jblack at jblack.azteknetworks.net) (gcc version 4.2.2) #38
 -> unflatten_device_tree()
  size is bd4, allocating...
  unflattening c3fff428...
fixed up name for  ->
fixed up name for cpus -> cpus
fixed up name for PowerPC,8250 at 0 -> PowerPC,8250
fixed up name for memory -> memory
fixed up name for localbus at f0010100 -> localbus
fixed up name for flash at fe000000,0 -> flash
fixed up name for soc at f0000000 -> soc
fixed up name for cpm at 119c0 -> cpm
fixed up name for muram at 0 -> muram
fixed up name for data at 0 -> data
fixed up name for brg at 119f0 -> brg
fixed up name for serial at 11a00 -> serial
fixed up name for serial at 11a40 -> serial
fixed up name for ethernet at 11300 -> ethernet
fixed up name for interrupt-controller at 10c00 -> interrupt-controller
fixed up name for chosen -> chosen
 <- unflatten_device_tree()
Found initrd at 0xc39d9000:0xc3b7fd3e
console [udbg0] enabled
setup_arch: bootmem
cta5000s_setup_arch(): entry
cpm_muran_init(): entry
cpm_muran_init(): exit
init_ioports(): empty
cta5000s_setup_arch(): exit
setup_arch: exit
Zone PFN ranges:
  DMA             0 ->    16384
  Normal      16384 ->    16384
Movable zone start PFN for each node
early_node_map[1] active PFN ranges
    0:        0 ->    16384
Unable to handle kernel paging request for data at address 0xe001a000
Faulting instruction address: 0xc00e1a6c
Oops: Kernel access of bad area, sig: 11 [#1]
Unable to handle kernel paging request for data at address 0x401c1ae0
Faulting instruction address: 0xc00e6254
Oops: Kernel access of bad area, sig: 11 [#2]
Unable to handle kernel paging request for data at address 0x401c1ae0
Faulting instruction address: 0xc00e6254
Recursive die() failure, output suppressed
---[ end trace 8640abe69a316dee ]---
Kernel panic - not syncing: Attempted to kill the idle task!

>  > > I tried to fully describe the segments in muram node and it seems to
>  > > mess things up even worse.
>  >
>  > What do you mean?  What changes did you make, and what was the result?

I changed the muram node description to describe all the segments in
the dual port ram of the immr for the 8250. The thinking was that I
needed to describe the non-contiguous portions in the immr. The user
manual (page 3-1) shows the immr to be defined as:

0x00000–0x03FFF Dual-port RAM (DPRAM1) R/W 16 Kbytes
0x04000–0x05FFF Dual-port RAM (microcode only) (DPRAM)1 R/W 8 Kbytes
0x06000–0x07FFF Reserved — 8 Kbytes
0x08000–0x08FFF Dual-port RAM (DPRAM2) R/W 4 Kbytes
0x09000–0x0AFFF Reserved — 8 Kbytes
0x0B000–0x0BFFF Dual-port RAM (DPRAM3) R/W 4 Kbytes
0x0C000–0x0FFFF Reserved — 16 Kbytes

muram at 0 {
   #address-cells = <1>;
   #size-cells = <1>;
   ranges = <0 0 10000>;

   data at 0 {
      compatible = "fsl,cpm-muram-data";
      reg = <0 4000 8000 1000 B000 1000>;
   };
};

Sometimes I get a stack trace, sometimes I don't.

Unable to handle kernel paging request for data at address 0xde7ebbe7
Faulting instruction address: 0xc00114fc
Oops: Kernel access of bad area, sig: 11 [#1]

[c023ff20] [c001a498] printk+0x50/0x60 (unreliable)
[c023ff40] [c01110a0] of_get_property+0x10/0x34
[c023ff50] [c01110e8] of_device_is_compatible+0x24/0xa0
[c023ff80] [c01111dc] of_find_compatible_node+0x78/0xc4
[c023ffa0] [c0211020] cta5000s_pic_init+0x24/0x6c
[c023ffb0] [c020c880] init_IRQ+0x24/0x34
[c023ffc0] [c0206948] start_kernel+0x17c/0x2b8
[c023fff0] [00003438] 0x3438


More information about the Linuxppc-embedded mailing list