kiddin9 1 سال پیش
والد
کامیت
c0cc662192

+ 1 - 0
devices/ipq807x_generic/.config

@@ -9,6 +9,7 @@ CONFIG_TARGET_DEVICE_ipq807x_generic_DEVICE_qnap_301w=y
 CONFIG_TARGET_DEVICE_ipq807x_generic_DEVICE_zte_mf269=y
 CONFIG_TARGET_DEVICE_ipq807x_generic_DEVICE_zyxel_nbg7815=y
 CONFIG_TARGET_DEVICE_ipq807x_generic_DEVICE_buffalo_wxr-5950ax12=y
+CONFIG_TARGET_DEVICE_ipq807x_generic_DEVICE_cmcc_rm2-6=y
 CONFIG_PACKAGE_kmod-rtl8812au-ct=n
 CONFIG_PACKAGE_luci-ssl=y # uhttpd服务
 

+ 3 - 0
devices/mediatek_filogic/.config

@@ -25,4 +25,7 @@ CONFIG_TARGET_DEVICE_mediatek_filogic_DEVICE_jdcloud_re-cp-03=y
 CONFIG_TARGET_DEVICE_mediatek_filogic_DEVICE_abt_asr3000=y
 CONFIG_TARGET_DEVICE_mediatek_filogic_DEVICE_ruijie_rg-x60-pro=y
 CONFIG_TARGET_DEVICE_mediatek_filogic_DEVICE_netcore_n60=y
+CONFIG_TARGET_DEVICE_mediatek_filogic_DEVICE_cmcc_a10=y
+CONFIG_TARGET_DEVICE_mediatek_filogic_DEVICE_konka_komi-a31=y
+CONFIG_TARGET_DEVICE_mediatek_filogic_DEVICE_imou_lc-hx3001=y
 CONFIG_PACKAGE_luci-ssl=y # uhttpd服务

+ 11 - 14
devices/mediatek_filogic/patches/08-cmcc_rax3000m.patch

@@ -9,36 +9,33 @@
  	h3c,magic-nx30-pro)
  		ucidef_set_interfaces_lan_wan "lan1 lan2 lan3" eth1
  		;;
-@@ -103,12 +103,16 @@ mediatek_setup_macs()
+@@ -103,9 +103,7 @@ mediatek_setup_macs()
  		wan_mac=$(macaddr_add "$lan_mac" 3)
  		label_mac=$lan_mac
  		;;
 -	cmcc,rax3000m)
-+	cmcc,rax3000m*)
- 		case "$(cmdline_get_var root)" in
- 		/dev/mmc*)
+-		case "$(cmdline_get_var root)" in
+-		/dev/mmc*)
++	cmcc,rax3000m-emmc)
  			wan_mac=$(mmc_get_mac_binary factory 0x2a)
  			lan_mac=$(mmc_get_mac_binary factory 0x24)
  			label_mac=$wan_mac
-+		*)
-+			wan_mac=$(mtd_get_mac_binary factory 0x2a)
-+			lan_mac=$(mtd_get_mac_binary factory 0x24)
-+			label_mac=$lan_mac
- 		;;
- 		esac
- 		;;
 
 --- a/target/linux/mediatek/filogic/base-files/etc/hotplug.d/ieee80211/11_fix_wifi_mac
 +++ b/target/linux/mediatek/filogic/base-files/etc/hotplug.d/ieee80211/11_fix_wifi_mac
-@@ -46,7 +46,7 @@ case "$board" in
+@@ -46,9 +46,9 @@ case "$board" in
  		[ "$PHYNBR" = "0" ] && macaddr_add $addr 1 > /sys${DEVPATH}/macaddress
  		[ "$PHYNBR" = "1" ] && macaddr_setbit_la $(macaddr_add $addr 2) > /sys${DEVPATH}/macaddress
  		;;
 -	cmcc,rax3000m)
+-		case "$(cmdline_get_var root)" in
+-		/dev/mmc*)
 +	cmcc,rax3000m*)
- 		case "$(cmdline_get_var root)" in
- 		/dev/mmc*)
++		case "$board" in
++		cmcc,rax3000m-emmc)
  			addr=$(mmc_get_mac_binary factory 0xa)
+ 			;;
+ 		*)
 
 --- a/target/linux/mediatek/image/filogic.mk
 +++ b/target/linux/mediatek/image/filogic.mk

+ 318 - 0
devices/mediatek_filogic/patches/15-cmcc-a10.patch

@@ -0,0 +1,318 @@
+From 64a881cfb100a28ba20ffe4066a1758cee07dc91 Mon Sep 17 00:00:00 2001
+From: Chen Minqiang <[email protected]>
+Date: Sat, 16 Dec 2023 07:25:04 +0800
+Subject: [PATCH] mediatek: add CMCC A10 uboot layout
+
+---
+ .../dts/mt7981b-cmcc-a10.dts      | 241 ++++++++++++++++++
+ .../filogic/base-files/etc/board.d/02_network |   1 +
+ .../etc/hotplug.d/ieee80211/11_fix_wifi_mac   |   1 +
+ target/linux/mediatek/image/filogic.mk        |  22 ++
+ 4 files changed, 265 insertions(+)
+ create mode 100644 target/linux/mediatek/dts/mt7981b-cmcc-a10.dts
+
+diff --git a/target/linux/mediatek/dts/mt7981b-cmcc-a10.dts b/target/linux/mediatek/dts/mt7981b-cmcc-a10.dts
+new file mode 100644
+index 0000000000000..cc5b93cba35dc
+--- /dev/null
++++ b/target/linux/mediatek/dts/mt7981b-cmcc-a10.dts
+@@ -0,0 +1,241 @@
++// 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 "mt7981.dtsi"
++
++/ {
++	model = "CMCC A10 (uboot layout)";
++	compatible = "cmcc,a10", "mediatek,mt7981";
++
++	aliases {
++		led-boot = &boot_led;
++		led-failsafe = &boot_led;
++		led-running = &running_led;
++		led-upgrade = &running_led;
++		serial0 = &uart0;
++	};
++
++	chosen {
++		stdout-path = "serial0:115200n8";
++	};
++
++	memory {
++		reg = <0 0x40000000 0 0x10000000>;
++	};
++
++	gpio-keys {
++		compatible = "gpio-keys";
++
++		button-reset {
++			label = "reset";
++			linux,code = <KEY_RESTART>;
++			gpios = <&pio 1 GPIO_ACTIVE_LOW>;
++		};
++
++		button-wps {
++			label = "wps";
++			linux,code = <KEY_WPS_BUTTON>;
++			gpios = <&pio 0 GPIO_ACTIVE_LOW>;
++		};
++	};
++
++	gpio-leds {
++		compatible = "gpio-leds";
++
++		led-0 {
++			label = "blue:status";
++			gpios = <&pio 9 GPIO_ACTIVE_LOW>;
++		};
++
++		running_led: led-1 {
++			label = "green:status";
++			gpios = <&pio 10 GPIO_ACTIVE_LOW>;
++		};
++
++		boot_led: led-2 {
++			label = "red:status";
++			gpios = <&pio 11 GPIO_ACTIVE_LOW>;
++		};
++	};
++};
++
++&eth {
++	status = "okay";
++
++	gmac0: mac@0 {
++		compatible = "mediatek,eth-mac";
++		reg = <0>;
++		phy-mode = "2500base-x";
++
++		nvmem-cells = <&macaddr_factory_2a 0>;
++		nvmem-cell-names = "mac-address";
++
++		fixed-link {
++			speed = <2500>;
++			full-duplex;
++			pause;
++		};
++	};
++};
++
++&mdio_bus {
++	switch: switch@1f {
++		compatible = "mediatek,mt7531";
++		reg = <31>;
++		reset-gpios = <&pio 39 GPIO_ACTIVE_HIGH>;
++		interrupt-controller;
++		#interrupt-cells = <1>;
++		interrupt-parent = <&pio>;
++		interrupts = <38 IRQ_TYPE_LEVEL_HIGH>;
++	};
++};
++
++&spi0 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&spi0_flash_pins>;
++	status = "okay";
++
++	spi_nand: flash@0 {
++		#address-cells = <1>;
++		#size-cells = <1>;
++		compatible = "spi-nand";
++		reg = <0>;
++
++		spi-max-frequency = <52000000>;
++		spi-tx-bus-width = <4>;
++		spi-rx-bus-width = <4>;
++		mediatek,nmbm;
++		mediatek,bmt-max-ratio = <1>;
++		mediatek,bmt-max-reserved-blocks = <64>;
++
++		partitions {
++			compatible = "fixed-partitions";
++			#address-cells = <1>;
++			#size-cells = <1>;
++
++			partition@0 {
++				label = "BL2";
++				reg = <0x00000 0x100000>;
++				read-only;
++			};
++
++			partition@100000 {
++				label = "u-boot-env";
++				reg = <0x100000 0x80000>;
++			};
++
++			factory: partition@180000 {
++				label = "Factory";
++				reg = <0x180000 0x200000>;
++
++				nvmem-layout {
++					compatible = "fixed-layout";
++					#address-cells = <1>;
++					#size-cells = <1>;
++
++					macaddr_factory_24: macaddr@24 {
++						compatible = "mac-base";
++						reg = <0x24 0x6>;
++						#nvmem-cell-cells = <1>;
++					};
++
++					macaddr_factory_2a: macaddr@2a {
++						compatible = "mac-base";
++						reg = <0x2a 0x6>;
++						#nvmem-cell-cells = <1>;
++					};
++				};
++			};
++
++			partition@380000 {
++				label = "FIP";
++				reg = <0x380000 0x200000>;
++			};
++
++			partition@580000 {
++				label = "ubi";
++				reg = <0x580000 0x7000000>;
++			};
++		};
++	};
++};
++
++&switch {
++	ports {
++		#address-cells = <1>;
++		#size-cells = <0>;
++
++		port@0 {
++			reg = <0>;
++			label = "lan1";
++		};
++
++		port@2 {
++			reg = <2>;
++			label = "lan2";
++		};
++
++		port@3 {
++			reg = <3>;
++			label = "lan3";
++		};
++
++		port@4 {
++			reg = <4>;
++			label = "wan";
++
++			nvmem-cells = <&macaddr_factory_24 0>;
++			nvmem-cell-names = "mac-address";
++		};
++
++		port@6 {
++			reg = <6>;
++			ethernet = <&gmac0>;
++			phy-mode = "2500base-x";
++
++			fixed-link {
++				speed = <2500>;
++				full-duplex;
++				pause;
++			};
++		};
++	};
++};
++
++&pio {
++	spi0_flash_pins: spi0-pins {
++		mux {
++			function = "spi";
++			groups = "spi0", "spi0_wp_hold";
++		};
++
++		conf-pu {
++			pins = "SPI0_CS", "SPI0_HOLD", "SPI0_WP";
++			drive-strength = <MTK_DRIVE_8mA>;
++			bias-pull-up = <MTK_PUPD_SET_R1R0_11>;
++		};
++
++		conf-pd {
++			pins = "SPI0_CLK", "SPI0_MOSI", "SPI0_MISO";
++			drive-strength = <MTK_DRIVE_8mA>;
++			bias-pull-down = <MTK_PUPD_SET_R1R0_11>;
++		};
++	};
++};
++
++&uart0 {
++	status = "okay";
++};
++
++&watchdog {
++	status = "okay";
++};
++
++&wifi {
++	status = "okay";
++
++	mediatek,mtd-eeprom = <&factory 0x0>;
++};
+diff --git a/target/linux/mediatek/filogic/base-files/etc/board.d/02_network b/target/linux/mediatek/filogic/base-files/etc/board.d/02_network
+index 53e7b024e40fb..61637e09c7f0e 100644
+--- a/target/linux/mediatek/filogic/base-files/etc/board.d/02_network
++++ b/target/linux/mediatek/filogic/base-files/etc/board.d/02_network
+@@ -17,6 +17,7 @@ mediatek_setup_interfaces()
+ 	asus,rt-ax59u|\
+ 	cetron,ct3003|\
+ 	cetron,ct3003|\
++	cmcc,a10|\
+ 	confiabits,mt7981|\
+ 	cudy,wr3000-v1|\
+ 	tenbay,wr3000k|\
+diff --git a/target/linux/mediatek/filogic/base-files/etc/hotplug.d/ieee80211/11_fix_wifi_mac b/target/linux/mediatek/filogic/base-files/etc/hotplug.d/ieee80211/11_fix_wifi_mac
+index cb476d84d9115..125bec12cdb88 100644
+--- a/target/linux/mediatek/filogic/base-files/etc/hotplug.d/ieee80211/11_fix_wifi_mac
++++ b/target/linux/mediatek/filogic/base-files/etc/hotplug.d/ieee80211/11_fix_wifi_mac
+@@ -62,6 +62,9 @@
+ 		esac
+ 		[ "$PHYNBR" = "1" ] && echo "$addr" > /sys${DEVPATH}/macaddress
+ 		;;
++	cmcc,a10)
++ 		[ "$PHYNBR" = "1" ] && mtd_get_mac_binary factory 0xa > /sys${DEVPATH}/macaddress
++ 		;;
+ 	cudy,wr3000-v1)
+ 		addr=$(mtd_get_mac_binary bdinfo 0xde00)
+ 		# Originally, phy0 is phy1 mac with LA bit set. However, this would conflict
+diff --git a/target/linux/mediatek/image/filogic.mk b/target/linux/mediatek/image/filogic.mk
+index 6976a399e86dc..83428f0d981e7 100644
+--- a/target/linux/mediatek/image/filogic.mk
++++ b/target/linux/mediatek/image/filogic.mk
+@@ -349,6 +349,27 @@ define Device/cetron_ct3003
+ endef
+ TARGET_DEVICES += cetron_ct3003
+ 
++define Device/cmcc_a10
++  DEVICE_VENDOR := CMCC
++  DEVICE_MODEL := A10
++  DEVICE_DTS := mt7981b-cmcc-a10
++  DEVICE_DTS_DIR := ../dts
++  DEVICE_PACKAGES := kmod-mt7981-firmware mt7981-wo-firmware
++  UBINIZE_OPTS := -E 5
++  BLOCKSIZE := 128k
++  PAGESIZE := 2048
++  IMAGE_SIZE := 114688k
++  KERNEL_IN_UBI := 1
++  IMAGES += factory.bin
++  IMAGE/factory.bin := append-ubi | check-size $$$$(IMAGE_SIZE)
++  IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
++  KERNEL = kernel-bin | lzma | \
++	fit lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb
++  KERNEL_INITRAMFS = kernel-bin | lzma | \
++	fit lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb with-initrd
++endef
++TARGET_DEVICES += cmcc_a10
++
+ define Device/cmcc_rax3000m
+   DEVICE_VENDOR := CMCC
+   DEVICE_MODEL := RAX3000M

+ 308 - 0
devices/mediatek_filogic/patches/16-komi-a31.patch

@@ -0,0 +1,308 @@
+From 7c939560f726f6cc5ebb2750a7dbd58bc36f2ecf Mon Sep 17 00:00:00 2001
+From: abandon-xyz <[email protected]>
+Date: Thu, 10 Aug 2023 17:07:43 +0800
+Subject: [PATCH] mediatek: filogic: add support for KONKA KOMI A31
+
+Signed-off-by: Chen Minqiang <[email protected]>
+---
+ .../dts/mt7981b-konka-komi-a31-base.dtsi      | 233 ++++++++++++++++++
+ .../dts/mt7981b-konka-komi-a31-nmbm.dts       |  21 ++
+ .../mediatek/dts/mt7981b-konka-komi-a31.dts   |   8 +
+ .../filogic/base-files/etc/board.d/01_leds    |   4 +
+ .../filogic/base-files/etc/board.d/02_network |   2 +
+ .../etc/hotplug.d/ieee80211/11_fix_wifi_mac   |   6 +
+ .../base-files/lib/upgrade/platform.sh        |   1 +
+ target/linux/mediatek/image/filogic.mk        |  47 ++++
+ 8 files changed, 322 insertions(+)
+ create mode 100644 target/linux/mediatek/dts/mt7981b-konka-komi-a31-base.dtsi
+ create mode 100644 target/linux/mediatek/dts/mt7981b-konka-komi-a31-nmbm.dts
+ create mode 100644 target/linux/mediatek/dts/mt7981b-konka-komi-a31.dts
+
+diff --git a/target/linux/mediatek/dts/mt7981b-konka-komi-a31.dts b/target/linux/mediatek/dts/mt7981b-konka-komi-a31.dts
+new file mode 100644
+index 0000000000000..6b1a260d9519e
+--- /dev/null
++++ b/target/linux/mediatek/dts/mt7981b-konka-komi-a31.dts
+@@ -0,0 +1,247 @@
++// 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 "mt7981.dtsi"
++
++/ {
++	model = "KONKA KOMI A31";
++	compatible = "konka,komi-a31", "mediatek,mt7981";
++
++	aliases {
++		serial0 = &uart0;
++		led-boot = &status_red_led;
++		led-failsafe = &status_red_led;
++		led-running = &status_green_led;
++		led-upgrade = &status_green_led;
++	};
++
++	chosen {
++		stdout-path = "serial0:115200n8";
++	};
++
++	memory {
++		reg = <0 0x40000000 0 0x10000000>;
++	};
++
++	leds {
++		compatible = "gpio-leds";
++
++		status_green_led: led-0 {
++			label = "green:status";
++			gpios = <&pio 8 GPIO_ACTIVE_LOW>;
++		};
++
++		status_blue_led: led-1 {
++			label = "blue:status";
++			gpios = <&pio 13 GPIO_ACTIVE_LOW>;
++		};
++
++		status_red_led: led-2 {
++			label = "red:status";
++			gpios = <&pio 34 GPIO_ACTIVE_LOW>;
++		};
++	};
++
++	gpio-keys {
++		compatible = "gpio-keys";
++
++		button-reset {
++			label = "reset";
++			linux,code = <KEY_RESTART>;
++			gpios = <&pio 1 GPIO_ACTIVE_LOW>;
++		};
++
++		button-mesh {
++			label = "mesh";
++			gpios = <&pio 0 GPIO_ACTIVE_LOW>;
++			linux,code = <BTN_9>;
++			linux,input-type = <EV_SW>;
++		};
++	};
++};
++
++&eth {
++	status = "okay";
++
++	gmac0: mac@0 {
++		compatible = "mediatek,eth-mac";
++		reg = <0>;
++		phy-mode = "2500base-x";
++
++		nvmem-cells = <&macaddr_factory_2a>;
++		nvmem-cell-names = "mac-address";
++
++		fixed-link {
++			speed = <2500>;
++			full-duplex;
++			pause;
++		};
++	};
++
++	gmac1: mac@1 {
++		compatible = "mediatek,eth-mac";
++		reg = <1>;
++		phy-mode = "gmii";
++		phy-handle = <&int_gbe_phy>;
++
++		nvmem-cells = <&macaddr_factory_24>;
++		nvmem-cell-names = "mac-address";
++	};
++};
++
++&mdio_bus {
++	switch: switch@1f {
++		compatible = "mediatek,mt7531";
++		reg = <31>;
++		reset-gpios = <&pio 39 GPIO_ACTIVE_HIGH>;
++		interrupt-controller;
++		#interrupt-cells = <1>;
++		interrupt-parent = <&pio>;
++		interrupts = <38 IRQ_TYPE_LEVEL_HIGH>;
++	};
++};
++
++&spi0 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&spi0_flash_pins>;
++	status = "okay";
++
++	spi_nand: spi_nand@0 {
++		#address-cells = <1>;
++		#size-cells = <1>;
++		compatible = "spi-nand";
++		reg = <0>;
++		spi-max-frequency = <52000000>;
++
++		spi-tx-bus-width = <4>;
++		spi-rx-bus-width = <4>;
++
++		spi-cal-enable;
++		spi-cal-mode = "read-data";
++		spi-cal-datalen = <7>;
++		spi-cal-data = /bits/ 8 <0x53 0x50 0x49 0x4E 0x41 0x4E 0x44>;
++		spi-cal-addrlen = <5>;
++		spi-cal-addr = /bits/ 32 <0x0 0x0 0x0 0x0 0x0>;
++
++		mediatek,nmbm;
++		mediatek,bmt-max-ratio = <1>;
++		mediatek,bmt-max-reserved-blocks = <64>;
++
++		partitions {
++			compatible = "fixed-partitions";
++			#address-cells = <1>;
++			#size-cells = <1>;
++
++			partition@0 {
++				label = "BL2";
++				reg = <0x00 0x100000>;
++			};
++
++			partition@100000 {
++				label = "u-boot-env";
++				reg = <0x100000 0x80000>;
++			};
++
++			factory: partition@180000 {
++				label = "Factory";
++				reg = <0x180000 0x200000>;
++
++				nvmem-layout {
++					compatible = "fixed-layout";
++					#address-cells = <1>;
++					#size-cells = <1>;
++
++					macaddr_factory_2a: macaddr@2a {
++						reg = <0x2a 0x6>;
++					};
++
++					macaddr_factory_24: macaddr@24 {
++						reg = <0x24 0x6>;
++					};
++				};
++			};
++
++			partition@380000 {
++				label = "FIP";
++				reg = <0x380000 0x200000>;
++			};
++
++			partition@580000 {
++				label = "ubi";
++				reg = <0x580000 0x7000000>;
++			};
++		};
++	};
++};
++
++&switch {
++	ports {
++		#address-cells = <1>;
++		#size-cells = <0>;
++
++		port@0 {
++			reg = <0>;
++			label = "lan1";
++		};
++
++		port@1 {
++			reg = <1>;
++			label = "lan2";
++		};
++
++		port@2 {
++			reg = <2>;
++			label = "lan3";
++		};
++
++		port@6 {
++			reg = <6>;
++			label = "cpu";
++			ethernet = <&gmac0>;
++			phy-mode = "2500base-x";
++
++			fixed-link {
++				speed = <2500>;
++				full-duplex;
++				pause;
++			};
++		};
++	};
++};
++
++&pio {
++	spi0_flash_pins: spi0-pins {
++		mux {
++			function = "spi";
++			groups = "spi0", "spi0_wp_hold";
++		};
++
++		conf-pu {
++			pins = "SPI0_CS", "SPI0_HOLD", "SPI0_WP";
++			drive-strength = <8>;
++			mediatek,pull-up-adv = <0>; /* bias-disable */
++		};
++
++		conf-pd {
++			pins = "SPI0_CLK", "SPI0_MOSI", "SPI0_MISO";
++			drive-strength = <8>;
++			mediatek,pull-up-adv = <0>; /* bias-disable */
++		};
++	};
++};
++
++&uart0 {
++	status = "okay";
++};
++
++&watchdog {
++	status = "okay";
++};
++
++&wifi {
++	status = "okay";
++
++	mediatek,mtd-eeprom = <&factory 0x0>;
++};
+diff --git a/target/linux/mediatek/filogic/base-files/etc/board.d/02_network b/target/linux/mediatek/filogic/base-files/etc/board.d/02_network
+index b5e5eca6afd12..33e52743d5bfe 100644
+--- a/target/linux/mediatek/filogic/base-files/etc/board.d/02_network
++++ b/target/linux/mediatek/filogic/base-files/etc/board.d/02_network
+@@ -40,6 +40,8 @@
+ 		;;
+ 	abt,asr3000|\
+ 	cmcc,rax3000m*|\
++	konka,komi-a31|\
++	imou,lc-hx3001|\
+ 	h3c,magic-nx30-pro)
+ 		ucidef_set_interfaces_lan_wan "lan1 lan2 lan3" eth1
+ 		;;
+diff --git a/target/linux/mediatek/filogic/base-files/etc/hotplug.d/ieee80211/11_fix_wifi_mac b/target/linux/mediatek/filogic/base-files/etc/hotplug.d/ieee80211/11_fix_wifi_mac
+index 794944d1aa918..2ca44b55c21fa 100644
+--- a/target/linux/mediatek/filogic/base-files/etc/hotplug.d/ieee80211/11_fix_wifi_mac
++++ b/target/linux/mediatek/filogic/base-files/etc/hotplug.d/ieee80211/11_fix_wifi_mac
+@@ -91,6 +91,17 @@ case "$board" in
+ 	jcg,q30-pro)
+ 		[ "$PHYNBR" = "1" ] && macaddr_setbit_la "$(mtd_get_mac_binary Factory 0x4)" > /sys${DEVPATH}/macaddress
+ 		;;
++	konka,komi-a31)
++		addr=$(cat /sys/class/net/eth0/address)
++		[ "$PHYNBR" = "0" ] && macaddr_add $addr 1 > /sys${DEVPATH}/macaddress
++		[ "$PHYNBR" = "1" ] && macaddr_add $addr 2 > /sys${DEVPATH}/macaddress
++		;;
++	imou,lc-hx3001)
++		addr=$(mtd_get_mac_ascii u-boot-env mac)
++		[ -n "$addr" ] || addr=$(macaddr_add $(mtd_get_mac_binary Factory 0x4) -1)
++		[ "$PHYNBR" = "0" ] && macaddr_add $addr 1 > /sys${DEVPATH}/macaddress
++		[ "$PHYNBR" = "1" ] && macaddr_add $addr 3 > /sys${DEVPATH}/macaddress
++		;;
+ 	mercusys,mr90x-v1)
+ 		addr=$(get_mac_binary "/tmp/tp_data/default-mac" 0)
+ 		[ "$PHYNBR" = "0" ] && echo "$addr" > /sys${DEVPATH}/macaddress

+ 350 - 0
devices/mediatek_filogic/patches/17-lc-hx3001.patch

@@ -0,0 +1,350 @@
+From 5eacf09258839ccda9172962287727ab8825f90b Mon Sep 17 00:00:00 2001
+From: Chen Minqiang <[email protected]>
+Date: Sat, 16 Dec 2023 07:39:20 +0800
+Subject: [PATCH] mediatek: add IMOU LC-HX3001 (uboot layout)
+
+---
+ .../mt7981b-imou-lc-hx3001.dts    | 239 ++++++++++++++++++
+ .../filogic/base-files/etc/board.d/01_leds    |   5 +
+ .../filogic/base-files/etc/board.d/02_network |   7 +
+ .../etc/hotplug.d/ieee80211/11_fix_wifi_mac   |   6 +
+ target/linux/mediatek/image/filogic.mk        |  23 ++
+ 5 files changed, 280 insertions(+)
+ create mode 100644 target/linux/mediatek/dts/mt7981b-imou-lc-hx3001.dts
+
+diff --git a/target/linux/mediatek/dts/mt7981b-imou-lc-hx3001.dts b/target/linux/mediatek/dts/mt7981b-imou-lc-hx3001.dts
+new file mode 100644
+index 0000000000000..857f2a534e112
+--- /dev/null
++++ b/target/linux/mediatek/dts/mt7981b-imou-lc-hx3001.dts
+@@ -0,0 +1,239 @@
++// 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 "mt7981.dtsi"
++
++/ {
++	model = "IMOU LC-HX3001 (uboot layout)";
++	compatible = "imou,lc-hx3001", "mediatek,mt7981";
++
++	aliases {
++		led-boot = &power_led;
++		led-failsafe = &power_led;
++		led-running = &power_led;
++		led-upgrade = &power_led;
++		serial0 = &uart0;
++	};
++
++	chosen {
++		stdout-path = "serial0:115200n8";
++	};
++
++	memory {
++		reg = <0 0x40000000 0 0x10000000>;
++	};
++
++	gpio-keys {
++		compatible = "gpio-keys";
++
++		button-reset {
++			label = "reset";
++			linux,code = <KEY_RESTART>;
++			gpios = <&pio 1 GPIO_ACTIVE_LOW>;
++		};
++
++		button-mesh {
++			label = "mesh";
++			linux,code = <BTN_9>;
++			linux,input-type = <EV_SW>;
++			gpios = <&pio 0 GPIO_ACTIVE_LOW>;
++		};
++	};
++
++	gpio-leds {
++		compatible = "gpio-leds";
++
++		power_led: led-0 {
++			label = "green:power";
++			gpios = <&pio 4 GPIO_ACTIVE_LOW>;
++		};
++
++		led-1 {
++			label = "green:wlan";
++			gpios = <&pio 5 GPIO_ACTIVE_LOW>;
++		};
++
++		led-2 {
++			label = "red:wan";
++			gpios = <&pio 6 GPIO_ACTIVE_LOW>;
++		};
++
++		led-3 {
++			label = "green:wan";
++			gpios = <&pio 7 GPIO_ACTIVE_LOW>;
++		};
++
++		led-4 {
++			label = "green:lan";
++			gpios = <&pio 8 GPIO_ACTIVE_LOW>;
++		};
++	};
++};
++
++&eth {
++	pinctrl-names = "default";
++	pinctrl-0 = <&mdio_pins>;
++
++	status = "okay";
++
++	gmac0: mac@0 {
++		compatible = "mediatek,eth-mac";
++		reg = <0>;
++		phy-mode = "2500base-x";
++
++		fixed-link {
++			speed = <2500>;
++			full-duplex;
++			pause;
++		};
++	};
++
++	gmac1: mac@1 {
++		compatible = "mediatek,eth-mac";
++		reg = <1>;
++		phy-mode = "gmii";
++		phy-handle = <&int_gbe_phy>;
++	};
++};
++
++&mdio_bus {
++	switch: switch@1f {
++		compatible = "mediatek,mt7531";
++		reg = <31>;
++		reset-gpios = <&pio 39 GPIO_ACTIVE_HIGH>;
++		interrupt-controller;
++		#interrupt-cells = <1>;
++		interrupt-parent = <&pio>;
++		interrupts = <38 IRQ_TYPE_LEVEL_HIGH>;
++	};
++};
++
++&spi0 {
++	pinctrl-names = "default";
++	pinctrl-0 = <&spi0_flash_pins>;
++	status = "okay";
++
++	spi_nand: flash@0 {
++		#address-cells = <1>;
++		#size-cells = <1>;
++		compatible = "spi-nand";
++		reg = <0>;
++		spi-max-frequency = <52000000>;
++
++		spi-cal-enable;
++		spi-cal-mode = "read-data";
++		spi-cal-datalen = <7>;
++		spi-cal-data = /bits/ 8 <0x53 0x50 0x49 0x4E 0x41 0x4E 0x44>;
++		spi-cal-addrlen = <5>;
++		spi-cal-addr = /bits/ 32 <0x0 0x0 0x0 0x0 0x0>;
++
++		spi-tx-bus-width = <4>;
++		spi-rx-bus-width = <4>;
++		mediatek,nmbm;
++		mediatek,bmt-max-ratio = <1>;
++		mediatek,bmt-max-reserved-blocks = <64>;
++
++		partitions {
++			compatible = "fixed-partitions";
++			#address-cells = <1>;
++			#size-cells = <1>;
++
++			partition@0 {
++				label = "BL2";
++				reg = <0x00000 0x100000>;
++			};
++
++			partition@100000 {
++				label = "u-boot-env";
++				reg = <0x100000 0x80000>;
++			};
++
++			factory: partition@180000 {
++				label = "Factory";
++				reg = <0x180000 0x200000>;
++			};
++
++			partition@380000 {
++				label = "FIP";
++				reg = <0x380000 0x200000>;
++			};
++
++			partition@580000 {
++				label = "ubi";
++				reg = <0x580000 0x7280000>;
++			};
++		};
++	};
++};
++
++&switch {
++	ports {
++		#address-cells = <1>;
++		#size-cells = <0>;
++
++		port@0 {
++			reg = <0>;
++			label = "lan1";
++		};
++
++		port@1 {
++			reg = <1>;
++			label = "lan2";
++		};
++
++		port@2 {
++			reg = <2>;
++			label = "lan3";
++		};
++
++		port@6 {
++			reg = <6>;
++			ethernet = <&gmac0>;
++			phy-mode = "2500base-x";
++
++			fixed-link {
++				speed = <2500>;
++				full-duplex;
++				pause;
++			};
++		};
++	};
++};
++
++&pio {
++	spi0_flash_pins: spi0-pins {
++		mux {
++			function = "spi";
++			groups = "spi0", "spi0_wp_hold";
++		};
++
++		conf-pu {
++			pins = "SPI0_CS", "SPI0_HOLD", "SPI0_WP";
++			drive-strength = <8>;
++			bias-pull-up = <103>;
++		};
++
++		conf-pd {
++			pins = "SPI0_CLK", "SPI0_MOSI", "SPI0_MISO";
++			drive-strength = <8>;
++			bias-pull-down = <103>;
++		};
++	};
++};
++
++&uart0 {
++	status = "okay";
++};
++
++&watchdog {
++	status = "okay";
++};
++
++&wifi {
++	status = "okay";
++
++	mediatek,mtd-eeprom = <&factory 0x0>;
++};
+diff --git a/target/linux/mediatek/filogic/base-files/etc/board.d/01_leds b/target/linux/mediatek/filogic/base-files/etc/board.d/01_leds
+index 0a1f642c70924..fda3d4b98d875 100644
+--- a/target/linux/mediatek/filogic/base-files/etc/board.d/01_leds
++++ b/target/linux/mediatek/filogic/base-files/etc/board.d/01_leds
+@@ -20,6 +20,14 @@ confiabits,mt7981)
+ cudy,wr3000-v1)
+ 	ucidef_set_led_netdev "wan" "wan" "blue:wan" "wan"
+ 	;;
++imou,lc-hx3001)
++	ucidef_set_led_netdev "wan" "WAN" "green:wan" "eth1" "link"
++	ucidef_set_led_netdev "lan" "LAN" "green:lan" "br-lan" "link"
++	ucidef_set_led_netdev "wlan" "WLAN" "green:wlan" "phy1-ap0" "link"
++	;;
++konka,komi-a31)
++         ucidef_set_led_netdev "eth1" "eth1" "blue:status" "eth1" "link"
++	;;
+ mercusys,mr90x-v1)
+ 	ucidef_set_led_netdev "lan-0" "lan-0" "green:lan-0" "lan0" "link tx rx"
+ 	ucidef_set_led_netdev "lan-1" "lan-1" "green:lan-1" "lan1" "link tx rx"
+diff --git a/target/linux/mediatek/filogic/base-files/etc/board.d/02_network b/target/linux/mediatek/filogic/base-files/etc/board.d/02_network
+index 61637e09c7f0e..4048eddadb45a 100644
+--- a/target/linux/mediatek/filogic/base-files/etc/board.d/02_network
++++ b/target/linux/mediatek/filogic/base-files/etc/board.d/02_network
+@@ -130,6 +130,12 @@
+ 		wan_mac=$label_mac
+ 		lan_mac=$(macaddr_add "$label_mac" 2)
+ 		;;
++	imou,lc-hx3001)
++		lan_mac=$(mtd_get_mac_ascii u-boot-env mac)
++		[ -n "$lan_mac" ] || lan_mac=$(macaddr_add $(mtd_get_mac_binary Factory 0x4) -1)
++		wan_mac=$(macaddr_add $lan_mac 2)
++		label_mac="$lan_mac"
++		;;
+ 	h3c,magic-nx30-pro)
+ 		wan_mac=$(mtd_get_mac_ascii pdt_data_1 ethaddr)
+ 		lan_mac=$(macaddr_add "$wan_mac" 1)
+diff --git a/target/linux/mediatek/image/filogic.mk b/target/linux/mediatek/image/filogic.mk
+index 83428f0d981e7..6d2e9d713be02 100644
+--- a/target/linux/mediatek/image/filogic.mk
++++ b/target/linux/mediatek/image/filogic.mk
+@@ -589,6 +589,50 @@ endif
+ endef
+ TARGET_DEVICES += h3c_magic-nx30-pro-nmbm
+ 
++define Device/imou_lc-hx3001
++  DEVICE_VENDOR := IMOU
++  DEVICE_MODEL := LC-HX3001
++  DEVICE_DTS := mt7981b-imou-lc-hx3001
++  DEVICE_DTS_DIR := ../dts
++  DEVICE_PACKAGES := kmod-mt7981-firmware mt7981-wo-firmware
++  SUPPORTED_DEVICES += imou,lc-hx3001
++  UBINIZE_OPTS := -E 5
++  BLOCKSIZE := 128k
++  PAGESIZE := 2048
++  IMAGE_SIZE := 113152k
++  KERNEL_IN_UBI := 1
++  IMAGES += factory.bin
++  IMAGE/factory.bin := append-ubi | check-size $$$$(IMAGE_SIZE)
++  IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
++  KERNEL = kernel-bin | lzma | \
++	fit lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb
++  KERNEL_INITRAMFS = kernel-bin | lzma | \
++	fit lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb with-initrd
++endef
++TARGET_DEVICES += imou_lc-hx3001
++
++define Device/konka_komi-a31
++  DEVICE_VENDOR := KONKA
++  DEVICE_MODEL := KOMI A31
++  DEVICE_DTS := mt7981b-konka-komi-a31
++  DEVICE_DTS_DIR := ../dts
++  DEVICE_PACKAGES := kmod-mt7981-firmware mt7981-wo-firmware
++  SUPPORTED_DEVICES := konka,komi-a31
++  UBINIZE_OPTS := -E 5
++  BLOCKSIZE := 128k
++  PAGESIZE := 2048
++  IMAGE_SIZE := 114688k
++  KERNEL_IN_UBI := 1
++  IMAGES += factory.bin
++  IMAGE/factory.bin := append-ubi | check-size $$$$(IMAGE_SIZE)
++  IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
++  KERNEL = kernel-bin | lzma | \
++       fit lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb
++  KERNEL_INITRAMFS = kernel-bin | lzma | \
++       fit lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb with-initrd
++endef
++TARGET_DEVICES += konka_komi-a31
++
+ define Device/jcg_q30-pro
+   DEVICE_VENDOR := JCG
+   DEVICE_MODEL := Q30 PRO

+ 0 - 4
devices/mediatek_mt7981/.config

@@ -5,10 +5,6 @@ CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_glinet_gl-x3000=y
 CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_glinet_gl-xe3000=y
 CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_livinet_zr-3020=y
 CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_mt7981-clt-r30b1-112M=y
-CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_konka_komi-a31=y
-CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_imou_lc-hx3001=y
-CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_abt_asr3000=y
-CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_cmcc_a10=y
 CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_nradio_wt9103=y
 CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_nradio_wt9103_512m=y