ath79: add support for D-Link DAP-2695-A1

Hardware:
* SoC: Qualcomm Atheros QCA9558
* RAM: 256MB
* Flash: 16MB SPI NOR
* Ethernet: 2x 10/100/1000 (1x 802.3at PoE-PD)
* WiFi 2.4GHz: Qualcomm Atheros QCA9558
* WiFi 5GHz: Qualcomm Ahteros QCA9880-2R4E
* LEDS: 1x 5GHz, 1x 2.4GHz, 1x LAN1(POE), 1x LAN2, 1x POWER
* Buttons: 1x RESET
* UART: 1x RJ45 RS-232 Console port

Installation via stock firmware:
* Install the factory image via the stock firmware web interface

Installation via bootloader Emergency Web Server:
* Connect your PC to the LAN1(PoE) port
* Configure your PC with IP address 192.168.0.90
* Open a serial console to the Console port (115200,8n1)
* Press "q" within 2s when "press 'q' to stop autoboot" appears
* Open http://192.168.0.50 in a browser
* Upload either the factory or the sysupgrade image
* Once you see "write image into flash...OK,dest addr=0x9f070000" you
  can power-cycle the device. Ignore "checksum bad" messages.

Setting the MAC addresses for the ethernet interfaces via
/etc/board.d/02_network adds the following snippets to
/etc/config/network:

config device 'lan_eth0_1_dev'
        option name 'eth0.1'
        option macaddr 'xx:xx:xx:xx:xx:xx'

config device 'wan_eth1_2_dev'
        option name 'eth1.2'
        option macaddr 'xx:xx:xx:xx:xx:xx'

This would result in the proper MAC addresses being set for the VLAN
subinterfaces, but the parent interfaces would still have a random MAC
address. Using untagged VLANs could solve this, but would still leave
those extra snippets in /etc/config/network, and then the device VLAN
setup would differ from the one used in ar71xx. Therefore, the MAC
addresses of the ethernet interfaces are being set via preinit instead.

The bdcfg partition contains 4 MAC address labels:
 - lanmac
 - wanmac
 - wlanmac
 - wlanmac_a

The first 3 all contain the same MAC address, which is also the one on
the label.

Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
Reviewed-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
This commit is contained in:
Stijn Tintel 2020-06-08 02:11:34 +03:00
parent 7e287ff89d
commit cd09f26660
7 changed files with 235 additions and 0 deletions

View File

@ -0,0 +1,176 @@
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
/dts-v1/;
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include "qca955x.dtsi"
/ {
compatible = "dlink,dap-2695-a1", "qca,qca9558";
model = "D-link DAP-2695-A1";
chosen {
bootargs = "console=ttyS0,115200n8";
};
aliases {
led-boot = &led_power_red;
led-failsafe = &led_power_red;
led-running = &led_power_green;
led-upgrade = &led_power_red;
};
leds {
compatible = "gpio-leds";
led_power_green: power_green {
label = "d-link:green:power";
gpios = <&gpio 23 GPIO_ACTIVE_LOW>;
default-state = "on";
};
led_power_red: power_red {
label = "d-link:red:power";
gpios = <&gpio 14 GPIO_ACTIVE_LOW>;
};
wifi2g {
label = "d-link:green:wifi2g";
gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
linux,default-trigger = "phy1tpt";
};
};
keys {
compatible = "gpio-keys";
reset {
label = "reset";
linux,code = <KEY_RESTART>;
gpios = <&gpio 17 GPIO_ACTIVE_LOW>;
};
};
};
&spi {
status = "okay";
num-cs = <1>;
flash@0 {
#address-cells = <1>;
#size-cells = <1>;
compatible = "mx25l12805d";
reg = <0>;
spi-max-frequency = <25000000>;
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "u-boot";
reg = <0x000000 0x040000>;
read-only;
};
partition@40000 {
label = "bdcfg";
reg = <0x040000 0x010000>;
read-only;
};
partition@50000 {
label = "rgdb";
reg = <0x050000 0x010000>;
read-only;
};
partition@60000 {
label = "langpack";
reg = <0x060000 0x010000>;
read-only;
};
partition@70000 {
compatible = "wrg";
label = "firmware";
reg = <0x070000 0xf00000>;
};
partition@f70000 {
label = "captival";
reg = <0xf70000 0x070000>;
read-only;
};
partition@fe0000 {
label = "certificate";
reg = <0xfe0000 0x010000>;
read-only;
};
art: partition@ff0000 {
label = "art";
reg = <0xff0000 0x010000>;
read-only;
};
};
};
};
&mdio0 {
status = "okay";
phy0: ethernet-phy@0 {
reg = <0>;
qca,ar8327-initvals = <
0x04 0x07600000 /* PORT0_PAD_CTRL */
0x0c 0x00080080 /* PORT6_PAD_CTRL */
0x7c 0x0000007e /* PORT0_STATUS */
0x94 0x0000007e /* PORT6_STATUS */
>;
};
};
&eth0 {
status = "okay";
phy-handle = <&phy0>;
phy-mode = "rgmii";
pll-data = <0x56000000 0x00000101 0x00001616>;
fixed-link {
speed = <1000>;
full-duplex;
};
};
&eth1 {
status = "okay";
phy-mask = <0>;
phy-mode = "sgmii";
pll-data = <0x03000101 0x00000101 0x00001616>;
fixed-link {
speed = <1000>;
full-duplex;
};
};
&pcie0 {
status = "okay";
};
&uart {
status = "okay";
};
&wmac {
status = "okay";
qca,no-eeprom;
};

View File

@ -136,6 +136,9 @@ ath79_setup_interfaces()
ucidef_add_switch "switch0" \ ucidef_add_switch "switch0" \
"0@eth0" "2:wan" "3:lan" "4:lan" "0@eth0" "2:wan" "3:lan" "4:lan"
;; ;;
dlink,dap-2695-a1)
ucidef_add_switch "switch0" "0@eth0" "2:lan" "3:wan" "6@eth1"
;;
dlink,dir-825-b1) dlink,dir-825-b1)
ucidef_set_interface_wan "eth1" ucidef_set_interface_wan "eth1"
ucidef_add_switch "switch0" \ ucidef_add_switch "switch0" \
@ -361,6 +364,9 @@ ath79_setup_macs()
devolo,magic-2-wifi) devolo,magic-2-wifi)
label_mac=$(macaddr_add "$(mtd_get_mac_binary art 0x1002)" 3) label_mac=$(macaddr_add "$(mtd_get_mac_binary art 0x1002)" 3)
;; ;;
dlink,dap-2695-a1)
label_mac=$(mtd_get_mac_ascii bdcfg "wlanmac")
;;
dlink,dir-825-b1) dlink,dir-825-b1)
lan_mac=$(mtd_get_mac_text "caldata" 0xffa0) lan_mac=$(mtd_get_mac_text "caldata" 0xffa0)
wan_mac=$(mtd_get_mac_text "caldata" 0xffb4) wan_mac=$(mtd_get_mac_text "caldata" 0xffb4)

View File

@ -14,6 +14,10 @@ case "$FIRMWARE" in
avm,fritz450e) avm,fritz450e)
caldata_extract_reverse "urlader" 0x1541 0x440 caldata_extract_reverse "urlader" 0x1541 0x440
;; ;;
dlink,dap-2695-a1)
caldata_extract "art" 0x1000 0x440
ath9k_patch_mac $(mtd_get_mac_ascii bdcfg "wlanmac")
;;
dlink,dir-505|\ dlink,dir-505|\
dlink,dir-825-c1|\ dlink,dir-825-c1|\
dlink,dir-835-a1) dlink,dir-835-a1)

View File

@ -40,6 +40,10 @@ case "$FIRMWARE" in
caldata_extract "art" 0x5000 0x844 caldata_extract "art" 0x5000 0x844
ath10k_patch_mac $(macaddr_add $(mtd_get_mac_binary art 0x0) -1) ath10k_patch_mac $(macaddr_add $(mtd_get_mac_binary art 0x0) -1)
;; ;;
dlink,dap-2695-a1)
caldata_extract "art" 0x5000 0x844
ath10k_patch_mac $(mtd_get_mac_ascii bdcfg wlanmac_a)
;;
dlink,dir-859-a1) dlink,dir-859-a1)
caldata_extract "art" 0x5000 0x844 caldata_extract "art" 0x5000 0x844
ath10k_patch_mac $(mtd_get_mac_ascii devdata "wlan5mac") ath10k_patch_mac $(mtd_get_mac_ascii devdata "wlan5mac")

View File

@ -6,9 +6,17 @@ fix_seama_header() {
[ "$kernel_size" ] && mtd -c 0x$kernel_size fixseama firmware [ "$kernel_size" ] && mtd -c 0x$kernel_size fixseama firmware
} }
fixwrgg() {
local kernel_size=$(sed -n 's/mtd[0-9]*: \([0-9a-f]*\).*"kernel".*/\1/p' /proc/mtd)
[ "$kernel_size" ] && mtd -c 0x$kernel_size fixwrgg firmware
}
board=$(board_name) board=$(board_name)
case "$board" in case "$board" in
dlink,dap-2695-a1)
fixwrgg
;;
qihoo,c301) qihoo,c301)
fix_seama_header fix_seama_header
;; ;;

View File

@ -8,6 +8,10 @@ preinit_set_mac_address() {
avm,fritz450e) avm,fritz450e)
ip link set dev eth0 address $(fritz_tffs -n maca -i $(find_mtd_part "tffs (1)")) ip link set dev eth0 address $(fritz_tffs -n maca -i $(find_mtd_part "tffs (1)"))
;; ;;
dlink,dap-2695-a1)
ip link set dev eth0 address $(mtd_get_mac_ascii bdcfg "lanmac")
ip link set dev eth1 address $(mtd_get_mac_ascii bdcfg "wanmac")
;;
enterasys,ws-ap3705i) enterasys,ws-ap3705i)
ip link set dev eth0 address $(mtd_get_mac_ascii u-boot-env0 ethaddr) ip link set dev eth0 address $(mtd_get_mac_ascii u-boot-env0 ethaddr)
;; ;;

View File

@ -6,6 +6,7 @@ include ./common-yuncore.mk
DEVICE_VARS += ADDPATTERN_ID ADDPATTERN_VERSION DEVICE_VARS += ADDPATTERN_ID ADDPATTERN_VERSION
DEVICE_VARS += SEAMA_SIGNATURE SEAMA_MTDBLOCK DEVICE_VARS += SEAMA_SIGNATURE SEAMA_MTDBLOCK
DEVICE_VARS += KERNEL_INITRAMFS_PREFIX DEVICE_VARS += KERNEL_INITRAMFS_PREFIX
DEVICE_VARS += DAP_SIGNATURE
define Build/add-elecom-factory-initramfs define Build/add-elecom-factory-initramfs
$(eval edimax_model=$(word 1,$(1))) $(eval edimax_model=$(word 1,$(1)))
@ -49,6 +50,14 @@ define Build/cybertan-trx
-rm $@-empty.bin -rm $@-empty.bin
endef endef
define Build/mkwrggimg
$(STAGING_DIR_HOST)/bin/mkwrggimg -b \
-i $@ -o $@.imghdr -d /dev/mtdblock/1 \
-m $(DEVICE_MODEL)-$(DEVICE_VARIANT) -s $(DAP_SIGNATURE) \
-v $(VERSION_DIST) -B $(REVISION)
mv $@.imghdr $@
endef
define Build/nec-enc define Build/nec-enc
$(STAGING_DIR_HOST)/bin/nec-enc \ $(STAGING_DIR_HOST)/bin/nec-enc \
-i $@ -o $@.new -k $(1) -i $@ -o $@.new -k $(1)
@ -88,6 +97,10 @@ define Build/teltonika-fw-fake-checksum
dd of=$@ bs=1 count=16 seek=$$offs conv=notrunc dd of=$@ bs=1 count=16 seek=$$offs conv=notrunc
endef endef
define Build/wrgg-pad-rootfs
$(STAGING_DIR_HOST)/bin/padjffs2 $(IMAGE_ROOTFS) -c 64 >>$@
endef
define Device/seama define Device/seama
KERNEL := kernel-bin | append-dtb | relocate-kernel | lzma KERNEL := kernel-bin | append-dtb | relocate-kernel | lzma
KERNEL_INITRAMFS := $$(KERNEL) | seama KERNEL_INITRAMFS := $$(KERNEL) | seama
@ -458,6 +471,26 @@ define Device/devolo_magic-2-wifi
endef endef
TARGET_DEVICES += devolo_magic-2-wifi TARGET_DEVICES += devolo_magic-2-wifi
define Device/dlink_dap-2695-a1
SOC := qca9558
DEVICE_PACKAGES := ath10k-firmware-qca988x-ct kmod-ath10k-ct
DEVICE_VENDOR := D-Link
DEVICE_MODEL := DAP-2965
DEVICE_VARIANT := A1
IMAGES := factory.img sysupgrade.bin
IMAGE_SIZE := 15360k
IMAGE/default := append-kernel | pad-offset 65536 160
IMAGE/factory.img := $$(IMAGE/default) | append-rootfs | wrgg-pad-rootfs | \
mkwrggimg | check-size
IMAGE/sysupgrade.bin := $$(IMAGE/default) | mkwrggimg | append-rootfs | \
wrgg-pad-rootfs | append-metadata | check-size
KERNEL := kernel-bin | append-dtb | relocate-kernel | lzma
KERNEL_INITRAMFS := $$(KERNEL) | mkwrggimg
DAP_SIGNATURE := wapac02_dkbs_dap2695
SUPPORTED_DEVICES += dap-2695-a1
endef
TARGET_DEVICES += dlink_dap-2695-a1
define Device/dlink_dir-505 define Device/dlink_dir-505
SOC := ar9330 SOC := ar9330
DEVICE_VENDOR := D-Link DEVICE_VENDOR := D-Link