Skip to contentSkip to conversation

Problems with arch/powerpc

DISCUSSION Sean MacLennan 2 participants 8 messages Dec 27, 2007 – Dec 28, 2007

lore
Share & tools
lore
#0 lore raw

If this should go in linuxppc-embedded please let me know. It seems that the board supports are getting posted here.

PIKA has an embedded PPC440EP board based on the AMCC Yosemite board. I got the Linux 2.6.19.2 kernel working by basically copying the Yosemite configuration. Now I am trying to move from the ppc to the powerpc architecture using Josh Boyer's for-2.6.25 kernel. And there is no Yosemite config :( We are using u-boot 1.3.0.

I have the kernel booting, but the OS runs very strange. I cannot run the ash shell, it fails on the first setjmp. But I can run the hush shell (we are using busybox). So it goes, many things work, others don't.

I am mounting the root filesystem over NFS, so the ethernet seem to work well.

But cat /proc/interrupts shows:

CPU0

16:        126   UIC   Level     serial
17:        520   UIC   Level     MAL TX EOB
18:        804   UIC   Level     MAL RX EOB
19:          0   UIC   Level     MAL SERR
20:          0   UIC   Level     MAL TX DE
21:          0   UIC   Level     MAL RX DE
28:          0   UIC   Level     EMAC

BAD: 0

Which is quite different from the older kernel:

CPU0

 0:       3075  UIC0 Level     serial
 2:       1526  UIC0 Level     IBM IIC
 7:          0  UIC0 Level     IBM IIC
10:       1388  UIC0 Level     MAL TX EOB
11:       1839  UIC0 Level     MAL RX EOB
32:          0  UIC1 Level     MAL SERR
33:          0  UIC1 Level     MAL TX DE
34:          0  UIC1 Level     MAL RX DE
40:          1  UIC1 Level     ohci_hcd:usb1
60:          0  UIC1 Level     EMAC

BAD: 0

I have attached the dts file. It is based on the bamboo. I can provide any other config, the only thing I can't provide is the hardware ;) Since the new kernel doesn't show UIC0 or UIC1, just UIC I am wondering if something is wrong with the dts.

I have to admit the dts file confuses me a bit. So I suspect that is where the problem is. If anybody has any other ideas, don't hesitate to suggest!

Cheers,
Sean

/*
* Device Tree Source for PIKA Taco
*
* Copyright 2007 PIKA Technologies
*
* This file is licensed under the terms of the GNU General Public
* License version 2. This program is licensed "as is" without
* any warranty of any kind, whether express or implied. */

/ {
	#address-cells = <2>;
	#size-cells = <1>;
	model = "pika,taco";
	compatible = "pika,taco";
	dcr-parent = <&/cpus/cpu@0>;

	aliases {
		ethernet0 = &EMAC0;
		serial0 = &UART0;
	};

	cpus {
		#address-cells = <1>;
		#size-cells = <0>;

		cpu@0 {
			device_type = "cpu";
			model = "PowerPC,440EP";
			reg = <0>;
			clock-frequency = <0>; /* Filled in by zImage */
			timebase-frequency = <0>; /* Filled in by zImage */
			i-cache-line-size = <20>;
			d-cache-line-size = <20>;
			i-cache-size = <8000>;
			d-cache-size = <8000>;
			dcr-controller;
			dcr-access-method = "native";
		};
	};

	memory {
		device_type = "memory";
		reg = <0 0 0>; /* Filled in by zImage */
	};

	UIC0: interrupt-controller0 {
		compatible = "ibm,uic-440ep","ibm,uic";
		interrupt-controller;
		cell-index = <0>;
		dcr-reg = <0c0 009>;
		#address-cells = <0>;
		#size-cells = <0>;
		#interrupt-cells = <2>;
	};

	UIC1: interrupt-controller1 {
		compatible = "ibm,uic-440ep","ibm,uic";
		interrupt-controller;
		cell-index = <1>;
		dcr-reg = <0d0 009>;
		#address-cells = <0>;
		#size-cells = <0>;
		#interrupt-cells = <2>;
		interrupts = <1e 4 1f 4>; /* cascade */
		interrupt-parent = <&UIC0>;
	};

	SDR0: sdr {
		compatible = "ibm,sdr-440ep";
		dcr-reg = <00e 002>;
	};

	CPR0: cpr {
		compatible = "ibm,cpr-440ep";
		dcr-reg = <00c 002>;
	};

	plb {
		compatible = "ibm,plb-440ep", "ibm,plb-440gp", "ibm,plb4";
		#address-cells = <2>;
		#size-cells = <1>;
		ranges;
		clock-frequency = <0>; /* Filled in by zImage */

		SDRAM0: sdram {
			compatible = "ibm,sdram-440ep", "ibm,sdram-405gp";
			dcr-reg = <010 2>;
		};

		DMA0: dma {
			compatible = "ibm,dma-440ep", "ibm,dma-440gp";
			dcr-reg = <100 027>;
		};

		MAL0: mcmal {
			compatible = "ibm,mcmal-440ep", "ibm,mcmal-440gp", "ibm,mcmal";
			dcr-reg = <180 62>;
			num-tx-chans = <4>;
			num-rx-chans = <2>;
			interrupt-parent = <&MAL0>;
			interrupts = <0 1 2 3 4>;
			#interrupt-cells = <1>;
			#address-cells = <0>;
			#size-cells = <0>;
			interrupt-map = </*TXEOB*/ 0 &UIC0 a 4
					/*RXEOB*/ 1 &UIC0 b 4
					/*SERR*/  2 &UIC1 0 4
					/*TXDE*/  3 &UIC1 1 4
					/*RXDE*/  4 &UIC1 2 4>;
		};

		POB0: opb {
		  	compatible = "ibm,opb-440ep", "ibm,opb-440gp", "ibm,opb";
			#address-cells = <1>;
			#size-cells = <1>;
		  	ranges = <00000000 0 00000000 80000000
			          80000000 0 80000000 80000000>;
		  	interrupt-parent = <&UIC1>;
		  	interrupts = <7 4>;
		  	clock-frequency = <0>; /* Filled in by zImage */

			EBC0: ebc {
				compatible = "ibm,ebc-440ep", "ibm,ebc-440gp", "ibm,ebc";
				dcr-reg = <012 2>;
				#address-cells = <2>;
				#size-cells = <1>;
				clock-frequency = <0>; /* Filled in by zImage */
				interrupts = <5 1>;
				interrupt-parent = <&UIC1>;
			};

			UART0: serial@ef600300 {
		   		device_type = "serial";
		   		compatible = "ns16550";
		   		reg = <ef600300 8>;
		   		virtual-reg = <ef600300>;
		   		clock-frequency = <0>; /* Filled in by zImage */
		   		current-speed = <1c200>;
		   		interrupt-parent = <&UIC0>;
		   		interrupts = <0 4>;
	   		};

			IIC0: i2c@ef600700 {
				device_type = "i2c";
				compatible = "ibm,iic-440ep", "ibm,iic-440gp", "ibm,iic";
				reg = <ef600700 14>;
				interrupt-parent = <&UIC0>;
				interrupts = <2 4>;
			};

			IIC1: i2c@ef600800 {
				device_type = "i2c";
				compatible = "ibm,iic-440ep", "ibm,iic-440gp", "ibm,iic";
				reg = <ef600800 14>;
				interrupt-parent = <&UIC0>;
				interrupts = <7 4>;
			};

			ZMII0: emac-zmii@ef600d00 {
				device_type = "zmii-interface";
				compatible = "ibm,zmii-440ep", "ibm,zmii-440gp", "ibm,zmii";
				reg = <ef600d00 c>;
			};

			EMAC0: ethernet@ef600e00 {
				linux,network-index = <0>;
				device_type = "network";
				compatible = "ibm,emac-440ep", "ibm,emac-440gp", "ibm,emac";
				interrupt-parent = <&UIC1>;
				interrupts = <1c 4 1d 4>;
				reg = <ef600e00 70>;
				local-mac-address = [000000000000];
				mal-device = <&MAL0>;
				mal-tx-channel = <0 1>;
				mal-rx-channel = <0>;
				cell-index = <0>;
				max-frame-size = <5dc>;
				rx-fifo-size = <1000>;
				tx-fifo-size = <800>;
				phy-mode = "rmii";
				phy-map = <00000000>;
				zmii-device = <&ZMII0>;
				zmii-channel = <0>;
			};

			usb@ef601000 {
				compatible = "ohci-be";
				reg = <ef601000 80>;
				interrupts = <8 1 9 1>;
				interrupt-parent = < &UIC1 >;
			};
		};
	};

	chosen {
		linux,stdout-path = "/plb/opb/serial@ef600300";
	};
};
#1 lore raw
Quoted 8 lines · On Thu, 27 Dec 2007 17:20:09 -0500 Sean MacLennan <[email protected]>…

If this should go in linuxppc-embedded please let me know. It seems that the board supports are getting posted here.

PIKA has an embedded PPC440EP board based on the AMCC Yosemite board. I got the Linux 2.6.19.2 kernel working by basically copying the Yosemite configuration. Now I am trying to move from the ppc to the powerpc architecture using Josh Boyer's for-2.6.25 kernel. And there is no Yosemite config :( We are using u-boot 1.3.0.

Yeah, I've no Yosemite board so no port for it yet.

Quoted 10 lines

I have the kernel booting, but the OS runs very strange. I cannot run the ash shell, it fails on the first setjmp. But I can run the hush shell (we are using busybox). So it goes, many things work, others don't.

I am mounting the root filesystem over NFS, so the ethernet seem to work well.

But cat /proc/interrupts shows:

CPU0

Quoted 8 lines
 16:        126   UIC   Level     serial
 17:        520   UIC   Level     MAL TX EOB
 18:        804   UIC   Level     MAL RX EOB
 19:          0   UIC   Level     MAL SERR
 20:          0   UIC   Level     MAL TX DE
 21:          0   UIC   Level     MAL RX DE
 28:          0   UIC   Level     EMAC

BAD: 0

Looks fairly normal to me.

Quoted 14 lines

Which is quite different from the older kernel:

CPU0

  0:       3075  UIC0 Level     serial
  2:       1526  UIC0 Level     IBM IIC
  7:          0  UIC0 Level     IBM IIC
 10:       1388  UIC0 Level     MAL TX EOB
 11:       1839  UIC0 Level     MAL RX EOB
 32:          0  UIC1 Level     MAL SERR
 33:          0  UIC1 Level     MAL TX DE
 34:          0  UIC1 Level     MAL RX DE
 40:          1  UIC1 Level     ohci_hcd:usb1
 60:          0  UIC1 Level     EMAC
Quoted 2 lines

BAD: 0

There's no support for the i2c devices on 440 in arch/powerpc yet, which is why those don't show up. As for the USB interrupt, you might be missing the device-tree enabled USB driver in your config. The interrupt numbers will differ based on various things, so I wouldn't worry about that.

Quoted 4 lines

I have attached the dts file. It is based on the bamboo. I can provide any other config, the only thing I can't provide is the hardware ;) Since the new kernel doesn't show UIC0 or UIC1, just UIC I am wondering if something is wrong with the dts.

I didn't see anything wrong in my cursory glance. But I need to look at it a bit closer to be sure.

Can you post the full boot messages (send privately if you'd like). One thing to make sure of is if all the properties in the DTS file that say "Filled in by zImage wrapper" are actually getting filled in.

josh

#2 lore raw
Quoted 4 lines · Josh Boyer

Can you post the full boot messages (send privately if you'd like). One thing to make sure of is if all the properties in the DTS file that say "Filled in by zImage wrapper" are actually getting filled in.

I have attached a boot log. The ethernet and IP addresses have been modified, but everything else is correct.

I checked all the dts entries marked by /* Filled in by zImage */ by checking /proc/device-tree and they all match what is printed after the log message "Uncompressing Kernel Image ... OK".

FYI: It is a 533MHz PPC but the HW guys read the spec wrong and are running the system clock at 66.0MHz rather than 66.6MHz, so the 528MHz value is correct.

Cheers,
Sean

U-Boot 1.3.0-gf92edbd8-dirty (Dec 7 2007 - 11:06:34)

CPU: AMCC PowerPC 440EP Rev. C at 533.333 MHz (PLB=133, OPB=66, EBC=66 MHz)
I2C boot EEPROM enabled
Bootstrap Option H - Boot ROM Location I2C (Addr 0x52)
, PCI async ext clock used 32 kB I-Cache 32 kB D-Cache

Board: PIKA Embedded Appliance

I2C:   ready
DRAM:  256 MB
FLASH: 64 MB
NAND:  64 MiB
In:    serial
Out:   serial
Err:   serial

Protected 2 sectors

FPGA download...complete.

FPGA code revision 1.2.2.0

Starting board diagnostics:

   1. RAM walking bit test, first bank...                       test complete.
   2. RAM walking bit test, second bank...                      test complete.
   3. FPGA walking bit test...                                  test complete.

4. Skipping user test - start_test_addr or end_test_addr env. vars not set.

Board diagnostics complete.
Net: ppc_4xx_eth0

Type "run flash_nfs" to mount root filesystem over NFS

Hit any key to stop autoboot: 0
Waiting for PHY auto negotiation to complete. done
ENET Speed is 100 Mbps - FULL duplex connection (EMAC0)
Using ppc_4xx_eth0 device
TFTP from server 192.168.0.164; our IP address is 192.168.0.99 Filename 'uImage'.
Load address: 0x200000
Loading: #################################################################

         #################################################################
         #################################################################
         #############################################################
done
Bytes transferred = 1308159 (13f5ff hex)
## Booting image at 00200000 ...
   Image Name:   Linux-2.6.24-rc6-pika
   Image Type:   PowerPC Linux Kernel Image (gzip compressed)
   Data Size:    1308095 Bytes =  1.2 MB

Load Address: 00400000
Entry Point: 004003c8
Verifying Checksum ... OK
Uncompressing Kernel Image ... OK
CPU clock-frequency <- 0x1f78a400 (528MHz)
CPU timebase-frequency <- 0x1f78a400 (528MHz) /plb: clock-frequency <- 7de2900 (132MHz) /plb/opb: clock-frequency <- 3ef1480 (66MHz) /plb/opb/ebc: clock-frequency <- 3ef1480 (66MHz) /plb/opb/serial@ef600300: clock-frequency <- a8c000 (11MHz) Memory <- <0x0 0x0 0x10000000> (256MB)
ENET0: local-mac-address <- <mac address>

zImage starting: loaded at 0x00400000 (sp: 0x0ff2a558) Allocating 0x2b84a0 bytes for kernel ...
gunzipping (0x00000000 <- 0x0040d000:0x006ba364)...done 0x297408 bytes

Linux/PowerPC load: root=/dev/nfs rw nfsroot=192.168.x.x:/usr/src/eldk/taco ip=192.168.x.x:192.168.x.x:192.168.x.x:255.255.252.0:tigger:eth0:off panic=1 console=ttyS0,1150 Finalizing device tree... flat tree at 0x6c7300
Using Taco machine description
Linux version 2.6.24-rc6-pika (seanm@lappy) (gcc version 4.0.0 (DENX ELDK 4.1 4.0.0)) #14 Thu Dec 27 16:33:16 EST 2007
console [udbg0] enabled
setup_arch: bootmem
arch: exit
Zone PFN ranges:
DMA 0 -> 65536
Normal 65536 -> 65536
Movable zone start PFN for each node
early_node_map[1] active PFN ranges

    0:        0 ->    65536        

Built 1 zonelists in Zone order, mobility grouping on. Total pages: 65024
Kernel command line: root=/dev/nfs rw nfsroot=192.168.x.x:/usr/src/eldk/taco ip=192.168.x.x:192.168.x.x:192.168.x.x:255.255.252.0:tigger:eth0:off panic=1 console=ttyS0,110 UIC0 (32 IRQ sources) at DCR 0xc0
UIC1 (32 IRQ sources) at DCR 0xd0
PID hash table entries: 1024 (order: 10, 4096 bytes)
clocksource: timebase mult[79364e] shift[22] registered
Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
Memory: 256768k/262144k available (2516k kernel code, 5056k reserved, 116k data, 129k bss, 140k init)
Mount-cache hash table entries: 512
net_namespace: 64 bytes
NET: Registered protocol family 16

SCSI subsystem initialized
NET: Registered protocol family 2
Time: timebase clocksource has been installed.
IP route cache hash table entries: 2048 (order: 1, 8192 bytes) TCP established hash table entries: 8192 (order: 4, 65536 bytes) TCP bind hash table entries: 8192 (order: 3, 32768 bytes)
TCP: Hash tables configured (established 8192 bind 8192)
TCP reno registered
JFFS2 version 2.2. (NAND) .. 2001-2006 Red Hat, Inc.
io scheduler noop registered
io scheduler anticipatory registered (default)
io scheduler deadline registered
io scheduler cfq registered
Serial: 8250/16550 driver $Revision: 1.90 $ 4 ports, IRQ sharing enabled serial8250.0: ttyS0 at MMIO 0xef600300 (irq = 16) is a 16550A

                                                             console handover: boot [udbg0] -> real [ttyS0]

RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize PPC 4xx OCP EMAC driver, version 3.54
MAL v1 /plb/mcmal, 4 TX channels, 2 RX channels
ZMII /plb/opb/emac-zmii@ef600d00 initialized /plb/opb/emac-zmii@ef600d00: bridge in RMII mode
eth0: EMAC-0 /plb/opb/ethernet@ef600e00, MAC 00:1e:84:ff:n.n
eth0: found Generic MII PHY (0x01)
TCP cubic registered
NET: Registered protocol family 1
NET: Registered protocol family 17
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
802.1Q VLAN Support v1.8 Ben Greear <[email protected]> All bugs added by David S. Miller <[email protected]>
eth0: link is down
IP-Config: Complete:

      device=eth0, addr=192.168.x.x, mask=255.255.252.0, gw=192.168.x.x,
     host=tigger, domain=, nis-domain=(none),
     bootserver=192.168.x.x, rootserver=192.168.x.x, rootpath=

Looking up port of RPC 100003/2 on 192.168.x.x
eth0: link is up, 100 FDX, pause enabled
Looking up port of RPC 100005/1 on 192.168.x.x
VFS: Mounted root (nfs filesystem).
Freeing unused kernel memory: 140k init
init started: BusyBox v1.6.1 (2007-09-17 15:31:56 EDT) multi-call binary starting pid 16, tty '': '/sbin/syslogd'
starting pid 19, tty '': '/etc/rc.S'
starting pid 28, tty '': '/sbin/getty'

tigger login:

#3 lore raw
In reply to Josh Boyer
Quoted 5 lines · Josh Boyer

As for the USB interrupt, you might
be missing the device-tree enabled USB driver in your config. The interrupt numbers will differ based on various things, so I wouldn't worry about that.

Just so I am not all bad news, I got the usb going. I borrowed the usb config from bamboo.dts. I then had to patch the top level usb Kconfig. It basically relies on PCI, and the taco has no PCI, so I added the taco as a special case.

Cheers,
Sean

#4 lore raw

And one more thought, could uClibc be causing problems with the new kernel? It just seems strange that kernel "stuff" seems to work (e.g. no problems mounting a usbkey) yet a simple setjmp in a user mode app reeks havoc.

We are going to be moving away from uClibc in the short term (I am the only one left using it). So if this could be an issue I might have to bite the bullet and switch now.

Cheers,
Sean

#5 lore raw
Quoted 8 lines · On Fri, 28 Dec 2007 01:18:48 -0500 Sean MacLennan <[email protected]>…

And one more thought, could uClibc be causing problems with the new kernel? It just seems strange that kernel "stuff" seems to work (e.g. no problems mounting a usbkey) yet a simple setjmp in a user mode app reeks havoc.

We are going to be moving away from uClibc in the short term (I am the only one left using it). So if this could be an issue I might have to bite the bullet and switch now.

Does the setjmp call use floating point instructions? I'm wondering if the APU isn't enabled for the FPU on the Yosemite board for some reason. If that wasn't enabled, weird things would happen.

josh

#6 lore raw
Quoted 4 lines · Josh Boyer

Does the setjmp call use floating point instructions? I'm wondering if the APU isn't enabled for the FPU on the Yosemite board for some reason. If that wasn't enabled, weird things would happen.

That was it! The cputable did not have an entry for the 440EP Rev C! So the FPU flag was not being set.

Cheers,
Sean

#7 lore raw
Quoted 7 lines · On Fri, 28 Dec 2007 11:28:02 -0500 Sean MacLennan <[email protected]>…
Quoted 4 lines · Josh Boyer

Does the setjmp call use floating point instructions? I'm wondering if the APU isn't enabled for the FPU on the Yosemite board for some reason. If that wasn't enabled, weird things would happen.

That was it! The cputable did not have an entry for the 440EP Rev C! So the FPU flag was not being set.

Cool! Care to send a patch to add that entry?

josh