From bd17683261e1dde1fdd4223745852de1ce8cfc89 Mon Sep 17 00:00:00 2001 From: Dirk Buchwalder Date: Sat, 1 Jan 2022 23:20:19 +0100 Subject: [PATCH] ipq807x: add QNAP 301w MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 --- package/boot/uboot-envtools/files/ipq807x | 5 + package/firmware/ipq-wifi/Makefile | 2 + .../firmware/ipq-wifi/board-qnap_301w.ipq8074 | Bin 0 -> 131172 bytes target/linux/ipq807x/Makefile | 2 +- .../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 + .../ipq807x/base-files/lib/upgrade/mmc.sh | 83 ++++ .../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(-) create mode 100644 package/firmware/ipq-wifi/board-qnap_301w.ipq8074 create mode 100644 target/linux/ipq807x/base-files/lib/upgrade/mmc.sh create mode 100644 target/linux/ipq807x/files/arch/arm64/boot/dts/qcom/ipq8072-301w.dts diff --git a/package/boot/uboot-envtools/files/ipq807x b/package/boot/uboot-envtools/files/ipq807x index 636f3344129a..3961d4124e20 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 276722808010..dbc2b4e227e4 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 0000000000000000000000000000000000000000..6b8f8b9ce8470b4d141ac5547361176cc25542fd GIT binary patch literal 131172 zcmeHw33OD~ndV=wN~HxMgea-1K!Btw2|;W(#%7ZQNCJT{k`UTAKnQHW1}rukW6Ta_ z5vzp3j^hyGCCA6z?Kn>2Gbgr5oMqBU=Je^)lS$m^EZxo|-P6;Fj|G)pe@9I5j#loWdi)u`8}DDcVPpIK8`sU7u5)cquGzMZ?2MT+?|W*^wvB7H?3lNrqNwuz zho(RHv_r2!6Nk85dUF59Pkb(M?n`;NPXD)F|F=Q^w^9GMN&mN5FO7fB&S2_c{$o_e z6vA0>T11YK-^0JHJ>-qBtQ5ys{WH@sU;pGg^7PLF$87yGKlDAkkPGjEY&c&5pZ5x$PDzY_ zWB^n&pjGVuEBTwN|8@UQ3;$kzb@h|pSA8iIdM|lv35PGvc{j&f_dNO)m!uo}g6Kt~ zmvA`#fMujRMwb}AC0xMac5yh3ysWaOp`~@*hK{pcmtMa7>X+Vn``!26|K@kT|DziQ z>55B;XGlm$h~u}5|GE)xDAxzJsSh$rBsu~yagA$`C+#W z4_T|KA%(!;AP_4)~ zv&6nt(z~8mI@RZ7oc!=53b*e*e(B0v*F!-h<71HtABgx~6Y(4b9xWmXIMj-rfP2LM zbvLHQ1$&mji8}dIDNk{wsS3~kRUmGOb3GiT=+LagT-kzeSgS1|j3`P{)U%I*u3^jLHKBew!F@4CsTO814^YFt-;N zKnFSoZvcbCq4s-&!Oub%ypHxMZ(@+rOAJgqIBL`p#^73X95aETj=>i#dNeWk=jieo z#E^DiV$cXXfFAAI!DQMo?ErQ(?tsz%c%0D2rUQfDMQ=ZB2POs~ThcKYk2?N$^g4*a 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 + + 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 d6e5d04a31ec..9e8f4796cfa1 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 000000000000..d3e788a36c57 --- /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 */ + +/dts-v1/; + +#include "ipq8074.dtsi" +#include "ipq8074-hk-cpu.dtsi" +#include "ipq8074-ess.dtsi" +#include +#include +#include + +/ { + 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 = ; + }; + + reset-button { + label = "reset"; + gpios = <&tlmm 67 GPIO_ACTIVE_LOW>; + linux,code = ; + }; + }; + + 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_system_red: led-system-red { + label = "red:system"; + gpios = <&tlmm 3 GPIO_ACTIVE_HIGH>; + color = ; + }; + + led_pwr_green: led-pwr-green { + label = "green:pwr"; + gpios = <&tlmm 4 GPIO_ACTIVE_HIGH>; + color = ; + }; + + led-wifi-green { + label = "green:wifi"; + gpios = <&tlmm 42 GPIO_ACTIVE_HIGH>; + color = ; + }; + + led-lan4-green { + label = "green:lan4"; + gpios = <&tlmm 6 GPIO_ACTIVE_HIGH>; + color = ; + }; + + led-lan4-amber { + label = "amber:lan4"; + gpios = <&tlmm 7 GPIO_ACTIVE_HIGH>; + color = ; + }; + + led-lan3-green { + label = "green:lan3"; + gpios = <&tlmm 8 GPIO_ACTIVE_HIGH>; + color = ; + }; + + led-lan3-amber { + label = "amber:lan3"; + gpios = <&tlmm 11 GPIO_ACTIVE_HIGH>; + color = ; + }; + + led-lan2-green { + label = "green:lan2"; + gpios = <&tlmm 12 GPIO_ACTIVE_HIGH>; + color = ; + }; + + led-lan2-amber { + label = "amber:lan2"; + gpios = <&tlmm 13 GPIO_ACTIVE_HIGH>; + color = ; + }; + + led-lan1-green { + label = "green:lan1"; + gpios = <&tlmm 14 GPIO_ACTIVE_HIGH>; + color = ; + }; + + led-lan1-amber { + label = "amber:lan1"; + gpios = <&tlmm 15 GPIO_ACTIVE_HIGH>; + color = ; + }; + + led-10g-1-green { + label = "green:10g_1"; + gpios = <&tlmm 54 GPIO_ACTIVE_HIGH>; + color = ; + }; + + led-10g-1-amber { + label = "amber:10g_1"; + gpios = <&tlmm 56 GPIO_ACTIVE_HIGH>; + color = ; + }; + + led-10g-2-green { + label = "green:10g_2"; + gpios = <&tlmm 51 GPIO_ACTIVE_HIGH>; + color = ; + }; + + led-10g-2-amber { + label = "amber:10g_2"; + gpios = <&tlmm 52 GPIO_ACTIVE_HIGH>; + color = ; + }; + }; +}; + +&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 95937512a95c..7bf659f80fff 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 -- 2.30.2