ath79: add support for D-Link DAP-2695-A1
authorStijn Tintel <stijn@linux-ipv6.be>
Sun, 7 Jun 2020 23:11:34 +0000 (02:11 +0300)
committerStijn Tintel <stijn@linux-ipv6.be>
Thu, 11 Jun 2020 16:44:45 +0000 (19:44 +0300)
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>
target/linux/ath79/dts/qca9558_dlink_dap-2695-a1.dts [new file with mode: 0644]
target/linux/ath79/generic/base-files/etc/board.d/02_network
target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom
target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
target/linux/ath79/generic/base-files/etc/uci-defaults/09_fix-checksum
target/linux/ath79/generic/base-files/lib/preinit/10_fix_eth_mac.sh
target/linux/ath79/image/generic.mk

diff --git a/target/linux/ath79/dts/qca9558_dlink_dap-2695-a1.dts b/target/linux/ath79/dts/qca9558_dlink_dap-2695-a1.dts
new file mode 100644 (file)
index 0000000..4ae9ee2
--- /dev/null
@@ -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;
+};
index 23a945aadc56e2671996f98a2ad51c42e83b86d8..283e5104164f4dcdcce7b1f82750fcd7377c6359 100755 (executable)
@@ -136,6 +136,9 @@ ath79_setup_interfaces()
                ucidef_add_switch "switch0" \
                        "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)
                ucidef_set_interface_wan "eth1"
                ucidef_add_switch "switch0" \
@@ -361,6 +364,9 @@ ath79_setup_macs()
        devolo,magic-2-wifi)
                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)
                lan_mac=$(mtd_get_mac_text "caldata" 0xffa0)
                wan_mac=$(mtd_get_mac_text "caldata" 0xffb4)
index fa36aab4fe5e856ecbd770cb0e2e3f98ba88ad2c..56d083b4bfc5be33d8e76df5665ab5f9b532257b 100644 (file)
@@ -14,6 +14,10 @@ case "$FIRMWARE" in
        avm,fritz450e)
                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-825-c1|\
        dlink,dir-835-a1)
index 29815a1adadbef73a4f2cdc85b819e3d876b1ebc..603557d6c20ca2d3dd15234c5e8c1e2a72939788 100644 (file)
@@ -40,6 +40,10 @@ case "$FIRMWARE" in
                caldata_extract "art" 0x5000 0x844
                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)
                caldata_extract "art" 0x5000 0x844
                ath10k_patch_mac $(mtd_get_mac_ascii devdata "wlan5mac")
index 22c9483e747326b98d52cd35dc7814eec54fdadf..085ad2e9251180a24247e5fb658f9adab6d335c7 100644 (file)
@@ -6,9 +6,17 @@ fix_seama_header() {
        [ "$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)
 
 case "$board" in
+dlink,dap-2695-a1)
+       fixwrgg
+       ;;
 qihoo,c301)
        fix_seama_header
        ;;
index da1583a82513059753df296bd80ee30a00c6580c..59fd36b2e9a9c6eeba4225dc76be57451a384701 100644 (file)
@@ -8,6 +8,10 @@ preinit_set_mac_address() {
        avm,fritz450e)
                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)
                ip link set dev eth0 address $(mtd_get_mac_ascii u-boot-env0 ethaddr)
                ;;
index 05b769b9c371d04c312df5c894629ffc36201218..e92dbc99d61e4628ccc835a35b7f9cdeb0b5f235 100644 (file)
@@ -6,6 +6,7 @@ include ./common-yuncore.mk
 DEVICE_VARS += ADDPATTERN_ID ADDPATTERN_VERSION
 DEVICE_VARS += SEAMA_SIGNATURE SEAMA_MTDBLOCK
 DEVICE_VARS += KERNEL_INITRAMFS_PREFIX
+DEVICE_VARS += DAP_SIGNATURE
 
 define Build/add-elecom-factory-initramfs
   $(eval edimax_model=$(word 1,$(1)))
@@ -49,6 +50,14 @@ define Build/cybertan-trx
        -rm $@-empty.bin
 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
   $(STAGING_DIR_HOST)/bin/nec-enc \
     -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
 endef
 
+define Build/wrgg-pad-rootfs
+       $(STAGING_DIR_HOST)/bin/padjffs2 $(IMAGE_ROOTFS) -c 64 >>$@
+endef
+
 define Device/seama
   KERNEL := kernel-bin | append-dtb | relocate-kernel | lzma
   KERNEL_INITRAMFS := $$(KERNEL) | seama
@@ -458,6 +471,26 @@ define Device/devolo_magic-2-wifi
 endef
 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
   SOC := ar9330
   DEVICE_VENDOR := D-Link