forked from openwrt/openwrt
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ath79: add support for Huawei AP6010DN
Huawei AP6010DN is a dual-band, dual-radio 802.11a/b/g/n 2x2 MIMO enterprise access point with one Gigabit Ethernet port and PoE support. Hardware highlights: - CPU: AR9344 SoC at 480MHz - RAM: 128MB DDR2 - Flash: 64MB SPI-NOR - Wi-Fi 2.4GHz: AR9344-internal radio - Wi-Fi 5GHz: AR9580 PCIe WLAN SoC - Ethernet: 10/100/1000 Mbps Ethernet through Atheros AR8035 PHY - PoE: yes - Standalone 12V/2A power input - Serial console externally available through RJ45 port - External watchdog: CAT706SVI (1.6s timeout) Serial console: 9600n8 (9600 baud, no stop bits, no parity, 8 data bits) MAC addresses: Each device has 32 consecutive MAC addresses allocated by the vendor, which don't overlap between devices. This was confirmed with multiple devices with consecutive serial numbers. The MAC address range starts with the address on the label. To be able to distinguish between the interfaces, the following MAC address scheme is used: - eth0 = label MAC - radio0 (Wi-Fi 2.4GHz) = label MAC + 1 - radio1 (Wi-Fi 5GHz) = label MAC + 2 Installation: 0. Connect some sort of RJ45-to-USB adapter to "Console" port of the AP 1. Power up the AP 2. At prompt "Press f or F to stop Auto-Boot in 3 seconds", do what they say. Log in with default admin password "[email protected]". 3. Boot the OpenWrt initramfs from TFTP using the hidden script "run ramboot". Replace IP address as needed: > setenv serverip 192.168.1.10 > setenv ipaddr 192.168.1.1 > setenv rambootfile openwrt-ath79-generic-huawei_ap6010dn-initramfs-kernel.bin > saveenv > run ramboot 4. Optional but recommended as the factory firmware cannot be downloaded publicly: Back up contents of "firmware" partition using the web interface or ssh: $ ssh [email protected] cat /dev/mtd11 > huawei_ap6010dn_fw_backup.bin 5. Run sysupgrade using sysupgrade image. OpenWrt shall boot from flash afterwards. Return to factory firmware (using firmware upgrade package downloaded from non-public Huawei website): 1. Start a TFTP server in the directory where the firmware upgrade package is located 2. Boot to u-boot as described above 3. Install firmware upgrade package and format the config partitions: > update system FatAP6X10XN_SOMEVERSION.bin > format_fs Return to factory firmware (from previously created backup): 1. Copy over the firmware partition backup to /tmp, for example using scp 2. Use sysupgrade with force to restore the backup: sysupgrade -F huawei_ap6010dn_fw_backup.bin 3. Boot AP to U-Boot as described above Quirks and known issues: - The stock firmware has a semi dual boot concept where the primary kernel uses a squashfs as root partition and the secondary kernel uses an initramfs. This dual boot concept is circumvented on purpose to gain more flash space and since the stock firmware's flash layout isn't compatible with mtdsplit. - The external watchdog's timeout of 1.6s is very hard to satisfy during bootup. This is why the GPIO15 pin connected to the watchdog input is configured directly in the LZMA loader to output the AHB_CLK/2 signal which keeps the watchdog happy until the wdt-gpio kernel driver takes over. Because it would also take too long to read the whole kernel image from flash, the uImage header only includes the loader which then reads the kernel image from flash after GPIO15 is configured. Signed-off-by: Marco von Rosenberg <[email protected]>
- Loading branch information
1 parent
192afd3
commit 551be50
Showing
7 changed files
with
279 additions
and
11 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,242 @@ | ||
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT | ||
|
||
#include "ar9344.dtsi" | ||
|
||
#include <dt-bindings/gpio/gpio.h> | ||
#include <dt-bindings/input/input.h> | ||
#include <dt-bindings/leds/common.h> | ||
|
||
/ { | ||
model = "Huawei AP6010DN"; | ||
compatible = "huawei,ap6010dn", "qca,ar9344"; | ||
|
||
chosen { | ||
bootargs = "console=ttyS0,9600n8"; | ||
}; | ||
|
||
aliases { | ||
led-boot = &led_function_green; | ||
led-failsafe = &led_function_red; | ||
led-running = &led_function_green; | ||
led-upgrade = &led_function_red; | ||
}; | ||
|
||
leds { | ||
compatible = "gpio-leds"; | ||
|
||
led_function_green: led-status-green { | ||
function = LED_FUNCTION_STATUS; | ||
color = <LED_COLOR_ID_GREEN>; | ||
gpios = <&gpio 13 GPIO_ACTIVE_HIGH>; | ||
}; | ||
|
||
led_function_red: led-status-red { | ||
function = LED_FUNCTION_STATUS; | ||
color = <LED_COLOR_ID_RED>; | ||
gpios = <&gpio 14 GPIO_ACTIVE_HIGH>; | ||
}; | ||
|
||
}; | ||
|
||
keys { | ||
compatible = "gpio-keys"; | ||
|
||
restart { | ||
label = "reset"; | ||
linux,code = <KEY_RESTART>; | ||
gpios = <&gpio 21 GPIO_ACTIVE_LOW>; | ||
debounce-interval = <60>; | ||
}; | ||
}; | ||
|
||
watchdog { | ||
pinctrl-names = "default"; | ||
pinctrl-0 = <&wdt_gpio15>; | ||
|
||
compatible = "linux,wdt-gpio"; | ||
gpios = <&gpio 15 GPIO_ACTIVE_HIGH>; | ||
hw_algo = "toggle"; | ||
hw_margin_ms = <100>; | ||
always-running; | ||
}; | ||
|
||
virtual_flash { | ||
compatible = "mtd-concat"; | ||
devices = <&fwconcat0 &fwconcat1>; | ||
|
||
partitions { | ||
compatible = "fixed-partitions"; | ||
#address-cells = <1>; | ||
#size-cells = <1>; | ||
|
||
partition@0 { | ||
label = "firmware"; | ||
reg = <0x0 0x1e00000>; | ||
compatible = "openwrt,uimage", "denx,uimage"; | ||
}; | ||
}; | ||
}; | ||
}; | ||
|
||
&spi { | ||
status = "okay"; | ||
|
||
flash@0 { | ||
compatible = "jedec,spi-nor"; | ||
reg = <0>; | ||
spi-max-frequency = <25000000>; | ||
|
||
partitions { | ||
compatible = "fixed-partitions"; | ||
#address-cells = <1>; | ||
#size-cells = <1>; | ||
|
||
partition@0 { | ||
label = "u-boot-a"; | ||
reg = <0x0 0x80000>; | ||
read-only; | ||
}; | ||
|
||
partition@80000 { | ||
label = "BootupA"; | ||
reg = <0x80000 0x20000>; | ||
}; | ||
|
||
partition@a0000 { | ||
label = "BootupB"; | ||
reg = <0xa0000 0x20000>; | ||
}; | ||
|
||
partition@c0000 { | ||
label = "u-boot-env"; | ||
reg = <0xc0000 0x20000>; | ||
read-only; | ||
}; | ||
|
||
partition@e0000 { | ||
label = "BoardData"; | ||
reg = <0xe0000 0x20000>; | ||
read-only; | ||
}; | ||
|
||
// In the vendor layout, there are the "SysImageA" (12 MiB) | ||
// and the "ConfigA" (3 MiB) partitions here. | ||
fwconcat0: partition@100000 { | ||
label = "fwconcat0"; | ||
reg = <0x100000 0xf00000>; | ||
}; | ||
|
||
partition@1000000 { | ||
label = "u-boot-b"; | ||
reg = <0x1000000 0x80000>; | ||
read-only; | ||
}; | ||
|
||
partition@1080000 { | ||
label = "ResultA"; | ||
reg = <0x1080000 0x20000>; | ||
read-only; | ||
}; | ||
|
||
partition@10a0000 { | ||
label = "ResultB"; | ||
reg = <0x10a0000 0x20000>; | ||
read-only; | ||
}; | ||
|
||
// In the vendor layout, there are the "SysImageB" (12 MiB) | ||
// and the "ConfigB" (3 MiB) partitions here. | ||
fwconcat1: partition@10c0000 { | ||
label = "fwconcat1"; | ||
reg = <0x10c0000 0xf00000>; | ||
}; | ||
|
||
art: partition@1fc0000 { | ||
label = "art"; | ||
reg = <0x1fc0000 0x40000>; | ||
read-only; | ||
|
||
nvmem-layout { | ||
compatible = "fixed-layout"; | ||
#address-cells = <1>; | ||
#size-cells = <1>; | ||
|
||
macaddr_art_2005b: macaddr@2005b { | ||
compatible = "mac-base"; | ||
reg = <0x2005b 0x6>; | ||
#nvmem-cell-cells = <1>; | ||
}; | ||
|
||
cal_art_1000: cal@1000 { | ||
reg = <0x1000 0x440>; | ||
}; | ||
|
||
cal_art_5000: cal@5000 { | ||
reg = <0x5000 0x844>; | ||
}; | ||
}; | ||
}; | ||
}; | ||
}; | ||
}; | ||
|
||
&wmac { | ||
status = "okay"; | ||
|
||
nvmem-cells = <&macaddr_art_2005b 1>, <&cal_art_1000>; | ||
nvmem-cell-names = "mac-address", "calibration"; | ||
}; | ||
|
||
&pcie { | ||
status = "okay"; | ||
|
||
ath9k: wifi@0,0 { | ||
compatible = "pci168c,0033"; | ||
reg = <0x0000 0 0 0 0>; | ||
gpio-controller; | ||
#gpio-cells = <2>; | ||
|
||
nvmem-cells = <&macaddr_art_2005b 2>, <&cal_art_5000>; | ||
nvmem-cell-names = "mac-address", "calibration"; | ||
}; | ||
}; | ||
|
||
&ref { | ||
clock-frequency = <40000000>; | ||
}; | ||
|
||
ð0 { | ||
status = "okay"; | ||
|
||
nvmem-cells = <&macaddr_art_2005b 0>; | ||
nvmem-cell-names = "mac-address"; | ||
|
||
pll-data = <0x06000000 0x04000101 0x0c001313>; | ||
phy-mode = "rgmii-id"; | ||
phy-handle = <&phy>; | ||
|
||
gmac-config { | ||
device = <&gmac>; | ||
rgmii-gmac0 = <1>; | ||
rxdv-delay = <3>; | ||
rxd-delay = <3>; | ||
}; | ||
}; | ||
|
||
&mdio0 { | ||
status = "okay"; | ||
|
||
phy: ethernet-phy@18 { | ||
reg = <0x4>; | ||
}; | ||
}; | ||
|
||
&pinmux { | ||
wdt_gpio15: pinmux_wdt_gpio15 { | ||
pinctrl-single,bits = <0xc 0x0 0xFF000000>; | ||
}; | ||
}; | ||
|
||
&wdt { | ||
status = "disabled"; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters