board/orangepi: add basic support for orangepi-zero board
authorSergey Matyukevich <geomatsi@gmail.com>
Wed, 24 May 2017 21:50:33 +0000 (00:50 +0300)
committerPeter Korsgaard <peter@korsgaard.com>
Thu, 8 Jun 2017 19:23:38 +0000 (21:23 +0200)
This patch adds basic support for orangepi-zero board.
Board support package includes the following components:

- mainline kernel v4.11
- mainline u-boot v2017.03
- extra kernel config options: spidev, spi nor flash, wifi
- dts patches to enable SPI NOR and spidev

More details about this board are available here:
- http://linux-sunxi.org/Orange_Pi_Zero

Note that at the moment networking is not supported right out of the box.
Ethernet submission to mainline kernel is a work in progress, see the
latest dwmac-sun8i branches at https://github.com/montjoie/linux

On-board SDIO WiFi chip XR819 is supported by off-the-tree wireless
driver available at https://github.com/fifteenhex/xradio

Changes from v1:

* Send patch using proper subject
* Update xr819 kernel dts patch: add compatible property

[Peter: fix s/PC/Zero/ typo]
Signed-off-by: Sergey Matyukevich <geomatsi@gmail.com>
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
board/orangepi/orangepi-zero/boot.cmd [new file with mode: 0644]
board/orangepi/orangepi-zero/genimage.cfg [new file with mode: 0644]
board/orangepi/orangepi-zero/linux-extras.config [new file with mode: 0644]
board/orangepi/orangepi-zero/patches/linux/0001-ARM-dts-orange-pi-zero-interrupt-triggering-xr819.patch [new file with mode: 0644]
board/orangepi/orangepi-zero/patches/linux/0002-ARM-dts-orange-pi-zero-enable-spi-nor.patch [new file with mode: 0644]
board/orangepi/orangepi-zero/patches/linux/0003-ARM-dts-orange-pi-zero-enable-spidev.patch [new file with mode: 0644]
board/orangepi/orangepi-zero/post-build.sh [new symlink]
board/orangepi/orangepi-zero/post-image.sh [new symlink]
board/orangepi/orangepi-zero/readme.txt [new file with mode: 0644]
configs/orangepi_zero_defconfig [new file with mode: 0644]

diff --git a/board/orangepi/orangepi-zero/boot.cmd b/board/orangepi/orangepi-zero/boot.cmd
new file mode 100644 (file)
index 0000000..44f0885
--- /dev/null
@@ -0,0 +1,8 @@
+setenv fdt_high ffffffff
+
+setenv bootargs console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait
+
+fatload mmc 0 $kernel_addr_r zImage
+fatload mmc 0 $fdt_addr_r sun8i-h2-plus-orangepi-zero.dtb
+
+bootz $kernel_addr_r - $fdt_addr_r
diff --git a/board/orangepi/orangepi-zero/genimage.cfg b/board/orangepi/orangepi-zero/genimage.cfg
new file mode 100644 (file)
index 0000000..017435f
--- /dev/null
@@ -0,0 +1,36 @@
+# Minimal SD card image for the OrangePi Zero
+#
+image boot.vfat {
+       vfat {
+               files = {
+                       "zImage",
+                       "sun8i-h2-plus-orangepi-zero.dtb",
+                       "boot.scr"
+               }
+       }
+       size = 10M
+}
+
+image sdcard.img {
+       hdimage {
+       }
+
+       partition u-boot {
+               in-partition-table = "no"
+               image = "u-boot-sunxi-with-spl.bin"
+               offset = 8192
+               size = 1040384 # 1MB - 8192
+       }
+
+       partition boot {
+               partition-type = 0xC
+               bootable = "true"
+               image = "boot.vfat"
+       }
+
+       partition rootfs {
+               partition-type = 0x83
+               image = "rootfs.ext4"
+               size = 512M
+       }
+}
diff --git a/board/orangepi/orangepi-zero/linux-extras.config b/board/orangepi/orangepi-zero/linux-extras.config
new file mode 100644 (file)
index 0000000..fe00af5
--- /dev/null
@@ -0,0 +1,17 @@
+# spidev
+CONFIG_SPI_SPIDEV=y
+
+# spi nor
+CONFIG_MTD=y
+CONFIG_MTD_OF_PARTS=y
+CONFIG_MTD_SPI_NOR=y
+CONFIG_MTD_M25P80=y
+
+# wireless core
+CONFIG_WIRELESS=y
+CONFIG_CFG80211=y
+CONFIG_MAC80211=y
+CONFIG_CFG80211_WEXT=y
+
+# wireless drivers
+CONFIG_WLAN=y
diff --git a/board/orangepi/orangepi-zero/patches/linux/0001-ARM-dts-orange-pi-zero-interrupt-triggering-xr819.patch b/board/orangepi/orangepi-zero/patches/linux/0001-ARM-dts-orange-pi-zero-interrupt-triggering-xr819.patch
new file mode 100644 (file)
index 0000000..146d23d
--- /dev/null
@@ -0,0 +1,35 @@
+From 321faaf4b78d46a0c77782c1798856746f0619e9 Mon Sep 17 00:00:00 2001
+From: Sergey Matyukevich <geomatsi@gmail.com>
+Date: Fri, 19 May 2017 23:39:48 +0300
+Subject: [PATCH 1/3] ARM: dts: orange-pi-zero: specify XR819 WiFi chip
+ interrupts
+
+The orange-pi-zero board has Allwinner XR819 SDIO wifi chip. The board
+dts file provides a node enabling mmc1 controller. Together with an
+out-of-tree driver https://github.com/fifteenhex/xradio this node
+enables using the wifi chip.
+
+This commit specifies XR819 interrupt configuration for the driver.
+
+Signed-off-by: Sergey Matyukevich <geomatsi@gmail.com>
+---
+ arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts b/arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts
+index b7ca916d871d..4e1a9050c6b4 100644
+--- a/arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts
++++ b/arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts
+@@ -125,6 +125,9 @@
+        */
+       xr819: sdio_wifi@1 {
+               reg = <1>;
++              compatible = "xradio,xr819";
++              interrupt-parent = <&pio>;
++              interrupts = <6 10 IRQ_TYPE_EDGE_RISING>;
+       };
+ };
+-- 
+2.11.0
+
diff --git a/board/orangepi/orangepi-zero/patches/linux/0002-ARM-dts-orange-pi-zero-enable-spi-nor.patch b/board/orangepi/orangepi-zero/patches/linux/0002-ARM-dts-orange-pi-zero-enable-spi-nor.patch
new file mode 100644 (file)
index 0000000..fc24e7b
--- /dev/null
@@ -0,0 +1,42 @@
+From 068c3baff3048a3db4ef2518ff917ce749cd8169 Mon Sep 17 00:00:00 2001
+From: Sergey Matyukevich <geomatsi@gmail.com>
+Date: Sat, 20 May 2017 11:24:26 +0300
+Subject: [PATCH 2/3] ARM: dts: orange-pi-zero: enable SPI NOR
+
+Enable SPI NOR on orange-pi-zero board.
+
+For more information see:
+- http://linux-sunxi.org/Orange_Pi_Zero#SPI_NOR_flash
+
+Signed-off-by: Sergey Matyukevich <geomatsi@gmail.com>
+---
+ arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts | 16 ++++++++++++++++
+ 1 file changed, 16 insertions(+)
+
+diff --git a/arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts b/arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts
+index 4e1a9050c6b4..cdf19821b1f3 100644
+--- a/arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts
++++ b/arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts
+@@ -161,3 +161,19 @@
+       /* USB VBUS is always on */
+       status = "okay";
+ };
++
++&spi0 {
++      status = "okay";
++
++      flash@0 {
++              #address-cells = <1>;
++              #size-cells = <1>;
++              compatible = "mxicy,mx25l1606e", "winbond,w25q128";
++              reg = <0>;
++              spi-max-frequency = <40000000>;
++
++              partition@00000000 {
++                      reg = <0x00000000 0x200000>;    /* 2Mb */
++              };
++      };
++};
+-- 
+2.11.0
+
diff --git a/board/orangepi/orangepi-zero/patches/linux/0003-ARM-dts-orange-pi-zero-enable-spidev.patch b/board/orangepi/orangepi-zero/patches/linux/0003-ARM-dts-orange-pi-zero-enable-spidev.patch
new file mode 100644 (file)
index 0000000..553155c
--- /dev/null
@@ -0,0 +1,42 @@
+From 8dd1b2a696bb7e9914abd11cc6f5c0f54c33d626 Mon Sep 17 00:00:00 2001
+From: Sergey Matyukevich <geomatsi@gmail.com>
+Date: Sat, 20 May 2017 15:36:51 +0300
+Subject: [PATCH 3/3] ARM: dts: orange-pi-zero: enable spidev
+
+On orange-pi-zero board SPI1 pins are accessible via GPIO expansion port.
+This patch enables spidev driver for SPI1.
+
+Signed-off-by: Sergey Matyukevich <geomatsi@gmail.com>
+---
+ arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+diff --git a/arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts b/arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts
+index cdf19821b1f3..7242aaecb14f 100644
+--- a/arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts
++++ b/arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts
+@@ -59,6 +59,7 @@
+               serial0 = &uart0;
+               /* ethernet0 is the H3 emac, defined in sun8i-h3.dtsi */
+               ethernet1 = &xr819;
++              spi1 = &spi1;
+       };
+       chosen {
+@@ -177,3 +178,13 @@
+               };
+       };
+ };
++
++&spi1 {
++      status = "okay";
++
++      spidev@0 {
++              compatible = "rohm,dh2228fv";
++              reg = <0>;
++              spi-max-frequency = <10000000>;
++      };
++};
+-- 
+2.11.0
+
diff --git a/board/orangepi/orangepi-zero/post-build.sh b/board/orangepi/orangepi-zero/post-build.sh
new file mode 120000 (symlink)
index 0000000..cd7f116
--- /dev/null
@@ -0,0 +1 @@
+../post-build.sh
\ No newline at end of file
diff --git a/board/orangepi/orangepi-zero/post-image.sh b/board/orangepi/orangepi-zero/post-image.sh
new file mode 120000 (symlink)
index 0000000..ae6294f
--- /dev/null
@@ -0,0 +1 @@
+../post-image.sh
\ No newline at end of file
diff --git a/board/orangepi/orangepi-zero/readme.txt b/board/orangepi/orangepi-zero/readme.txt
new file mode 100644 (file)
index 0000000..1afdbb7
--- /dev/null
@@ -0,0 +1,29 @@
+OrangePi Zero
+
+Intro
+=====
+
+This default configuration will allow you to start experimenting with the
+buildroot environment for the OrangePi Zero. With the current configuration
+it will bring-up the board, and allow access through the serial console.
+
+How to build it
+===============
+
+Configure Buildroot:
+
+    $ make orangepi_zero_defconfig
+
+Compile everything and build the SD card image:
+
+    $ make
+
+How to write the SD card
+========================
+
+Once the build process is finished you will have an image called "sdcard.img"
+in the output/images/ directory.
+
+Copy the bootable "sdcard.img" onto an SD card with "dd":
+
+  $ sudo dd if=output/images/sdcard.img of=/dev/sdX
diff --git a/configs/orangepi_zero_defconfig b/configs/orangepi_zero_defconfig
new file mode 100644 (file)
index 0000000..e023af4
--- /dev/null
@@ -0,0 +1,42 @@
+BR2_arm=y
+BR2_cortex_a7=y
+BR2_ARM_FPU_VFPV4=y
+BR2_GLOBAL_PATCH_DIR="board/orangepi/orangepi-zero/patches"
+BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_11=y
+BR2_TARGET_GENERIC_HOSTNAME="OrangePi_Zero"
+BR2_TARGET_GENERIC_ISSUE="Welcome to Buildroot for the Orange Pi Zero"
+BR2_ROOTFS_POST_BUILD_SCRIPT="board/orangepi/orangepi-zero/post-build.sh"
+BR2_ROOTFS_POST_IMAGE_SCRIPT="board/orangepi/orangepi-zero/post-image.sh"
+BR2_LINUX_KERNEL=y
+BR2_LINUX_KERNEL_CUSTOM_VERSION=y
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.11"
+BR2_LINUX_KERNEL_DEFCONFIG="sunxi"
+BR2_LINUX_KERNEL_DTS_SUPPORT=y
+BR2_LINUX_KERNEL_INTREE_DTS_NAME="sun8i-h2-plus-orangepi-zero"
+BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/orangepi/orangepi-zero/linux-extras.config"
+BR2_TARGET_ROOTFS_EXT2=y
+BR2_TARGET_ROOTFS_EXT2_4=y
+# BR2_TARGET_ROOTFS_TAR is not set
+BR2_TARGET_UBOOT=y
+BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y
+BR2_TARGET_UBOOT_CUSTOM_VERSION=y
+BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2017.03"
+BR2_TARGET_UBOOT_BOARD_DEFCONFIG="orangepi_zero"
+BR2_TARGET_UBOOT_NEEDS_DTC=y
+BR2_TARGET_UBOOT_FORMAT_CUSTOM=y
+BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot-sunxi-with-spl.bin"
+BR2_PACKAGE_HOST_DOSFSTOOLS=y
+BR2_PACKAGE_HOST_GENIMAGE=y
+BR2_PACKAGE_HOST_MTOOLS=y
+BR2_PACKAGE_HOST_UBOOT_TOOLS=y
+
+# wireless support
+BR2_PACKAGE_IW=y
+BR2_PACKAGE_WIRELESS_TOOLS=y
+BR2_PACKAGE_WIRELESS_TOOLS_LIB=y
+BR2_PACKAGE_WPA_SUPPLICANT=y
+BR2_PACKAGE_WPA_SUPPLICANT_NL80211=y
+BR2_PACKAGE_WPA_SUPPLICANT_CLI=y
+
+# spi flash support
+BR2_PACKAGE_MTD=y