Welcome! Log In Create A New Profile

Advanced

kernel 3.5 and device-tree support...

Posted by davygravy 
kernel 3.5 and device-tree support...
June 02, 2012 10:02AM
It sounds like kernel 3.5 will lean more heavily upon device tree support for Kirkwood.

It looks like this is the status of things right now (6/2/2012) http://git.kernel.org/?p=linux/kernel/git/next/linux-next.git;a=tree;f=arch/arm/boot/dts;hb=HEAD : with 2 DLink NAS boxes, the dreamplug,iconnect, and the ICY-BOX NAS 62x0 series ...

-rw-r--r-- 	1074 	kirkwood-dns320.dts 	blob | history | raw
-rw-r--r-- 	998 	kirkwood-dns325.dts 	blob | history | raw
-rw-r--r-- 	444 	kirkwood-dreamplug.dts 	blob | history | raw
-rw-r--r-- 	799 	kirkwood-ib62x0.dts 	blob | history | raw
-rw-r--r-- 	610 	kirkwood-iconnect.dts 	blob | history | raw


Has there been any discussion about how this will affect us here and at ALARM, with the multitude of Kirkwood machines we are supporting?

Shall we pool our efforts and try to solve this before 3.5 is actually upon us?

=====================================================



Edited 1 time(s). Last edit at 06/02/2012 10:03AM by davygravy.
Robert Mugabe
Re: kernel 3.5 and device-tree support...
June 03, 2012 12:13PM
I've just compiled Kernel 3.5.0-rc1: but it fails to load:


Starting kernel ...

Uncompressing Linux... done, booting the kernel.
ΓΏ

U-Boot 2011.12 (Feb 13 2012 - 11:03:37)
Seagate FreeAgent DockStar

SoC:   Kirkwood 88F6281_A0
DRAM:  128 MiB
WARNING: Caches not enabled
NAND:  256 MiB
In:    serial
Out:   serial
Err:   serial
Net:   egiga0
88E1116 Initialized on egiga0
Using egiga0 device
ping failed; host 10.254.131.253 is not alive
Hit any key to stop autoboot:  0
(Re)start USB...
USB:   Register 10011 NbrPorts 1
USB EHCI 1.00
scanning bus for devices... 4 USB Device(s) found
       scanning bus for storage devices... Device NOT ready
   Request Sense returned 02 3A 00
2 Storage Device(s) found
Loading file "/rescueme" from usb device 0:1 (usbda1)
** File not found /rescueme
reading /rescueme.txt

** Unable to read "/rescueme.txt" from usb 0:1 **
Creating 1 MTD partitions on "nand0":
0x000002500000-0x000010000000 : "mtd=3"
UBI: attaching mtd1 to ubi0
UBI: physical eraseblock size:   131072 bytes (128 KiB)
UBI: logical eraseblock size:    129024 bytes
UBI: smallest flash I/O unit:    2048
UBI: sub-page size:              512
UBI: VID header offset:          512 (aligned 512)
UBI: data offset:                2048
UBI: attached mtd1 to ubi0
UBI: MTD device name:            "mtd=3"
UBI: MTD device size:            219 MiB
UBI: number of good PEBs:        1750
UBI: number of bad PEBs:         2
UBI: max. allowed volumes:       128
UBI: wear-leveling threshold:    4096
UBI: number of internal volumes: 1
UBI: number of user volumes:     0
UBI: available PEBs:             1729
UBI: total number of reserved PEBs: 21
UBI: number of PEBs reserved for bad PEB handling: 17
UBI: max/mean erase counter: 1/1
UBIFS error (pid 0): ubifs_get_sb: cannot open "ubi:rootfs", error -19
Error reading superblock on volume 'ubi:rootfs'!
Loading file "/boot/uImage" from usb device 0:1 (usbda1)
1 bytes read
Found bootable drive on usb 0:1
Loading file "/boot/uImage" from usb device 0:1 (usbda1)
1704392 bytes read
Loading file "/boot/uInitrd" from usb device 0:1 (usbda1)
5896341 bytes read
## Booting kernel from Legacy Image at 00800000 ...
   Image Name:   Linux-3.5.0-rc1
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    1704328 Bytes = 1.6 MiB
   Load Address: 00008000
   Entry Point:  00008000
   Verifying Checksum ... OK
## Loading init Ramdisk from Legacy Image at 01100000 ...
   Image Name:   initramfs
   Image Type:   ARM Linux RAMDisk Image (gzip compressed)
   Data Size:    5896277 Bytes = 5.6 MiB
   Load Address: 00000000
   Entry Point:  00000000
   Verifying Checksum ... OK
   Loading Kernel Image ... OK
OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.

The only kernel which works reliably for me is 3.3.3.

I think our efforts will have to be pooled, because the (ARM) kernel developers are not regression testing!

For kernel 3.3.x things went awry with Kernel 3.3.4
Re: kernel 3.5 and device-tree support...
June 11, 2012 12:40PM
I'm feeling foolish, i'm going to take a stab at writing a GFN entry and doing up a 3.5 kernel to see what happens. Just looking at those files makes my eyes cross but I think I can at least scratch out enough of a file to get booting.
Re: kernel 3.5 and device-tree support...
June 12, 2012 09:24AM
Good luck @ Kurlon... I wasn't able to get it booting either. There may be something different w/ the config ... I haven't looked at any changelogs to see what might have affected Kirkwood, but googling might yield something quickly ... or maybe the Debian Arm(el) kernel list/bugtracker...

???

=====================================================
Re: kernel 3.5 and device-tree support...
June 13, 2012 11:26AM
I can't image why we need the newest kernel for just a plug computer. My devices work well with 3.1.x series and I don't plan to upgrade them.
Re: kernel 3.5 and device-tree support...
June 13, 2012 11:45AM
The newer kernels bring a few improvements of note for plug users:

1) Improved udlfb / fbcons modules - I'm doing 720x480@25fps video out of my GoFlex Net via a USB video adapter, as the modules improve so should that performance. Need to be on 3.3 to really see the gains so far.

2) zram support - It's present in older kernels but... slow. New compression options are present that speed it up immensely but it's been turned off outside of x86 temporarily. Once re-lit for other arches it can provide a healthy speedboost in ram constrained environments. Clearcache work is tied into this as well (compressed file cache for example).

3) An offshoot of the clearcache work is the ability to share ram at the kernel layer between systems, something I'd like to play with on plugs.
Re: kernel 3.5 and device-tree support...
June 13, 2012 01:09PM
I've moved into crazy-land. I've subscribed to the linux-arm-kernel list and will be seeing if I can get some guidance from there on getting the GFN working with the new device tree support being baked in for Kirkwood devices. I suspect once I know enough to get the GFN rolling, the other kirkwood devices should be cake to port over, and even better should be quick to get supported directly by mainline.

In the mean time, I've got a vestigal DTS file written, nowhere near complete enough to try booting with though.
Re: kernel 3.5 and device-tree support...
June 13, 2012 01:13PM
Yes, you can certainly do that for the GFN/H... and yes, they have stopped accepting new machines for Kirkwood, unless you do the device tree approach... I'm thinking that the Dreamplug and a DLink (or Netgear?) NAS device have device tree support already.

=====================================================
Re: kernel 3.5 and device-tree support...
June 13, 2012 01:16PM
There are a few kirkwoods defined, the Iomega Iconnect, Dreamplug and a couple Dink NAS boxes. None of them have GPIO based devices defined yet, or SATA/Ethernet so I'm not 100% positive they are fully functional yet. I'm still digging through the list archives to find out what the status of things are at the moment.
WzL
Re: kernel 3.5 and device-tree support...
June 13, 2012 05:24PM
Ok, here is a post saying the folowing:

Arnd Bergmann - Mar 28, 2012
Ah, E02 is a good one. The device drivers should all be working upstream, but board support isn't there. 
Jason Cooper has a git tree where he collects support for new machines as they get ported over from board 
files (as they were up to v3.3 for Kirkwood) to device tree files.

Are there any board files for the E02 out there? Seems that with the help of those guys these can be ported to device tree files. I'll contact the guy and see what he expects to receive.



Edited 1 time(s). Last edit at 06/13/2012 05:35PM by WzL.
Re: kernel 3.5 and device-tree support...
June 13, 2012 07:41PM
See the patch here : https://dl.dropbox.com/u/1015928/Kirkwood/kernel/patches/linux-3.3.2-wider-patch for board support on the E02 ... just use the E02 related stuff... (credit to ALARM folks {Pazos, in particular} for doing this and making it readily available).

There are so many E02's floating around out there... mainline kernel support would be great for them. I pushed through mainline U-Boot support back in April.

=====================================================
WzL
Re: kernel 3.5 and device-tree support...
June 14, 2012 06:21AM
Thanks for pointing out this patch, previous night i got an reply from Jason Cooper inc. a CC to the arm mailing list (linux-arm-kernel@lists.infradead.org). He was enthousiastic about my email and offered me guidence porting board files to device tree files. I have to say i'm not a developer myself but I believe this must be possible based on the fact that the 3.3.x kernel board file(s) are in place (referring to the patch) mentioned by you (davygravy) and the advice from Jason which pointed me to focus at the first DTS Kirkwood conversion (Dreamplug) and continue from there...

A simular situation with a little more details concering the goflexnet target.



Edited 2 time(s). Last edit at 06/14/2012 07:32AM by WzL.
Re: kernel 3.5 and device-tree support...
June 14, 2012 09:48AM
Excellent to hear about this.

In a few days I'll be headed out on a 3wk backpacking/flyfishing trip & won't be able to do anything for a while but will check in upon return.

If it goes well w the E02 then I may try it w the GoFlex H/N.

=====================================================



Edited 1 time(s). Last edit at 06/14/2012 12:54PM by davygravy.
Re: kernel 3.5 and device-tree support...
June 14, 2012 09:51AM
Yeah, the crew on that list so far seems VERY helpful. I'm starting a second test build of 3.5-rc2 on my GFN, including a patch to fix printk induce early boot hangs as was kindly pointed out as needed on the list. If this works I'll have a nice template to abuse for bootstrapping the rest of the plug family.
Re: kernel 3.5 and device-tree support...
June 16, 2012 03:26PM
Welp, I can get the kernel to load and init... but then it just stops, never mounts a rootfs or complain about not having one specified. Not sure how to proceed, was really hoping it was just going to work. :D
Re: kernel 3.5 and device-tree support...
June 17, 2012 11:29AM
kernel 3.5!!
Now THAT'S bleeding edge!

edit: I just noticed on kernel.org that 3.5rc is mainline now. They are moving fast! So that makes this thread relevant.

I just got 3.4 installed on my fedora machines, and my GoFlex's are using the standard old debian kernels. I've successfully built a few kernels for my kirkwood devices. But I don't really see the point to do it myself when Sheeva with Linux has them built as soon as they are released as mainline.

I always build my own kernels for my Fedora boxes. But that's just habit. The Fedora kernels closely track mainline and so they are not much older. The Debian kernels, even for Sid, are quite old. But you can always use the Sheeva with Linux ones unless you have a special configuration need. My plugs are used as servers. I don't think it is wise to use unstable kenels on them. But it is nice to see people working on getting support for the latest kernel.

Kirkwood is more open than OMAP and many other ARM SoCs. My old N800 still has to use the Nokia 2.6 kernel because even if the kernel was updated the userspace tools would not be compatible with it. So it is now basically useless Nokia. . .

Unfortunately Marvell has not released any newer kirkwood or similar low-cost SoCs lately. But fortunately there is a new player in town. The Allwinner A10. The source code has now been released for it. It is an extremely low cost SoC which will enable very powerful devices at a cost similar to the Raspberry Pi but more open. It is a much more powerful chip at 1.2Ghz, and it has open source Mali GPU which supports full HD decoding. Many cheap tablets and other devices have already been released using the A10. A cheaper $5 A13 is on the way without SATA for even more and lower cost devices.

Getting the latest kirkwood kernels working is nice, but that work is already being done. A10 is just getting started. There is a need for more people to work on getting a kernel and full Linux distro optimized for it. Debian/Ubuntu is already working.



Edited 1 time(s). Last edit at 06/18/2012 06:18PM by gnexus.
Re: kernel 3.5 and device-tree support...
June 18, 2012 07:26PM
This is where I'm at trying to get 3.5rc3 to cooperate. You also have to apply a printk fix to get 3.5 to work on kirkwood systems FYI. Anyone spot anything obviously wrong in my hack?

diff -ruN a/arch/arm/boot/dts/kirkwood-goflexnet.dts b/arch/arm/boot/dts/kirkwood-goflexnet.dts
--- a/arch/arm/boot/dts/kirkwood-goflexnet.dts	1969-12-31 19:00:00.000000000 -0500
+++ b/arch/arm/boot/dts/kirkwood-goflexnet.dts	2012-06-18 13:19:34.000000000 -0400
@@ -0,0 +1,24 @@
+/dts-v1/;
+
+/include/ "kirkwood.dtsi"
+
+/ {
+	model = "Seagate GoFlex Net";
+	compatible = "seagate,goflexnet", "mrvl,kirkwood-88f6281", "mrvl,kirkwood";
+
+	memory {
+		device_type = "memory";
+		reg = <0x00000000 0x8000000>;
+	};
+
+	chosen {
+		bootargs = "console=ttyS0,115200n8 earlyprintk root=/dev/sda1 rootdelay=10";
+	};
+
+	ocp@f1000000 {
+		serial@12000 {
+			clock-frequency = <200000000>;
+			status = "ok";
+		};
+	};
+};
diff -ruN a/arch/arm/mach-kirkwood/board-dt.c b/arch/arm/mach-kirkwood/board-dt.c
--- a/arch/arm/mach-kirkwood/board-dt.c	2012-06-16 20:25:17.000000000 -0400
+++ b/arch/arm/mach-kirkwood/board-dt.c	2012-06-18 13:20:55.000000000 -0400
@@ -68,6 +68,9 @@
 	if (of_machine_is_compatible("raidsonic,ib-nas62x0"))
 		ib62x0_init();
 
+	if (of_machine_is_compatible("seagate,goflexnet"))
+		goflexnet_init();
+
 	of_platform_populate(NULL, kirkwood_dt_match_table, NULL, NULL);
 }
 
@@ -77,6 +80,7 @@
 	"dlink,dns-325",
 	"iom,iconnect",
 	"raidsonic,ib-nas62x0",
+	"seagate,goflexnet",
 	NULL
 };
 
diff -ruN a/arch/arm/mach-kirkwood/board-goflexnet.c b/arch/arm/mach-kirkwood/board-goflexnet.c
--- a/arch/arm/mach-kirkwood/board-goflexnet.c	1969-12-31 19:00:00.000000000 -0500
+++ b/arch/arm/mach-kirkwood/board-goflexnet.c	2012-06-18 13:55:49.000000000 -0400
@@ -0,0 +1,180 @@
+/*
+ * Copyright 2012 (C), Jason Cooper <jason@lakedaemon.net>
+ *
+ * arch/arm/mach-kirkwood/board-dreamplug.c
+ *
+ * Marvell DreamPlug Reference Board Init for drivers not converted to
+ * flattened device tree yet.
+ *
+ * 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.
+ *
+ * Copied and modified for Seagate GoFlex Net support by
+ * Joshua Coombs <josh.coombs@gmail.com> based on ArchLinux ARM's
+ * GoFlex kernel patches.
+ *
+ */
+
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/platform_device.h>
+#include <linux/mtd/partitions.h>
+#include <linux/ata_platform.h>
+#include <linux/mv643xx_eth.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
+#include <linux/of_fdt.h>
+#include <linux/of_irq.h>
+#include <linux/of_platform.h>
+#include <linux/gpio.h>
+#include <linux/leds.h>
+#include <linux/mtd/physmap.h>
+#include <asm/mach-types.h>
+#include <asm/mach/arch.h>
+#include <asm/mach/map.h>
+#include <mach/kirkwood.h>
+#include <mach/bridge-regs.h>
+#include <plat/mvsdio.h>
+#include "common.h"
+#include "mpp.h"
+
+struct mtd_partition goflexnet_partitions[] = {
+	{
+		.name	= "u-boot",
+		.size	= SZ_1M,
+		.offset = 0,
+	},
+	{
+		.name	= "uImage",
+		.size	= SZ_4M,
+		.offset = MTDPART_OFS_NXTBLK,
+	},
+	{
+		.name	= "pogoplug",
+		.size	= SZ_32M,
+		.offset = MTDPART_OFS_NXTBLK,
+	},
+	{
+		.name	= "root",
+		.size	= MTDPART_SIZ_FULL,
+		.offset = MTDPART_OFS_NXTBLK,
+	},
+};
+
+static struct mv643xx_eth_platform_data goflexnet_ge00_data = {
+	.phy_addr	= MV643XX_ETH_PHY_ADDR(0),
+};
+
+static struct mv_sata_platform_data goflexnet_sata_data = {
+	.n_ports	= 2,
+};
+
+static struct gpio_led goflexnet_led_pins[] = {
+	{
+		.name			= "status:green:health",
+		.default_trigger	= "default-on",
+		.gpio			= 46, // 0x4000
+		.active_low		= 1,
+	},
+	{
+		.name			= "status:orange:fault",
+		.default_trigger	= "none",
+		.gpio			= 47, // 0x8000
+		.active_low		= 1,
+	},
+	{
+		.name			= "status:white:left0",
+		.default_trigger	= "none",
+		.gpio			= 42, // 0x0400
+		.active_low		= 0,
+	},
+	{
+		.name			= "status:white:left1",
+		.default_trigger	= "none",
+		.gpio			= 43, // 0x0800
+		.active_low		= 0,
+	},
+	{
+		.name			= "status:white:left2",
+		.default_trigger	= "none",
+		.gpio			= 44, // 0x1000
+		.active_low		= 0,
+	},
+	{
+		.name			= "status:white:left3",
+		.default_trigger	= "none",
+		.gpio			= 45, // 0x2000
+		.active_low		= 0,
+	},
+	{
+		.name			= "status:white:right0",
+		.default_trigger	= "none",
+		.gpio			= 38, // 0x0040
+		.active_low		= 0,
+	},
+	{
+		.name			= "status:white:right1",
+		.default_trigger	= "none",
+		.gpio			= 39, // 0x0080
+		.active_low		= 0,
+	},
+	{
+		.name			= "status:white:right2",
+		.default_trigger	= "none",
+		.gpio			= 40, // 0x0100
+		.active_low		= 0,
+	},
+	{
+		.name			= "status:white:right3",
+		.default_trigger	= "none",
+		.gpio			= 41, // 0x0200
+		.active_low		= 0,
+	},
+};
+
+static struct gpio_led_platform_data goflexnet_led_data = {
+	.leds		= goflexnet_led_pins,
+	.num_leds	= ARRAY_SIZE(goflexnet_led_pins),
+};
+
+static struct platform_device goflexnet_leds = {
+	.name	= "leds-gpio",
+	.id	= -1,
+	.dev	= {
+		.platform_data	= &goflexnet_led_data,
+	}
+};
+
+static unsigned int goflexnet_mpp_config[] __initdata = {
+	MPP29_GPIO,	/* USB Power Enable */
+	MPP47_GPIO,	/* LED Orange */
+	MPP46_GPIO,	/* LED Green */
+	MPP45_GPIO,	/* LED Left Capacity 3 */
+	MPP44_GPIO,	/* LED Left Capacity 2 */
+	MPP43_GPIO,	/* LED Left Capacity 1 */
+	MPP42_GPIO,	/* LED Left Capacity 0 */
+	MPP41_GPIO,	/* LED Right Capacity 3 */
+	MPP40_GPIO,	/* LED Right Capacity 2 */
+	MPP39_GPIO,	/* LED Right Capacity 1 */
+	MPP38_GPIO,	/* LED Right Capacity 0 */
+	0
+};
+
+void __init goflexnet_init(void)
+{
+	/*
+	 * Basic setup. Needs to be called early.
+	 */
+	kirkwood_mpp_conf(goflexnet_mpp_config);
+
+	if (gpio_request(29, "USB Power Enable") != 0 ||
+	    gpio_direction_output(29, 1) != 0)
+	        printk(KERN_ERR "can't setup GPIO 29 (USB Power Enable)\n");
+	kirkwood_ehci_init();
+
+	kirkwood_ge00_init(&goflexnet_ge00_data);
+	kirkwood_sata_init(&goflexnet_sata_data);
+
+	platform_device_register(&goflexnet_leds);
+}
diff -ruN a/arch/arm/mach-kirkwood/common.h b/arch/arm/mach-kirkwood/common.h
--- a/arch/arm/mach-kirkwood/common.h	2012-06-16 20:25:17.000000000 -0400
+++ b/arch/arm/mach-kirkwood/common.h	2012-06-18 13:35:54.000000000 -0400
@@ -77,6 +77,12 @@
 static inline void ib62x0_init(void) {};
 #endif
 
+#ifdef CONFIG_MACH_GOFLEXNET_DT
+void goflexnet_init(void);
+#else
+static inline void goflexnet_init(void) {};
+#endif
+
 /* early init functions not converted to fdt yet */
 char *kirkwood_id(void);
 void kirkwood_l2_init(void);
diff -ruN a/arch/arm/mach-kirkwood/Kconfig b/arch/arm/mach-kirkwood/Kconfig
--- a/arch/arm/mach-kirkwood/Kconfig	2012-06-16 20:25:17.000000000 -0400
+++ b/arch/arm/mach-kirkwood/Kconfig	2012-06-18 13:37:22.000000000 -0400
@@ -80,6 +80,13 @@
 	  RaidSonic IB-NAS6210 & IB-NAS6220 devices, using
 	  Flattened Device Tree.
 
+config MACH_GOFLEXNET_DT
+	bool "Seagate GoFlex Net (Flattened Device Tree)"
+	select ARCH_KIRKWOOD_DT
+	help
+	  Say 'Y' here if you want your kernel to support the
+	  Seagate GoFlex Net (Flattened Device Tree).
+
 config MACH_TS219
 	bool "QNAP TS-110, TS-119, TS-119P+, TS-210, TS-219, TS-219P and TS-219P+ Turbo NAS"
 	help
diff -ruN a/arch/arm/mach-kirkwood/Makefile b/arch/arm/mach-kirkwood/Makefile
--- a/arch/arm/mach-kirkwood/Makefile	2012-06-16 20:25:17.000000000 -0400
+++ b/arch/arm/mach-kirkwood/Makefile	2012-06-18 13:38:04.000000000 -0400
@@ -25,3 +25,4 @@
 obj-$(CONFIG_MACH_ICONNECT_DT)		+= board-iconnect.o
 obj-$(CONFIG_MACH_DLINK_KIRKWOOD_DT)	+= board-dnskw.o
 obj-$(CONFIG_MACH_IB62X0_DT)		+= board-ib62x0.o
+obj-$(CONFIG_MACH_GOFLEXNET_DT)		+= board-goflexnet.o
diff -ruN a/arch/arm/mach-kirkwood/Makefile.boot b/arch/arm/mach-kirkwood/Makefile.boot
--- a/arch/arm/mach-kirkwood/Makefile.boot	2012-06-16 20:25:17.000000000 -0400
+++ b/arch/arm/mach-kirkwood/Makefile.boot	2012-06-18 13:38:38.000000000 -0400
@@ -7,3 +7,4 @@
 dtb-$(CONFIG_MACH_DLINK_KIRKWOOD_DT) += kirkwood-dns325.dtb
 dtb-$(CONFIG_MACH_ICONNECT_DT) += kirkwood-iconnect.dtb
 dtb-$(CONFIG_MACH_IB62X0_DT) += kirkwood-ib62x0.dtb
+dtb-$(CONFIG_MACH_GOFLEXNET_DT) += kirkwood-goflexnet.dtb

Re: kernel 3.5 and device-tree support...
July 31, 2012 08:14AM
I was just about to start a new thread about the impeding DTopcalypse, but then remembered this one.

So, short story: I have my GoFlex Net booting 3.5 via Device Tree. It's including in linux-next now and should be showing up formally in 3.6. Kirkwood DT support has gotten much better, pretty much everything can be defined via GPIO now, about the only holdout is ethernet but that's being worked on as we speak on the linux-arm list, guessing that'll land in 3.7.

For those wanting to try, build a DT enabled kernel and make sure to enable the option to append a DTB to the end of the zImage. This means your kernel will only support that one device whose .dtb you append. The build process ends up being:

make menuconfig
make
make kirkwood-goflexnet.dtb
cat arch/arm/boot/kirkwood-goflexnet.dtb >> arch/arm/boot/zImage
make uImage
cp arch/arm/boot/uImage /boot/uImage
reboot

For the future, the ideal setup would be a newer u-boot (2012.04 era?) built with DT support enabled. This should allow loading of the .dtb separate from the kernel, ala:

ext2load ide 0:1 0x80000 /boot/zImage
ext2load ide 0:1 some other addr /boot/kirkwood-goflexnet.dtb
bootm 0x80000 - dtb addr

Yeah, zImage, newer u-boots are supposed to be happy with a zImage instead of a uImage. :D I don't know what the normal dtb load addr is yet for kirkwoods but I'm going to ping those playing with it on the linux-arm list. If we can get u-boot playing along, ARCH for example will be able to supply a linux-kirkwood-dtb kernel package that supplies a zImage and all the .dtbs, each device can use an u-boot env setting to tell it which one to load a boot just like we use a specific arc number now to signal the kernel as to which board it's booting on.

So, if you're up for beating on u-boot davy, I'm game to beat on kernel support for all the various boards.
Alan
Re: kernel 3.5 and device-tree support...
August 01, 2012 07:23AM
Hey guys im new here but i used your work on these forum's to hack my goflex net about a year ago.

i was wondering if i could get your advice on my iomega ix2-200 there is a patch and i can compile and use kernels up to the latest 3.4 but i have no clue on how to setup the device tree support for it.

the patch just basically modifies the rd88f6281 setup file to support the lights and buttons on the ix2-200 but how would i go about converting that to dts so i can use 3.5 and newer kernels?

sorry if this is the wrong place to be posting this.
Re: kernel 3.5 and device-tree support...
August 01, 2012 07:33AM
Give me a little bit and I'll see if I can whip up a tutorial on kirkwood DTS conversions. If we can get your board working via DTS odds are we can get it supported directly by mainline quickly.
Alan
Re: kernel 3.5 and device-tree support...
August 01, 2012 07:40AM
That would be great thanks.

I was talking with the guy that made the patch origionaly and he didnt seem to see any point in getting it mainlined but i thaught it would be a good idea to save haveing to go through this kinda thing every couple of kernel revisions.

Is there anything i could do to help you?

the patch can be found here:

https://docs.google.com/file/d/0B8sBO2Kqbg_MSldaUm8xTXVZOTQ/edit?pli=1

If that helps at all.
Re: kernel 3.5 and device-tree support...
August 08, 2012 08:11PM
Ok, quick and dirty Kirkwood DTS conversion guide, using my GoFlex Net as an example.

1) Create a new DT board config option: Edit arch/arm/mach-kirkwood/Kconfig to include a new entry for your device.

config MACH_TS219_DT
	bool "Device Tree for QNAP TS-11X, TS-21X NAS"
	select ARCH_KIRKWOOD_DT
	select ARM_APPENDED_DTB
	select ARM_ATAG_DTB_COMPAT
	help
	  Say 'Y' here if you want your kernel to support the QNAP
	  TS-110, TS-119, TS-119P+, TS-210, TS-219, TS-219P and
	  TS-219P+ Turbo NAS devices using Fattened Device Tree.
	  There are two different Device Tree descriptions, depending
	  on if the device is based on an if the board uses the MV6281
	  or MV6282. If you have the wrong one, the buttons will not
	  work.

config MACH_GOFLEXNET_DT
	bool "Seagate GoFlex Net (Flattened Device Tree)"
	select ARCH_KIRKWOOD_DT
	help
	  Say 'Y' here if you want your kernel to support the
	  Seagate GoFlex Net (Flattened Device Tree).

config MACH_LSXL_DT

2) Setup the DT board file, ala arch/arm/mach-kirkwood/board-goflexnet.c

/*
 * Copyright 2012 (C), Jason Cooper <jason@lakedaemon.net>
 *
 * arch/arm/mach-kirkwood/board-goflexnet.c
 *
 * Seagate GoFlext Net Board Init for drivers not converted to
 * flattened device tree yet.
 *
 * 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.
 *
 * Copied and modified for Seagate GoFlex Net support by
 * Joshua Coombs <josh.coombs@gmail.com> based on ArchLinux ARM's
 * GoFlex kernel patches.
 *
 */

#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/platform_device.h>
#include <linux/ata_platform.h>
#include <linux/mv643xx_eth.h>
#include <linux/of.h>
#include <linux/of_address.h>
#include <linux/of_fdt.h>
#include <linux/of_irq.h>
#include <linux/of_platform.h>
#include <linux/gpio.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
#include <asm/mach/map.h>
#include <mach/kirkwood.h>
#include <mach/bridge-regs.h>
#include <plat/mvsdio.h>
#include "common.h"
#include "mpp.h"

static struct mv643xx_eth_platform_data goflexnet_ge00_data = {
	.phy_addr	= MV643XX_ETH_PHY_ADDR(0),
};

static unsigned int goflexnet_mpp_config[] __initdata = {
	MPP29_GPIO,	/* USB Power Enable */
	MPP47_GPIO,	/* LED Orange */
	MPP46_GPIO,	/* LED Green */
	MPP45_GPIO,	/* LED Left Capacity 3 */
	MPP44_GPIO,	/* LED Left Capacity 2 */
	MPP43_GPIO,	/* LED Left Capacity 1 */
	MPP42_GPIO,	/* LED Left Capacity 0 */
	MPP41_GPIO,	/* LED Right Capacity 3 */
	MPP40_GPIO,	/* LED Right Capacity 2 */
	MPP39_GPIO,	/* LED Right Capacity 1 */
	MPP38_GPIO,	/* LED Right Capacity 0 */
	0
};

void __init goflexnet_init(void)
{
	/*
	 * Basic setup. Needs to be called early.
	 */
	kirkwood_mpp_conf(goflexnet_mpp_config);

	if (gpio_request(29, "USB Power Enable") != 0 ||
	    gpio_direction_output(29, 1) != 0)
		pr_err("can't setup GPIO 29 (USB Power Enable)\n");
	kirkwood_ehci_init();

	kirkwood_ge00_init(&goflexnet_ge00_data);
}

3) Add to arch/arm/mach-kirkwood/common.h

#ifdef CONFIG_MACH_IB62X0_DT
void ib62x0_init(void);
#else
static inline void ib62x0_init(void) {};
#endif

#ifdef CONFIG_MACH_GOFLEXNET_DT
void goflexnet_init(void);
#else
static inline void goflexnet_init(void) {};
#endif

#ifdef CONFIG_MACH_LSXL_DT
void lsxl_init(void);
#else

4) Build board DTS file ala arch/arm/boot/dts/kirkwood-goflexnet.dts

/dts-v1/;

/include/ "kirkwood.dtsi"

/ {
	model = "Seagate GoFlex Net";
	compatible = "seagate,goflexnet", "marvell,kirkwood-88f6281", "marvell,kirkwood";

	memory {
		device_type = "memory";
		reg = <0x00000000 0x8000000>;
	};

	chosen {
		bootargs = "console=ttyS0,115200n8 earlyprintk root=/dev/sda1 rootdelay=10";
	};

	ocp@f1000000 {
		serial@12000 {
			clock-frequency = <200000000>;
			status = "ok";
		};

		nand@3000000 {
			status = "okay";

			partition@0 {
				label = "u-boot";
				reg = <0x0000000 0x100000>;
				read-only;
			};

			partition@100000 {
				label = "uImage";
				reg = <0x0100000 0x400000>;
			};

			partition@500000 {
				label = "pogoplug";
				reg = <0x0500000 0x2000000>;
			};

			partition@2500000 {
				label = "root";
				reg = <0x02500000 0xd800000>;
			};
		};
		sata@80000 {
			status = "okay";
			nr-ports = <2>;
		};

	};
	gpio-leds {
		compatible = "gpio-leds";

		health {
			label = "status:green:health";
			gpios = <&gpio1 14 1>;
			linux,default-trigger = "default-on";
		};
		fault {
			label = "status:orange:fault";
			gpios = <&gpio1 15 1>;
		};
		left0 {
			label = "status:white:left0";
			gpios = <&gpio1 10 0>;
		};
		left1 {
			label = "status:white:left1";
			gpios = <&gpio1 11 0>;
		};
		left2 {
			label = "status:white:left2";
			gpios = <&gpio1 12 0>;
		};
		left3 {
			label = "status:white:left3";
			gpios = <&gpio1 13 0>;
		};
		right0 {
			label = "status:white:right0";
			gpios = <&gpio1 6 0>;
		};
		right1 {
			label = "status:white:right1";
			gpios = <&gpio1 7 0>;
		};
		right2 {
			label = "status:white:right2";
			gpios = <&gpio1 8 0>;
		};
		right3 {
			label = "status:white:right3";
			gpios = <&gpio1 9 0>;
		};
	};
};

5) Add to arch/arm/mach-kirkwood/board-dt.c

#ifdef CONFIG_KEXEC
	kexec_reinit = kirkwood_enable_pcie;
#endif

	if (of_machine_is_compatible("globalscale,dreamplug"))
		dreamplug_init();

	if (of_machine_is_compatible("dlink,dns-kirkwood"))
		dnskw_init();

	if (of_machine_is_compatible("iom,iconnect"))
		iconnect_init();

	if (of_machine_is_compatible("raidsonic,ib-nas62x0"))
		ib62x0_init();

	if (of_machine_is_compatible("qnap,ts219"))
		qnap_dt_ts219_init();

	if (of_machine_is_compatible("seagate,goflexnet"))
		goflexnet_init();

	if (of_machine_is_compatible("buffalo,lsxl"))
		lsxl_init();

	of_platform_populate(NULL, kirkwood_dt_match_table,
			     kirkwood_auxdata_lookup, NULL);
}

static const char *kirkwood_dt_board_compat[] = {
	"globalscale,dreamplug",
	"dlink,dns-320",
	"dlink,dns-325",
	"iom,iconnect",
	"raidsonic,ib-nas62x0",
	"qnap,ts219",
	"seagate,goflexnet",
	"buffalo,lsxl",
	NULL
};

6) Make sure the .dts gets compiled: Add to arch/arm/mach-kirkwood/Makefile.boot

dtb-$(CONFIG_MACH_TS219_DT)	+= kirkwood-qnap-ts219.dtb
dtb-$(CONFIG_MACH_GOFLEXNET_DT) += kirkwood-goflexnet.dtb
dbt-$(CONFIG_MACH_LSXL_DT) += kirkwood-lschlv2.dtb

7) Add to arch/arm/mach-kirkwood/Makefile

obj-$(CONFIG_MACH_TS219_DT)		+= board-ts219.o tsx1x-common.o
obj-$(CONFIG_MACH_GOFLEXNET_DT)		+= board-goflexnet.o
obj-$(CONFIG_MACH_LSXL_DT)		+= board-lsxl.o

So, now that the 7 places that normally need tweaking are noted, lets start doing some conversions. Alan, I'll start with your patch set and see if I can make a DTS board out of it.



Edited 1 time(s). Last edit at 08/08/2012 08:12PM by Kurlon.
Alan
Re: kernel 3.5 and device-tree support...
August 09, 2012 06:07AM
Thats brilliant and thanks i was looking at the goflex config's to see if there was anything i could do to help but the gpio's are very confusing to me for example:

how do you get this in the dts file:

right3 {
label = "status:white:right3";
gpios = <&gpio1 9 0>;

when all thats in the board config is pretty much:

MPP41_GPIO, /* LED Right Capacity 3 */

Then there is the part for the compatibility with the board i used to have a list of the proper arcNumbers and there was a number for the iomega ix2-200 but not sure if it actually works and can no longer find the list. But if there is anything i can do to help let me know.
Re: kernel 3.5 and device-tree support...
August 09, 2012 06:57AM
So, on the LEDs, the DTS format is:

LED-NICE-NAME { 
label = "status:COLOR:LED-NICE-NAME"; 
gpios = <&gpioA B C>;

The old board-setup.c format was:

	{
		.name			= "status:COLOR:LED-NICE-NAME",
		.default_trigger	= "none",
		.gpio			= D, // 0x0200
		.active_low		= C,
	},

So, most of it is a direct translation. The only spot you have to pay a little attention to is the GPIO number, D in the old format. The old way used a numbered list of GPIOs starting at 0 going up to 49+. There are actually two GPIO controllers on a Kirkwood SoC, the first controls GPIOs 0 to 31, the second 32 to 63. When you describe an LED in the DTS file you have to list them by controller A and number on that controller B. So GPIO 16 becomes 0 16. GPIO 42 becomes 1 10, etc.

On the board compatibility, what you're doing is describing possible fallbacks. Looking at the GoFlex Net's line we see:

compatible = "seagate,goflexnet", "marvell,kirkwood-88f6281", "marvell,kirkwood";

So, this says try the following DTSs in order: seagate,goflexnet then marvell,kirkwood-88f6281 (the specific SoC in use) and finally marvell,kirkwood for any SoC in the kirkwood family. For the device you're using, replace "seagate,goflexnet" with "iom,ix2-200".

One last note: You'll need to be working with 3.6-rc1 at a minimum right now. Prior versions do not have full DTS support working for kirkwood. There's actually more changes in the pipeline but until 3.7 hits RC 3.6 is the current submission target.



Edited 3 time(s). Last edit at 08/09/2012 07:07AM by Kurlon.
Alan
Re: kernel 3.5 and device-tree support...
August 09, 2012 07:12AM
ah i think i get the gpio's now so:

{
.name = "power_led",
.gpio = 16,
.default_trigger = "default-on",
},

would become :

Power_Led {
label = "status:white:power_led";
gpios = <&gpio0 16 0>;

not sure about the final 0 in the gpio's line there. Im guessing the dts definition for the sata would stay the same as the goflex? and the parts in the makefile and such instead of putting in seagate,goflexnet it would be marvell,kirkwood-88f6281 at least until the proper arcNumber and name for the ix2-200 can be found?
Alan
Re: kernel 3.5 and device-tree support...
August 09, 2012 07:40AM
But if i use iom,ix2-200 wont i need to change the arcNumber in the uboot aswel since i am using 1682 for kirkwood-88f6281? or does the arcNumber no longer matter when using dts?

Also would it matter what the config file is called or should i call it similar to the goflex net like board-ix2200.c?

Also how do the buttons on the ix2-200 work?

Sorry for having so many questions i have been wondering about this since i first tried the 3.5rc's and couldnt get them to boot.
Re: kernel 3.5 and device-tree support...
August 09, 2012 07:59AM
The arcnumber isn't used with DT, it's purpose is replaced by the DT itself.

Your board file should be called board-ix2200.c, correct. Right now buttons still have to be defined in board-ix2200.c like they were in kirkwood-blah.c in the past.

When it comes time to boot a DT based kernel, you'll have to do more than make && make uImage, you'll need to append a compiled version of the dts file to the new zImage first. Look at my prior post to see what you'll need to do.
Alan
Re: kernel 3.5 and device-tree support...
August 09, 2012 08:05AM
Yeah i read about appending the dtb file to the uImage and have tried it unsuccessfully in the past (the kernels didnt boot) im working on modifying the files now.

So i leave the buttons in the board config file and then put the gpio's in the dts file and delete them from the config file.

Are the nand partitions required in the dts?

Thanks again for you help and i will give it a shot now hope you don't mind though i will probably have another 101 questions while im figureing it out.
Re: kernel 3.5 and device-tree support...
August 09, 2012 08:15AM
Yes, you'll need your nand defined, there are two ways systems can hook up the flash to the Kirkwood SoC, if you poke around arch/arm/boot/dts you'll see kirkwoods that use both methods, match what the ix2-200 uses. (SPI, I2C, etc)
Alan
Re: kernel 3.5 and device-tree support...
August 09, 2012 10:35AM
It seems to be haveing trouble with the sata ports im getting these errors when trying to boot the kernel:

sata_mv sata_mv.0: cannot get optional clkdev
[   24.374413] sata_mv sata_mv.0: slots 32 ports 2
[ ok 4.438393] uncorrectable error : udevd[370]: timeout 'scsi_id --whitelisted --replace-whitespace -p0x80 -d/dev/sda'

udevd[370]: timeout '/sbin/blkid -o udev -p /dev/sda'

i think im missing something somewhere.
Author:

Your Email:


Subject:


Spam prevention:
Please, enter the code that you see below in the input field. This is for blocking bots that try to post this form automatically. If the code is hard to read, then just try to guess it right. If you enter the wrong code, a new image is created and you get another chance to enter it right.
Message: