diff mbox series

ath79: add support for Dell SonicPoint ACe APL26-0AE

Message ID 20240413140513.114036-1-tmn505@terefe.re
State Superseded
Headers show
Series ath79: add support for Dell SonicPoint ACe APL26-0AE | expand

Commit Message

Tomasz Maciej Nowak April 13, 2024, 2:05 p.m. UTC
From: Tomasz Maciej Nowak <tmn505@gmail.com>

Dell/SonicWall APL26-0AE (marketed as SonicPoint ACe) is a dual band
wireless access point.

Specification
SoC: QualcommAtheros QCA9550
RAM: 256 MB DDR2
Flash: 32 MB SPI NOR
WIFI: 2.4 GHz 3T3R integrated
      5 GHz 3T3R QCA9890 oversized Mini PCIe card
Ethernet: 2x 10/100/1000 Mbps QCA8334
          port labeled lan1 is PoE capable (802.3at)
USB: 1x 2.0
LEDs: 3x GPIO controlled
Buttons: 2x GPIO controlled
Serial: RJ-45 port, SonicWall pinout
        baud: 115200, parity: none, flow control: none

Before flashing, be sure to have a copy of factory firmware, in case You
wish to revert to original firmware.
All described procedures were done in following environment:
ROM Version: SonicROM (U-Boot) 8.0.0.0-11o
SafeMode Firmware Version: SonicOS 8.0.0.0-14o
Firmware Version: SonicOS 9.0.1.0
In case of other versions, following installation instructions might be
ineffective.

Installation
1. Prepare TFTP server with OpenWrt sysupgrade image and rename that
   image to "sp_fw.bin".
2. Connect to one of LAN ports.
3. Connect to serial port.
4. Hold the reset button (small through hole on side of the unit),
   power on the device and when prompted to stop autoboot, hit any key.
   The held button can now be released.
5. Alter U-Boot environment with following commands:
    setenv bootcmd bootm 0x9F510000
    saveenv
6. Adjust "ipaddr" (access point) and "serverip" (TFTP server) addresses
   in U-Boot environment, then run following command:
    run lf
7. After successful flashing, execute:
    boot
8. The access point will boot to OpenWrt. Wait few minutes, until the
    wrench LED will stop blinking, then it's ready for configuration.

Known issues
Initramfs image can't be bigger than specified kernel size, otherwise
bootloader will throw LZMA decompressing error. Switching to lzma-loader
should workaround that.
This device has Winbond 25Q256FVFG and doesn't have reliable reset, which
causes hang on reboot, thus broken-flash-reset needs to be added. This
property addition causes dispaly of "scary" warning on each boot, take
this warnig into consideration.

Signed-off-by: Tomasz Maciej Nowak <tmn505@gmail.com>
---
 package/boot/uboot-envtools/files/ath79       |   3 +
 .../ath79/dts/qca9550_dell_apl26-0ae.dts      | 246 ++++++++++++++++++
 .../generic/base-files/etc/board.d/01_leds    |   4 +
 .../generic/base-files/etc/board.d/02_network |   4 +
 target/linux/ath79/image/generic.mk           |  16 ++
 5 files changed, 273 insertions(+)
 create mode 100644 target/linux/ath79/dts/qca9550_dell_apl26-0ae.dts

Comments

Tomasz Maciej Nowak April 13, 2024, 2:19 p.m. UTC | #1
W dniu 13.04.2024 o 16:05, Tomasz Maciej Nowak pisze:
> From: Tomasz Maciej Nowak <tmn505@gmail.com>
> 
> Dell/SonicWall APL26-0AE (marketed as SonicPoint ACe) is a dual band
> wireless access point.
> 
> Specification
> SoC: QualcommAtheros QCA9550
> RAM: 256 MB DDR2
> Flash: 32 MB SPI NOR
> WIFI: 2.4 GHz 3T3R integrated
>       5 GHz 3T3R QCA9890 oversized Mini PCIe card
> Ethernet: 2x 10/100/1000 Mbps QCA8334
>           port labeled lan1 is PoE capable (802.3at)
> USB: 1x 2.0
> LEDs: 3x GPIO controlled

Ooops, forgot to update description should be:
LEDs: 6x which 5 are GPIO controlled, an two of them are dual color

Please replace that in the commit message
.
> Buttons: 2x GPIO controlled
> Serial: RJ-45 port, SonicWall pinout
>         baud: 115200, parity: none, flow control: none
> 
> Before flashing, be sure to have a copy of factory firmware, in case You
> wish to revert to original firmware.
> All described procedures were done in following environment:
> ROM Version: SonicROM (U-Boot) 8.0.0.0-11o
> SafeMode Firmware Version: SonicOS 8.0.0.0-14o
> Firmware Version: SonicOS 9.0.1.0
> In case of other versions, following installation instructions might be
> ineffective.
> 
> Installation
> 1. Prepare TFTP server with OpenWrt sysupgrade image and rename that
>    image to "sp_fw.bin".
> 2. Connect to one of LAN ports.
> 3. Connect to serial port.
> 4. Hold the reset button (small through hole on side of the unit),
>    power on the device and when prompted to stop autoboot, hit any key.
>    The held button can now be released.
> 5. Alter U-Boot environment with following commands:
>     setenv bootcmd bootm 0x9F510000
>     saveenv
> 6. Adjust "ipaddr" (access point) and "serverip" (TFTP server) addresses
>    in U-Boot environment, then run following command:
>     run lf
> 7. After successful flashing, execute:
>     boot
> 8. The access point will boot to OpenWrt. Wait few minutes, until the
>     wrench LED will stop blinking, then it's ready for configuration.
> 
> Known issues
> Initramfs image can't be bigger than specified kernel size, otherwise
> bootloader will throw LZMA decompressing error. Switching to lzma-loader
> should workaround that.
> This device has Winbond 25Q256FVFG and doesn't have reliable reset, which
> causes hang on reboot, thus broken-flash-reset needs to be added. This
> property addition causes dispaly of "scary" warning on each boot, take
> this warnig into consideration.
> 
> Signed-off-by: Tomasz Maciej Nowak <tmn505@gmail.com>
> ---
>  package/boot/uboot-envtools/files/ath79       |   3 +
>  .../ath79/dts/qca9550_dell_apl26-0ae.dts      | 246 ++++++++++++++++++
>  .../generic/base-files/etc/board.d/01_leds    |   4 +
>  .../generic/base-files/etc/board.d/02_network |   4 +
>  target/linux/ath79/image/generic.mk           |  16 ++
>  5 files changed, 273 insertions(+)
>  create mode 100644 target/linux/ath79/dts/qca9550_dell_apl26-0ae.dts
> 
> diff --git a/package/boot/uboot-envtools/files/ath79 b/package/boot/uboot-envtools/files/ath79
> index 567bf9824ddc..2c97e61498e9 100644
> --- a/package/boot/uboot-envtools/files/ath79
> +++ b/package/boot/uboot-envtools/files/ath79
> @@ -117,6 +117,9 @@ buffalo,wzr-hp-g300nh-s|\
>  linksys,ea4500-v3)
>  	ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x20000" "0x20000"
>  	;;
> +dell,apl26-0ae)
> +	ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x40000" "0x10000"
> +	;;
>  domywifi,dw33d)
>  	ubootenv_add_uci_config "/dev/mtd4" "0x0" "0x10000" "0x10000"
>  	;;
> diff --git a/target/linux/ath79/dts/qca9550_dell_apl26-0ae.dts b/target/linux/ath79/dts/qca9550_dell_apl26-0ae.dts
> new file mode 100644
> index 000000000000..2f243e027471
> --- /dev/null
> +++ b/target/linux/ath79/dts/qca9550_dell_apl26-0ae.dts
> @@ -0,0 +1,246 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
> +
> +#include <dt-bindings/gpio/gpio.h>
> +#include <dt-bindings/input/input.h>
> +#include <dt-bindings/leds/common.h>
> +
> +#include "qca955x.dtsi"
> +
> +/ {
> +	model = "Dell SonicPoint ACe (APL26-0AE)";
> +	compatible = "dell,apl26-0ae", "qca,qca9550", "qca,qca9558";
> +
> +	aliases {
> +		label-mac-device = &eth0;
> +		led-boot = &led_wrench;
> +		led-failsafe = &led_wrench;
> +		led-upgrade = &led_wrench;
> +	};
> +
> +	keys {
> +		compatible = "gpio-keys";
> +
> +		button-reset {
> +			label = "reset";
> +			gpios = <&gpio 21 GPIO_ACTIVE_LOW>;
> +			linux,code = <KEY_RESTART>;
> +		};
> +
> +		/* Accessible only after disassembling the casing */
> +		button-service {
> +			label = "service";
> +			gpios = <&gpio 22 GPIO_ACTIVE_LOW>;
> +			linux,code = <KEY_POWER>;
> +		};
> +	};
> +
> +	leds {
> +		compatible = "gpio-leds";
> +		pinctrl-names = "default";
> +		pinctrl-0 = <&jtag_disable_pins>;
> +
> +		led-lan1-amber {
> +			color = <LED_COLOR_ID_AMBER>;
> +			function = LED_FUNCTION_LAN;
> +			function-enumerator = <1>;
> +			gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		led-lan1-green {
> +			color = <LED_COLOR_ID_GREEN>;
> +			function = LED_FUNCTION_LAN;
> +			function-enumerator = <1>;
> +			gpios = <&gpio 3 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		led-lan2-amber {
> +			color = <LED_COLOR_ID_AMBER>;
> +			function = LED_FUNCTION_LAN;
> +			function-enumerator = <2>;
> +			gpios = <&gpio 17 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		led-lan2-green {
> +			color = <LED_COLOR_ID_GREEN>;
> +			function = LED_FUNCTION_LAN;
> +			function-enumerator = <2>;
> +			gpios = <&gpio 14 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		led-wlan2g {
> +			color = <LED_COLOR_ID_GREEN>;
> +			function = LED_FUNCTION_WLAN_2GHZ;
> +			linux,default-trigger = "phy1tpt";
> +			gpios = <&gpio 1 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		led-wlan5g {
> +			color = <LED_COLOR_ID_GREEN>;
> +			function = LED_FUNCTION_WLAN_5GHZ;
> +			linux,default-trigger = "phy0tpt";
> +			gpios = <&gpio 2 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		led_wrench: led-wrench {
> +			color = <LED_COLOR_ID_AMBER>;
> +			function = LED_FUNCTION_STATUS;
> +			gpios = <&gpio 0 GPIO_ACTIVE_LOW>;
> +		};
> +	};
> +};
> +
> +&eth0 {
> +	status = "okay";
> +
> +	nvmem-cells = <&macaddr_sysinfo_50 0>;
> +	nvmem-cell-names = "mac-address";
> +	phy-handle = <&phy0>;
> +	pll-data = <0xa6000000 0x00000101 0x00001616>;
> +};
> +
> +&eth1 {
> +	status = "okay";
> +
> +	nvmem-cells = <&macaddr_sysinfo_50 1>;
> +	nvmem-cell-names = "mac-address";
> +	pll-data = <0x03000101 0x00000101 0x00001616>;
> +
> +	fixed-link {
> +		speed = <1000>;
> +		full-duplex;
> +	};
> +};
> +
> +&mdio0 {
> +	status = "okay";
> +
> +	phy0: ethernet-phy@0 {
> +		reg = <0>;
> +
> +		qca,ar8327-initvals = <
> +			0x04 0x07680000 /* PORT0 PAD MODE CTRL */
> +			0x0c 0x00000080 /* PORT6 PAD MODE CTRL */
> +			0x10 0x40000000 /* POWER_ON_STRAP */
> +			0x50 0xffb7c405 /* LED0 CTRL */
> +			0x54 0xffb7c305 /* LED1 CTRL */
> +			0x58 0xffb7c033 /* LED2 CTRL */
> +			0x5c 0x03ffff00 /* LED3 CTRL */
> +			0x7c 0x0000007e /* PORT0_STATUS */
> +			0x94 0x0000007e /* PORT6_STATUS */
> +		>;
> +	};
> +};
> +
> +&pcie0 {
> +	status = "okay";
> +
> +	wifi@0,0 {
> +		compatible = "qcom,ath10k";
> +		reg = <0x0000 0 0 0 0>;
> +
> +		/* OEM overwrites EEPROM stored adress and so do we */
> +		nvmem-cells = <&macaddr_sysinfo_50 2>;
> +		nvmem-cell-names = "mac-address";
> +	};
> +};
> +
> +&spi {
> +	status = "okay";
> +
> +	flash@0 {
> +		compatible = "jedec,spi-nor";
> +		reg = <0>;
> +		spi-max-frequency = <25000000>;
> +		broken-flash-reset;
> +
> +		partitions {
> +			compatible = "fixed-partitions";
> +			#address-cells = <1>;
> +			#size-cells = <1>;
> +
> +			partition@0 {
> +				label = "u-boot";
> +				reg = <0x0000000 0x0080000>;
> +				read-only;
> +			};
> +
> +			partition@80000 {
> +				label = "u-boot-env";
> +				reg = <0x0080000 0x0040000>;
> +			};
> +
> +			partition@c0000 {
> +				label = "sysinfo";
> +				reg = <0x00c0000 0x0040000>;
> +				read-only;
> +
> +				nvmem-layout {
> +					compatible = "fixed-layout";
> +					#address-cells = <1>;
> +					#size-cells = <1>;
> +
> +					macaddr_sysinfo_50: macaddr@50 {
> +						compatible = "mac-base";
> +						reg = <0x50 0x6>;
> +						#nvmem-cell-cells = <1>;
> +					};
> +				};
> +			};
> +
> +			partition@100000 {
> +				label = "art";
> +				reg = <0x0100000 0x0010000>;
> +				read-only;
> +
> +				nvmem-layout {
> +					compatible = "fixed-layout";
> +					#address-cells = <1>;
> +					#size-cells = <1>;
> +
> +					cal_art_1000: calibration@1000 {
> +						reg = <0x1000 0x440>;
> +					};
> +				};
> +			};
> +
> +			partition@110000 {
> +				label = "safemode";
> +				reg = <0x0110000 0x0400000>;
> +				read-only;
> +			};
> +
> +			partition@510000 {
> +				label = "firmware";
> +				reg = <0x0510000 0x1400000>;
> +				compatible = "denx,uimage";
> +			};
> +
> +			partition@1910000 {
> +				label = "config";
> +				reg = <0x1910000 0x0600000>;
> +				read-only;
> +			};
> +
> +			partition@1f10000 {
> +				label = "log";
> +				reg = <0x1f10000 0x00f0000>;
> +				read-only;
> +			};
> +		};
> +	};
> +};
> +
> +&usb_phy0 {
> +	status = "okay";
> +};
> +
> +&usb0 {
> +	status = "okay";
> +};
> +
> +&wmac {
> +	status = "okay";
> +
> +	nvmem-cells = <&macaddr_sysinfo_50 10>, <&cal_art_1000>;
> +	nvmem-cell-names = "mac-address", "calibration";
> +};
> diff --git a/target/linux/ath79/generic/base-files/etc/board.d/01_leds b/target/linux/ath79/generic/base-files/etc/board.d/01_leds
> index 297485587007..c7da56b780c6 100644
> --- a/target/linux/ath79/generic/base-files/etc/board.d/01_leds
> +++ b/target/linux/ath79/generic/base-files/etc/board.d/01_leds
> @@ -227,6 +227,10 @@ compex,wpj531-16m)
>  	ucidef_set_led_rssi "sig3" "SIG3" "green:sig3" "wlan0" "65" "100"
>  	ucidef_set_led_rssi "sig4" "SIG4" "green:sig4" "wlan0" "50" "100"
>  	;;
> +dell,apl26-0ae)
> +	ucidef_set_led_switch "lan1" "LAN1" "amber:lan-1" "switch0" "0x04"
> +	ucidef_set_led_switch "lan2" "LAN2" "amber:lan-2" "switch0" "0x08"
> +	;;
>  devolo,dlan-pro-1200plus-ac|\
>  devolo,magic-2-wifi)
>  	ucidef_set_led_netdev "plcw" "dLAN" "white:dlan" "eth0.1" "rx"
> 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 6823c333b6e3..2d2385a099ad 100644
> --- a/target/linux/ath79/generic/base-files/etc/board.d/02_network
> +++ b/target/linux/ath79/generic/base-files/etc/board.d/02_network
> @@ -287,6 +287,10 @@ ath79_setup_interfaces()
>  		ucidef_add_switch "switch0" \
>  			"1:wan" "5:lan" "6@eth0"
>  		;;
> +	dell,apl26-0ae)
> +		ucidef_add_switch "switch0" \
> +			"0@eth0" "2:lan:1" "3:lan:2" "6@eth1"
> +		;;
>  	devolo,dlan-pro-1200plus-ac|\
>  	devolo,magic-2-wifi)
>  		ucidef_add_switch "switch0" \
> diff --git a/target/linux/ath79/image/generic.mk b/target/linux/ath79/image/generic.mk
> index 502fdc2ed465..11e25e6afc3b 100644
> --- a/target/linux/ath79/image/generic.mk
> +++ b/target/linux/ath79/image/generic.mk
> @@ -924,6 +924,22 @@ define Device/compex_wpj563
>  endef
>  TARGET_DEVICES += compex_wpj563
>  
> +define Device/dell_apl26-0ae
> +  SOC := qca9550
> +  DEVICE_VENDOR := Dell
> +  DEVICE_MODEL := SonicPoint
> +  DEVICE_VARIANT := ACe (APL26-0AE)
> +  DEVICE_ALT0_VENDOR := SonicWall
> +  DEVICE_ALT0_MODEL := SonicPoint
> +  DEVICE_ALT0_VARIANT := ACe (APL26-0AE)
> +  DEVICE_PACKAGES := ath10k-firmware-qca988x-ct kmod-ath10k-ct kmod-usb2
> +  KERNEL_SIZE := 5952k
> +  IMAGE_SIZE := 20480k
> +  IMAGE/sysupgrade.bin = append-kernel | pad-to $$$$(BLOCKSIZE) | \
> +	append-rootfs | pad-rootfs | check-size | append-metadata
> +endef
> +TARGET_DEVICES += dell_apl26-0ae
> +
>  define Device/devolo_dlan-pro-1200plus-ac
>    SOC := ar9344
>    DEVICE_VENDOR := devolo
Paul Donald April 15, 2024, 12:32 p.m. UTC | #2
>> 6. Adjust "ipaddr" (access point) and "serverip" (TFTP server) addresses
Might be an idea to explicitly document these IPs so that dedicated users can already set their gear to those IPs and just smash enter
Tomasz Maciej Nowak April 16, 2024, 1:54 p.m. UTC | #3
W dniu 15.04.2024 o 14:32, Paul D pisze:
> 
>>> 6. Adjust "ipaddr" (access point) and "serverip" (TFTP server) addresses
> Might be an idea to explicitly document these IPs so that dedicated users can already set their gear to those IPs and just smash enter

Will add them in v2, but given the addresses that are set by default
(192.168.1.1 for AP) one might find it simpler to adjust them single time in
U-Boot environment.
diff mbox series

Patch

diff --git a/package/boot/uboot-envtools/files/ath79 b/package/boot/uboot-envtools/files/ath79
index 567bf9824ddc..2c97e61498e9 100644
--- a/package/boot/uboot-envtools/files/ath79
+++ b/package/boot/uboot-envtools/files/ath79
@@ -117,6 +117,9 @@  buffalo,wzr-hp-g300nh-s|\
 linksys,ea4500-v3)
 	ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x20000" "0x20000"
 	;;
+dell,apl26-0ae)
+	ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x40000" "0x10000"
+	;;
 domywifi,dw33d)
 	ubootenv_add_uci_config "/dev/mtd4" "0x0" "0x10000" "0x10000"
 	;;
diff --git a/target/linux/ath79/dts/qca9550_dell_apl26-0ae.dts b/target/linux/ath79/dts/qca9550_dell_apl26-0ae.dts
new file mode 100644
index 000000000000..2f243e027471
--- /dev/null
+++ b/target/linux/ath79/dts/qca9550_dell_apl26-0ae.dts
@@ -0,0 +1,246 @@ 
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/leds/common.h>
+
+#include "qca955x.dtsi"
+
+/ {
+	model = "Dell SonicPoint ACe (APL26-0AE)";
+	compatible = "dell,apl26-0ae", "qca,qca9550", "qca,qca9558";
+
+	aliases {
+		label-mac-device = &eth0;
+		led-boot = &led_wrench;
+		led-failsafe = &led_wrench;
+		led-upgrade = &led_wrench;
+	};
+
+	keys {
+		compatible = "gpio-keys";
+
+		button-reset {
+			label = "reset";
+			gpios = <&gpio 21 GPIO_ACTIVE_LOW>;
+			linux,code = <KEY_RESTART>;
+		};
+
+		/* Accessible only after disassembling the casing */
+		button-service {
+			label = "service";
+			gpios = <&gpio 22 GPIO_ACTIVE_LOW>;
+			linux,code = <KEY_POWER>;
+		};
+	};
+
+	leds {
+		compatible = "gpio-leds";
+		pinctrl-names = "default";
+		pinctrl-0 = <&jtag_disable_pins>;
+
+		led-lan1-amber {
+			color = <LED_COLOR_ID_AMBER>;
+			function = LED_FUNCTION_LAN;
+			function-enumerator = <1>;
+			gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
+		};
+
+		led-lan1-green {
+			color = <LED_COLOR_ID_GREEN>;
+			function = LED_FUNCTION_LAN;
+			function-enumerator = <1>;
+			gpios = <&gpio 3 GPIO_ACTIVE_LOW>;
+		};
+
+		led-lan2-amber {
+			color = <LED_COLOR_ID_AMBER>;
+			function = LED_FUNCTION_LAN;
+			function-enumerator = <2>;
+			gpios = <&gpio 17 GPIO_ACTIVE_LOW>;
+		};
+
+		led-lan2-green {
+			color = <LED_COLOR_ID_GREEN>;
+			function = LED_FUNCTION_LAN;
+			function-enumerator = <2>;
+			gpios = <&gpio 14 GPIO_ACTIVE_LOW>;
+		};
+
+		led-wlan2g {
+			color = <LED_COLOR_ID_GREEN>;
+			function = LED_FUNCTION_WLAN_2GHZ;
+			linux,default-trigger = "phy1tpt";
+			gpios = <&gpio 1 GPIO_ACTIVE_LOW>;
+		};
+
+		led-wlan5g {
+			color = <LED_COLOR_ID_GREEN>;
+			function = LED_FUNCTION_WLAN_5GHZ;
+			linux,default-trigger = "phy0tpt";
+			gpios = <&gpio 2 GPIO_ACTIVE_LOW>;
+		};
+
+		led_wrench: led-wrench {
+			color = <LED_COLOR_ID_AMBER>;
+			function = LED_FUNCTION_STATUS;
+			gpios = <&gpio 0 GPIO_ACTIVE_LOW>;
+		};
+	};
+};
+
+&eth0 {
+	status = "okay";
+
+	nvmem-cells = <&macaddr_sysinfo_50 0>;
+	nvmem-cell-names = "mac-address";
+	phy-handle = <&phy0>;
+	pll-data = <0xa6000000 0x00000101 0x00001616>;
+};
+
+&eth1 {
+	status = "okay";
+
+	nvmem-cells = <&macaddr_sysinfo_50 1>;
+	nvmem-cell-names = "mac-address";
+	pll-data = <0x03000101 0x00000101 0x00001616>;
+
+	fixed-link {
+		speed = <1000>;
+		full-duplex;
+	};
+};
+
+&mdio0 {
+	status = "okay";
+
+	phy0: ethernet-phy@0 {
+		reg = <0>;
+
+		qca,ar8327-initvals = <
+			0x04 0x07680000 /* PORT0 PAD MODE CTRL */
+			0x0c 0x00000080 /* PORT6 PAD MODE CTRL */
+			0x10 0x40000000 /* POWER_ON_STRAP */
+			0x50 0xffb7c405 /* LED0 CTRL */
+			0x54 0xffb7c305 /* LED1 CTRL */
+			0x58 0xffb7c033 /* LED2 CTRL */
+			0x5c 0x03ffff00 /* LED3 CTRL */
+			0x7c 0x0000007e /* PORT0_STATUS */
+			0x94 0x0000007e /* PORT6_STATUS */
+		>;
+	};
+};
+
+&pcie0 {
+	status = "okay";
+
+	wifi@0,0 {
+		compatible = "qcom,ath10k";
+		reg = <0x0000 0 0 0 0>;
+
+		/* OEM overwrites EEPROM stored adress and so do we */
+		nvmem-cells = <&macaddr_sysinfo_50 2>;
+		nvmem-cell-names = "mac-address";
+	};
+};
+
+&spi {
+	status = "okay";
+
+	flash@0 {
+		compatible = "jedec,spi-nor";
+		reg = <0>;
+		spi-max-frequency = <25000000>;
+		broken-flash-reset;
+
+		partitions {
+			compatible = "fixed-partitions";
+			#address-cells = <1>;
+			#size-cells = <1>;
+
+			partition@0 {
+				label = "u-boot";
+				reg = <0x0000000 0x0080000>;
+				read-only;
+			};
+
+			partition@80000 {
+				label = "u-boot-env";
+				reg = <0x0080000 0x0040000>;
+			};
+
+			partition@c0000 {
+				label = "sysinfo";
+				reg = <0x00c0000 0x0040000>;
+				read-only;
+
+				nvmem-layout {
+					compatible = "fixed-layout";
+					#address-cells = <1>;
+					#size-cells = <1>;
+
+					macaddr_sysinfo_50: macaddr@50 {
+						compatible = "mac-base";
+						reg = <0x50 0x6>;
+						#nvmem-cell-cells = <1>;
+					};
+				};
+			};
+
+			partition@100000 {
+				label = "art";
+				reg = <0x0100000 0x0010000>;
+				read-only;
+
+				nvmem-layout {
+					compatible = "fixed-layout";
+					#address-cells = <1>;
+					#size-cells = <1>;
+
+					cal_art_1000: calibration@1000 {
+						reg = <0x1000 0x440>;
+					};
+				};
+			};
+
+			partition@110000 {
+				label = "safemode";
+				reg = <0x0110000 0x0400000>;
+				read-only;
+			};
+
+			partition@510000 {
+				label = "firmware";
+				reg = <0x0510000 0x1400000>;
+				compatible = "denx,uimage";
+			};
+
+			partition@1910000 {
+				label = "config";
+				reg = <0x1910000 0x0600000>;
+				read-only;
+			};
+
+			partition@1f10000 {
+				label = "log";
+				reg = <0x1f10000 0x00f0000>;
+				read-only;
+			};
+		};
+	};
+};
+
+&usb_phy0 {
+	status = "okay";
+};
+
+&usb0 {
+	status = "okay";
+};
+
+&wmac {
+	status = "okay";
+
+	nvmem-cells = <&macaddr_sysinfo_50 10>, <&cal_art_1000>;
+	nvmem-cell-names = "mac-address", "calibration";
+};
diff --git a/target/linux/ath79/generic/base-files/etc/board.d/01_leds b/target/linux/ath79/generic/base-files/etc/board.d/01_leds
index 297485587007..c7da56b780c6 100644
--- a/target/linux/ath79/generic/base-files/etc/board.d/01_leds
+++ b/target/linux/ath79/generic/base-files/etc/board.d/01_leds
@@ -227,6 +227,10 @@  compex,wpj531-16m)
 	ucidef_set_led_rssi "sig3" "SIG3" "green:sig3" "wlan0" "65" "100"
 	ucidef_set_led_rssi "sig4" "SIG4" "green:sig4" "wlan0" "50" "100"
 	;;
+dell,apl26-0ae)
+	ucidef_set_led_switch "lan1" "LAN1" "amber:lan-1" "switch0" "0x04"
+	ucidef_set_led_switch "lan2" "LAN2" "amber:lan-2" "switch0" "0x08"
+	;;
 devolo,dlan-pro-1200plus-ac|\
 devolo,magic-2-wifi)
 	ucidef_set_led_netdev "plcw" "dLAN" "white:dlan" "eth0.1" "rx"
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 6823c333b6e3..2d2385a099ad 100644
--- a/target/linux/ath79/generic/base-files/etc/board.d/02_network
+++ b/target/linux/ath79/generic/base-files/etc/board.d/02_network
@@ -287,6 +287,10 @@  ath79_setup_interfaces()
 		ucidef_add_switch "switch0" \
 			"1:wan" "5:lan" "6@eth0"
 		;;
+	dell,apl26-0ae)
+		ucidef_add_switch "switch0" \
+			"0@eth0" "2:lan:1" "3:lan:2" "6@eth1"
+		;;
 	devolo,dlan-pro-1200plus-ac|\
 	devolo,magic-2-wifi)
 		ucidef_add_switch "switch0" \
diff --git a/target/linux/ath79/image/generic.mk b/target/linux/ath79/image/generic.mk
index 502fdc2ed465..11e25e6afc3b 100644
--- a/target/linux/ath79/image/generic.mk
+++ b/target/linux/ath79/image/generic.mk
@@ -924,6 +924,22 @@  define Device/compex_wpj563
 endef
 TARGET_DEVICES += compex_wpj563
 
+define Device/dell_apl26-0ae
+  SOC := qca9550
+  DEVICE_VENDOR := Dell
+  DEVICE_MODEL := SonicPoint
+  DEVICE_VARIANT := ACe (APL26-0AE)
+  DEVICE_ALT0_VENDOR := SonicWall
+  DEVICE_ALT0_MODEL := SonicPoint
+  DEVICE_ALT0_VARIANT := ACe (APL26-0AE)
+  DEVICE_PACKAGES := ath10k-firmware-qca988x-ct kmod-ath10k-ct kmod-usb2
+  KERNEL_SIZE := 5952k
+  IMAGE_SIZE := 20480k
+  IMAGE/sysupgrade.bin = append-kernel | pad-to $$$$(BLOCKSIZE) | \
+	append-rootfs | pad-rootfs | check-size | append-metadata
+endef
+TARGET_DEVICES += dell_apl26-0ae
+
 define Device/devolo_dlan-pro-1200plus-ac
   SOC := ar9344
   DEVICE_VENDOR := devolo