[openwrt/openwrt] ipq807x: add QNAP 301w

LEDE Commits lede-commits at lists.infradead.org
Mon Jan 16 03:53:03 PST 2023


ansuel pushed a commit to openwrt/openwrt.git, branch master:
https://git.openwrt.org/bd17683261e1dde1fdd4223745852de1ce8cfc89

commit bd17683261e1dde1fdd4223745852de1ce8cfc89
Author: Dirk Buchwalder <buchwalder at posteo.de>
AuthorDate: Sat Jan 1 23:20:19 2022 +0100

    ipq807x: add QNAP 301w
    
    QNAP 301w is a AX WIFI router with 4 1G and 2 10G ports.
    
    Specifications:
    
        •     CPU: Qualcomm IPQ8072A Quad core Cortex-A53 2.2GHz
        •     RAM: 1024MB of DDR3
        •     Storage: 4GB eMMC (contains kernel and rootfs) / 8MB NOR
              (contains art and u-boot-env)
        •     Ethernet: 4x 1G RJ45 ports + 2 10G ports (Aquantia AQR113C)
        •     WLAN:
              2.4GHz: Qualcomm QCN5024 4x4 (40 MHz) 802.11b/g/n/ax 1174 Mbps PHY rate
              5GHz: Qualcomm QCN5054 4x4 (80 MHz) or 2x2 (160 MHz) 802.11a/b/g/n/ac/ax 2402 PHY rate
    
        •     LEDs:
              7 x GPIO-controlled dual color LEDs + 2 GPIO-controlled single color LEDs
    
                • Buttons: 1x soft reset / 1x WPS
                • Power: 12V DC jack
    
            A poulated serial header is onboard.
            RX/TX is working, bootwait is active, secure boot is not enabled.
    
            SSH can be activated in the stock firmware, hold WPS button til the second beep
            (yes the router has a buzzer)
            SSH is available on port 22200, login with user admin and
            password "mac address of the router".
    
            Installation Instructions:
    
                • obtain serial access (https://openwrt.org/inbox/toh/qnap/301w#serial)
                • stop auto boot
                • setenv serverip 192.168.10.1
                • setenv ipaddr 192.168.10.10
                • tftpboot the initramfs image
                  (openwrt-ipq807x-generic-qnap_301w-initramfs-fit-uImage.itb)
                • bootm
    
                • make sure that current_entry is set to "0":
                  "fw_printenv -n current_entry" should be print "0". If not,
                   do "fw_setenv current_entry 0"
                • copy openwrt-ipq807x-generic-qnap_301w-squashfs-sysupgrade.bin
                      to the device to /tmp folder
                • sysupgrade -n /tmp/openwrt-ipq807x-generic-qnap_301w-squashfs-sysupgrade.bin
                  this flashes openwrt to the first kernel and rootfs partition (mmcblk0p1 / mmcblk0p4)
                • reboot
    
            Note: this leaves the second kernel / rootfs parition untouched. So if you want
                  to go back to stock, stop u-boot autoboot, "setenv current_entry 1" ,
                   "saveenv", "bootipq".
                  Stock firmware should start from the second partition.
                  Then do a firmwareupgrade in the stock gui, that should overwrite the openwrt
                  in the first partitions
    
            Make 10G Aquantia phy's work:
                  The aquantia phy's need a firmware to work. This can either be loaded
                  in linux with a userspace tool or in u-boot.
    
                  I was not successfull to load the firmware in linux (aq-fw-download) but luckily there is
                  aq_load_fw available in u-boot. But first the right firmware needs to write
                  to the 0:ETHPHYFW mtd partition (it is empty on my device)
    
                  Grab the ethphy firmware image from:
                  https://github.com/kirdesde/nbg7815_gpl/blob/master/target/linux/ipq/ipq807x_64/prebuilt_images/AQR_ethphyfw.mbn
                  and scp that to openwrt.
    
                  Check the 0:ETHPHYFW partition number:
                  cat /proc/mtd|grep "0:ETHPHYFW", should be mtd10.
    
                  Backup the 0:ETHPHYFW partition:
                  dd if=/dev/mtd10 of=/tmp/ethphyfw.backup, scp ethphyfw.backup to a save place.
    
                  Write the new firmware image to the 0:ETHPHYFW partition:
                  "mtd erase /dev/mtd10", "mtd -n write AQR_ethphyfw.mbn /dev/mtd10".
    
                  Reboot to u-boot.
    
                  Check if aq_load_fw is working:
    
                  "aq_load_fw 0", that checks the firmware and if successfull,
                  loads iram and dram to one of the aquantia phy's.
    
                  If that worked, add the aq_load_fw to the bootcmd:
                  setenv bootcmd "aq_load_fw 0 && aq_load_fw 8 && bootipq"
    
                  "saveenv"
    
                  "reset"
    
                  Board reboots and the firmware load to both phy's should start and
                  then openwrt boots.
    
                  Check if the 10G ports work.
    
                  Note: lan port labeled "10G-2" is configured as WAN port as per default.
                  All other port are in the br-lan. This can be changed in the network config.
    
    Signed-off-by: Dirk Buchwalder <buchwalder at posteo.de>
---
 package/boot/uboot-envtools/files/ipq807x          |   5 +
 package/firmware/ipq-wifi/Makefile                 |   2 +
 package/firmware/ipq-wifi/board-qnap_301w.ipq8074  | Bin 0 -> 131172 bytes
 target/linux/ipq807x/Makefile                      |   2 +-
 .../linux/ipq807x/base-files/etc/board.d/01_leds   |   8 +
 .../ipq807x/base-files/etc/board.d/02_network      |   3 +
 .../etc/hotplug.d/firmware/11-ath11k-caldata       |   1 +
 target/linux/ipq807x/base-files/lib/upgrade/mmc.sh |  83 +++++
 .../ipq807x/base-files/lib/upgrade/platform.sh     |   5 +
 .../arch/arm64/boot/dts/qcom/ipq8072-301w.dts      | 410 +++++++++++++++++++++
 target/linux/ipq807x/image/generic.mk              |  15 +
 11 files changed, 533 insertions(+), 1 deletion(-)

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
Binary files /dev/null and b/package/firmware/ipq-wifi/board-qnap_301w.ipq8074 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 at 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 at 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 at 0 {
+		compatible ="ethernet-phy-ieee802.3-c45";
+		reg = <0>;
+		reset-gpios = <&tlmm 59 GPIO_ACTIVE_LOW>;
+	};
+
+	aqr113c_8: ethernet-phy at 8 {
+		compatible ="ethernet-phy-ieee802.3-c45";
+		reg = <8>;
+		reset-gpios = <&tlmm 44 GPIO_ACTIVE_LOW>;
+	};
+
+	qca8075_16: ethernet-phy at 16 {
+		compatible = "ethernet-phy-ieee802.3-c22";
+		reg = <16>;
+	};
+
+	qca8075_17: ethernet-phy at 17 {
+		compatible = "ethernet-phy-ieee802.3-c22";
+		reg = <17>;
+	};
+
+	qca8075_18: ethernet-phy at 18 {
+		compatible = "ethernet-phy-ieee802.3-c22";
+		reg = <18>;
+	};
+
+	qca8075_19: ethernet-phy at 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 at 0 {
+			port_id = <1>;
+			phy_address = <16>;
+		};
+		port at 1 {
+			port_id = <2>;
+			phy_address = <17>;
+		};
+		port at 2 {
+			port_id = <3>;
+			phy_address = <18>;
+		};
+		port at 3 {
+			port_id = <4>;
+			phy_address = <19>;
+		};
+		port at 4 {
+			port_id = <5>;
+			phy_address = <8>;
+			compatible = "ethernet-phy-ieee802.3-c45";
+			ethernet-phy-ieee802.3-c45;
+		};
+		port at 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 at 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




More information about the lede-commits mailing list