aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--package/boot/uboot-envtools/files/ipq807x5
-rw-r--r--package/firmware/ipq-wifi/Makefile2
-rw-r--r--package/firmware/ipq-wifi/board-qnap_301w.ipq8074bin0 -> 131172 bytes
-rw-r--r--target/linux/ipq807x/Makefile2
-rw-r--r--target/linux/ipq807x/base-files/etc/board.d/01_leds8
-rw-r--r--target/linux/ipq807x/base-files/etc/board.d/02_network3
-rw-r--r--target/linux/ipq807x/base-files/etc/hotplug.d/firmware/11-ath11k-caldata1
-rw-r--r--target/linux/ipq807x/base-files/lib/upgrade/mmc.sh83
-rw-r--r--target/linux/ipq807x/base-files/lib/upgrade/platform.sh5
-rw-r--r--target/linux/ipq807x/files/arch/arm64/boot/dts/qcom/ipq8072-301w.dts410
-rw-r--r--target/linux/ipq807x/image/generic.mk15
11 files changed, 533 insertions, 1 deletions
diff --git a/package/boot/uboot-envtools/files/ipq807x b/package/boot/uboot-envtools/files/ipq807x
index 636f334412..3961d4124e 100644
--- a/package/boot/uboot-envtools/files/ipq807x
+++ b/package/boot/uboot-envtools/files/ipq807x
@@ -22,6 +22,11 @@ xiaomi,ax3600)
[ -n "$idx2" ] && \
ubootenv_add_uci_sys_config "/dev/mtd$idx2" "0x0" "0x10000" "0x20000"
;;
+qnap,301w)
+ idx="$(find_mtd_index 0:appsblenv)"
+ [ -n "$idx" ] && \
+ ubootenv_add_uci_config "/dev/mtd$idx" "0x0" "0x20000" "0x20000" "1"
+ ;;
esac
config_load ubootenv
diff --git a/package/firmware/ipq-wifi/Makefile b/package/firmware/ipq-wifi/Makefile
index 2767228080..dbc2b4e227 100644
--- a/package/firmware/ipq-wifi/Makefile
+++ b/package/firmware/ipq-wifi/Makefile
@@ -38,6 +38,7 @@ ALLWIFIBOARDS:= \
linksys_whw03v2 \
p2w_r619ac \
pakedge_wr-1 \
+ qnap_301w \
qxwlan_e2600ac-c1 \
qxwlan_e2600ac-c2 \
redmi_ax6 \
@@ -130,6 +131,7 @@ $(eval $(call generate-ipq-wifi-package,linksys_ea8300,Linksys EA8300))
$(eval $(call generate-ipq-wifi-package,linksys_whw03v2,Linksys WHW03 V2))
$(eval $(call generate-ipq-wifi-package,p2w_r619ac,P&W R619AC))
$(eval $(call generate-ipq-wifi-package,pakedge_wr-1,Pakedge WR-1))
+$(eval $(call generate-ipq-wifi-package,qnap_301w,QNAP 301w))
$(eval $(call generate-ipq-wifi-package,qxwlan_e2600ac-c1,Qxwlan E2600AC C1))
$(eval $(call generate-ipq-wifi-package,qxwlan_e2600ac-c2,Qxwlan E2600AC C2))
$(eval $(call generate-ipq-wifi-package,redmi_ax6,Redmi AX6))
diff --git a/package/firmware/ipq-wifi/board-qnap_301w.ipq8074 b/package/firmware/ipq-wifi/board-qnap_301w.ipq8074
new file mode 100644
index 0000000000..6b8f8b9ce8
--- /dev/null
+++ b/package/firmware/ipq-wifi/board-qnap_301w.ipq8074
Binary files differ
diff --git a/target/linux/ipq807x/Makefile b/target/linux/ipq807x/Makefile
index d02256abf2..539d930ce3 100644
--- a/target/linux/ipq807x/Makefile
+++ b/target/linux/ipq807x/Makefile
@@ -3,7 +3,7 @@ include $(TOPDIR)/rules.mk
ARCH:=aarch64
BOARD:=ipq807x
BOARDNAME:=Qualcomm Atheros IPQ807x
-FEATURES:=squashfs ramdisk fpu nand rtc
+FEATURES:=squashfs ramdisk fpu nand rtc emmc
KERNELNAME:=Image dtbs
CPU_TYPE:=cortex-a53
SUBTARGETS:=generic
diff --git a/target/linux/ipq807x/base-files/etc/board.d/01_leds b/target/linux/ipq807x/base-files/etc/board.d/01_leds
index a13ddcbb08..f0a2bdd7bb 100644
--- a/target/linux/ipq807x/base-files/etc/board.d/01_leds
+++ b/target/linux/ipq807x/base-files/etc/board.d/01_leds
@@ -10,6 +10,14 @@ redmi,ax6|\
xiaomi,ax3600)
ucidef_set_led_netdev "wan" "WAN" "blue:network" "wan"
;;
+qnap,301w)
+ ucidef_set_led_netdev "lan1" "LAN1" "green:lan1" "lan1"
+ ucidef_set_led_netdev "lan2" "LAN2" "green:lan2" "lan2"
+ ucidef_set_led_netdev "lan3" "LAN3" "green:lan3" "lan3"
+ ucidef_set_led_netdev "lan4" "LAN4" "green:lan4" "lan4"
+ ucidef_set_led_netdev "10G_1" "10G_1" "green:10g_1" "10g-1"
+ ucidef_set_led_netdev "10G_2" "10G_2" "green:10g_2" "10g-2"
+ ;;
esac
board_config_flush
diff --git a/target/linux/ipq807x/base-files/etc/board.d/02_network b/target/linux/ipq807x/base-files/etc/board.d/02_network
index e3f4d4f576..a6ff418a19 100644
--- a/target/linux/ipq807x/base-files/etc/board.d/02_network
+++ b/target/linux/ipq807x/base-files/etc/board.d/02_network
@@ -14,6 +14,9 @@ ipq807x_setup_interfaces()
edimax,cax1800)
ucidef_set_interfaces_lan_wan "lan"
;;
+ qnap,301w)
+ ucidef_set_interfaces_lan_wan "lan1 lan2 lan3 lan4 10g-2" "10g-1"
+ ;;
redmi,ax6|\
xiaomi,ax3600)
ucidef_set_interfaces_lan_wan "lan1 lan2 lan3" "wan"
diff --git a/target/linux/ipq807x/base-files/etc/hotplug.d/firmware/11-ath11k-caldata b/target/linux/ipq807x/base-files/etc/hotplug.d/firmware/11-ath11k-caldata
index 7f919bafc5..fd431d07da 100644
--- a/target/linux/ipq807x/base-files/etc/hotplug.d/firmware/11-ath11k-caldata
+++ b/target/linux/ipq807x/base-files/etc/hotplug.d/firmware/11-ath11k-caldata
@@ -10,6 +10,7 @@ case "$FIRMWARE" in
"ath11k/IPQ8074/hw2.0/cal-ahb-c000000.wifi.bin")
case "$board" in
edimax,cax1800|\
+ qnap,301w|\
redmi,ax6|\
xiaomi,ax3600)
caldata_extract "0:art" 0x1000 0x20000
diff --git a/target/linux/ipq807x/base-files/lib/upgrade/mmc.sh b/target/linux/ipq807x/base-files/lib/upgrade/mmc.sh
new file mode 100644
index 0000000000..dac9ddd568
--- /dev/null
+++ b/target/linux/ipq807x/base-files/lib/upgrade/mmc.sh
@@ -0,0 +1,83 @@
+#
+# Copyright (C) 2016 lede-project.org
+#
+
+# this can be used as a generic mmc upgrade script
+# just add a device entry in platform.sh,
+# define "kernelname" and "rootfsname" and call mmc_do_upgrade
+# after the kernel and rootfs flash a loopdev (as overlay) is
+# setup on top of the rootfs partition
+# for the proper function a padded rootfs image is needed, basically
+# append "pad-to 64k" to the image definition
+# this is based on the ipq806x zyxel.sh mmc upgrade
+
+. /lib/functions.sh
+
+mmc_do_upgrade() {
+ local tar_file="$1"
+ local rootfs=
+ local kernel=
+
+ [ -z "$kernel" ] && kernel=$(find_mmc_part ${kernelname})
+ [ -z "$rootfs" ] && rootfs=$(find_mmc_part ${rootfsname})
+
+ [ -z "$kernel" ] && echo "Upgrade failed: kernel partition not found! Rebooting..." && reboot -f
+ [ -z "$rootfs" ] && echo "Upgrade failed: rootfs partition not found! Rebooting..." && reboot -f
+
+ mmc_do_flash $tar_file $kernel $rootfs
+
+ return 0
+}
+
+mmc_do_flash() {
+ local tar_file=$1
+ local kernel=$2
+ local rootfs=$3
+
+ # keep sure its unbound
+ losetup --detach-all || {
+ echo Failed to detach all loop devices. Skip this try.
+ reboot -f
+ }
+
+ # use the first found directory in the tar archive
+ local board_dir=$(tar tf $tar_file | grep -m 1 '^sysupgrade-.*/$')
+ board_dir=${board_dir%/}
+
+ echo "flashing kernel to $kernel"
+ tar xf $tar_file ${board_dir}/kernel -O >$kernel
+
+ echo "flashing rootfs to ${rootfs}"
+ tar xf $tar_file ${board_dir}/root -O >"${rootfs}"
+
+ # a padded rootfs is needed for overlay fs creation
+ local offset=$(tar xf $tar_file ${board_dir}/root -O | wc -c)
+ [ $offset -lt 65536 ] && {
+ echo Wrong size for rootfs: $offset
+ sleep 10
+ reboot -f
+ }
+
+ # Mount loop for rootfs_data
+ local loopdev="$(losetup -f)"
+ losetup -o $offset $loopdev $rootfs || {
+ echo "Failed to mount looped rootfs_data."
+ sleep 10
+ reboot -f
+ }
+
+ echo "Format new rootfs_data at position ${offset}."
+ mkfs.ext4 -F -L rootfs_data $loopdev
+ mkdir /tmp/new_root
+ mount -t ext4 $loopdev /tmp/new_root && {
+ echo "Saving config to rootfs_data at position ${offset}."
+ cp -v "$UPGRADE_BACKUP" "/tmp/new_root/$BACKUP_FILE"
+ umount /tmp/new_root
+ }
+
+ # Cleanup
+ losetup -d $loopdev >/dev/null 2>&1
+ sync
+ umount -a
+ reboot -f
+}
diff --git a/target/linux/ipq807x/base-files/lib/upgrade/platform.sh b/target/linux/ipq807x/base-files/lib/upgrade/platform.sh
index d6e5d04a31..9e8f4796cf 100644
--- a/target/linux/ipq807x/base-files/lib/upgrade/platform.sh
+++ b/target/linux/ipq807x/base-files/lib/upgrade/platform.sh
@@ -45,6 +45,11 @@ platform_do_upgrade() {
edimax,cax1800)
nand_do_upgrade "$1"
;;
+ qnap,301w)
+ kernelname="0:HLOS"
+ rootfsname="rootfs"
+ mmc_do_upgrade "$1"
+ ;;
redmi,ax6|\
xiaomi,ax3600)
# Make sure that UART is enabled
diff --git a/target/linux/ipq807x/files/arch/arm64/boot/dts/qcom/ipq8072-301w.dts b/target/linux/ipq807x/files/arch/arm64/boot/dts/qcom/ipq8072-301w.dts
new file mode 100644
index 0000000000..d3e788a36c
--- /dev/null
+++ b/target/linux/ipq807x/files/arch/arm64/boot/dts/qcom/ipq8072-301w.dts
@@ -0,0 +1,410 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+/* Copyright (c) 2021, Dirk Buchwalder <buchwalder@posteo.de> */
+
+/dts-v1/;
+
+#include "ipq8074.dtsi"
+#include "ipq8074-hk-cpu.dtsi"
+#include "ipq8074-ess.dtsi"
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/leds/common.h>
+
+/ {
+ model = "QNAP 301w";
+ compatible = "qnap,301w", "qcom,ipq8074";
+
+ aliases {
+ serial0 = &blsp1_uart5;
+ /*
+ * Aliases as required by u-boot
+ * to patch MAC addresses
+ */
+ led-boot = &led_system_red;
+ led-failsafe = &led_system_red;
+ led-running = &led_pwr_green;
+ led-upgrade = &led_system_red;
+ ethernet0 = &dp1;
+ ethernet1 = &dp2;
+ ethernet2 = &dp3;
+ ethernet3 = &dp4;
+ ethernet4 = &dp5;
+ ethernet5 = &dp6_syn;
+ label-mac-device = &dp1;
+ };
+
+ chosen {
+ stdout-path = "serial0:115200n8";
+ };
+
+ keys {
+ compatible = "gpio-keys";
+ pinctrl-0 = <&button_pins>;
+ pinctrl-names = "default";
+
+ wps-button {
+ label = "wps";
+ gpios = <&tlmm 57 GPIO_ACTIVE_LOW>;
+ linux,code = <KEY_WPS_BUTTON>;
+ };
+
+ reset-button {
+ label = "reset";
+ gpios = <&tlmm 67 GPIO_ACTIVE_LOW>;
+ linux,code = <KEY_RESTART>;
+ };
+ };
+
+ leds {
+ compatible = "gpio-leds";
+ pinctrl-0 = <&leds_pins>;
+ pinctrl-names = "default";
+
+ led_system_green: led-system-green {
+ label = "green:system";
+ gpios = <&tlmm 1 GPIO_ACTIVE_HIGH>;
+ color = <LED_COLOR_ID_GREEN>;
+ };
+
+ led_system_red: led-system-red {
+ label = "red:system";
+ gpios = <&tlmm 3 GPIO_ACTIVE_HIGH>;
+ color = <LED_COLOR_ID_RED>;
+ };
+
+ led_pwr_green: led-pwr-green {
+ label = "green:pwr";
+ gpios = <&tlmm 4 GPIO_ACTIVE_HIGH>;
+ color = <LED_COLOR_ID_GREEN>;
+ };
+
+ led-wifi-green {
+ label = "green:wifi";
+ gpios = <&tlmm 42 GPIO_ACTIVE_HIGH>;
+ color = <LED_COLOR_ID_GREEN>;
+ };
+
+ led-lan4-green {
+ label = "green:lan4";
+ gpios = <&tlmm 6 GPIO_ACTIVE_HIGH>;
+ color = <LED_COLOR_ID_GREEN>;
+ };
+
+ led-lan4-amber {
+ label = "amber:lan4";
+ gpios = <&tlmm 7 GPIO_ACTIVE_HIGH>;
+ color = <LED_COLOR_ID_AMBER>;
+ };
+
+ led-lan3-green {
+ label = "green:lan3";
+ gpios = <&tlmm 8 GPIO_ACTIVE_HIGH>;
+ color = <LED_COLOR_ID_GREEN>;
+ };
+
+ led-lan3-amber {
+ label = "amber:lan3";
+ gpios = <&tlmm 11 GPIO_ACTIVE_HIGH>;
+ color = <LED_COLOR_ID_AMBER>;
+ };
+
+ led-lan2-green {
+ label = "green:lan2";
+ gpios = <&tlmm 12 GPIO_ACTIVE_HIGH>;
+ color = <LED_COLOR_ID_GREEN>;
+ };
+
+ led-lan2-amber {
+ label = "amber:lan2";
+ gpios = <&tlmm 13 GPIO_ACTIVE_HIGH>;
+ color = <LED_COLOR_ID_AMBER>;
+ };
+
+ led-lan1-green {
+ label = "green:lan1";
+ gpios = <&tlmm 14 GPIO_ACTIVE_HIGH>;
+ color = <LED_COLOR_ID_GREEN>;
+ };
+
+ led-lan1-amber {
+ label = "amber:lan1";
+ gpios = <&tlmm 15 GPIO_ACTIVE_HIGH>;
+ color = <LED_COLOR_ID_AMBER>;
+ };
+
+ led-10g-1-green {
+ label = "green:10g_1";
+ gpios = <&tlmm 54 GPIO_ACTIVE_HIGH>;
+ color = <LED_COLOR_ID_GREEN>;
+ };
+
+ led-10g-1-amber {
+ label = "amber:10g_1";
+ gpios = <&tlmm 56 GPIO_ACTIVE_HIGH>;
+ color = <LED_COLOR_ID_AMBER>;
+ };
+
+ led-10g-2-green {
+ label = "green:10g_2";
+ gpios = <&tlmm 51 GPIO_ACTIVE_HIGH>;
+ color = <LED_COLOR_ID_GREEN>;
+ };
+
+ led-10g-2-amber {
+ label = "amber:10g_2";
+ gpios = <&tlmm 52 GPIO_ACTIVE_HIGH>;
+ color = <LED_COLOR_ID_AMBER>;
+ };
+ };
+};
+
+&tlmm {
+
+ mdio_pins: mdio-state {
+ mdc-pins {
+ pins = "gpio68";
+ function = "mdc";
+ drive-strength = <8>;
+ bias-pull-up;
+ };
+
+ mdio-pins {
+ pins = "gpio69";
+ function = "mdio";
+ drive-strength = <8>;
+ bias-pull-up;
+ };
+ };
+
+ button_pins: button-state {
+ wps-pins {
+ pins = "gpio57";
+ function = "gpio";
+ drive-strength = <8>;
+ bias-pull-up;
+ };
+
+ rst-pins {
+ pins = "gpio67";
+ function = "gpio";
+ drive-strength = <8>;
+ bias-pull-up;
+ };
+ };
+
+ leds_pins: leds-state {
+ pins = "gpio1", "gpio3", "gpio4", "gpio6", "gpio7", "gpio8",
+ "gpio11", "gpio12", "gpio13", "gpio14", "gpio15", "gpio42",
+ "gpio51", "gpio52", "gpio54", "gpio56";
+ function = "gpio";
+ drive-strength = <8>;
+ bias-pull-down;
+ };
+};
+
+&blsp1_uart5 {
+ status = "okay";
+};
+
+&prng {
+ status = "okay";
+};
+
+&ssphy_0 {
+ status = "okay";
+};
+
+&qusb_phy_0 {
+ status = "okay";
+};
+
+&ssphy_1 {
+ status = "okay";
+};
+
+&qusb_phy_1 {
+ status = "okay";
+};
+
+&usb_0 {
+ status = "okay";
+};
+
+&usb_1 {
+ status = "okay";
+};
+
+&cryptobam {
+ status = "okay";
+};
+
+&crypto {
+ status = "okay";
+};
+
+&qpic_bam {
+ status = "okay";
+};
+
+&blsp1_spi1 { /* BLSP1 QUP1 */
+ pinctrl-0 = <&spi_0_pins>;
+ pinctrl-names = "default";
+ cs-gpios = <0>;
+ status = "okay";
+
+ flash@0 {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ reg = <0>;
+ compatible = "jedec,spi-nor";
+ spi-max-frequency = <50000000>;
+
+ partitions {
+ compatible = "qcom,smem-part";
+ };
+ };
+};
+
+&mdio {
+ status = "okay";
+
+ pinctrl-0 = <&mdio_pins>;
+ pinctrl-names = "default";
+ reset-gpios = <&tlmm 37 GPIO_ACTIVE_LOW>;
+
+ aqr113c_0: ethernet-phy@0 {
+ compatible ="ethernet-phy-ieee802.3-c45";
+ reg = <0>;
+ reset-gpios = <&tlmm 59 GPIO_ACTIVE_LOW>;
+ };
+
+ aqr113c_8: ethernet-phy@8 {
+ compatible ="ethernet-phy-ieee802.3-c45";
+ reg = <8>;
+ reset-gpios = <&tlmm 44 GPIO_ACTIVE_LOW>;
+ };
+
+ qca8075_16: ethernet-phy@16 {
+ compatible = "ethernet-phy-ieee802.3-c22";
+ reg = <16>;
+ };
+
+ qca8075_17: ethernet-phy@17 {
+ compatible = "ethernet-phy-ieee802.3-c22";
+ reg = <17>;
+ };
+
+ qca8075_18: ethernet-phy@18 {
+ compatible = "ethernet-phy-ieee802.3-c22";
+ reg = <18>;
+ };
+
+ qca8075_19: ethernet-phy@19 {
+ compatible = "ethernet-phy-ieee802.3-c22";
+ reg = <19>;
+ };
+};
+
+&sdhc_1 {
+ status = "okay";
+
+ /* According to the stock dts from the QNAP gpl drop
+ * the emmc has a problem with the hs400 > hs200 speed switch.
+ * Therefore remove the mmc-hs400-1_8v property
+ */
+ /delete-property/ mmc-hs400-1_8v;
+ mmc-hs200-1_8v;
+ mmc-ddr-1_8v;
+ vqmmc-supply = <&l11>;
+};
+
+&switch {
+ status = "okay";
+
+ switch_cpu_bmp = <0x1>; /* cpu port bitmap */
+ switch_lan_bmp = <0x3e>; /* lan port bitmap */
+ switch_wan_bmp = <0xc0>; /* wan port bitmap */
+ switch_mac_mode = <0xb>; /* mac mode for uniphy instance0*/
+ switch_mac_mode1 = <0xd>; /* mac mode for uniphy instance1*/
+ switch_mac_mode2 = <0xd>; /* mac mode for uniphy instance2*/
+ bm_tick_mode = <0>; /* bm tick mode */
+ tm_tick_mode = <0>; /* tm tick mode */
+
+ qcom,port_phyinfo {
+ port@0 {
+ port_id = <1>;
+ phy_address = <16>;
+ };
+ port@1 {
+ port_id = <2>;
+ phy_address = <17>;
+ };
+ port@2 {
+ port_id = <3>;
+ phy_address = <18>;
+ };
+ port@3 {
+ port_id = <4>;
+ phy_address = <19>;
+ };
+ port@4 {
+ port_id = <5>;
+ phy_address = <8>;
+ compatible = "ethernet-phy-ieee802.3-c45";
+ ethernet-phy-ieee802.3-c45;
+ };
+ port@5 {
+ port_id = <6>;
+ phy_address = <0>;
+ compatible = "ethernet-phy-ieee802.3-c45";
+ ethernet-phy-ieee802.3-c45;
+ };
+ };
+};
+
+&edma {
+ status = "okay";
+};
+
+&dp1 {
+ status = "okay";
+ phy-handle = <&qca8075_16>;
+ label = "lan4";
+};
+
+&dp2 {
+ status = "okay";
+ phy-handle = <&qca8075_17>;
+ label = "lan3";
+};
+
+&dp3 {
+ status = "okay";
+ phy-handle = <&qca8075_18>;
+ label = "lan2";
+};
+
+&dp4 {
+ status = "okay";
+ phy-handle = <&qca8075_19>;
+ label = "lan1";
+};
+
+&dp5 {
+ status = "okay";
+ qcom,mactype = <1>;
+ phy-handle = <&aqr113c_8>;
+ label = "10g-1";
+};
+
+&dp6_syn {
+ status = "okay";
+ phy-handle = <&aqr113c_0>;
+ label = "10g-2";
+};
+
+&wifi {
+ status = "okay";
+
+ qcom,ath11k-calibration-variant = "QNAP-301w";
+};
diff --git a/target/linux/ipq807x/image/generic.mk b/target/linux/ipq807x/image/generic.mk
index 95937512a9..7bf659f80f 100644
--- a/target/linux/ipq807x/image/generic.mk
+++ b/target/linux/ipq807x/image/generic.mk
@@ -30,6 +30,21 @@ define Device/edimax_cax1800
endef
TARGET_DEVICES += edimax_cax1800
+define Device/qnap_301w
+ $(call Device/FitImage)
+ DEVICE_VENDOR := QNAP
+ DEVICE_MODEL := 301w
+ DEVICE_DTS_CONFIG := config@hk01
+ KERNEL_SIZE := 16384k
+ BLOCKSIZE := 512k
+ SOC := ipq8072
+ IMAGES += factory.bin sysupgrade.bin
+ IMAGE/factory.bin := append-rootfs | pad-rootfs | pad-to 64k
+ IMAGE/sysupgrade.bin/squashfs := append-rootfs | pad-to 64k | sysupgrade-tar rootfs=$$$$@ | append-metadata
+ DEVICE_PACKAGES := ipq-wifi-qnap_301w e2fsprogs kmod-fs-ext4 losetup
+endef
+TARGET_DEVICES += qnap_301w
+
define Device/redmi_ax6
$(call Device/xiaomi_ax3600)
DEVICE_VENDOR := Redmi