kirkwood: add ZyXEL NSA310b
authorAlberto Bursi <alberto.bursi@outlook.it>
Mon, 23 Jan 2017 19:34:29 +0000 (20:34 +0100)
committerFelix Fietkau <nbd@nbd.name>
Tue, 24 Jan 2017 15:21:25 +0000 (16:21 +0100)
The ZyXEL NSA310 device is a Kirkwood based NAS:

- SoC: Marvell 88F6702 1200Mhz
- SDRAM memory: 256MB DDR2 400Mhz
- Gigabit ethernet: Realtek (over pcie)
- Flash memory: 128MB
- 1 Power button
- 1 Power LED (blue)
- 5 Status LED (green/red)
- 1 Copy/Sync button
- 1 Reset button
- 2 SATA II port (1 internal and 1 external)
- 2 USB 2.0 ports (1 front and 1 back)
- Smart fan

The stock u-boot cannot read ubi so it should be replaced with the
LEDE/OpenWRT's u-boot or with a u-boot from here
https://github.com/mibodhi/u-boot-kirkwood

This device's boot ROM supports "kwboot" tool
(in mainline u-boot, built automatically if CONFIG_KIRKWOOD is declared)
that sends an uboot image to the board over serial connection, it is very easy to unbrick.

The stock bootloader can use usb and read from FAT filesystems,
so the installation process is simple, place the uboot file on a USB flashdrive
formatted as FAT (here it is "openwrt-kirkwood-nsa310.bin", then connect TTL
to the board and write the following commands in the bootloader console:

usb reset
fatload usb 0 0x1000000 openwrt-kirkwood-nsa310.bin
nand write 0x1000000 0x00000 0x100000
reset

Now you are rebooting in the new u-boot, write this in its console to install the firmware:

usb reset
fatload usb 0 0x2000000 lede-kirkwood-nsa310b-squashfs-factory.bin
nand erase.part ubi
nand write 0x2000000 ubi 0x600000

If your firmware file is bigger than 6 MiBs you should write its size in hex
instead of 0x600000 above, or remove that number entirely (it will take a while in this case).

If you are using another uboot that can read ubi, set mtdparts like this

mtdparts=mtdparts=orion_nand:0x00c0000(uboot),0x80000(uboot_env),0x7ec0000(ubi)

And set your bootcmd to be like this

bootcmd=run setenv bootargs; ubi part ubi; ubi read 0x800000 kernel; bootm 0x800000

Then you can install the firmware as described above.

After you installed (or configured) the u-boot for booting the firmware,
write the device's mac address in the ethaddr u-boot env.
The MAC address is usually on a sticker under the device (one of the two codes is the serial),
it should begin with "107BEF" as it is assigned to ZyXEL.

write in the u-boot console (use your MAC address instead of the example)

setenv ethaddr 10:7B:EF:00:00:00
saveenv

to save the mac address in the u-boot.

Signed-off-by: Alberto Bursi <alberto.bursi@outlook.it>
target/linux/kirkwood/base-files/etc/board.d/01_leds
target/linux/kirkwood/base-files/etc/board.d/02_network
target/linux/kirkwood/base-files/etc/diag.sh
target/linux/kirkwood/base-files/etc/init.d/nsa310_fancontrol [new file with mode: 0755]
target/linux/kirkwood/base-files/lib/kirkwood.sh
target/linux/kirkwood/image/Makefile
target/linux/kirkwood/patches-4.4/190-nsa310s.patch [deleted file]
target/linux/kirkwood/patches-4.4/190-zyxel-nsa3xx-common-nand-partitions.patch [new file with mode: 0644]
target/linux/kirkwood/patches-4.4/191-nsa310b.patch [new file with mode: 0644]
target/linux/kirkwood/patches-4.4/192-nsa310s.patch [new file with mode: 0644]

index ce1309966eb4701b297f4b2ac6804db43a9ec268..4518fc4b64fbd718330357acbb2986c6f03123fb 100755 (executable)
@@ -38,6 +38,9 @@ case "$board" in
 "guruplug-server-plus")
        ucidef_set_led_timer "health" "health" "guruplug:red:health" "200" "800"
        ;;
+"nsa310b")
+       ucidef_set_led_default "health" "health" "nsa310:green:sys" "1"
+       ;;
 "sheevaplug" | \
 "sheevaplug-esata")
        ucidef_set_led_timer "health" "health" "sheevaplug:blue:health" "200" "800"
index f91e8a3252260ec61a71c731bbe316ecf2cf4202..91b59b93bd4a94ebe4ce8fd4dd481477ad532da7 100755 (executable)
@@ -22,13 +22,17 @@ case "$board" in
 "sheevaplug-esata")
        ucidef_set_interface_lan "eth0" "dhcp"
        ;;
+"guruplug-server-plus")
+       ucidef_set_interface_lan "eth0 eth1" "dhcp"
+       ;;
 "linksys-audi"|\
 "linksys-viper")
        ucidef_add_switch "switch0" \
                "0:lan" "1:lan" "2:lan" "3:lan" "4:wan" "5@eth0" "6@eth1"
        ;;
-"guruplug-server-plus")
-       ucidef_set_interface_lan "eth0 eth1" "dhcp"
+"nsa310b")
+       ucidef_set_interface_lan "eth0" "dhcp"
+       ucidef_set_interface_macaddr "lan" $( fw_printenv ethaddr | awk -F"=" '{print $2}' )
        ;;
 *)
        ucidef_set_interface_lan "eth0"
index 91cb8cf78eef96133f75b4830c8d37b70e52c44d..1c4632d6136aa652b4bf248eaec59e49cbf3bc4d 100755 (executable)
@@ -20,6 +20,9 @@ get_status_led() {
        linksys-viper)
                status_led="viper:white:health"
                ;;
+       nsa310b)
+               status_led="nsa310:green:sys"
+               ;;
        esac
 }
 
diff --git a/target/linux/kirkwood/base-files/etc/init.d/nsa310_fancontrol b/target/linux/kirkwood/base-files/etc/init.d/nsa310_fancontrol
new file mode 100755 (executable)
index 0000000..32e863e
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh /etc/rc.common
+
+START=98
+boot() {
+. /lib/functions.sh
+. /lib/kirkwood.sh
+
+#configuring lm85 onboard temp/fan controller to run the fan on its own
+#for more information, please read https://www.kernel.org/doc/Documentation/hwmon/sysfs-interface
+
+path_to_hwmon='/sys/devices/platform/ocp@f1000000/f1011000.i2c/i2c-0/0-002e/hwmon/hwmon0'
+
+case $(kirkwood_board_name) in
+       nsa310b)
+       echo 2 > "$path_to_hwmon/pwm1_enable" # fan is on pwm1
+       echo 1 > "$path_to_hwmon/pwm1_auto_channels" # temp1 is the only one that changes
+       echo 23000 > "$path_to_hwmon/temp1_auto_temp_min"
+       echo 43000 > "$path_to_hwmon/temp1_auto_temp_max" # next step is 49600 millicelsius, or 50 celsius, 43 celsius is better
+               ;;
+esac
+}
index 0e898ac197c4d5e0c570c1a186a8ef9ee226bdb5..f0efec499470d2bdf153ba62e08a5d5be04f8129 100755 (executable)
@@ -57,6 +57,10 @@ kirkwood_board_detect() {
                name="sheevaplug-esata"
                ;;
 
+       "ZyXEL NSA310b")
+               name="nsa310b"
+               ;;
+
        "ZyXEL NSA310S")
                name="nsa310s"
                ;;
index 520430f2c23818009e3ccc80ee78f044aff3cd37..ece7c1adf6ec67280743b7082b4a991f82e27a77 100644 (file)
@@ -11,7 +11,7 @@ include $(TOPDIR)/rules.mk
 include $(INCLUDE_DIR)/image.mk
 
 KERNEL_LOADADDR:=0x8000
-TARGET_DEVICES = linksys-audi linksys-viper dockstar goflexnet goflexhome iconnect pogo_e02 ib62x0
+TARGET_DEVICES = linksys-audi linksys-viper dockstar goflexnet goflexhome iconnect pogo_e02 ib62x0 nsa310b
 
 UBI_OPTS := -m 2048 -p 128KiB -s 512
 UBIFS_OPTS := -m 2048 -e 126KiB -c 4096
@@ -80,6 +80,13 @@ $(Device/dockstar)
   DEVICE_DTS := kirkwood-iconnect
 endef
 
+define Device/nsa310b
+$(Device/dockstar)
+  DEVICE_TITLE := ZyXEL NSA310b
+  DEVICE_DTS := kirkwood-nsa310b
+  DEVICE_PACKAGES := kmod-r8169 kmod-gpio-button-hotplug kmod-hwmon-lm85
+endef
+
 define Device/pogo_e02
 $(Device/dockstar)
   DEVICE_TITLE := Cloud Engines Pogoplug E02
diff --git a/target/linux/kirkwood/patches-4.4/190-nsa310s.patch b/target/linux/kirkwood/patches-4.4/190-nsa310s.patch
deleted file mode 100644 (file)
index d88cd74..0000000
+++ /dev/null
@@ -1,300 +0,0 @@
---- /dev/null
-+++ b/arch/arm/boot/dts/kirkwood-nsa310s.dts
-@@ -0,0 +1,287 @@
-+/dts-v1/;
-+
-+#include "kirkwood.dtsi"
-+#include "kirkwood-6281.dtsi"
-+
-+/ {
-+      model = "ZyXEL NSA310S";
-+      compatible = "zyxel,nsa320s", "marvell,kirkwood-88f6702", "marvell,kirkwood";
-+
-+      memory {
-+              device_type = "memory";
-+              reg = <0x00000000 0x10000000>;
-+      };
-+
-+      chosen {
-+              bootargs = "console=ttyS0,115200n8 earlyprintk";
-+              stdout-path = &uart0;
-+      };
-+
-+      mbus {
-+              pcie-controller {
-+                      status = "okay";
-+
-+                      pcie@1,0 {
-+                              status = "okay";
-+                      };
-+              };
-+      };
-+
-+      ocp@f1000000 {
-+              pinctrl: pin-controller@10000 {
-+                      pinctrl-names = "default";
-+
-+                      pmx_sata0: pmx-sata0 {
-+                              marvell,pins;
-+                              marvell,function = "sata0";
-+                      };
-+                      pmx_sata1: pmx-sata1 {
-+                              marvell,pins;
-+                              marvell,function = "sata1";
-+                      };
-+                      pmx_usb_power: pmx-usb-power {
-+                              marvell,pins = "mpp21";
-+                              marvell,function = "gpio";
-+                      };
-+                      pmx_pwr_off: pmx-pwr-off {
-+                              marvell,pins = "mpp27";
-+                              marvell,function = "gpio";
-+                      };
-+                      pmx_btn_reset: pmx-btn-reset {
-+                              marvell,pins = "mpp24";
-+                              marvell,function = "gpio";
-+                      };
-+                      pmx_btn_copy: pmx-btn-copy {
-+                              marvell,pins = "mpp25";
-+                              marvell,function = "gpio";
-+                      };
-+                      pmx_btn_power: pmx-btn-power {
-+                              marvell,pins = "mpp26";
-+                              marvell,function = "gpio";
-+                      };
-+                      pmx_led_hdd2_green: pmx-led-hdd2-green {
-+                              marvell,pins = "mpp34";
-+                              marvell,function = "gpio";
-+                      };
-+                      pmx_led_hdd2_red: pmx-led-hdd2-red {
-+                              marvell,pins = "mpp12";
-+                              marvell,function = "gpio";
-+                      };
-+                      pmx_led_usb_green: pmx-led-usb-green {
-+                              marvell,pins = "mpp15";
-+                              marvell,function = "gpio";
-+                      };
-+                      pmx_led_copy_green: pmx-led-copy-green {
-+                              marvell,pins = "mpp22";
-+                              marvell,function = "gpio";
-+                      };
-+                      pmx_led_copy_red: pmx-led-copy-red {
-+                              marvell,pins = "mpp23";
-+                              marvell,function = "gpio";
-+                      };
-+                      pmx_led_sys_green: pmx-led-sys-green {
-+                              marvell,pins = "mpp28";
-+                              marvell,function = "gpio";
-+                      };
-+                      pmx_led_sys_orange: pmx-led-sys-orange {
-+                              marvell,pins = "mpp29";
-+                              marvell,function = "gpio";
-+                      };
-+                      pmx_led_hdd1_green: pmx-led-hdd1-green {
-+                              marvell,pins = "mpp16";
-+                              marvell,function = "gpio";
-+                      };
-+                      pmx_led_hdd1_red: pmx-led-hdd1-red {
-+                              marvell,pins = "mpp13";
-+                              marvell,function = "gpio";
-+                      };
-+                      pmx_pwr_sata1: pmx-pwr-sata1 {
-+                              marvell,pins = "mpp33";
-+                              marvell,function = "gpio";
-+                      };
-+              };
-+
-+              serial@12000 {
-+                      status = "okay";
-+              };
-+
-+              sata@80000 {
-+                      status = "okay";
-+                      nr-ports = <2>;
-+              };
-+
-+              rtc@10300 {
-+                      status = "disabled";
-+              };
-+
-+              i2c@11000 {
-+                      status = "okay";
-+                      ht1382: rtc@68 {
-+                              compatible = "htk,ht1382";
-+                              reg = <0x68>;
-+                      };
-+              };
-+      };
-+
-+      regulators {
-+              compatible = "simple-bus";
-+              #address-cells = <1>;
-+              #size-cells = <0>;
-+              pinctrl-names = "default";
-+              pinctrl-0 = <&pmx_usb_power &pmx_pwr_sata1>;
-+
-+              usb0_power: regulator@1 {
-+                      compatible = "regulator-fixed";
-+                      reg = <1>;
-+                      regulator-name = "USB Power";
-+                      regulator-min-microvolt = <5000000>;
-+                      regulator-max-microvolt = <5000000>;
-+                      regulator-always-on;
-+                      regulator-boot-on;
-+                      enable-active-high;
-+                      gpio = <&gpio0 21 GPIO_ACTIVE_HIGH>;
-+              };
-+
-+              sata1_power: regulator@2 {
-+                      compatible = "regulator-fixed";
-+                      reg = <2>;
-+                      regulator-name = "SATA1 Power";
-+                      regulator-min-microvolt = <5000000>;
-+                      regulator-max-microvolt = <5000000>;
-+                      regulator-always-on;
-+                      regulator-boot-on;
-+                      enable-active-high;
-+                      gpio = <&gpio1 1 GPIO_ACTIVE_HIGH>;
-+              };
-+      };
-+
-+
-+      gpio_keys {
-+              compatible = "gpio-keys";
-+              #address-cells = <1>;
-+              #size-cells = <0>;
-+              pinctrl-0 = <&pmx_btn_reset &pmx_btn_copy &pmx_btn_power>;
-+              pinctrl-names = "default";
-+
-+              button@1 {
-+                      label = "Power Button";
-+                      linux,code = <KEY_POWER>;
-+                      gpios = <&gpio0 26 GPIO_ACTIVE_HIGH>;
-+              };
-+              button@2 {
-+                      label = "Copy Button";
-+                      linux,code = <KEY_COPY>;
-+                      gpios = <&gpio0 25 GPIO_ACTIVE_LOW>;
-+              };
-+              button@3 {
-+                      label = "Reset Button";
-+                      linux,code = <KEY_RESTART>;
-+                      gpios = <&gpio0 24 GPIO_ACTIVE_LOW>;
-+              };
-+      };
-+
-+      gpio-leds {
-+              compatible = "gpio-leds";
-+              pinctrl-0 = <&pmx_led_hdd2_green &pmx_led_hdd2_red
-+                              &pmx_led_usb_green
-+                              &pmx_led_sys_green &pmx_led_sys_orange
-+                              &pmx_led_copy_green &pmx_led_copy_red
-+                              &pmx_led_hdd1_green &pmx_led_hdd1_red>;
-+              pinctrl-names = "default";
-+
-+              green-sys {
-+                      label = "nsa310s:green:sys";
-+                      gpios = <&gpio0 28 GPIO_ACTIVE_HIGH>;
-+                      linux,default-trigger = "timer";
-+              };
-+              orange-sys {
-+                      label = "nsa310s:orange:sys";
-+                      gpios = <&gpio0 29 GPIO_ACTIVE_HIGH>;
-+              };
-+              green-hdd1 {
-+                      label = "nsa310s:green:hdd1";
-+                      gpios = <&gpio0 16 GPIO_ACTIVE_HIGH>;
-+              };
-+              red-hdd1 {
-+                      label = "nsa310s:red:hdd1";
-+                      gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>;
-+              };
-+              green-hdd2 {
-+                      label = "nsa310s:green:hdd2";
-+                      gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>;
-+              };
-+              red-hdd2 {
-+                      label = "nsa310s:red:hdd2";
-+                      gpios = <&gpio0 12 GPIO_ACTIVE_HIGH>;
-+              };
-+              green-usb {
-+                      label = "nsa310s:green:usb";
-+                      gpios = <&gpio0 15 GPIO_ACTIVE_HIGH>;
-+              };
-+              green-copy {
-+                      label = "nsa310s:green:copy";
-+                      gpios = <&gpio0 22 GPIO_ACTIVE_HIGH>;
-+                      linux,default-trigger = "ide-disk";
-+              };
-+              red-copy {
-+                      label = "nsa310s:red:copy";
-+                      gpios = <&gpio0 23 GPIO_ACTIVE_HIGH>;
-+              };
-+      };
-+
-+      gpio_poweroff {
-+              compatible = "gpio-poweroff";
-+              pinctrl-0 = <&pmx_pwr_off>;
-+              pinctrl-names = "default";
-+              gpios = <&gpio0 27 GPIO_ACTIVE_HIGH>;
-+      };
-+};
-+
-+&nand {
-+      status = "okay";
-+      chip-delay = <35>;
-+
-+      partition@0 {
-+              label = "u-boot";
-+              reg = <0x0000000 0xe0000>;
-+      };
-+
-+      partition@e0000 {
-+              label = "u-boot environment";
-+              reg = <0xe0000 0x100000>;
-+      };
-+
-+      partition@100000 {
-+              label = "second stage u-boot";
-+              reg = <0x100000 0x200000>;
-+      };
-+
-+      partition@200000 {
-+              label = "ubi";
-+              reg = <0x200000 0x7e00000>;
-+      };
-+};
-+
-+&mdio {
-+      status = "okay";
-+      ethphy0: ethernet-phy@1 {
-+              compatible = "marvell,88e1318s";
-+              reg = <1>;
-+              marvell,reg-init = <0x1 0x16 0x0 0x3>,
-+                                                      <0x1 0x10 0x0 0x1017>,
-+                                                      <0x1 0x11 0x0 0x4408>,
-+                                                      <0x1 0x16 0x0 0x0>,
-+                                                      <0x1 0x4 0x0 0x1e1>,
-+                                                      <0x1 0x9 0x0 0x300>,
-+                                                      <0x1 0x10 0x0 0x3860>,
-+                                                      <0x1 0x0 0x0 0x9140>;
-+      };
-+};
-+
-+&eth0 {
-+      status = "okay";
-+
-+      ethernet0-port@0 {
-+              phy-handle = <&ethphy0>;
-+      };
-+};
---- a/arch/arm/boot/dts/Makefile
-+++ b/arch/arm/boot/dts/Makefile
-@@ -203,6 +203,7 @@ dtb-$(CONFIG_MACH_KIRKWOOD) += \
-       kirkwood-ns2mini.dtb \
-       kirkwood-nsa310.dtb \
-       kirkwood-nsa310a.dtb \
-+      kirkwood-nsa310s.dtb \
-       kirkwood-openblocks_a6.dtb \
-       kirkwood-openblocks_a7.dtb \
-       kirkwood-openrd-base.dtb \
diff --git a/target/linux/kirkwood/patches-4.4/190-zyxel-nsa3xx-common-nand-partitions.patch b/target/linux/kirkwood/patches-4.4/190-zyxel-nsa3xx-common-nand-partitions.patch
new file mode 100644 (file)
index 0000000..c8e15d4
--- /dev/null
@@ -0,0 +1,47 @@
+--- a/arch/arm/boot/dts/kirkwood-nsa3x0-common.dtsi
++++ b/arch/arm/boot/dts/kirkwood-nsa3x0-common.dtsi
+@@ -121,39 +121,15 @@
+       partition@0 {
+               label = "uboot";
+-              reg = <0x0000000 0x0100000>;
++              reg = <0x0000000 0x00c0000>;
+               read-only;
+       };
+       partition@100000 {
+               label = "uboot_env";
+-              reg = <0x0100000 0x0080000>;
++              reg = <0x00c0000 0x0080000>;
+       };
+-      partition@180000 {
+-              label = "key_store";
+-              reg = <0x0180000 0x0080000>;
+-      };
+-      partition@200000 {
+-              label = "info";
+-              reg = <0x0200000 0x0080000>;
+-      };
+-      partition@280000 {
+-              label = "etc";
+-              reg = <0x0280000 0x0a00000>;
+-      };
+-      partition@c80000 {
+-              label = "kernel_1";
+-              reg = <0x0c80000 0x0a00000>;
+-      };
+-      partition@1680000 {
+-              label = "rootfs1";
+-              reg = <0x1680000 0x2fc0000>;
+-      };
+-      partition@4640000 {
+-              label = "kernel_2";
+-              reg = <0x4640000 0x0a00000>;
+-      };
+-      partition@5040000 {
+-              label = "rootfs2";
+-              reg = <0x5040000 0x2fc0000>;
++      partition@140000 {
++              label = "ubi";
++              reg = <0x0140000 0x7ec0000>;
+       };
+ };
diff --git a/target/linux/kirkwood/patches-4.4/191-nsa310b.patch b/target/linux/kirkwood/patches-4.4/191-nsa310b.patch
new file mode 100644 (file)
index 0000000..b0afb8e
--- /dev/null
@@ -0,0 +1,169 @@
+kirkwood: add nsa310b dtb, a zyxel nsa310 variant
+
+add support to a nsa310 variant with red/green usb led
+and lm85 temp/fan controller
+
+Signed-off-by: Alberto Bursi <alberto.bursi@outlook.it>
+
+NOTE: this patch can be upstreamed as-is, LEDE-specific
+               nand partitions are set in another patch
+
+--- a/arch/arm/boot/dts/Makefile
++++ b/arch/arm/boot/dts/Makefile
+@@ -203,6 +203,7 @@ dtb-$(CONFIG_MACH_KIRKWOOD) += \
+       kirkwood-ns2mini.dtb \
+       kirkwood-nsa310.dtb \
+       kirkwood-nsa310a.dtb \
++      kirkwood-nsa310b.dtb \
+       kirkwood-openblocks_a6.dtb \
+       kirkwood-openblocks_a7.dtb \
+       kirkwood-openrd-base.dtb \
+--- /dev/null
++++ b/arch/arm/boot/dts/kirkwood-nsa310b.dts
+@@ -0,0 +1,146 @@
++/dts-v1/;
++
++#include "kirkwood-nsa3x0-common.dtsi"
++
++/*
++ * There are at least two different NSA310 designs. This variant has
++ * a red/green USB Led (same as nsa310) and a lm85 temp/fan controller.
++ */
++
++/ {
++      model = "ZyXEL NSA310b";
++      compatible = "zyxel,nsa310a", "zyxel,nsa310", "marvell,kirkwood-88f6281", "marvell,kirkwood";
++
++      memory {
++              device_type = "memory";
++              reg = <0x00000000 0x10000000>;
++      };
++
++      chosen {
++              bootargs = "console=ttyS0,115200";
++              stdout-path = "&uart0";
++      };
++
++      mbus {
++              pcie-controller {
++                      status = "okay";
++
++                      pcie@1,0 {
++                              status = "okay";
++                      };
++              };
++      };
++
++      ocp@f1000000 {
++              pinctrl: pin-controller@10000 {
++                      pinctrl-0 = <&pmx_unknown>;
++                      pinctrl-names = "default";
++
++                      pmx_led_esata_green: pmx-led-esata-green {
++                              marvell,pins = "mpp12";
++                              marvell,function = "gpio";
++                      };
++
++                      pmx_led_esata_red: pmx-led-esata-red {
++                              marvell,pins = "mpp13";
++                              marvell,function = "gpio";
++                      };
++
++                      pmx_led_usb_green: pmx-led-usb-green {
++                              marvell,pins = "mpp15";
++                              marvell,function = "gpio";
++                      };
++
++                      pmx_led_usb_red: pmx-led-usb-red {
++                              marvell,pins = "mpp16";
++                              marvell,function = "gpio";
++                      };
++
++                      pmx_led_sys_green: pmx-led-sys-green {
++                              marvell,pins = "mpp28";
++                              marvell,function = "gpio";
++                      };
++
++                      pmx_led_sys_red: pmx-led-sys-red {
++                              marvell,pins = "mpp29";
++                              marvell,function = "gpio";
++                      };
++
++                      pmx_led_hdd_green: pmx-led-hdd-green {
++                              marvell,pins = "mpp41";
++                              marvell,function = "gpio";
++                      };
++
++                      pmx_led_hdd_red: pmx-led-hdd-red {
++                              marvell,pins = "mpp42";
++                              marvell,function = "gpio";
++                      };
++
++                      pmx_unknown: pmx-unknown {
++                              marvell,pins = "mpp44";
++                              marvell,function = "gpio";
++                      };
++
++              };
++
++              i2c@11000 {
++                      status = "okay";
++
++                      lm85@2e {
++                              compatible = "national,lm85";
++                              reg = <0x2e>;
++                      };
++              };
++      };
++
++      gpio-leds {
++              compatible = "gpio-leds";
++              pinctrl-0 = <&pmx_led_esata_green &pmx_led_esata_red
++                           &pmx_led_usb_green &pmx_led_usb_red
++                           &pmx_led_sys_green &pmx_led_sys_red
++                           &pmx_led_copy_green &pmx_led_copy_red
++                           &pmx_led_hdd_green &pmx_led_hdd_red>;
++              pinctrl-names = "default";
++
++              green-sys {
++                      label = "nsa310:green:sys";
++                      gpios = <&gpio0 28 GPIO_ACTIVE_HIGH>;
++              };
++              red-sys {
++                      label = "nsa310:red:sys";
++                      gpios = <&gpio0 29 GPIO_ACTIVE_HIGH>;
++              };
++              green-hdd {
++                      label = "nsa310:green:hdd";
++                      gpios = <&gpio1 9 GPIO_ACTIVE_HIGH>;
++              };
++              red-hdd {
++                      label = "nsa310:red:hdd";
++                      gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>;
++              };
++              green-esata {
++                      label = "nsa310:green:esata";
++                      gpios = <&gpio0 12 GPIO_ACTIVE_HIGH>;
++              };
++              red-esata {
++                      label = "nsa310:red:esata";
++                      gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>;
++              };
++              green-usb {
++                      label = "nsa310:green:usb";
++                      gpios = <&gpio0 15 GPIO_ACTIVE_HIGH>;
++              };
++              red-usb {
++                      label = "nsa310:red:usb";
++                      gpios = <&gpio0 16 GPIO_ACTIVE_HIGH>;
++              };
++              green-copy {
++                      label = "nsa310:green:copy";
++                      gpios = <&gpio1 7 GPIO_ACTIVE_HIGH>;
++              };
++              red-copy {
++                      label = "nsa310:red:copy";
++                      gpios = <&gpio1 8 GPIO_ACTIVE_HIGH>;
++              };
++      };
++};
diff --git a/target/linux/kirkwood/patches-4.4/192-nsa310s.patch b/target/linux/kirkwood/patches-4.4/192-nsa310s.patch
new file mode 100644 (file)
index 0000000..e78e680
--- /dev/null
@@ -0,0 +1,300 @@
+--- a/arch/arm/boot/dts/Makefile
++++ b/arch/arm/boot/dts/Makefile
+@@ -204,6 +204,7 @@ dtb-$(CONFIG_MACH_KIRKWOOD) += \
+       kirkwood-nsa310.dtb \
+       kirkwood-nsa310a.dtb \
+       kirkwood-nsa310b.dtb \
++      kirkwood-nsa310s.dtb \
+       kirkwood-openblocks_a6.dtb \
+       kirkwood-openblocks_a7.dtb \
+       kirkwood-openrd-base.dtb \
+--- /dev/null
++++ b/arch/arm/boot/dts/kirkwood-nsa310s.dts
+@@ -0,0 +1,287 @@
++/dts-v1/;
++
++#include "kirkwood.dtsi"
++#include "kirkwood-6281.dtsi"
++
++/ {
++      model = "ZyXEL NSA310S";
++      compatible = "zyxel,nsa320s", "marvell,kirkwood-88f6702", "marvell,kirkwood";
++
++      memory {
++              device_type = "memory";
++              reg = <0x00000000 0x10000000>;
++      };
++
++      chosen {
++              bootargs = "console=ttyS0,115200n8 earlyprintk";
++              stdout-path = &uart0;
++      };
++
++      mbus {
++              pcie-controller {
++                      status = "okay";
++
++                      pcie@1,0 {
++                              status = "okay";
++                      };
++              };
++      };
++
++      ocp@f1000000 {
++              pinctrl: pin-controller@10000 {
++                      pinctrl-names = "default";
++
++                      pmx_sata0: pmx-sata0 {
++                              marvell,pins;
++                              marvell,function = "sata0";
++                      };
++                      pmx_sata1: pmx-sata1 {
++                              marvell,pins;
++                              marvell,function = "sata1";
++                      };
++                      pmx_usb_power: pmx-usb-power {
++                              marvell,pins = "mpp21";
++                              marvell,function = "gpio";
++                      };
++                      pmx_pwr_off: pmx-pwr-off {
++                              marvell,pins = "mpp27";
++                              marvell,function = "gpio";
++                      };
++                      pmx_btn_reset: pmx-btn-reset {
++                              marvell,pins = "mpp24";
++                              marvell,function = "gpio";
++                      };
++                      pmx_btn_copy: pmx-btn-copy {
++                              marvell,pins = "mpp25";
++                              marvell,function = "gpio";
++                      };
++                      pmx_btn_power: pmx-btn-power {
++                              marvell,pins = "mpp26";
++                              marvell,function = "gpio";
++                      };
++                      pmx_led_hdd2_green: pmx-led-hdd2-green {
++                              marvell,pins = "mpp34";
++                              marvell,function = "gpio";
++                      };
++                      pmx_led_hdd2_red: pmx-led-hdd2-red {
++                              marvell,pins = "mpp12";
++                              marvell,function = "gpio";
++                      };
++                      pmx_led_usb_green: pmx-led-usb-green {
++                              marvell,pins = "mpp15";
++                              marvell,function = "gpio";
++                      };
++                      pmx_led_copy_green: pmx-led-copy-green {
++                              marvell,pins = "mpp22";
++                              marvell,function = "gpio";
++                      };
++                      pmx_led_copy_red: pmx-led-copy-red {
++                              marvell,pins = "mpp23";
++                              marvell,function = "gpio";
++                      };
++                      pmx_led_sys_green: pmx-led-sys-green {
++                              marvell,pins = "mpp28";
++                              marvell,function = "gpio";
++                      };
++                      pmx_led_sys_orange: pmx-led-sys-orange {
++                              marvell,pins = "mpp29";
++                              marvell,function = "gpio";
++                      };
++                      pmx_led_hdd1_green: pmx-led-hdd1-green {
++                              marvell,pins = "mpp16";
++                              marvell,function = "gpio";
++                      };
++                      pmx_led_hdd1_red: pmx-led-hdd1-red {
++                              marvell,pins = "mpp13";
++                              marvell,function = "gpio";
++                      };
++                      pmx_pwr_sata1: pmx-pwr-sata1 {
++                              marvell,pins = "mpp33";
++                              marvell,function = "gpio";
++                      };
++              };
++
++              serial@12000 {
++                      status = "okay";
++              };
++
++              sata@80000 {
++                      status = "okay";
++                      nr-ports = <2>;
++              };
++
++              rtc@10300 {
++                      status = "disabled";
++              };
++
++              i2c@11000 {
++                      status = "okay";
++                      ht1382: rtc@68 {
++                              compatible = "htk,ht1382";
++                              reg = <0x68>;
++                      };
++              };
++      };
++
++      regulators {
++              compatible = "simple-bus";
++              #address-cells = <1>;
++              #size-cells = <0>;
++              pinctrl-names = "default";
++              pinctrl-0 = <&pmx_usb_power &pmx_pwr_sata1>;
++
++              usb0_power: regulator@1 {
++                      compatible = "regulator-fixed";
++                      reg = <1>;
++                      regulator-name = "USB Power";
++                      regulator-min-microvolt = <5000000>;
++                      regulator-max-microvolt = <5000000>;
++                      regulator-always-on;
++                      regulator-boot-on;
++                      enable-active-high;
++                      gpio = <&gpio0 21 GPIO_ACTIVE_HIGH>;
++              };
++
++              sata1_power: regulator@2 {
++                      compatible = "regulator-fixed";
++                      reg = <2>;
++                      regulator-name = "SATA1 Power";
++                      regulator-min-microvolt = <5000000>;
++                      regulator-max-microvolt = <5000000>;
++                      regulator-always-on;
++                      regulator-boot-on;
++                      enable-active-high;
++                      gpio = <&gpio1 1 GPIO_ACTIVE_HIGH>;
++              };
++      };
++
++
++      gpio_keys {
++              compatible = "gpio-keys";
++              #address-cells = <1>;
++              #size-cells = <0>;
++              pinctrl-0 = <&pmx_btn_reset &pmx_btn_copy &pmx_btn_power>;
++              pinctrl-names = "default";
++
++              button@1 {
++                      label = "Power Button";
++                      linux,code = <KEY_POWER>;
++                      gpios = <&gpio0 26 GPIO_ACTIVE_HIGH>;
++              };
++              button@2 {
++                      label = "Copy Button";
++                      linux,code = <KEY_COPY>;
++                      gpios = <&gpio0 25 GPIO_ACTIVE_LOW>;
++              };
++              button@3 {
++                      label = "Reset Button";
++                      linux,code = <KEY_RESTART>;
++                      gpios = <&gpio0 24 GPIO_ACTIVE_LOW>;
++              };
++      };
++
++      gpio-leds {
++              compatible = "gpio-leds";
++              pinctrl-0 = <&pmx_led_hdd2_green &pmx_led_hdd2_red
++                              &pmx_led_usb_green
++                              &pmx_led_sys_green &pmx_led_sys_orange
++                              &pmx_led_copy_green &pmx_led_copy_red
++                              &pmx_led_hdd1_green &pmx_led_hdd1_red>;
++              pinctrl-names = "default";
++
++              green-sys {
++                      label = "nsa310s:green:sys";
++                      gpios = <&gpio0 28 GPIO_ACTIVE_HIGH>;
++                      linux,default-trigger = "timer";
++              };
++              orange-sys {
++                      label = "nsa310s:orange:sys";
++                      gpios = <&gpio0 29 GPIO_ACTIVE_HIGH>;
++              };
++              green-hdd1 {
++                      label = "nsa310s:green:hdd1";
++                      gpios = <&gpio0 16 GPIO_ACTIVE_HIGH>;
++              };
++              red-hdd1 {
++                      label = "nsa310s:red:hdd1";
++                      gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>;
++              };
++              green-hdd2 {
++                      label = "nsa310s:green:hdd2";
++                      gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>;
++              };
++              red-hdd2 {
++                      label = "nsa310s:red:hdd2";
++                      gpios = <&gpio0 12 GPIO_ACTIVE_HIGH>;
++              };
++              green-usb {
++                      label = "nsa310s:green:usb";
++                      gpios = <&gpio0 15 GPIO_ACTIVE_HIGH>;
++              };
++              green-copy {
++                      label = "nsa310s:green:copy";
++                      gpios = <&gpio0 22 GPIO_ACTIVE_HIGH>;
++                      linux,default-trigger = "ide-disk";
++              };
++              red-copy {
++                      label = "nsa310s:red:copy";
++                      gpios = <&gpio0 23 GPIO_ACTIVE_HIGH>;
++              };
++      };
++
++      gpio_poweroff {
++              compatible = "gpio-poweroff";
++              pinctrl-0 = <&pmx_pwr_off>;
++              pinctrl-names = "default";
++              gpios = <&gpio0 27 GPIO_ACTIVE_HIGH>;
++      };
++};
++
++&nand {
++      status = "okay";
++      chip-delay = <35>;
++
++      partition@0 {
++              label = "u-boot";
++              reg = <0x0000000 0xe0000>;
++      };
++
++      partition@e0000 {
++              label = "u-boot environment";
++              reg = <0xe0000 0x100000>;
++      };
++
++      partition@100000 {
++              label = "second stage u-boot";
++              reg = <0x100000 0x200000>;
++      };
++
++      partition@200000 {
++              label = "ubi";
++              reg = <0x200000 0x7e00000>;
++      };
++};
++
++&mdio {
++      status = "okay";
++      ethphy0: ethernet-phy@1 {
++              compatible = "marvell,88e1318s";
++              reg = <1>;
++              marvell,reg-init = <0x1 0x16 0x0 0x3>,
++                                                      <0x1 0x10 0x0 0x1017>,
++                                                      <0x1 0x11 0x0 0x4408>,
++                                                      <0x1 0x16 0x0 0x0>,
++                                                      <0x1 0x4 0x0 0x1e1>,
++                                                      <0x1 0x9 0x0 0x300>,
++                                                      <0x1 0x10 0x0 0x3860>,
++                                                      <0x1 0x0 0x0 0x9140>;
++      };
++};
++
++&eth0 {
++      status = "okay";
++
++      ethernet0-port@0 {
++              phy-handle = <&ethphy0>;
++      };
++};