+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+
/dts-v1/;
#include "qca9531_glinet_gl-ar300m.dtsi"
model = "GL.iNet GL-AR300M-Lite";
};
+/delete-node/ &nand_flash;
+
// "Disable" unpopulated GMAC1
ð1 {
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+
/dts-v1/;
#include "qca9531_glinet_gl-ar300m.dtsi"
model = "GL.iNet GL-AR300M (NAND)";
};
-&spi {
- num-cs = <1>;
-
- flash@1 {
- compatible = "spinand,mt29f";
- reg = <1>;
- spi-max-frequency = <25000000>;
-
- partitions {
- compatible = "fixed-partitions";
- #address-cells = <1>;
- #size-cells = <1>;
-
- partition@0 {
- label = "kernel";
- reg = <0x000000 0x0200000>;
- };
+&nand_kernel {
+ label = "kernel";
+};
- partition@1 {
- label = "ubi";
- reg = <0x200000 0x7e00000>;
- };
- };
- };
+&nand_ubi {
+ label = "ubi";
};
compatible = "glinet,gl-ar300m-nor", "qca,qca9531";
model = "GL.iNet GL-AR300M (NOR)";
};
+
+&nor_firmware {
+ compatible = "denx,uimage";
+ label = "firmware";
+};
leds {
compatible = "gpio-leds";
- // Colors from non-Lite versions
+ // Colors for non-Lite versions
led_status: status {
label = "gl-ar300m:green:status";
&spi {
status = "okay";
- num-cs = <0>;
+
+ num-cs = <2>;
+ cs-gpios = <0>, <0>;
flash@0 {
- compatible = "winbond,w25q128", "jedec,spi-nor";
+ compatible = "jedec,spi-nor";
reg = <0>;
spi-max-frequency = <25000000>;
read-only;
};
- partition@1 {
+ partition@40000 {
label = "u-boot-env";
reg = <0x040000 0x010000>;
};
- partition@2 {
- compatible = "denx,uimage";
- label = "firmware";
+ nor_firmware: partition@50000 {
+ label = "nor_firmware";
reg = <0x050000 0xfa0000>;
};
- art: partition@3 {
+ art: partition@ff0000 {
label = "art";
reg = <0xff0000 0x010000>;
read-only;
};
};
};
+
+ nand_flash: flash@1 {
+ compatible = "spi-nand";
+ reg = <1>;
+ spi-max-frequency = <25000000>;
+
+ partitions {
+ compatible = "fixed-partitions";
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ nand_kernel: partition@0 {
+ label = "nand_kernel";
+ reg = <0x000000 0x400000>;
+ };
+
+ nand_ubi: partition@400000 {
+ label = "nand_ubi";
+ reg = <0x400000 0x7c00000>;
+ };
+ };
+ };
};
&uart {
ucidef_set_led_netdev "wan" "WAN" "$boardname:green:wan" "eth1"
ucidef_set_led_switch "lan" "LAN" "$boardname:green:lan" "switch0" "0x02"
;;
-glinet,gl-ar300m-nor)
- ucidef_set_led_netdev "lan" "LAN" "gl-ar300m:green:lan" "eth0"
- ;;
glinet,gl-ar300m-lite)
ucidef_set_led_netdev "lan" "LAN" "gl-ar300m-lite:green:lan" "eth0"
;;
endef
TARGET_DEVICES += glinet_gl-ar300m-lite
-define Device/glinet_gl-ar300m-nor
- $(Device/glinet_gl-ar300m-common-nor)
- DEVICE_MODEL := GL-AR300M
-endef
-TARGET_DEVICES += glinet_gl-ar300m-nor
-
define Device/glinet_gl-ar750
ATH_SOC := qca9531
DEVICE_VENDOR := GL.iNet
endef
TARGET_DEVICES += aerohive_hiveap-121
-define Device/glinet_gl-ar300m-nand
+define Device/glinet_gl-ar300m-common-nand
ATH_SOC := qca9531
DEVICE_VENDOR := GL.iNet
DEVICE_MODEL := GL-AR300M
+ DEVICE_PACKAGES := kmod-usb2
+ KERNEL_SIZE := 4096k
+ IMAGE_SIZE := 16000k
+ PAGESIZE := 2048
+ VID_HDR_OFFSET := 2048
+endef
+
+define Device/glinet_gl-ar300m-nand
+ $(Device/glinet_gl-ar300m-common-nand)
DEVICE_VARIANT := NAND
- DEVICE_PACKAGES := kmod-usb2 kmod-usb-storage kmod-usb-ledtrig-usbport
- KERNEL_SIZE := 2048k
BLOCKSIZE := 128k
- PAGESIZE := 2048
- VID_HDR_OFFSET := 512
- IMAGES += factory.ubi
- IMAGE/sysupgrade.bin := sysupgrade-tar
- IMAGE/factory.ubi := append-kernel | pad-to $$$$(KERNEL_SIZE) | append-ubi
+ 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-ar300m-nor
endef
TARGET_DEVICES += glinet_gl-ar300m-nand
+define Device/glinet_gl-ar300m-nor
+ $(Device/glinet_gl-ar300m-common-nand)
+ DEVICE_VARIANT := NOR
+ BLOCKSIZE := 64k
+ SUPPORTED_DEVICES += glinet,gl-ar300m-nand gl-ar300m
+endef
+TARGET_DEVICES += glinet_gl-ar300m-nor
+
# fake rootfs is mandatory, pad-offset 129 equals (2 * uimage_header + 0xff)
define Device/netgear_ath79_nand
DEVICE_VENDOR := NETGEAR
boardname="${board##*,}"
case "$board" in
-glinet,gl-ar300m-nand)
+glinet,gl-ar300m-nand|\
+glinet,gl-ar300m-nor)
ucidef_set_led_netdev "lan" "LAN" "gl-ar300m:green:lan" "eth0"
;;
netgear,wndr4300)
--- /dev/null
+#!/bin/sh /etc/rc.common
+
+# SPDX-License-Identifier: GPL-2.0
+
+START=99
+
+boot() {
+ case $(board_name) in
+ glinet,gl-ar300m-nand)
+ fw_setenv bootcount 0
+ ;;
+ esac
+}
--- /dev/null
+# SPDX-License-Identifier: GPL-2.0
+#
+# Copyright (C) 2019 Jeff Kletsky
+#
+
+glinet_using_boot_dev_switch() {
+ if [ "$(fw_printenv -n boot_dev 2>/dev/null)" = "on" ] ; then
+ >&2 echo "NOTE: boot_dev=on; use switch to control boot partition"
+ true
+ else
+ false
+ fi
+}
+
+glinet_set_next_boot_nand() {
+ mkdir -p /var/lock
+ ! glinet_using_boot_dev_switch && \
+ fw_setenv bootcount 0 && \
+ >&2 echo "Next boot set for NAND"
+}
+
+glinet_set_next_boot_nor() {
+ mkdir -p /var/lock
+ ! glinet_using_boot_dev_switch && \
+ fw_setenv bootcount 3 && \
+ >&2 echo "Next boot set for NOR"
+}
+
+glinet_nand_nor_do_upgrade() {
+ set_next_boot_nand() { glinet_set_next_boot_nand; }
+ set_next_boot_nor() { glinet_set_next_boot_nor; }
+ nand_nor_do_upgrade "$1"
+}
+
+nand_nor_do_upgrade() {
+ local upgrade_file="$1"
+
+ local pn
+ local found=""
+ local err
+
+ case "$(get_magic_long "$upgrade_file")" in
+
+ "27051956") # U-Boot Image Magic
+
+ for pn in "nor_${PART_NAME}" "$PART_NAME" ; do # firmware
+ if [ "$(find_mtd_index "$pn")" ] ; then
+ PART_NAME="$pn"
+ found="yes"
+ break
+ fi
+ done
+ if [ "$found" = "yes" ] ; then
+ >&2 echo "Running NOR upgrade"
+ default_do_upgrade "$upgrade_file"
+ # At this time, default_do_upgrade() exits on error
+ type set_next_boot_nor >/dev/null && set_next_boot_nor
+ else
+ >&2 echo "ERROR: UPGRADE FAILED: Unable to locate '$PART_NAME' or 'nor_${PART_NAME}'"
+ exit 1
+ fi
+ ;;
+
+ *) # otherwise a file that nand_do_upgrade can process
+
+ for pn in "nand_${CI_KERNPART}" "$CI_KERNPART" ; do # kernel
+ if [ "$(find_mtd_index "$pn")" ] ; then
+ CI_KERNPART="$pn"
+ break
+ fi
+ done
+ for pn in "nand_${CI_UBIPART}" "$CI_UBIPART" ; do # ubi
+ if [ "$(find_mtd_index "$pn")" ] ; then
+ CI_UBIPART="$pn"
+ break
+ fi
+ done
+ for pn in "nand_${CI_ROOTPART}" "$CI_ROOTPART" ; do #rootfs
+ if [ "$(find_mtd_index "$pn")" ] ; then
+ CI_ROOTPART="$pn"
+ break
+ fi
+ done
+ >&2 echo "Running NAND upgrade"
+ # TODO: change order when NAND upgrade offers return
+ type set_next_boot_nand >/dev/null && set_next_boot_nand
+ nand_do_upgrade "$upgrade_file"
+ ;;
+ esac
+}
-#
# Copyright (C) 2011 OpenWrt.org
-#
PART_NAME=firmware
-REQUIRE_IMAGE_METADATA=1
+REQUIRE_IMAGE_METADATA=1
platform_check_image() {
return 0
}
+RAMFS_COPY_BIN='fw_printenv fw_setenv'
+RAMFS_COPY_DATA='/etc/fw_env.config /var/lock/fw_printenv.lock'
+
platform_do_upgrade() {
local board=$(board_name)
case "$board" in
- glinet,gl-ar300m-nand)
- default_do_upgrade "$1"
+ glinet,gl-ar300m-nand|\
+ glinet,gl-ar300m-nor)
+ glinet_nand_nor_do_upgrade "$1"
;;
*)
nand_do_upgrade "$1"