[OpenWrt-Devel,v4] ramips: add support for Edimax RG21S
diff mbox series

Message ID c475e787-3242-6c1b-cb7c-fbb1a78697da@birger-koblitz.de
State New
Headers show
Series
  • [OpenWrt-Devel,v4] ramips: add support for Edimax RG21S
Related show

Commit Message

Birger Koblitz July 21, 2019, 5:43 a.m. UTC
ramips: add Edimax RG21S

SoC:	MediaTek MT7621AT dual-core @ 880MHz
RAM:	256M (Nanya NT5CC128M)
FLASH:	16MB (Macronix MX25L12835F)
WiFi:	- 2.4GHz MediaTek MT7615N bgn
	- 5GHz MediaTek MT7615N nac
Switch: SoC integrated Gigabit Switch (4 x LAN, 1 x WAN)
USB:	No
BTN:	Reset, WPS
LED:	4 red LEDs, indistinguishable when casing closed
UART: 	UART is present as Pads marked J1 on the PCB.
	3.3V - RX - GND - TX / 57600-8N1
	3.3V is the square pad

Installation
------------
Update the factory image via the OEM web-interface
(by default:http://192.168.1.1)
The sysupgrade image can be installed via TFTP from
the U-Boot bootloader. Connect ethernet port 2.

Signed-off-by: Birger Koblitz <mail@birger-koblitz.de>

---

v3: Update to DEVICE_VENDOR / DEVICE_MODEL in mt7621.mk
    renamed .dts according to new conventions
    Removed memory node from .dts
    Correct image size
    Whitespace fixes
v4: Added wifi0/1 labels to wifi nodes
    Model name corrected in dts
    Comments removed from .dts

Comments

Daniel Golle Aug. 22, 2019, 2:47 p.m. UTC | #1
Hi,

I believe the PCI-IDs of the devices in your device tree are wrong,
see below:

On Sun, Jul 21, 2019 at 07:43:51AM +0200, Birger Koblitz wrote:
> ramips: add Edimax RG21S
> 
> SoC:	MediaTek MT7621AT dual-core @ 880MHz
> RAM:	256M (Nanya NT5CC128M)
> FLASH:	16MB (Macronix MX25L12835F)
> WiFi:	- 2.4GHz MediaTek MT7615N bgn
> 	- 5GHz MediaTek MT7615N nac
> Switch: SoC integrated Gigabit Switch (4 x LAN, 1 x WAN)
> USB:	No
> BTN:	Reset, WPS
> LED:	4 red LEDs, indistinguishable when casing closed
> UART: 	UART is present as Pads marked J1 on the PCB.
> 	3.3V - RX - GND - TX / 57600-8N1
> 	3.3V is the square pad
> 
> Installation
> ------------
> Update the factory image via the OEM web-interface
> (by default:http://192.168.1.1)
> The sysupgrade image can be installed via TFTP from
> the U-Boot bootloader. Connect ethernet port 2.
> 
> Signed-off-by: Birger Koblitz <mail@birger-koblitz.de>
> 
> ---
> 
> v3: Update to DEVICE_VENDOR / DEVICE_MODEL in mt7621.mk
>     renamed .dts according to new conventions
>     Removed memory node from .dts
>     Correct image size
>     Whitespace fixes
> v4: Added wifi0/1 labels to wifi nodes
>     Model name corrected in dts
>     Comments removed from .dts
> 
> diff --git a/target/linux/ramips/base-files/etc/board.d/02_network b/target/linux/ramips/base-files/etc/board.d/02_network
> index a2b7d1cf33..252d2f4e50 100755
> --- a/target/linux/ramips/base-files/etc/board.d/02_network
> +++ b/target/linux/ramips/base-files/etc/board.d/02_network
> @@ -329,6 +329,10 @@ ramips_setup_interfaces()
>  		ucidef_add_switch "switch1" \
>  			"1:lan" "2:lan" "3:lan" "4:lan" "0:wan" "6@eth0"
>  		;;
> +	edimax,rg21s)
> +		ucidef_add_switch "switch0" \
> +			"1:lan:4" "2:lan:3" "3:lan:2" "4:lan:1" "0:wan" "6@eth0"
> +		;;
>  	gehua,ghl-r-001)
>  		ucidef_add_switch "switch0" \
>  			"0:lan" "1:lan" "2:lan" "4:wan" "6@eth0"
> @@ -587,6 +591,10 @@ ramips_setup_macs()
>  		lan_mac=$(cat /sys/class/net/eth0/address)
>  		wan_mac=$(macaddr_add "$lan_mac" 2)
>  		;;
> +	edimax,rg21s)
> +		lan_mac=$(mtd_get_mac_ascii u-boot-env ethaddr)
> +		wan_mac=$(mtd_get_mac_ascii u-boot-env wanaddr)
> +		;;
>  	elecom,wrc-1167ghbk2-s|\
>  	elecom,wrc-1900gst|\
>  	elecom,wrc-2533gst|\
> diff --git a/target/linux/ramips/dts/mt7621_edimax_rg21s.dts b/target/linux/ramips/dts/mt7621_edimax_rg21s.dts
> new file mode 100644
> index 0000000000..80b644b7a7
> --- /dev/null
> +++ b/target/linux/ramips/dts/mt7621_edimax_rg21s.dts
> @@ -0,0 +1,157 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
> +/dts-v1/;
> +
> +#include "mt7621.dtsi"
> +
> +#include <dt-bindings/gpio/gpio.h>
> +#include <dt-bindings/input/input.h>
> +
> +/ {
> +	compatible = "edimax,rg21s", "mediatek,mt7621-soc";
> +	model = "Edimax RG21S";
> +
> +	aliases {
> +		led-boot = &led_power;
> +		led-failsafe = &led_power;
> +		led-running = &led_power;
> +		led-upgrade = &led_power;
> +	};
> +
> +	chosen {
> +		bootargs = "console=ttyS0,57600";
> +	};
> +
> +	palmbus: palmbus@1E000000 {
> +		i2c@900 {
> +			status = "okay";
> +		};
> +	};
> +
> +	keys {
> +		compatible = "gpio-keys";
> +
> +		reset {
> +			label = "reset";
> +			gpios = <&gpio0 16 GPIO_ACTIVE_LOW>;
> +			linux,code = <KEY_RESTART>;
> +		};
> +
> +		wps {
> +			label = "wps";
> +			gpios = <&gpio0 18 GPIO_ACTIVE_LOW>;
> +			linux,code = <KEY_RESTART>;
> +		};
> +	};
> +
> +	leds {
> +		compatible = "gpio-leds";
> +
> +		led_power: led_1 {
> +			label = "rg21s:red:led1";
> +			gpios = <&gpio0 7 GPIO_ACTIVE_HIGH>;
> +		};
> +
> +		led_2 {
> +			label = "rg21s:red:led2";
> +			gpios = <&gpio0 12 GPIO_ACTIVE_HIGH>;
> +		};
> +
> +		led_3 {
> +			label = "rg21s:red:led3";
> +			gpios = <&gpio0 14 GPIO_ACTIVE_HIGH>;
> +		};
> +
> +		led_4 {
> +			label = "rg21s:red:led4";
> +			gpios = <&gpio0 15 GPIO_ACTIVE_HIGH>;
> +		};
> +	};
> +};
> +
> +&sdhci {
> +	status = "okay";
> +};
> +
> +&spi0 {
> +	status = "okay";
> +
> +	m25p80@0 {
> +		compatible = "jedec,spi-nor";
> +		reg = <0>;
> +		spi-max-frequency = <10000000>;
> +
> +		partitions {
> +			compatible = "fixed-partitions";
> +			#address-cells = <1>;
> +			#size-cells = <1>;
> +
> +			partition@0 {
> +				label = "u-boot";
> +				reg = <0x0 0x30000>;
> +				read-only;
> +			};
> +
> +			partition@30000 {
> +				label = "u-boot-env";
> +				reg = <0x30000 0x10000>;
> +				read-only;
> +			};
> +
> +			factory: partition@40000 {
> +				label = "factory";
> +				reg = <0x40000 0x10000>;
> +				read-only;
> +			};
> +
> +			partition@50000 {
> +				compatible = "denx,uimage";
> +				label = "firmware";
> +				reg = <0x50000 0xfb0000>;
> +			};
> +		};
> +	};
> +};
> +
> +&pcie {
> +	status = "okay";
> +};
> +
> +&pcie0 {
> +	wifi0: wifi@0,0 {
> +		compatible = "pci14c3,7603";
                             ^^^^^^^^^^^^^^
This looks wrong, MT7615N should have a different PCI ID (pci14c3,7615)

> +		reg = <0x0000 0 0 0 0>;
> +		mediatek,mtd-eeprom = <&factory 0x0000>;
> +		ieee80211-freq-limit = <2400000 2500000>;
> +		mtd-mac-address = <&factory 0x4>;
> +	};
> +};
> +
> +&pcie1 {
> +	wifi1: wifi@0,0 {
> +		compatible = "pci14c3,7662";
                             ^^^^^^^^^^^^^^
And here "pci14c3,7615" as well I reckon.

> +		reg = <0x0000 0 0 0 0>;
> +		mediatek,mtd-eeprom = <&factory 0x8000>;
> +		ieee80211-freq-limit = <5000000 6000000>;
> +		mtd-mac-address = <&factory 0x8004>;
> +	};
> +};
> +
> +&ethernet {
> +	mediatek,portmap = "wllll";
> +	port@5 {
> +		status = "disabled";
> +	};
> +};
> +
> +&pinctrl {
> +	state_default: pinctrl0 {
> +		gpio {
> +			ralink,group = "wdt", "rgmii2", "jtag", "mdio";
> +			ralink,function = "gpio";
> +		};
> +	};
> +};
> +
> +&xhci {
> +	status = "disabled";
> +};
> diff --git a/target/linux/ramips/image/mt7621.mk b/target/linux/ramips/image/mt7621.mk
> index 73ded64e74..5a1e8204f3 100644
> --- a/target/linux/ramips/image/mt7621.mk
> +++ b/target/linux/ramips/image/mt7621.mk
> @@ -30,6 +30,25 @@ define Build/elecom-wrc-factory
>    mv $@.new $@
>  endef
> 
> +define Build/elx-header
> +  $(eval hw_id=$(word 1,$(1)))
> +  $(eval xor_pattern=$(word 2,$(1)))
> +  ( \
> +    echo -ne "\x00\x00\x00\x00\x00\x00\x00\x03" | \
> +      dd bs=42 count=1 conv=sync; \
> +    hw_id="$(hw_id)"; \
> +    echo -ne "\x$${hw_id:0:2}\x$${hw_id:2:2}\x$${hw_id:4:2}\x$${hw_id:6:2}" | \
> +      dd bs=20 count=1 conv=sync; \
> +    echo -ne "$$(printf '%08x' $$(stat -c%s $@) | fold -s2 | xargs -I {} echo \\x{} | tr -d '\n')" | \
> +      dd bs=8 count=1 conv=sync; \
> +    echo -ne "$$($(STAGING_DIR_HOST)/bin/mkhash md5 $@ | fold -s2 | xargs -I {} echo \\x{} | tr -d '\n')" | \
> +      dd bs=58 count=1 conv=sync; \
> +  ) > $(KDIR)/tmp/$(DEVICE_NAME).header
> +  $(call Build/xor-image,-p $(xor_pattern) -x)
> +  cat $(KDIR)/tmp/$(DEVICE_NAME).header $@ > $@.new
> +  mv $@.new $@
> +endef
> +
>  define Build/iodata-factory
>    $(eval fw_size=$(word 1,$(1)))
>    $(eval fw_type=$(word 2,$(1)))
> @@ -173,6 +192,20 @@ define Device/d-team_pbr-m1
>  endef
>  TARGET_DEVICES += d-team_pbr-m1
> 
> +define Device/edimax_rg21s
> +  MTK_SOC := mt7621
> +  IMAGE_SIZE := 16064k
> +  DEVICE_VENDOR := EDIMAX
> +  DEVICE_MODEL := RG21S
> +  IMAGES += factory.bin
> +  IMAGE/factory.bin := \
> +    $$(sysupgrade_bin) | check-size $$$$(IMAGE_SIZE) | \
> +    elx-header 02020038 8844A2D168B45A2D
> +  DEVICE_PACKAGES := \
> +        kmod-ata-ahci kmod-mt76x2 kmod-mt7603 kmod-mt7615e wpad-basic
> +endef
> +TARGET_DEVICES += edimax_rg21s
> +
>  define Device/elecom_wrc-1167ghbk2-s
>    MTK_SOC := mt7621
>    IMAGE_SIZE := 15488k
> 
> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel@lists.openwrt.org
> https://lists.openwrt.org/mailman/listinfo/openwrt-devel
Birger Koblitz Aug. 23, 2019, 6:54 a.m. UTC | #2
Dear Daniel,

thanks for spotting this. Indeed, the correct PCI device-id of the
MT7615N is 7615. 

Interestingly, the kernel module did not care. I'll submit a new v5
patch for the Edimax RG21S and also a new patch for the ASUS RT-AC85p
where I made the same mistake.

Birger


On 22.08.19 16:47, Daniel Golle wrote:
> Hi,
>
> I believe the PCI-IDs of the devices in your device tree are wrong,
> see below:
>
> On Sun, Jul 21, 2019 at 07:43:51AM +0200, Birger Koblitz wrote:
>> ramips: add Edimax RG21S
>>
>> SoC:	MediaTek MT7621AT dual-core @ 880MHz
>> RAM:	256M (Nanya NT5CC128M)
>> FLASH:	16MB (Macronix MX25L12835F)
>> WiFi:	- 2.4GHz MediaTek MT7615N bgn
>> 	- 5GHz MediaTek MT7615N nac
>> Switch: SoC integrated Gigabit Switch (4 x LAN, 1 x WAN)
>> USB:	No
>> BTN:	Reset, WPS
>> LED:	4 red LEDs, indistinguishable when casing closed
>> UART: 	UART is present as Pads marked J1 on the PCB.
>> 	3.3V - RX - GND - TX / 57600-8N1
>> 	3.3V is the square pad
>>
>> Installation
>> ------------
>> Update the factory image via the OEM web-interface
>> (by default:http://192.168.1.1)
>> The sysupgrade image can be installed via TFTP from
>> the U-Boot bootloader. Connect ethernet port 2.
>>
>> Signed-off-by: Birger Koblitz <mail@birger-koblitz.de>
>>
>> ---
>>
>> v3: Update to DEVICE_VENDOR / DEVICE_MODEL in mt7621.mk
>>     renamed .dts according to new conventions
>>     Removed memory node from .dts
>>     Correct image size
>>     Whitespace fixes
>> v4: Added wifi0/1 labels to wifi nodes
>>     Model name corrected in dts
>>     Comments removed from .dts
>>
>> diff --git a/target/linux/ramips/base-files/etc/board.d/02_network b/target/linux/ramips/base-files/etc/board.d/02_network
>> index a2b7d1cf33..252d2f4e50 100755
>> --- a/target/linux/ramips/base-files/etc/board.d/02_network
>> +++ b/target/linux/ramips/base-files/etc/board.d/02_network
>> @@ -329,6 +329,10 @@ ramips_setup_interfaces()
>>  		ucidef_add_switch "switch1" \
>>  			"1:lan" "2:lan" "3:lan" "4:lan" "0:wan" "6@eth0"
>>  		;;
>> +	edimax,rg21s)
>> +		ucidef_add_switch "switch0" \
>> +			"1:lan:4" "2:lan:3" "3:lan:2" "4:lan:1" "0:wan" "6@eth0"
>> +		;;
>>  	gehua,ghl-r-001)
>>  		ucidef_add_switch "switch0" \
>>  			"0:lan" "1:lan" "2:lan" "4:wan" "6@eth0"
>> @@ -587,6 +591,10 @@ ramips_setup_macs()
>>  		lan_mac=$(cat /sys/class/net/eth0/address)
>>  		wan_mac=$(macaddr_add "$lan_mac" 2)
>>  		;;
>> +	edimax,rg21s)
>> +		lan_mac=$(mtd_get_mac_ascii u-boot-env ethaddr)
>> +		wan_mac=$(mtd_get_mac_ascii u-boot-env wanaddr)
>> +		;;
>>  	elecom,wrc-1167ghbk2-s|\
>>  	elecom,wrc-1900gst|\
>>  	elecom,wrc-2533gst|\
>> diff --git a/target/linux/ramips/dts/mt7621_edimax_rg21s.dts b/target/linux/ramips/dts/mt7621_edimax_rg21s.dts
>> new file mode 100644
>> index 0000000000..80b644b7a7
>> --- /dev/null
>> +++ b/target/linux/ramips/dts/mt7621_edimax_rg21s.dts
>> @@ -0,0 +1,157 @@
>> +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
>> +/dts-v1/;
>> +
>> +#include "mt7621.dtsi"
>> +
>> +#include <dt-bindings/gpio/gpio.h>
>> +#include <dt-bindings/input/input.h>
>> +
>> +/ {
>> +	compatible = "edimax,rg21s", "mediatek,mt7621-soc";
>> +	model = "Edimax RG21S";
>> +
>> +	aliases {
>> +		led-boot = &led_power;
>> +		led-failsafe = &led_power;
>> +		led-running = &led_power;
>> +		led-upgrade = &led_power;
>> +	};
>> +
>> +	chosen {
>> +		bootargs = "console=ttyS0,57600";
>> +	};
>> +
>> +	palmbus: palmbus@1E000000 {
>> +		i2c@900 {
>> +			status = "okay";
>> +		};
>> +	};
>> +
>> +	keys {
>> +		compatible = "gpio-keys";
>> +
>> +		reset {
>> +			label = "reset";
>> +			gpios = <&gpio0 16 GPIO_ACTIVE_LOW>;
>> +			linux,code = <KEY_RESTART>;
>> +		};
>> +
>> +		wps {
>> +			label = "wps";
>> +			gpios = <&gpio0 18 GPIO_ACTIVE_LOW>;
>> +			linux,code = <KEY_RESTART>;
>> +		};
>> +	};
>> +
>> +	leds {
>> +		compatible = "gpio-leds";
>> +
>> +		led_power: led_1 {
>> +			label = "rg21s:red:led1";
>> +			gpios = <&gpio0 7 GPIO_ACTIVE_HIGH>;
>> +		};
>> +
>> +		led_2 {
>> +			label = "rg21s:red:led2";
>> +			gpios = <&gpio0 12 GPIO_ACTIVE_HIGH>;
>> +		};
>> +
>> +		led_3 {
>> +			label = "rg21s:red:led3";
>> +			gpios = <&gpio0 14 GPIO_ACTIVE_HIGH>;
>> +		};
>> +
>> +		led_4 {
>> +			label = "rg21s:red:led4";
>> +			gpios = <&gpio0 15 GPIO_ACTIVE_HIGH>;
>> +		};
>> +	};
>> +};
>> +
>> +&sdhci {
>> +	status = "okay";
>> +};
>> +
>> +&spi0 {
>> +	status = "okay";
>> +
>> +	m25p80@0 {
>> +		compatible = "jedec,spi-nor";
>> +		reg = <0>;
>> +		spi-max-frequency = <10000000>;
>> +
>> +		partitions {
>> +			compatible = "fixed-partitions";
>> +			#address-cells = <1>;
>> +			#size-cells = <1>;
>> +
>> +			partition@0 {
>> +				label = "u-boot";
>> +				reg = <0x0 0x30000>;
>> +				read-only;
>> +			};
>> +
>> +			partition@30000 {
>> +				label = "u-boot-env";
>> +				reg = <0x30000 0x10000>;
>> +				read-only;
>> +			};
>> +
>> +			factory: partition@40000 {
>> +				label = "factory";
>> +				reg = <0x40000 0x10000>;
>> +				read-only;
>> +			};
>> +
>> +			partition@50000 {
>> +				compatible = "denx,uimage";
>> +				label = "firmware";
>> +				reg = <0x50000 0xfb0000>;
>> +			};
>> +		};
>> +	};
>> +};
>> +
>> +&pcie {
>> +	status = "okay";
>> +};
>> +
>> +&pcie0 {
>> +	wifi0: wifi@0,0 {
>> +		compatible = "pci14c3,7603";
>                              ^^^^^^^^^^^^^^
> This looks wrong, MT7615N should have a different PCI ID (pci14c3,7615)
>
>> +		reg = <0x0000 0 0 0 0>;
>> +		mediatek,mtd-eeprom = <&factory 0x0000>;
>> +		ieee80211-freq-limit = <2400000 2500000>;
>> +		mtd-mac-address = <&factory 0x4>;
>> +	};
>> +};
>> +
>> +&pcie1 {
>> +	wifi1: wifi@0,0 {
>> +		compatible = "pci14c3,7662";
>                              ^^^^^^^^^^^^^^
> And here "pci14c3,7615" as well I reckon.
>
>> +		reg = <0x0000 0 0 0 0>;
>> +		mediatek,mtd-eeprom = <&factory 0x8000>;
>> +		ieee80211-freq-limit = <5000000 6000000>;
>> +		mtd-mac-address = <&factory 0x8004>;
>> +	};
>> +};
>> +
>> +&ethernet {
>> +	mediatek,portmap = "wllll";
>> +	port@5 {
>> +		status = "disabled";
>> +	};
>> +};
>> +
>> +&pinctrl {
>> +	state_default: pinctrl0 {
>> +		gpio {
>> +			ralink,group = "wdt", "rgmii2", "jtag", "mdio";
>> +			ralink,function = "gpio";
>> +		};
>> +	};
>> +};
>> +
>> +&xhci {
>> +	status = "disabled";
>> +};
>> diff --git a/target/linux/ramips/image/mt7621.mk b/target/linux/ramips/image/mt7621.mk
>> index 73ded64e74..5a1e8204f3 100644
>> --- a/target/linux/ramips/image/mt7621.mk
>> +++ b/target/linux/ramips/image/mt7621.mk
>> @@ -30,6 +30,25 @@ define Build/elecom-wrc-factory
>>    mv $@.new $@
>>  endef
>>
>> +define Build/elx-header
>> +  $(eval hw_id=$(word 1,$(1)))
>> +  $(eval xor_pattern=$(word 2,$(1)))
>> +  ( \
>> +    echo -ne "\x00\x00\x00\x00\x00\x00\x00\x03" | \
>> +      dd bs=42 count=1 conv=sync; \
>> +    hw_id="$(hw_id)"; \
>> +    echo -ne "\x$${hw_id:0:2}\x$${hw_id:2:2}\x$${hw_id:4:2}\x$${hw_id:6:2}" | \
>> +      dd bs=20 count=1 conv=sync; \
>> +    echo -ne "$$(printf '%08x' $$(stat -c%s $@) | fold -s2 | xargs -I {} echo \\x{} | tr -d '\n')" | \
>> +      dd bs=8 count=1 conv=sync; \
>> +    echo -ne "$$($(STAGING_DIR_HOST)/bin/mkhash md5 $@ | fold -s2 | xargs -I {} echo \\x{} | tr -d '\n')" | \
>> +      dd bs=58 count=1 conv=sync; \
>> +  ) > $(KDIR)/tmp/$(DEVICE_NAME).header
>> +  $(call Build/xor-image,-p $(xor_pattern) -x)
>> +  cat $(KDIR)/tmp/$(DEVICE_NAME).header $@ > $@.new
>> +  mv $@.new $@
>> +endef
>> +
>>  define Build/iodata-factory
>>    $(eval fw_size=$(word 1,$(1)))
>>    $(eval fw_type=$(word 2,$(1)))
>> @@ -173,6 +192,20 @@ define Device/d-team_pbr-m1
>>  endef
>>  TARGET_DEVICES += d-team_pbr-m1
>>
>> +define Device/edimax_rg21s
>> +  MTK_SOC := mt7621
>> +  IMAGE_SIZE := 16064k
>> +  DEVICE_VENDOR := EDIMAX
>> +  DEVICE_MODEL := RG21S
>> +  IMAGES += factory.bin
>> +  IMAGE/factory.bin := \
>> +    $$(sysupgrade_bin) | check-size $$$$(IMAGE_SIZE) | \
>> +    elx-header 02020038 8844A2D168B45A2D
>> +  DEVICE_PACKAGES := \
>> +        kmod-ata-ahci kmod-mt76x2 kmod-mt7603 kmod-mt7615e wpad-basic
>> +endef
>> +TARGET_DEVICES += edimax_rg21s
>> +
>>  define Device/elecom_wrc-1167ghbk2-s
>>    MTK_SOC := mt7621
>>    IMAGE_SIZE := 15488k
>>
>> _______________________________________________
>> openwrt-devel mailing list
>> openwrt-devel@lists.openwrt.org
>> https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Patch
diff mbox series

diff --git a/target/linux/ramips/base-files/etc/board.d/02_network b/target/linux/ramips/base-files/etc/board.d/02_network
index a2b7d1cf33..252d2f4e50 100755
--- a/target/linux/ramips/base-files/etc/board.d/02_network
+++ b/target/linux/ramips/base-files/etc/board.d/02_network
@@ -329,6 +329,10 @@  ramips_setup_interfaces()
 		ucidef_add_switch "switch1" \
 			"1:lan" "2:lan" "3:lan" "4:lan" "0:wan" "6@eth0"
 		;;
+	edimax,rg21s)
+		ucidef_add_switch "switch0" \
+			"1:lan:4" "2:lan:3" "3:lan:2" "4:lan:1" "0:wan" "6@eth0"
+		;;
 	gehua,ghl-r-001)
 		ucidef_add_switch "switch0" \
 			"0:lan" "1:lan" "2:lan" "4:wan" "6@eth0"
@@ -587,6 +591,10 @@  ramips_setup_macs()
 		lan_mac=$(cat /sys/class/net/eth0/address)
 		wan_mac=$(macaddr_add "$lan_mac" 2)
 		;;
+	edimax,rg21s)
+		lan_mac=$(mtd_get_mac_ascii u-boot-env ethaddr)
+		wan_mac=$(mtd_get_mac_ascii u-boot-env wanaddr)
+		;;
 	elecom,wrc-1167ghbk2-s|\
 	elecom,wrc-1900gst|\
 	elecom,wrc-2533gst|\
diff --git a/target/linux/ramips/dts/mt7621_edimax_rg21s.dts b/target/linux/ramips/dts/mt7621_edimax_rg21s.dts
new file mode 100644
index 0000000000..80b644b7a7
--- /dev/null
+++ b/target/linux/ramips/dts/mt7621_edimax_rg21s.dts
@@ -0,0 +1,157 @@ 
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+/dts-v1/;
+
+#include "mt7621.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+
+/ {
+	compatible = "edimax,rg21s", "mediatek,mt7621-soc";
+	model = "Edimax RG21S";
+
+	aliases {
+		led-boot = &led_power;
+		led-failsafe = &led_power;
+		led-running = &led_power;
+		led-upgrade = &led_power;
+	};
+
+	chosen {
+		bootargs = "console=ttyS0,57600";
+	};
+
+	palmbus: palmbus@1E000000 {
+		i2c@900 {
+			status = "okay";
+		};
+	};
+
+	keys {
+		compatible = "gpio-keys";
+
+		reset {
+			label = "reset";
+			gpios = <&gpio0 16 GPIO_ACTIVE_LOW>;
+			linux,code = <KEY_RESTART>;
+		};
+
+		wps {
+			label = "wps";
+			gpios = <&gpio0 18 GPIO_ACTIVE_LOW>;
+			linux,code = <KEY_RESTART>;
+		};
+	};
+
+	leds {
+		compatible = "gpio-leds";
+
+		led_power: led_1 {
+			label = "rg21s:red:led1";
+			gpios = <&gpio0 7 GPIO_ACTIVE_HIGH>;
+		};
+
+		led_2 {
+			label = "rg21s:red:led2";
+			gpios = <&gpio0 12 GPIO_ACTIVE_HIGH>;
+		};
+
+		led_3 {
+			label = "rg21s:red:led3";
+			gpios = <&gpio0 14 GPIO_ACTIVE_HIGH>;
+		};
+
+		led_4 {
+			label = "rg21s:red:led4";
+			gpios = <&gpio0 15 GPIO_ACTIVE_HIGH>;
+		};
+	};
+};
+
+&sdhci {
+	status = "okay";
+};
+
+&spi0 {
+	status = "okay";
+
+	m25p80@0 {
+		compatible = "jedec,spi-nor";
+		reg = <0>;
+		spi-max-frequency = <10000000>;
+
+		partitions {
+			compatible = "fixed-partitions";
+			#address-cells = <1>;
+			#size-cells = <1>;
+
+			partition@0 {
+				label = "u-boot";
+				reg = <0x0 0x30000>;
+				read-only;
+			};
+
+			partition@30000 {
+				label = "u-boot-env";
+				reg = <0x30000 0x10000>;
+				read-only;
+			};
+
+			factory: partition@40000 {
+				label = "factory";
+				reg = <0x40000 0x10000>;
+				read-only;
+			};
+
+			partition@50000 {
+				compatible = "denx,uimage";
+				label = "firmware";
+				reg = <0x50000 0xfb0000>;
+			};
+		};
+	};
+};
+
+&pcie {
+	status = "okay";
+};
+
+&pcie0 {
+	wifi0: wifi@0,0 {
+		compatible = "pci14c3,7603";
+		reg = <0x0000 0 0 0 0>;
+		mediatek,mtd-eeprom = <&factory 0x0000>;
+		ieee80211-freq-limit = <2400000 2500000>;
+		mtd-mac-address = <&factory 0x4>;
+	};
+};
+
+&pcie1 {
+	wifi1: wifi@0,0 {
+		compatible = "pci14c3,7662";
+		reg = <0x0000 0 0 0 0>;
+		mediatek,mtd-eeprom = <&factory 0x8000>;
+		ieee80211-freq-limit = <5000000 6000000>;
+		mtd-mac-address = <&factory 0x8004>;
+	};
+};
+
+&ethernet {
+	mediatek,portmap = "wllll";
+	port@5 {
+		status = "disabled";
+	};
+};
+
+&pinctrl {
+	state_default: pinctrl0 {
+		gpio {
+			ralink,group = "wdt", "rgmii2", "jtag", "mdio";
+			ralink,function = "gpio";
+		};
+	};
+};
+
+&xhci {
+	status = "disabled";
+};
diff --git a/target/linux/ramips/image/mt7621.mk b/target/linux/ramips/image/mt7621.mk
index 73ded64e74..5a1e8204f3 100644
--- a/target/linux/ramips/image/mt7621.mk
+++ b/target/linux/ramips/image/mt7621.mk
@@ -30,6 +30,25 @@  define Build/elecom-wrc-factory
   mv $@.new $@
 endef

+define Build/elx-header
+  $(eval hw_id=$(word 1,$(1)))
+  $(eval xor_pattern=$(word 2,$(1)))
+  ( \
+    echo -ne "\x00\x00\x00\x00\x00\x00\x00\x03" | \
+      dd bs=42 count=1 conv=sync; \
+    hw_id="$(hw_id)"; \
+    echo -ne "\x$${hw_id:0:2}\x$${hw_id:2:2}\x$${hw_id:4:2}\x$${hw_id:6:2}" | \
+      dd bs=20 count=1 conv=sync; \
+    echo -ne "$$(printf '%08x' $$(stat -c%s $@) | fold -s2 | xargs -I {} echo \\x{} | tr -d '\n')" | \
+      dd bs=8 count=1 conv=sync; \
+    echo -ne "$$($(STAGING_DIR_HOST)/bin/mkhash md5 $@ | fold -s2 | xargs -I {} echo \\x{} | tr -d '\n')" | \
+      dd bs=58 count=1 conv=sync; \
+  ) > $(KDIR)/tmp/$(DEVICE_NAME).header
+  $(call Build/xor-image,-p $(xor_pattern) -x)
+  cat $(KDIR)/tmp/$(DEVICE_NAME).header $@ > $@.new
+  mv $@.new $@
+endef
+
 define Build/iodata-factory
   $(eval fw_size=$(word 1,$(1)))
   $(eval fw_type=$(word 2,$(1)))
@@ -173,6 +192,20 @@  define Device/d-team_pbr-m1
 endef
 TARGET_DEVICES += d-team_pbr-m1

+define Device/edimax_rg21s
+  MTK_SOC := mt7621
+  IMAGE_SIZE := 16064k
+  DEVICE_VENDOR := EDIMAX
+  DEVICE_MODEL := RG21S
+  IMAGES += factory.bin
+  IMAGE/factory.bin := \
+    $$(sysupgrade_bin) | check-size $$$$(IMAGE_SIZE) | \
+    elx-header 02020038 8844A2D168B45A2D
+  DEVICE_PACKAGES := \
+        kmod-ata-ahci kmod-mt76x2 kmod-mt7603 kmod-mt7615e wpad-basic
+endef
+TARGET_DEVICES += edimax_rg21s
+
 define Device/elecom_wrc-1167ghbk2-s
   MTK_SOC := mt7621
   IMAGE_SIZE := 15488k