From b496a2294c6e663a2dcbf08d714443e758d1269d Mon Sep 17 00:00:00 2001 From: Jeff Kletsky Date: Sun, 2 Jun 2019 08:18:34 -0700 Subject: [PATCH] ath79: GL-AR750S: provide NAND support; increase kernel to 4 MB MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The GL.iNet GL-AR750S has been supported by the ar71xx and ath79 platforms with access to its 16 MB NOR flash, but not its 128 MB SPI NAND flash. This commit provides support for the NAND through the upstream SPI-NAND framework. At this time, the OEM U-Boot appears to only support loading the kernel from NOR. This configuration is preserved as this time, with the glinet,gl-ar750s-nand name reserved for a potential, future, NAND-only boot. The family of GL-AR750S devices on the ath79 platform now includes: * glinet,gl-ar750m-nor-nand "nand" target * glinet,gl-ar750m-nor "nand" target (NAND-aware) NB: This commit increases the kernel size from 2 MB to 4 MB "Force-less" sysupgrade is presently supported from the current versions of following NOR-based firmwre images to the version of glinet,gl-ar750s-nor firmware produced by this commit: * glinet,gl-ar750s -- OpenWrt 19.07 ar71xx * glinet,gl-ar750s -- OpenWrt 19.07 ath79 Users who have sucessfully upgraded to glinet,gl-ar750m-nor may then flash glinet,gl-ar750m-nor-nand with sysupgrade to transtion to the NAND-based variant. Other upgrades to these images, including directly to the NAND-based glinet,gl-ar750s-nor-nand firmware, can be accomplished through U-Boot. NB: See "ath79: restrict GL-AR750S kernel build-size to 2 MB" which enables flashing of NAND factory.img with the current GL-iNet U-Boot, "U-Boot 1.1.4-gcf378d80-dirty (Aug 16 2018 - 07:51:15)" The GL-AR750S OEM U-Boot allows upload and flashing of either NOR firmware (sysupgrade.bin) or NAND firmware (factory.img) through its HTTP-based GUI. Serial connectivity is not required. The glinet,gl-ar750s-nor and glinet,gl-ar750s-nor-nand images generated after this commit flash each other directly. This commit changes the control of the USB VBUS to gpio-hog from regulator-fixed introduced by commit 0f6b944c92. This reduces the compressed kernel size by ~14 kB, with no apparent loss of functionality. No other ath79-nand boards are using regulator-fixed at this time. Note: mtd_get_mac_binary art 0x5006 does not return the proper MAC and the GL.iNet source indicates that only the 0x0 offset is valid The ar71xx targets are unmodified. Cc: Alexander Wördekemper Signed-off-by: Jeff Kletsky --- package/boot/uboot-envtools/files/ath79 | 2 + .../dts/qca9563_glinet_gl-ar750s-nor-nand.dts | 18 +++ .../dts/qca9563_glinet_gl-ar750s-nor.dts | 18 +++ ...750s.dts => qca9563_glinet_gl-ar750s.dtsi} | 104 +++++++++++------- .../generic/base-files/etc/board.d/02_network | 4 - .../etc/hotplug.d/firmware/11-ath10k-caldata | 3 +- target/linux/ath79/image/generic.mk | 10 -- target/linux/ath79/image/nand.mk | 31 ++++++ .../nand/base-files/etc/board.d/02_network | 5 + .../etc/hotplug.d/firmware/11-ath10k-caldata | 5 + .../nand/base-files/lib/upgrade/platform.sh | 4 + 11 files changed, 148 insertions(+), 56 deletions(-) create mode 100644 target/linux/ath79/dts/qca9563_glinet_gl-ar750s-nor-nand.dts create mode 100644 target/linux/ath79/dts/qca9563_glinet_gl-ar750s-nor.dts rename target/linux/ath79/dts/{qca9563_glinet_gl-ar750s.dts => qca9563_glinet_gl-ar750s.dtsi} (74%) diff --git a/package/boot/uboot-envtools/files/ath79 b/package/boot/uboot-envtools/files/ath79 index d34469cbf4..e31100877e 100644 --- a/package/boot/uboot-envtools/files/ath79 +++ b/package/boot/uboot-envtools/files/ath79 @@ -20,6 +20,8 @@ glinet,gl-ar300m-lite|\ glinet,gl-ar300m-nand|\ glinet,gl-ar300m-nor|\ glinet,gl-ar300m16|\ +glinet,gl-ar750s-nor|\ +glinet,gl-ar750s-nor-nand|\ librerouter,librerouter-v1|\ netgear,ex6400|\ netgear,ex7300|\ diff --git a/target/linux/ath79/dts/qca9563_glinet_gl-ar750s-nor-nand.dts b/target/linux/ath79/dts/qca9563_glinet_gl-ar750s-nor-nand.dts new file mode 100644 index 0000000000..92d1fb9ba2 --- /dev/null +++ b/target/linux/ath79/dts/qca9563_glinet_gl-ar750s-nor-nand.dts @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT + +/dts-v1/; + +#include "qca9563_glinet_gl-ar750s.dtsi" + +/ { + compatible = "glinet,gl-ar750s-nor-nand", "qca,qca9563"; + model = "GL.iNet GL-AR750S (NOR/NAND)"; +}; + +&nor_kernel { + label = "kernel"; +}; + +&nand_ubi { + label = "ubi"; +}; diff --git a/target/linux/ath79/dts/qca9563_glinet_gl-ar750s-nor.dts b/target/linux/ath79/dts/qca9563_glinet_gl-ar750s-nor.dts new file mode 100644 index 0000000000..bb33abd630 --- /dev/null +++ b/target/linux/ath79/dts/qca9563_glinet_gl-ar750s-nor.dts @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT + +/dts-v1/; + +#include "qca9563_glinet_gl-ar750s.dtsi" + +/ { + compatible = "glinet,gl-ar750s-nor", "qca,qca9563"; + model = "GL.iNet GL-AR750S (NOR)"; +}; + +/delete-node/ &nor_kernel; +/delete-node/ &nor_reserved; + +&nor_firmware { + compatible = "denx,uimage"; + label = "firmware"; +}; diff --git a/target/linux/ath79/dts/qca9563_glinet_gl-ar750s.dts b/target/linux/ath79/dts/qca9563_glinet_gl-ar750s.dtsi similarity index 74% rename from target/linux/ath79/dts/qca9563_glinet_gl-ar750s.dts rename to target/linux/ath79/dts/qca9563_glinet_gl-ar750s.dtsi index 3f9a091824..8250db55ad 100644 --- a/target/linux/ath79/dts/qca9563_glinet_gl-ar750s.dts +++ b/target/linux/ath79/dts/qca9563_glinet_gl-ar750s.dtsi @@ -1,4 +1,5 @@ // SPDX-License-Identifier: GPL-2.0-or-later OR MIT + /dts-v1/; #include @@ -19,6 +20,7 @@ led-failsafe = &led_power; led-running = &led_power; led-upgrade = &led_power; + label-mac-device = ð0; }; keys { @@ -50,13 +52,13 @@ default-state = "keep"; }; - wlan2g { + led_wlan2g: wlan2g { label = "gl-ar750s:green:wlan2g"; gpios = <&gpio 19 GPIO_ACTIVE_LOW>; linux,default-trigger = "phy1tpt"; }; - wlan5g { + led_wlan5g: wlan5g { label = "gl-ar750s:green:wlan5g"; gpios = <&gpio 20 GPIO_ACTIVE_HIGH>; linux,default-trigger = "phy0tpt"; @@ -69,32 +71,20 @@ sda-gpios = <&gpio 5 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>; scl-gpios = <&gpio 21 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>; }; - - usb_vbus: regulator-usb-vbus { - compatible = "regulator-fixed"; - - regulator-name = "USB_VBUS"; - - regulator-min-microvolt = <5000000>; - regulator-max-microvolt = <5000000>; - regulator-always-on; - - gpio = <&gpio 7 GPIO_ACTIVE_HIGH>; - enable-active-high; - }; }; &spi { status = "okay"; - num-cs = <0>; + num-cs = <2>; + cs-gpios = <0>, <0>; - flash@0 { + flash_nor: flash@0 { compatible = "jedec,spi-nor"; reg = <0>; spi-max-frequency = <25000000>; - partitions { + nor_partitions: partitions { compatible = "fixed-partitions"; #address-cells = <1>; #size-cells = <1>; @@ -116,38 +106,55 @@ read-only; }; - partition@60000 { - compatible = "denx,uimage"; - label = "firmware"; + nor_firmware: partition@60000 { + label = "nor_firmware"; reg = <0x060000 0xfa0000>; }; + + nor_kernel: partition_alt@60000 { + label = "nor_kernel"; + reg = <0x060000 0x400000>; + }; + + nor_reserved: parition_alt@460000 { + label = "nor_reserved"; + reg = <0x460000 0xba0000>; + }; }; }; -}; -&pcie { - status = "okay"; -}; + flash_nand: flash@1 { + compatible = "spi-nand"; + reg = <1>; + spi-max-frequency = <25000000>; -&uart { - status = "okay"; -}; + nand_partitions: partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; -&usb0 { - status = "okay"; - vbus-supply = <&usb_vbus>; + nand_ubi: partition@0 { + label = "nand_ubi"; + reg = <0x000000 0x8000000>; + }; + }; + }; }; -&usb_phy0 { +ð0 { status = "okay"; -}; -&usb1 { - status = "okay"; + phy-handle = <&phy0>; + mtd-mac-address = <&art 0x0>; }; -&usb_phy1 { - status = "okay"; +&gpio { + usb_vbus { + gpio-hog; + gpios = <7 GPIO_ACTIVE_HIGH>; + output-high; + line-name = "usb-vbus"; + }; }; &mdio0 { @@ -165,11 +172,28 @@ }; }; -ð0 { +&pcie { status = "okay"; +}; - mtd-mac-address = <&art 0x0>; - phy-handle = <&phy0>; +&uart { + status = "okay"; +}; + +&usb0 { + status = "okay"; +}; + +&usb1 { + status = "okay"; +}; + +&usb_phy0 { + status = "okay"; +}; + +&usb_phy1 { + status = "okay"; }; &wmac { diff --git a/target/linux/ath79/generic/base-files/etc/board.d/02_network b/target/linux/ath79/generic/base-files/etc/board.d/02_network index 3a896b55b0..07f3c4e83c 100755 --- a/target/linux/ath79/generic/base-files/etc/board.d/02_network +++ b/target/linux/ath79/generic/base-files/etc/board.d/02_network @@ -144,10 +144,6 @@ ath79_setup_interfaces() ucidef_add_switch "switch0" \ "0@eth0" "1:lan" "2:lan" ;; - glinet,gl-ar750s) - ucidef_add_switch "switch0" \ - "0@eth0" "2:lan:2" "3:lan:1" "1:wan" - ;; iodata,etg3-r|\ iodata,wn-ac1167dgr|\ iodata,wn-ac1600dgr|\ diff --git a/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/11-ath10k-caldata index b2ec803a72..f128e8759f 100644 --- a/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/11-ath10k-caldata +++ b/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/11-ath10k-caldata @@ -46,8 +46,7 @@ case "$FIRMWARE" in caldata_extract "art" 0x5000 0x844 ath10k_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) +1) ;; - glinet,gl-ar750|\ - glinet,gl-ar750s) + glinet,gl-ar750) caldata_extract "art" 0x5000 0x844 ath10k_patch_mac $(macaddr_add $(mtd_get_mac_binary art 0x0) +1) ;; diff --git a/target/linux/ath79/image/generic.mk b/target/linux/ath79/image/generic.mk index 6fc51ec647..f2c228926e 100644 --- a/target/linux/ath79/image/generic.mk +++ b/target/linux/ath79/image/generic.mk @@ -578,16 +578,6 @@ define Device/glinet_gl-ar750 endef TARGET_DEVICES += glinet_gl-ar750 -define Device/glinet_gl-ar750s - ATH_SOC := qca9563 - DEVICE_VENDOR := GL.iNet - DEVICE_MODEL := GL-AR750S - DEVICE_PACKAGES := kmod-usb2 kmod-ath10k-ct ath10k-firmware-qca9887-ct block-mount - IMAGE_SIZE := 16000k - SUPPORTED_DEVICES += gl-ar750s -endef -TARGET_DEVICES += glinet_gl-ar750s - define Device/glinet_gl-x750 ATH_SOC := qca9531 DEVICE_VENDOR := GL.iNet diff --git a/target/linux/ath79/image/nand.mk b/target/linux/ath79/image/nand.mk index f9961840f0..614a693285 100644 --- a/target/linux/ath79/image/nand.mk +++ b/target/linux/ath79/image/nand.mk @@ -75,6 +75,37 @@ define Device/glinet_gl-ar300m-nor endef TARGET_DEVICES += glinet_gl-ar300m-nor +define Device/glinet_gl-ar750s-common + ATH_SOC := qca9563 + DEVICE_VENDOR := GL.iNet + DEVICE_MODEL := GL-AR750S + DEVICE_PACKAGES := kmod-ath10k-ct ath10k-firmware-qca9887-ct \ + kmod-usb2 kmod-usb-storage block-mount + KERNEL_SIZE := 4096k + IMAGE_SIZE := 16000k + PAGESIZE := 2048 + VID_HDR_OFFSET := 2048 +endef + +define Device/glinet_gl-ar750s-nor-nand + $(Device/glinet_gl-ar750s-common) + DEVICE_VARIANT := NOR/NAND + BLOCKSIZE := 128k + IMAGES += factory.img + IMAGE/factory.img := append-kernel | pad-to $$$$(KERNEL_SIZE) | append-ubi + IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata + SUPPORTED_DEVICES += glinet,gl-ar750s-nor +endef +TARGET_DEVICES += glinet_gl-ar750s-nor-nand + +define Device/glinet_gl-ar750s-nor + $(Device/glinet_gl-ar750s-common) + DEVICE_VARIANT := NOR + BLOCKSIZE := 64k + SUPPORTED_DEVICES += gl-ar750s glinet,gl-ar750s glinet,gl-ar750s-nor-nand +endef +TARGET_DEVICES += glinet_gl-ar750s-nor + # fake rootfs is mandatory, pad-offset 129 equals (2 * uimage_header + 0xff) define Device/netgear_ath79_nand DEVICE_VENDOR := NETGEAR diff --git a/target/linux/ath79/nand/base-files/etc/board.d/02_network b/target/linux/ath79/nand/base-files/etc/board.d/02_network index 9d7a19c2eb..36ddb5e83a 100755 --- a/target/linux/ath79/nand/base-files/etc/board.d/02_network +++ b/target/linux/ath79/nand/base-files/etc/board.d/02_network @@ -11,6 +11,11 @@ ath79_setup_interfaces() aerohive,hiveap-121) ucidef_set_interface_lan "eth0" ;; + glinet,gl-ar750s-nor|\ + glinet,gl-ar750s-nor-nand) + ucidef_add_switch "switch0" \ + "0@eth0" "2:lan:2" "3:lan:1" "1:wan" + ;; netgear,wndr4300) ucidef_add_switch "switch0" \ "0@eth0" "1:lan:4" "2:lan:3" "3:lan:2" "4:lan:1" "5:wan" diff --git a/target/linux/ath79/nand/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ath79/nand/base-files/etc/hotplug.d/firmware/11-ath10k-caldata index 433d6475dd..9305f061fe 100644 --- a/target/linux/ath79/nand/base-files/etc/hotplug.d/firmware/11-ath10k-caldata +++ b/target/linux/ath79/nand/base-files/etc/hotplug.d/firmware/11-ath10k-caldata @@ -9,6 +9,11 @@ board=$(board_name) case "$FIRMWARE" in "ath10k/cal-pci-0000:00:00.0.bin") case $board in + glinet,gl-ar750s-nor|\ + glinet,gl-ar750s-nor-nand) + caldata_extract "art" 0x5000 0x844 + ath10k_patch_mac $(macaddr_add $(mtd_get_mac_binary art 0x0) +1) + ;; zyxel,nbg6716) caldata_extract "art" 0x5000 0x844 ath10k_patch_mac $(macaddr_add $(mtd_get_mac_ascii u-boot-env ethaddr) +1) diff --git a/target/linux/ath79/nand/base-files/lib/upgrade/platform.sh b/target/linux/ath79/nand/base-files/lib/upgrade/platform.sh index 69105b1668..15d88a361e 100644 --- a/target/linux/ath79/nand/base-files/lib/upgrade/platform.sh +++ b/target/linux/ath79/nand/base-files/lib/upgrade/platform.sh @@ -18,6 +18,10 @@ platform_do_upgrade() { glinet,gl-ar300m-nor) glinet_nand_nor_do_upgrade "$1" ;; + glinet,gl-ar750s-nor|\ + glinet,gl-ar750s-nor-nand) + nand_nor_do_upgrade "$1" + ;; *) nand_do_upgrade "$1" ;;