diff mbox series

ramips: add support for D-Link DAP-X1860 A1

Message ID 20221213221509.16186-1-openwrt@sebastianschaper.net
State Superseded
Delegated to: Hauke Mehrtens
Headers show
Series ramips: add support for D-Link DAP-X1860 A1 | expand

Commit Message

Sebastian Schaper Dec. 13, 2022, 10:15 p.m. UTC
The DAP-X1860 is a wall-plug AX1800 repeater.

Specifications:
- MT7621, 256 MiB RAM, 128 MiB SPI NAND
- MT7915 + MT7975 2x2 802.11ax (DBDC)
- Ethernet: 1 port 10/100/1000
- LED RSSI bargraph (2x green, 1x red/green),
  incorrectly populated red/orange status LEDs
  (should be red/green according to documentation)

Installation:
- Keep reset button pressed during plug-in
- Web Recovery Updater is at 192.168.0.50
- Upload factory.bin, confirm flashing
  (seems to work best with Chromium-based browsers)

Revert to OEM firmware:
- tar -xvf DAP-X1860_RevA_Firmware_101b94.bin
- openssl enc -d -md md5 -aes-256-cbc -in FWImage.st2 \
  -out FWImage.st1 -k MB0dBx62oXJXDvt12lETWQ==
- tar -xvf FWImage.st1
- flash kernel_DAP-X1860.bin via Recovery

Signed-off-by: Sebastian Schaper <openwrt@sebastianschaper.net>
---

I am not quite happy with the 4096K fixed-size kernel partition,
but this is consistent with many other devices using UBI.
If one day the kernel image will grow larger, this could be addressed
simultaneously (e.g. using lzma-loader) for all devices.

Do we even need UBI when there is NMBM? But probably better for redundancy.

I see there are further options available for `mediatek,nmbm` in dts, i.e.
`bmt-max-ratio` and `bmt-remap-range`, only used by those two NMBM devices.
Do we need to set these as well, and how should the values be determined?

RSSI bargraph is configured for the 5GHz interface `wlan1` to be consistent
with other devices using the `rssileds` package, however in current master
this is no longer working, since individual interfaces (e.g. `phy1-sta0`)
will be created when connecting to a network. It seems this needs to be
resolved within `rssileds`, rather than individually for this device. 

`uImage-relocate` is based on openwrt/staging/nbd from
977e37c0f23e ramips: add work-in-progress support for D-Link DIR-X1860


 .../ramips/dts/mt7621_dlink_dap-x1860-a1.dts  | 197 ++++++++++++++++++
 target/linux/ramips/image/mt7621.mk           |  37 ++++
 .../mt7621/base-files/etc/board.d/01_leds     |   7 +
 .../mt7621/base-files/etc/board.d/02_network  |   1 +
 .../etc/hotplug.d/ieee80211/10_fix_wifi_mac   |   7 +
 .../mt7621/base-files/lib/upgrade/platform.sh |   1 +
 6 files changed, 250 insertions(+)
 create mode 100644 target/linux/ramips/dts/mt7621_dlink_dap-x1860-a1.dts

Comments

Jan-Niklas Burfeind Jan. 6, 2023, 1:40 p.m. UTC | #1
On 12/13/22 23:15, Sebastian Schaper wrote:
> The DAP-X1860 is a wall-plug AX1800 repeater.
> 
> Specifications:
> - MT7621, 256 MiB RAM, 128 MiB SPI NAND
> - MT7915 + MT7975 2x2 802.11ax (DBDC)
> - Ethernet: 1 port 10/100/1000
> - LED RSSI bargraph (2x green, 1x red/green),
>    incorrectly populated red/orange status LEDs
>    (should be red/green according to documentation)
> 
> Installation:
> - Keep reset button pressed during plug-in
> - Web Recovery Updater is at 192.168.0.50
> - Upload factory.bin, confirm flashing
>    (seems to work best with Chromium-based browsers)
> 
> Revert to OEM firmware:
> - tar -xvf DAP-X1860_RevA_Firmware_101b94.bin
> - openssl enc -d -md md5 -aes-256-cbc -in FWImage.st2 \
>    -out FWImage.st1 -k MB0dBx62oXJXDvt12lETWQ==
> - tar -xvf FWImage.st1
> - flash kernel_DAP-X1860.bin via Recovery
> 
> Signed-off-by: Sebastian Schaper <openwrt@sebastianschaper.net>
> ---
> 
> I am not quite happy with the 4096K fixed-size kernel partition,
> but this is consistent with many other devices using UBI.
> If one day the kernel image will grow larger, this could be addressed
> simultaneously (e.g. using lzma-loader) for all devices.
> 
> Do we even need UBI when there is NMBM? But probably better for redundancy.
> 
> I see there are further options available for `mediatek,nmbm` in dts, i.e.
> `bmt-max-ratio` and `bmt-remap-range`, only used by those two NMBM devices.
> Do we need to set these as well, and how should the values be determined?
> 
> RSSI bargraph is configured for the 5GHz interface `wlan1` to be consistent
> with other devices using the `rssileds` package, however in current master
> this is no longer working, since individual interfaces (e.g. `phy1-sta0`)
> will be created when connecting to a network. It seems this needs to be
> resolved within `rssileds`, rather than individually for this device.
> 
> `uImage-relocate` is based on openwrt/staging/nbd from
> 977e37c0f23e ramips: add work-in-progress support for D-Link DIR-X1860
> 
> 
>   .../ramips/dts/mt7621_dlink_dap-x1860-a1.dts  | 197 ++++++++++++++++++
>   target/linux/ramips/image/mt7621.mk           |  37 ++++
>   .../mt7621/base-files/etc/board.d/01_leds     |   7 +
>   .../mt7621/base-files/etc/board.d/02_network  |   1 +
>   .../etc/hotplug.d/ieee80211/10_fix_wifi_mac   |   7 +
>   .../mt7621/base-files/lib/upgrade/platform.sh |   1 +
>   6 files changed, 250 insertions(+)
>   create mode 100644 target/linux/ramips/dts/mt7621_dlink_dap-x1860-a1.dts
> 
> diff --git a/target/linux/ramips/dts/mt7621_dlink_dap-x1860-a1.dts b/target/linux/ramips/dts/mt7621_dlink_dap-x1860-a1.dts
> new file mode 100644
> index 0000000000..8c156c17ce
> --- /dev/null
> +++ b/target/linux/ramips/dts/mt7621_dlink_dap-x1860-a1.dts
> @@ -0,0 +1,197 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
> +
> +#include "mt7621.dtsi"
> +
> +#include <dt-bindings/gpio/gpio.h>
> +#include <dt-bindings/input/input.h>
> +
> +/ {
> +	compatible = "dlink,dap-x1860-a1", "mediatek,mt7621-soc";
> +	model = "D-Link DAP-X1860 A1";
> +
> +	chosen {
> +		bootargs = "console=ttyS0,115200";
> +	};
> +
> +	aliases {
> +		label-mac-device = &gmac0;
> +		led-boot = &led_power_orange;
> +		led-failsafe = &led_power_red;
> +		led-running = &led_power_orange;
> +		led-upgrade = &led_power_red;
> +	};
> +
> +	keys {
> +		compatible = "gpio-keys";
> +
> +		wps {
> +			label = "wps";
> +			gpios = <&gpio 4 GPIO_ACTIVE_LOW>;
> +			linux,code = <KEY_WPS_BUTTON>;
> +		};
> +
> +		reset {
> +			label = "reset";
> +			gpios = <&gpio 6 GPIO_ACTIVE_LOW>;
> +			linux,code = <KEY_RESTART>;
> +		};
> +	};
> +
> +	leds {
> +		compatible = "gpio-leds";
> +
> +		led_power_red: power_red {
> +			label = "red:power";
> +			gpios = <&gpio 7 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		led_power_orange: power_orange {
> +			label = "orange:power";
> +			gpios = <&gpio 8 GPIO_ACTIVE_LOW>;
> +			default-state = "on";
> +		};
> +
> +		rssihigh {
> +			label = "green:rssihigh";
> +			gpios = <&gpio 22 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		rssimedium {
> +			label = "green:rssimedium";
> +			gpios = <&gpio 23 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		rssilow_orange {
> +			label = "orange:rssilow";
> +			gpios = <&gpio 26 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		rssilow_green {
> +			label = "green:rssilow";
> +			gpios = <&gpio 27 GPIO_ACTIVE_LOW>;
> +		};
> +	};
> +
> +	virtual_flash {
> +		compatible = "mtd-concat";
> +
> +		devices = <&fwconcat0 &fwconcat1>;
> +
> +		partitions {
> +			compatible = "fixed-partitions";
> +			#address-cells = <1>;
> +			#size-cells = <1>;
> +
> +			partition@0 {
> +				label = "ubi";
> +				reg = <0x0 0x0>;
> +			};
> +		};
> +	};
> +};
> +
> +&nand {
> +	status = "okay";
> +
> +	mediatek,nmbm;
> +
> +	partitions {
> +		compatible = "fixed-partitions";
> +		#address-cells = <1>;
> +		#size-cells = <1>;
> +
> +		partition@0 {
> +			label = "bootloader";
> +			reg = <0x0 0x80000>;
> +			read-only;
> +		};
> +
> +		partition@80000 {
> +			label = "config";
> +			reg = <0x80000 0x80000>;
> +			read-only;
> +		};
> +
> +		factory: partition@100000 {
> +			label = "factory";
> +			reg = <0x100000 0x80000>;
> +			read-only;
> +
> +			compatible = "nvmem-cells";
> +			#address-cells = <1>;
> +			#size-cells = <1>;
> +
> +			macaddr_factory_4: macaddr@4 {
> +				reg = <0x4 0x6>;
> +			};
> +		};
> +
> +		partition@180000 {
> +			label = "kernel";
> +			reg = <0x180000 0x0400000>;
> +		};
> +
> +		fwconcat0: partition@580000 {
> +			label = "fwconcat0";
> +			reg = <0x580000 0x3000000>;
> +		};
> +
> +		partition@3580000 {
> +			label = "manufacture";
> +			reg = <0x3580000 0x400000>;
> +			read-only;
> +		};
> +
> +		partition@3980000 {
> +			label = "storage";
> +			reg = <0x3980000 0x680000>;
> +			read-only;
> +		};
> +
> +		fwconcat1: partition@4000000 {
> +			label = "fwconcat1";
> +			reg = <0x4000000 0x3800000>;
> +		};
> +	};
> +};
> +
> +&pcie {
> +	status = "okay";
> +};
> +
> +&pcie1 {
> +	wifi@0,0 {
> +		compatible = "mediatek,mt76";
> +		reg = <0x0000 0 0 0 0>;
> +		mediatek,mtd-eeprom = <&factory 0x0>;
> +		mediatek,disable-radar-background;
> +	};
> +};
> +
> +&ethernet {
> +	pinctrl-0 = <&mdio_pins>, <&rgmii1_pins>;
> +};
> +
> +&gmac0 {
> +	nvmem-cells = <&macaddr_factory_4>;
> +	nvmem-cell-names = "mac-address";
> +};
> +
> +&switch0 {
> +	gpio-controller;
> +	#gpio-cells = <2>;
> +
> +	ports {
> +		port@0 {
> +			status = "okay";
> +			label = "lan";
> +		};
> +	};
> +};
> +
> +&state_default {
> +	gpio {
> +		groups = "uart2";
> +		function = "gpio";
> +	};
> +};
> diff --git a/target/linux/ramips/image/mt7621.mk b/target/linux/ramips/image/mt7621.mk
> index 08aa592be8..beae1f929a 100644
> --- a/target/linux/ramips/image/mt7621.mk
> +++ b/target/linux/ramips/image/mt7621.mk
> @@ -14,6 +14,23 @@ ifdef CONFIG_LINUX_5_10
>     DTS_CPPFLAGS += -DDTS_LEGACY
>   endif
>   
> +RELOCATE_LOADADDR = 0x81000000
> +
> +define Build/uImage-relocate
> +	mkimage \
> +		-A $(LINUX_KARCH) \
> +		-O linux \
> +		-T kernel \
> +		-C $(word 1,$(1)) \
> +		-a $(RELOCATE_LOADADDR) \
> +		-e $(RELOCATE_LOADADDR) \
> +		-n '$(if $(UIMAGE_NAME),$(UIMAGE_NAME),$(call toupper,$(LINUX_KARCH)) $(VERSION_DIST) Linux-$(LINUX_VERSION))' \
> +		$(if $(UIMAGE_MAGIC),-M $(UIMAGE_MAGIC)) \
> +		$(wordlist 2,$(words $(1)),$(1)) \
> +		-d $@ $@.new
> +	mv $@.new $@
> +endef
> +
>   define Build/arcadyan-trx
>   	echo -ne "hsqs" > $@.hsqs
>   	$(eval trx_magic=$(word 1,$(1)))
> @@ -470,6 +487,26 @@ define Device/cudy_x6
>   endef
>   TARGET_DEVICES += cudy_x6
>   
> +define Device/dlink_dap-x1860-a1
> +  $(Device/dsa-migration)
> +  IMAGE_SIZE := 53248k
> +  DEVICE_VENDOR := D-Link
> +  DEVICE_MODEL := DAP-X1860
> +  DEVICE_VARIANT := A1
> +  UBINIZE_OPTS := -E 5
> +  BLOCKSIZE := 128k
> +  PAGESIZE := 2048
> +  KERNEL_SIZE := 4096k
> +  KERNEL := kernel-bin | append-dtb | relocate-kernel | lzma | \
> +	uImage-relocate lzma
> +  IMAGES += factory.bin
> +  IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
> +  IMAGE/factory.bin := append-kernel | pad-to $$(KERNEL_SIZE) | append-ubi | \
> +	check-size | elx-header 011b0060 8844A2D168B45A2D
> +  DEVICE_PACKAGES := kmod-mt7915e rssileds
> +endef
> +TARGET_DEVICES += dlink_dap-x1860-a1
> +
>   define Device/dlink_dir-8xx-a1
>     $(Device/dsa-migration)
>     IMAGE_SIZE := 16000k
> diff --git a/target/linux/ramips/mt7621/base-files/etc/board.d/01_leds b/target/linux/ramips/mt7621/base-files/etc/board.d/01_leds
> index 42e50451e3..626f048a85 100644
> --- a/target/linux/ramips/mt7621/base-files/etc/board.d/01_leds
> +++ b/target/linux/ramips/mt7621/base-files/etc/board.d/01_leds
> @@ -50,6 +50,13 @@ jcg,y2|\
>   xzwifi,creativebox-v1)
>   	ucidef_set_led_netdev "internet" "internet" "blue:internet" "wan"
>   	;;
> +dlink,dap-x1860-a1)
> +	ucidef_set_rssimon "wlan1" "200000" "1"
> +	ucidef_set_led_rssi "rssilow" "RSSILOW" "orange:rssilow" "wlan1" "1" "25"
> +	ucidef_set_led_rssi "rssimediumlow" "RSSIMEDIUMLOW" "green:rssilow" "wlan1" "26" "100"
> +	ucidef_set_led_rssi "rssimediumhigh" "RSSIMEDIUMHIGH" "green:rssimedium" "wlan1" "51" "100"
> +	ucidef_set_led_rssi "rssihigh" "RSSIHIGH" "green:rssihigh" "wlan1" "76" "100"
> +	;;
>   dlink,dir-1960-a1|\
>   dlink,dir-2640-a1|\
>   dlink,dir-2660-a1)
> diff --git a/target/linux/ramips/mt7621/base-files/etc/board.d/02_network b/target/linux/ramips/mt7621/base-files/etc/board.d/02_network
> index b7121db64f..40afa5879a 100644
> --- a/target/linux/ramips/mt7621/base-files/etc/board.d/02_network
> +++ b/target/linux/ramips/mt7621/base-files/etc/board.d/02_network
> @@ -11,6 +11,7 @@ ramips_setup_interfaces()
>   	ampedwireless,ally-00x19k|\
>   	asus,rp-ac56|\
>   	asus,rp-ac87|\
> +	dlink,dap-x1860-a1|\
>   	edimax,re23s|\
>   	mikrotik,ltap-2hnd|\
>   	mikrotik,routerboard-m11g|\
> diff --git a/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac b/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac
> index 69ecaefd27..161bd942db 100644
> --- a/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac
> +++ b/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac
> @@ -22,6 +22,13 @@ case "$board" in
>   		hw_mac_addr="$(mtd_get_mac_binary factory 0x4)"
>   		macaddr_add $hw_mac_addr "$PHYNBR" > /sys${DEVPATH}/macaddress
>   		;;
> +	dlink,dap-x1860-a1)
> +		hw_mac_addr="$(mtd_get_mac_binary factory 0x4)"
> +		[ "$PHYNBR" = "0" ] && \
> +			macaddr_add $hw_mac_addr 1 > /sys${DEVPATH}/macaddress
> +		[ "$PHYNBR" = "1" ] && \
> +			macaddr_add $hw_mac_addr 4 > /sys${DEVPATH}/macaddress
> +		;;
>   	dlink,dir-853-a3)
>   		[ "$PHYNBR" = "0" ] && \
>   			macaddr_setbit_la "$(mtd_get_mac_binary factory 0xe000)" \
> diff --git a/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh b/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh
> index 06a35077dc..15bab1958a 100755
> --- a/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh
> +++ b/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh
> @@ -59,6 +59,7 @@ platform_do_upgrade() {
>   	beeline,smartbox-giga|\
>   	beeline,smartbox-turbo|\
>   	belkin,rt1800|\
> +	dlink,dap-x1860-a1|\
>   	dlink,dir-1960-a1|\
>   	dlink,dir-2640-a1|\
>   	dlink,dir-2660-a1|\

I tested the patch on tonights master. Does work as described in his 
message. Whoever merges this can add:

Jan-Niklas Burfeind <openwrt@aiyionpri.me>
Hauke Mehrtens Jan. 6, 2023, 6:52 p.m. UTC | #2
On 12/13/22 23:15, Sebastian Schaper wrote:
> The DAP-X1860 is a wall-plug AX1800 repeater.
> 
> Specifications:
> - MT7621, 256 MiB RAM, 128 MiB SPI NAND
> - MT7915 + MT7975 2x2 802.11ax (DBDC)
> - Ethernet: 1 port 10/100/1000
> - LED RSSI bargraph (2x green, 1x red/green),
>    incorrectly populated red/orange status LEDs
>    (should be red/green according to documentation)
> 
> Installation:
> - Keep reset button pressed during plug-in
> - Web Recovery Updater is at 192.168.0.50
> - Upload factory.bin, confirm flashing
>    (seems to work best with Chromium-based browsers)
> 
> Revert to OEM firmware:
> - tar -xvf DAP-X1860_RevA_Firmware_101b94.bin
> - openssl enc -d -md md5 -aes-256-cbc -in FWImage.st2 \
>    -out FWImage.st1 -k MB0dBx62oXJXDvt12lETWQ==
> - tar -xvf FWImage.st1
> - flash kernel_DAP-X1860.bin via Recovery
> 
> Signed-off-by: Sebastian Schaper <openwrt@sebastianschaper.net>
> ---
> 
> I am not quite happy with the 4096K fixed-size kernel partition,
> but this is consistent with many other devices using UBI.
> If one day the kernel image will grow larger, this could be addressed
> simultaneously (e.g. using lzma-loader) for all devices.
> 
> Do we even need UBI when there is NMBM? But probably better for redundancy.
> 
> I see there are further options available for `mediatek,nmbm` in dts, i.e.
> `bmt-max-ratio` and `bmt-remap-range`, only used by those two NMBM devices.
> Do we need to set these as well, and how should the values be determined?
> 
> RSSI bargraph is configured for the 5GHz interface `wlan1` to be consistent
> with other devices using the `rssileds` package, however in current master
> this is no longer working, since individual interfaces (e.g. `phy1-sta0`)
> will be created when connecting to a network. It seems this needs to be
> resolved within `rssileds`, rather than individually for this device.
> 
> `uImage-relocate` is based on openwrt/staging/nbd from
> 977e37c0f23e ramips: add work-in-progress support for D-Link DIR-X1860
> 
> 
>   .../ramips/dts/mt7621_dlink_dap-x1860-a1.dts  | 197 ++++++++++++++++++
>   target/linux/ramips/image/mt7621.mk           |  37 ++++
>   .../mt7621/base-files/etc/board.d/01_leds     |   7 +
>   .../mt7621/base-files/etc/board.d/02_network  |   1 +
>   .../etc/hotplug.d/ieee80211/10_fix_wifi_mac   |   7 +
>   .../mt7621/base-files/lib/upgrade/platform.sh |   1 +
>   6 files changed, 250 insertions(+)
>   create mode 100644 target/linux/ramips/dts/mt7621_dlink_dap-x1860-a1.dts
> 
....
> diff --git a/target/linux/ramips/image/mt7621.mk b/target/linux/ramips/image/mt7621.mk
> index 08aa592be8..beae1f929a 100644
> --- a/target/linux/ramips/image/mt7621.mk
> +++ b/target/linux/ramips/image/mt7621.mk
> @@ -14,6 +14,23 @@ ifdef CONFIG_LINUX_5_10
>     DTS_CPPFLAGS += -DDTS_LEGACY
>   endif
>   
> +RELOCATE_LOADADDR = 0x81000000
> +
> +define Build/uImage-relocate
> +	mkimage \
> +		-A $(LINUX_KARCH) \
> +		-O linux \
> +		-T kernel \
> +		-C $(word 1,$(1)) \
> +		-a $(RELOCATE_LOADADDR) \
> +		-e $(RELOCATE_LOADADDR) \
> +		-n '$(if $(UIMAGE_NAME),$(UIMAGE_NAME),$(call toupper,$(LINUX_KARCH)) $(VERSION_DIST) Linux-$(LINUX_VERSION))' \
> +		$(if $(UIMAGE_MAGIC),-M $(UIMAGE_MAGIC)) \
> +		$(wordlist 2,$(words $(1)),$(1)) \
> +		-d $@ $@.new
> +	mv $@.new $@
> +endef
> +

Why do you need uImage-relocate and can not use the standard Build/uImage?
You have to set KERNEL_LOADADDR to  0x81000000.

>   define Build/arcadyan-trx
>   	echo -ne "hsqs" > $@.hsqs
>   	$(eval trx_magic=$(word 1,$(1)))
> @@ -470,6 +487,26 @@ define Device/cudy_x6
>   endef
>   TARGET_DEVICES += cudy_x6
>   
> +define Device/dlink_dap-x1860-a1
> +  $(Device/dsa-migration)
> +  IMAGE_SIZE := 53248k
> +  DEVICE_VENDOR := D-Link
> +  DEVICE_MODEL := DAP-X1860
> +  DEVICE_VARIANT := A1
> +  UBINIZE_OPTS := -E 5
> +  BLOCKSIZE := 128k
> +  PAGESIZE := 2048
> +  KERNEL_SIZE := 4096k
> +  KERNEL := kernel-bin | append-dtb | relocate-kernel | lzma | \
> +	uImage-relocate lzma
> +  IMAGES += factory.bin
> +  IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
> +  IMAGE/factory.bin := append-kernel | pad-to $$(KERNEL_SIZE) | append-ubi | \
> +	check-size | elx-header 011b0060 8844A2D168B45A2D
> +  DEVICE_PACKAGES := kmod-mt7915e rssileds
> +endef
> +TARGET_DEVICES += dlink_dap-x1860-a1
> +
>   define Device/dlink_dir-8xx-a1
>     $(Device/dsa-migration)
>     IMAGE_SIZE := 16000k
Sebastian Schaper Jan. 7, 2023, 11:55 a.m. UTC | #3
On 01/06/23 19:52, Hauke Mehrtens wrote:
> Why do you need uImage-relocate and can not use the standard Build/uImage?
> You have to set KERNEL_LOADADDR to  0x81000000.

Thanks for the hint, I had initially tried several load addresses with the same effect,
the kernel would either decompress but the system would just halt, or the decompress would
fail (crc error) if the offsets overlap, i.e. decompress would overwrite the source.

I now used 0x82000000 as with several other devices, which works fine.
Also switched to the fit boilerplate that is shared by many of these devices.

Factory flashing, sysupgrade and initramfs via tftp were tested successfully.
diff mbox series

Patch

diff --git a/target/linux/ramips/dts/mt7621_dlink_dap-x1860-a1.dts b/target/linux/ramips/dts/mt7621_dlink_dap-x1860-a1.dts
new file mode 100644
index 0000000000..8c156c17ce
--- /dev/null
+++ b/target/linux/ramips/dts/mt7621_dlink_dap-x1860-a1.dts
@@ -0,0 +1,197 @@ 
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+
+#include "mt7621.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+
+/ {
+	compatible = "dlink,dap-x1860-a1", "mediatek,mt7621-soc";
+	model = "D-Link DAP-X1860 A1";
+
+	chosen {
+		bootargs = "console=ttyS0,115200";
+	};
+
+	aliases {
+		label-mac-device = &gmac0;
+		led-boot = &led_power_orange;
+		led-failsafe = &led_power_red;
+		led-running = &led_power_orange;
+		led-upgrade = &led_power_red;
+	};
+
+	keys {
+		compatible = "gpio-keys";
+
+		wps {
+			label = "wps";
+			gpios = <&gpio 4 GPIO_ACTIVE_LOW>;
+			linux,code = <KEY_WPS_BUTTON>;
+		};
+
+		reset {
+			label = "reset";
+			gpios = <&gpio 6 GPIO_ACTIVE_LOW>;
+			linux,code = <KEY_RESTART>;
+		};
+	};
+
+	leds {
+		compatible = "gpio-leds";
+
+		led_power_red: power_red {
+			label = "red:power";
+			gpios = <&gpio 7 GPIO_ACTIVE_LOW>;
+		};
+
+		led_power_orange: power_orange {
+			label = "orange:power";
+			gpios = <&gpio 8 GPIO_ACTIVE_LOW>;
+			default-state = "on";
+		};
+
+		rssihigh {
+			label = "green:rssihigh";
+			gpios = <&gpio 22 GPIO_ACTIVE_LOW>;
+		};
+
+		rssimedium {
+			label = "green:rssimedium";
+			gpios = <&gpio 23 GPIO_ACTIVE_LOW>;
+		};
+
+		rssilow_orange {
+			label = "orange:rssilow";
+			gpios = <&gpio 26 GPIO_ACTIVE_LOW>;
+		};
+
+		rssilow_green {
+			label = "green:rssilow";
+			gpios = <&gpio 27 GPIO_ACTIVE_LOW>;
+		};
+	};
+
+	virtual_flash {
+		compatible = "mtd-concat";
+
+		devices = <&fwconcat0 &fwconcat1>;
+
+		partitions {
+			compatible = "fixed-partitions";
+			#address-cells = <1>;
+			#size-cells = <1>;
+
+			partition@0 {
+				label = "ubi";
+				reg = <0x0 0x0>;
+			};
+		};
+	};
+};
+
+&nand {
+	status = "okay";
+
+	mediatek,nmbm;
+
+	partitions {
+		compatible = "fixed-partitions";
+		#address-cells = <1>;
+		#size-cells = <1>;
+
+		partition@0 {
+			label = "bootloader";
+			reg = <0x0 0x80000>;
+			read-only;
+		};
+
+		partition@80000 {
+			label = "config";
+			reg = <0x80000 0x80000>;
+			read-only;
+		};
+
+		factory: partition@100000 {
+			label = "factory";
+			reg = <0x100000 0x80000>;
+			read-only;
+
+			compatible = "nvmem-cells";
+			#address-cells = <1>;
+			#size-cells = <1>;
+
+			macaddr_factory_4: macaddr@4 {
+				reg = <0x4 0x6>;
+			};
+		};
+
+		partition@180000 {
+			label = "kernel";
+			reg = <0x180000 0x0400000>;
+		};
+
+		fwconcat0: partition@580000 {
+			label = "fwconcat0";
+			reg = <0x580000 0x3000000>;
+		};
+
+		partition@3580000 {
+			label = "manufacture";
+			reg = <0x3580000 0x400000>;
+			read-only;
+		};
+
+		partition@3980000 {
+			label = "storage";
+			reg = <0x3980000 0x680000>;
+			read-only;
+		};
+
+		fwconcat1: partition@4000000 {
+			label = "fwconcat1";
+			reg = <0x4000000 0x3800000>;
+		};
+	};
+};
+
+&pcie {
+	status = "okay";
+};
+
+&pcie1 {
+	wifi@0,0 {
+		compatible = "mediatek,mt76";
+		reg = <0x0000 0 0 0 0>;
+		mediatek,mtd-eeprom = <&factory 0x0>;
+		mediatek,disable-radar-background;
+	};
+};
+
+&ethernet {
+	pinctrl-0 = <&mdio_pins>, <&rgmii1_pins>;
+};
+
+&gmac0 {
+	nvmem-cells = <&macaddr_factory_4>;
+	nvmem-cell-names = "mac-address";
+};
+
+&switch0 {
+	gpio-controller;
+	#gpio-cells = <2>;
+
+	ports {
+		port@0 {
+			status = "okay";
+			label = "lan";
+		};
+	};
+};
+
+&state_default {
+	gpio {
+		groups = "uart2";
+		function = "gpio";
+	};
+};
diff --git a/target/linux/ramips/image/mt7621.mk b/target/linux/ramips/image/mt7621.mk
index 08aa592be8..beae1f929a 100644
--- a/target/linux/ramips/image/mt7621.mk
+++ b/target/linux/ramips/image/mt7621.mk
@@ -14,6 +14,23 @@  ifdef CONFIG_LINUX_5_10
   DTS_CPPFLAGS += -DDTS_LEGACY
 endif
 
+RELOCATE_LOADADDR = 0x81000000
+
+define Build/uImage-relocate
+	mkimage \
+		-A $(LINUX_KARCH) \
+		-O linux \
+		-T kernel \
+		-C $(word 1,$(1)) \
+		-a $(RELOCATE_LOADADDR) \
+		-e $(RELOCATE_LOADADDR) \
+		-n '$(if $(UIMAGE_NAME),$(UIMAGE_NAME),$(call toupper,$(LINUX_KARCH)) $(VERSION_DIST) Linux-$(LINUX_VERSION))' \
+		$(if $(UIMAGE_MAGIC),-M $(UIMAGE_MAGIC)) \
+		$(wordlist 2,$(words $(1)),$(1)) \
+		-d $@ $@.new
+	mv $@.new $@
+endef
+
 define Build/arcadyan-trx
 	echo -ne "hsqs" > $@.hsqs
 	$(eval trx_magic=$(word 1,$(1)))
@@ -470,6 +487,26 @@  define Device/cudy_x6
 endef
 TARGET_DEVICES += cudy_x6
 
+define Device/dlink_dap-x1860-a1
+  $(Device/dsa-migration)
+  IMAGE_SIZE := 53248k
+  DEVICE_VENDOR := D-Link
+  DEVICE_MODEL := DAP-X1860
+  DEVICE_VARIANT := A1
+  UBINIZE_OPTS := -E 5
+  BLOCKSIZE := 128k
+  PAGESIZE := 2048
+  KERNEL_SIZE := 4096k
+  KERNEL := kernel-bin | append-dtb | relocate-kernel | lzma | \
+	uImage-relocate lzma
+  IMAGES += factory.bin
+  IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
+  IMAGE/factory.bin := append-kernel | pad-to $$(KERNEL_SIZE) | append-ubi | \
+	check-size | elx-header 011b0060 8844A2D168B45A2D
+  DEVICE_PACKAGES := kmod-mt7915e rssileds
+endef
+TARGET_DEVICES += dlink_dap-x1860-a1
+
 define Device/dlink_dir-8xx-a1
   $(Device/dsa-migration)
   IMAGE_SIZE := 16000k
diff --git a/target/linux/ramips/mt7621/base-files/etc/board.d/01_leds b/target/linux/ramips/mt7621/base-files/etc/board.d/01_leds
index 42e50451e3..626f048a85 100644
--- a/target/linux/ramips/mt7621/base-files/etc/board.d/01_leds
+++ b/target/linux/ramips/mt7621/base-files/etc/board.d/01_leds
@@ -50,6 +50,13 @@  jcg,y2|\
 xzwifi,creativebox-v1)
 	ucidef_set_led_netdev "internet" "internet" "blue:internet" "wan"
 	;;
+dlink,dap-x1860-a1)
+	ucidef_set_rssimon "wlan1" "200000" "1"
+	ucidef_set_led_rssi "rssilow" "RSSILOW" "orange:rssilow" "wlan1" "1" "25"
+	ucidef_set_led_rssi "rssimediumlow" "RSSIMEDIUMLOW" "green:rssilow" "wlan1" "26" "100"
+	ucidef_set_led_rssi "rssimediumhigh" "RSSIMEDIUMHIGH" "green:rssimedium" "wlan1" "51" "100"
+	ucidef_set_led_rssi "rssihigh" "RSSIHIGH" "green:rssihigh" "wlan1" "76" "100"
+	;;
 dlink,dir-1960-a1|\
 dlink,dir-2640-a1|\
 dlink,dir-2660-a1)
diff --git a/target/linux/ramips/mt7621/base-files/etc/board.d/02_network b/target/linux/ramips/mt7621/base-files/etc/board.d/02_network
index b7121db64f..40afa5879a 100644
--- a/target/linux/ramips/mt7621/base-files/etc/board.d/02_network
+++ b/target/linux/ramips/mt7621/base-files/etc/board.d/02_network
@@ -11,6 +11,7 @@  ramips_setup_interfaces()
 	ampedwireless,ally-00x19k|\
 	asus,rp-ac56|\
 	asus,rp-ac87|\
+	dlink,dap-x1860-a1|\
 	edimax,re23s|\
 	mikrotik,ltap-2hnd|\
 	mikrotik,routerboard-m11g|\
diff --git a/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac b/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac
index 69ecaefd27..161bd942db 100644
--- a/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac
+++ b/target/linux/ramips/mt7621/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac
@@ -22,6 +22,13 @@  case "$board" in
 		hw_mac_addr="$(mtd_get_mac_binary factory 0x4)"
 		macaddr_add $hw_mac_addr "$PHYNBR" > /sys${DEVPATH}/macaddress
 		;;
+	dlink,dap-x1860-a1)
+		hw_mac_addr="$(mtd_get_mac_binary factory 0x4)"
+		[ "$PHYNBR" = "0" ] && \
+			macaddr_add $hw_mac_addr 1 > /sys${DEVPATH}/macaddress
+		[ "$PHYNBR" = "1" ] && \
+			macaddr_add $hw_mac_addr 4 > /sys${DEVPATH}/macaddress
+		;;
 	dlink,dir-853-a3)
 		[ "$PHYNBR" = "0" ] && \
 			macaddr_setbit_la "$(mtd_get_mac_binary factory 0xe000)" \
diff --git a/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh b/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh
index 06a35077dc..15bab1958a 100755
--- a/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh
+++ b/target/linux/ramips/mt7621/base-files/lib/upgrade/platform.sh
@@ -59,6 +59,7 @@  platform_do_upgrade() {
 	beeline,smartbox-giga|\
 	beeline,smartbox-turbo|\
 	belkin,rt1800|\
+	dlink,dap-x1860-a1|\
 	dlink,dir-1960-a1|\
 	dlink,dir-2640-a1|\
 	dlink,dir-2660-a1|\