Kirkwood, Orion: Mainline Linux 4.12 for TK71

A client asked for more recent Linux kernel support for a Marvell Kirkwood/Orion 88F6281 based board made by KaRo, the TK71. This is a Q7 form factor CPU module running @ 1.2GHz with two GBit Ethernet ports, two SATA ports, USB2.0 and PCIe support. The TK71 usually comes with 256MB of RAM, a 512MB version is available upon request. The Marvell Kirkwood CPU was intended for network appliances like routers or small NAS systems.

Originally I did the U-Boot and Linux kernel adaptations for the Warpcomm project in 2010, a joint venture of Avnet, Marvell and KaRo. At that time I ported a Linux mainline 2.6.36 kernel, later upgraded this to 2.6.38 but did no further updates.

Today I resurrected the old boards and gave them a small test drive 🙂

I started from a vanilla defconfig for Orion5 and used the ARM cross toolchain from Debian:

export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabi-
make orion5x_defconfig
make zImage

Since the U-Boot version does not yet have device tree support I attached a device tree binary to the zImage and built the uImage from it:

make dtbs
cat arch/arm/boot/zImage arch/arm/boot/dts/kirkwood-openrd-base.dtb > zImage-openrd-base
/bin/sh ./scripts/mkuboot.sh -A arm -O linux -C none -T kernel -a 0x00008000 -e 0x00008000 -n 'Linux-4.12.5' -d ./zImage-openrd-base uImage-openrd-base

Looks a little scary but works nicely. On the TK71 I can load this kernel image via dhcp/tftp and boot into it:

 

TK71>> dhcp uImage-openrd-base
BOOTP broadcast 1
DHCP client bound to address 10.37.3.136
Using egiga0 device
TFTP from server 10.37.3.254; our IP address is 10.37.3.136
Filename 'uImage-openrd-base'.
Load address: 0x800000
Loading: #################################################################
 #################################################################
 ##################################
done
Bytes transferred = 2394329 (2488d9 hex)
TK71>> bootm
## Booting kernel from Legacy Image at 00800000 ...
 Image Name: Linux-4.12.5
 Image Type: ARM Linux Kernel Image (uncompressed)
 Data Size: 2394265 Bytes = 2.3 MB
 Load Address: 00008000
 Entry Point: 00008000
 Verifying Checksum ... OK
 Loading Kernel Image ... OK
OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.
Booting Linux on physical CPU 0x0
Linux version 4.12.5 (nica@sourceress) (gcc version 4.9.2 ( 4.9.2-10) ) #6 PREEM
PT Tue Aug 8 17:39:55 CEST 2017
CPU: Feroceon 88FR131 [56251311] revision 1 (ARMv5TE), cr=0005397f
...

Excellent!

The most important peripherals are working, like first Ethernet interface, serial console and NAND flash so I can continue from there. I guess that most of the work will be in properly configuring a devicetree for the TK71.