TP-Link MR3020 v3 build problems


#1

I'm trying to create build for new TP-Link 3020 v3. Lede has no profile for 3020 v3. So as a base target system I choosed Mediatek Ralink MIPS, subtarget MT76x8 and target profile TL-WR841 v13. Is has the same chipset as 3020 v3.

I have two problems:

  1. Leds configuration.

gpio-leds {
compatible = "gpio-leds";

    power {
        label = "tl-wr841n-v13:green:power";
        gpios = <&gpio1 5 GPIO_ACTIVE_LOW>;
    };

    wan_green {
        label = "tl-wr841n-v13:green:wan";
        gpios = <&gpio1 11 GPIO_ACTIVE_LOW>;
    };

    wlan {
        label = "tl-wr841n-v13:green:wlan";
        gpios = <&gpio1 12 GPIO_ACTIVE_LOW>;
    };
};

Configuration of the above leds is correct. I can control each of them. The problem is with rest of leds.

Information from 3020 v3 bootloader:

######GPIO CTRL 0 for GPIO 0~32 OUTPUT tmp(0x0000000c)#####
##########Led gpio info: power(37),wps(2),lan(3),wan_green(43),wlan(44)#########

    wps {
        label = "tl-wr841n-v13:green:wps";
        gpios = <&gpio0 2 GPIO_ACTIVE_LOW>;
    };

    lan {
        label = "tl-wr841n-v13:green:lan";
        gpios = <&gpio0 3 GPIO_ACTIVE_LOW>;
    };

I think that, rest od leds are using gpio0, but this is wrong. Any ideas?

  1. Lan interface eth0 has status "unknown". It does not depend on the lan calbe connection to router. It is always "unknown".

#2

Do you have a tree on github?
I can help you with this device as it is pretty simple.

Also,is it v3 or v3.20 since they dont use the same code


#3

I don't have tree on github. This is v3 router, not 3.2


#4

Can you upload it?
This is not a good way to review code

Also,did you take flash dump and bootlog to check how partitions are set?


#5

I will try to upload to github.com. I'll let you know.

I have flash dump and bootlog.
Partitions from 3020 v3 are similar to WR841.

Info about partitions from 3020 v3:

Creating 7 MTD partitions on "raspi":
0x000000000000-0x000000020000 : "boot"
0x000000020000-0x000000170000 : "kernel"
0x000000170000-0x0000007c0000 : "rootfs"
mtd: partition "rootfs" set to be root filesystem
0x0000007c0000-0x0000007d0000 : "config"
0x0000007d0000-0x0000007e0000 : "romfile"
0x0000007e0000-0x0000007f0000 : "rom"
0x0000007f0000-0x000000800000 : "radio"

#6

I've fixed leds. I had to specify "i2s" as gpio function. Changes was made in &pinctrl configuration in file: TL-WR84XN.dtsi. After change:

&pinctrl {
	state_default: pinctrl0 {
		gpio {
			ralink,group = "gpio", "p0led_an", "p1led_an", "p2led_an", "p3led_an", "p4led_an", "perst", "refclk", "uart1", "wdt", "wled_an", "i2s";
			ralink,function = "gpio";
		};
	};
};

Full led configuration:

gpio-leds {
		compatible = "gpio-leds";

		power {
			label = "tl-wr841n-v13:green:power";
			gpios = <&gpio1 5 GPIO_ACTIVE_LOW>;
		};
		wps {
			label = "tl-wr841n-v13:green:wps";
			gpios = <&gpio0 2 GPIO_ACTIVE_LOW>;
		};
		lan {
			label = "tl-wr841n-v13:green:lan";
			gpios = <&gpio0 3 GPIO_ACTIVE_LOW>;
		};
		usb {
			label = "tl-wr841n-v13:green:usb";
			gpios = <&gpio1 11 GPIO_ACTIVE_LOW>;
		};
		wlan {
			label = "tl-wr841n-v13:green:wlan";
			gpios = <&gpio1 12 GPIO_ACTIVE_LOW>;
		};
	};

There is only problem with eth0 with "unknown" status. Tomorrow I'll try upload files to github.com.


#7

Dont do it like that.
You need to create new DTS specific for this device,not mess with current DTS for other devices


#8

I've created new DTS and generated image for 3020. After upgrading by tp_recovery.bin I can not make sysupgrade. There is error:

Device generic not supported by this image
Supported devices: tl-mr3020-v3
Image check 'fwtool_check_image' failed.

I think CpuInfo is good:

root@LEDE:/tmp/sysinfo# cat /proc/cpuinfo 
system type		: MediaTek MT7628AN ver:1 eco:2
machine			: TP-Link TL-MR3020 v3
processor		: 0
cpu model		: MIPS 24KEc V5.5
BogoMIPS		: 385.84
wait instruction	: yes
microsecond timers	: yes
tlb_entries		: 32
extra interrupt vector	: yes
hardware watchpoint	: yes, count: 4, address/irw mask: [0x0ffc, 0x0ffc, 0x0ffb, 0x0ffb]
isa			: mips1 mips2 mips32r1 mips32r2
ASEs implemented	: mips16 dsp
shadow register sets	: 1
kscratch registers	: 0
package			: 0
core			: 0
VCED exceptions		: not available
VCEI exceptions		: not available

But board name is allways "generic":

root@LEDE:~# cat /tmp/sysinfo/board_name 
generic

When I change board name to "tl-mr3020-v3" sysupgrade returns no error - BUT after sysupgrade board_name is still "generic" :rage: .
What should I do to set board name to "tl-mr3020-v3" ?

End of upgrade bin file contains board info as "ramips":

{ "supported_devices":["tl-mr3020-v3"], "version": { "dist": "LEDE", "version": "SNAPSHOT", "revision": "r5095-699c6fc", "board": "ramips" }

Everything was changed based on WR841N settings. I'v changed:

target/linux/ramips/image/mt76x8.mk
target/linux/ramips/dts/TL-MR3020V3.dts - added
target/linux/ramips/dts/TL-MR3020V3.dtsi - added
target/linux/ramips/base-files/etc/board.d/01_leds
target/linux/ramips/base-files/etc/board.d/02_network
target/linux/ramips/base-files/etc/diag.sh
target/linux/ramips/base-files/lib/rampis.sh
target/linux/ramips/base-files/lib/upgrade/platform.sh

#9

What do your target/linux/ramips/base-files/lib/ramips.sh and target/linux/ramips/dts/TL-MR3020V3.dts look like?

And please upload this to Github,it is really impossible to review code this way


#10

Before I upload this I have to clean this project. When I finish, I will upload files to github.

TL-MR3020V3.dts:

/dts-v1/;

#include "TL-MR3020V3.dtsi"

#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>

/ {
	compatible = "tplink,tl-mr3020-v3", "mediatek,mt7628an-soc";
	model = "TP-Link TL-MR3020 v3";

	gpio-keys-polled {
		compatible = "gpio-keys-polled";
		#address-cells = <1>;
		#size-cells = <0>;
		poll-interval = <20>;

		reset {
			label = "reset";
			gpios = <&gpio1 6 GPIO_ACTIVE_LOW>;
			linux,code = <KEY_WPS_BUTTON>;
		};

		
	};

	gpio-leds {
		compatible = "gpio-leds";

		power {
			label = "tl-mr3020-v3:green:power";
			gpios = <&gpio1 5 GPIO_ACTIVE_LOW>;
		};

		wps {
			label = "tl-mr3020-v3:green:wps";
			gpios = <&gpio0 2 GPIO_ACTIVE_LOW>;
		};


		lan {
			label = "tl-mr3020-v3:green:lan";
			gpios = <&gpio0 3 GPIO_ACTIVE_LOW>;
		};


		usb {
			label = "tl-mr3020-v3:green:usb";
			gpios = <&gpio1 11 GPIO_ACTIVE_LOW>;
		};


		wlan {
			label = "tl-mr3020-v3:green:wlan";
			gpios = <&gpio1 12 GPIO_ACTIVE_LOW>;
		};
	};
};

&pinctrl {
	state_default: pinctrl0 {
		gpio {
			ralink,group = "gpio", "p0led_an", "p1led_an", "p2led_an", "p3led_an", "p4led_an", "perst", "refclk", "uart1", "wdt", "wled_an", "i2s";
			ralink,function = "gpio";
		};
	};
};

#11

Where is ramips.sh?
And also,what do you even need TL-MR3020V3.dtsi for?


#12

TL-MR3020V3.dtsi is different from 841, so I've created one:

#include "mt7628an.dtsi"

/ {
	chosen {
		bootargs = "console=ttyS0,115200";
	};

	memory@0 {
		device_type = "memory";
		reg = <0x0 0x4000000>;
	};
};

&spi0 {
	status = "okay";

	m25p80@0 {
		#address-cells = <1>;
		#size-cells = <1>;
		compatible = "jedec,spi-nor";
		reg = <0>;
		spi-max-frequency = <10000000>;
		m25p,chunked-io = <32>;

		partition@0 {
			label = "boot";
			reg = <0x0 0x20000>;
			read-only;
		};

		partition@20000 {
			label = "firmware";
			reg = <0x20000 0x7a0000>;
		};

		partition@7c0000 {
			label = "config";
			reg = <0x7c0000 0x10000>;
			read-only;
		};

		factory: partition@7d0000 {
			label = "factory";
			reg = <0x7d0000 0x30000>;
			read-only;
		};
	};
};

&ehci {
	status = "okay";
};

&ohci {
	status = "okay";
};
&gpio0 {
	status = "okay";
};
&gpio1 {
	status = "okay";
};

&wmac {
	status = "okay";
	mtd-mac-address = <&factory 0xf100>;
	mediatek,mtd-eeprom = <&factory 0x20000>;
};

&ethernet {
	mtd-mac-address = <&factory 0xf100>;
	mediatek,portmap = "llllw";
};

ramips.sh:

#!/bin/sh
#
# Copyright (C) 2010-2013 OpenWrt.org
#

RAMIPS_BOARD_NAME=
RAMIPS_MODEL=

ramips_board_detect() {
	local machine
	local name

	machine=$(awk 'BEGIN{FS="[ \t]+:[ \t]"} /machine/ {print $2}' /proc/cpuinfo)

	case "$machine" in
	*"11AC NAS Router")
		name="11acnas"
		;;
	*"3G150B")
		name="3g150b"
		;;
	*"3G300M")
		name="3g300m"
		;;
	*"3g-6200n")
		name="3g-6200n"
		;;
	*"3g-6200nl")
		name="3g-6200nl"
		;;
	*"A5-V11")
		name="a5-v11"
		;;
	*"Ai-BR100")
		name="ai-br100"
		;;
	*"Air3GII")
		name="air3gii"
		;;
	*"ALL0239-3G")
		name="all0239-3g"
		;;
	*"ALL0256N (4M)")
		name="all0256n-4M"
		;;
	*"ALL0256N (8M)")
		name="all0256n-8M"
		;;
	*"ALL5002")
		name="all5002"
		;;
	*"ALL5003")
		name="all5003"
		;;
	*"AR670W")
		name="ar670w"
		;;
	*"AR725W")
		name="ar725w"
		;;
	*"ASL26555 (8M)")
		name="asl26555-8M"
		;;
	*"ASL26555 (16M)")
		name="asl26555-16M"
		;;
	*"ATP-52B")
		name="atp-52b"
		;;
	*"AWAPN2403")
		name="awapn2403"
		;;
	*"AWM002 EVB (4M)")
		name="awm002-evb-4M"
		;;
	*"AWM002 EVB (8M)")
		name="awm002-evb-8M"
		;;
	*"BC2")
		name="bc2"
		;;
	*"BR-6475nD")
		name="br-6475nd"
		;;
	*"Broadway")
		name="broadway"
		;;
	*"C108")
		name="c108"
		;;
	*"C20")
		name="c20"
		;;
	*"C20i")
		name="c20i"
		;;
	*"C50")
		name="c50"
		;;
	*"Carambola")
		name="carambola"
		;;
	*"CF-WR800N")
		name="cf-wr800n"
		;;
	*"CS-QR10")
		name="cs-qr10"
		;;
	*"CY-SWR1100")
		name="cy-swr1100"
		;;
	*"D105")
		name="d105"
		;;
	*"D240")
		name="d240"
		;;
	*"DAP-1350")
		name="dap-1350"
		;;
	*"DB-WRT01")
		name="db-wrt01"
		;;
	*"DCH-M225")
		name="dch-m225"
		;;
	*"DCS-930")
		name="dcs-930"
		;;
	*"DCS-930L B1")
		name="dcs-930l-b1"
		;;
	*"DIR-300 B1")
		name="dir-300-b1"
		;;
	*"DIR-300 B7")
		name="dir-300-b7"
		;;
	*"DIR-320 B1")
		name="dir-320-b1"
		;;
	*"DIR-600 B1")
		name="dir-600-b1"
		;;
	*"DIR-610 A1")
		name="dir-610-a1"
		;;
	*"DIR-615 D")
		name="dir-615-d"
		;;
	*"DIR-615 H1")
		name="dir-615-h1"
		;;
	*"DIR-620 A1")
		name="dir-620-a1"
		;;
	*"DIR-620 D1")
		name="dir-620-d1"
		;;
	*"DIR-645")
		name="dir-645"
		;;
	*"DIR-810L")
		name="dir-810l"
		;;
	*"DIR-860L B1")
		name="dir-860l-b1"
		;;
	*"Dovado Tiny AC")
		name="tiny-ac"
		;;
	*"DuZun DM06")
		name="duzun-dm06"
		;;
	*"DWR-512 B")
		name="dwr-512-b"
		;;
	*"E1700")
		name="e1700"
		;;
	*"ESR-9753")
		name="esr-9753"
		;;
	*"EW1200")
		name="ew1200"
		;;
	*"EX2700")
		name="ex2700";
		;;
	*"EX3700/EX3800")
		name="ex3700"
		;;
	*"F5D8235 v1")
		name="f5d8235-v1"
		;;
	*"F5D8235 v2")
		name="f5d8235-v2"
		;;
	*"F7C027")
		name="f7c027"
		;;
	*"FireWRT")
		name="firewrt"
		;;
	*"Fonera 2.0N")
		name="fonera20n"
		;;
	*"FreeStation5")
		name="freestation5"
		;;
	*"GB-PC1")
		name="gb-pc1"
		;;
	*"GL-MT300A")
		name="gl-mt300a"
		;;
	*"GL-MT300N")
		name="gl-mt300n"
		;;
	*"GL-MT750")
		name="gl-mt750"
		;;
	*"GL-MT300N-V2")
		name="gl-mt300n-v2"
		;;
	*"HC5661")
		name="hc5661"
		;;
	*"HC5661A")
		name="hc5661a"
		;;
	*"HC5761")
		name="hc5761"
		;;
	*"HC5861")
		name="hc5861"
		;;
	*"HC5962")
		name="hc5962"
		;;
	*"HG255D")
		name="hg255d"
		;;
	*"HLK-RM04")
		name="hlk-rm04"
		;;
	*"HPM")
		name="hpm"
		;;
	*"HT-TM02")
		name="ht-tm02"
		;;
	*"HW550-3G")
		name="hw550-3g"
		;;
	*"IP2202")
		name="ip2202"
		;;
	*"JHR-N805R")
		name="jhr-n805r"
		;;
	*"JHR-N825R")
		name="jhr-n825r"
		;;
	*"JHR-N926R")
		name="jhr-n926r"
		;;
	*"K2P")
		name="k2p"
		;;
	*"M3")
		name="m3"
		;;
	*"M4 (4M)")
		name="m4-4M"
		;;
	*"M4 (8M)")
		name="m4-8M"
		;;
	*"MediaTek LinkIt Smart 7688")
		linkit="$(dd bs=1 skip=1024 count=12 if=/dev/mtd2 2> /dev/null)"
		if [ "${linkit}" = "LINKITS7688D" ]; then
			name="linkits7688d"
			RAMIPS_MODEL="${machine} DUO"
		else
			name="linkits7688"
		fi
		;;
	*"Memory 2 Move")
		name="m2m"
		;;
	*"Mercury MAC1200R v2")
		name="mac1200rv2"
		;;
	*"Mi Router 3G")
		name="mir3g"
		;;
	*"MicroWRT")
		name="microwrt"
		;;
	*"MiniEMBPlug")
		name="miniembplug"
		;;
	*"MiniEMBWiFi")
		name="miniembwifi"
		;;
	*"MiWiFi Mini")
		name="miwifi-mini"
		;;
	*"MiWiFi Nano")
		name="miwifi-nano"
		;;
	*"MLW221")
		name="mlw221"
		;;
	*"MLWG2")
		name="mlwg2"
		;;
	*"MOFI3500-3GN")
		name="mofi3500-3gn"
		;;
	*"MPR-A1")
		name="mpr-a1"
		;;
	*"MPR-A2")
		name="mpr-a2"
		;;
	*"MR-102N")
		name="mr-102n"
		;;
	*"MR200")
		name="mr200"
		;;
	*"MT7620a + MT7530 evaluation"*)
		name="mt7620a_mt7530"
		;;
	*"MT7620a V22SG"*)
		name="mt7620a_v22sg"
		;;
	*"MT7621 evaluation"*)
		name="mt7621"
		;;
	*"MT7628AN evaluation"*)
		name="mt7628"
		;;
	*"MT7688 evaluation"*)
		name="mt7688"
		;;
	*"MZK-750DHP")
		name="mzk-750dhp"
		;;
	*"MZK-DP150N")
		name="mzk-dp150n"
		;;
	*"MZK-EX300NP")
		name="mzk-ex300np"
		;;
	*"MZK-EX750NP")
		name="mzk-ex750np"
		;;
	*"MZK-W300NH2"*)
		name="mzk-w300nh2"
		;;
	*"MZK-WDPR"*)
		name="mzk-wdpr"
		;;
	*"NA930")
		name="na930"
		;;
	*"NBG-419N")
		name="nbg-419n"
		;;
	*"NBG-419N v2")
		name="nbg-419n2"
		;;
	*"Newifi-D1")
		name="newifi-d1"
		;;
	*"NCS601W")
		name="ncs601w"
		;;
	*"NixcoreX1 (8M)")
		name="nixcore-x1-8M"
		;;
	*"NixcoreX1 (16M)")
		name="nixcore-x1-16M"
		;;
	*"NW718")
		name="nw718"
		;;
	*"Onion Omega2")
		name="omega2"
		;;
	*"Onion Omega2+")
		name="omega2p"
		;;
	*"OY-0001")
		name="oy-0001"
		;;
	*"PBR-D1")
		name="pbr-d1"
		;;
	*"PBR-M1")
		name="pbr-m1"
		;;
	*"PSG1208")
		name="psg1208"
		;;
	*"PSG1218 rev.A")
		name="psg1218a"
		;;
	*"PSG1218 rev.B")
		name="psg1218b"
		;;
	*"PSR-680W"*)
		name="psr-680w"
		;;
	*"PWH2004")
		name="pwh2004"
		;;
	*"PX-4885 (4M)")
		name="px-4885-4M"
		;;
	*"PX-4885 (8M)")
		name="px-4885-8M"
		;;
	*"Q7")
		name="zte-q7"
		;;
	*"R6220")
		name="r6220"
		;;
	*"RB750Gr3")
		name="rb750gr3"
		;;
	*"RE350 v1")
		name="re350-v1"
		;;
	*"RE6500")
		name="re6500"
		;;
	*"RN502J")
		name="xdxrn502j"
		;;
	*"RP-N53")
		name="rp-n53"
		;;
	*"RT5350F-OLinuXino")
		name="rt5350f-olinuxino"
		;;
	*"RT5350F-OLinuXino-EVB")
		name="rt5350f-olinuxino-evb"
		;;
	*"RT-AC51U")
		name="rt-ac51u"
		;;
	*"RT-G32 B1")
		name="rt-g32-b1"
		;;
	*"RT-N10+")
		name="rt-n10-plus"
		;;
	*"RT-N13U")
		name="rt-n13u"
		;;
	*"RT-N14U")
		name="rt-n14u"
		;;
	*"RT-N15")
		name="rt-n15"
		;;
	*"RT-N56U")
		name="rt-n56u"
		;;
	*"RUT5XX")
		name="rut5xx"
		;;
	*"SamKnows Whitebox 8")
		name="sk-wb8"
		;;
	*"SAP-G3200U3")
		name="sap-g3200u3"
		;;
	*"SL-R7205"*)
		name="sl-r7205"
		;;
	*"TEW-638APB v2")
		name="tew-638apb-v2"
		;;
	*"TEW-691GR")
		name="tew-691gr"
		;;
	*"TEW-692GR")
		name="tew-692gr"
		;;
	*"TEW-714TRU")
		name="tew-714tru"
		;;
	*"Timecloud")
		name="timecloud"
		;;
	*"TL-WR840N v4")
		name="tl-wr840n-v4"
		;;
	*"TL-WR841N v13")
		name="tl-wr841n-v13"
		;;
	*"TL-MR3020 V3")
		name="tl-mr3020-v3"
		;;
	*"U25AWF-H1")
		name="u25awf-h1"
		;;
	*"UBNT-ERX")
		name="ubnt-erx"
		;;
	*"UBNT-ERX-SFP")
		name="ubnt-erx-sfp"
		;;
	*"UR-326N4G")
		name="ur-326n4g"
		;;
	*"UR-336UN")
		name="ur-336un"
		;;
	*"V11ST-FE")
		name="v11st-fe"
		;;
	*"V22RW-2X2")
		name="v22rw-2x2"
		;;
	*"VoCore (8M)")
		name="vocore-8M"
		;;
	*"VoCore (16M)")
		name="vocore-16M"
		;;
	*"VoCore2")
		name="vocore2"
		;;
	*"VoCore2-Lite")
		name="vocore2lite"
		;;
	*"VR500")
		name="vr500"
		;;
	*"W150M")
		name="w150m"
		;;
	*"W2914NS v2")
		name="w2914nsv2"
		;;
	*"W306R V2.0")
		name="w306r-v20"
		;;
	*"W502U")
		name="w502u"
		;;
	*"WCR-1166DS")
		name="wcr-1166ds"
		;;
	*"WCR-150GN")
		name="wcr-150gn"
		;;
	*"WE1026-5G (16M)")
		name="we1026-5g-16m"
		;;
	*"WF-2881")
		name="wf-2881"
		;;
	*"WHR-1166D")
		name="whr-1166d"
		;;
	*"WHR-300HP2")
		name="whr-300hp2"
		;;
	*"WHR-600D")
		name="whr-600d"
		;;
	*"WHR-G300N")
		name="whr-g300n"
		;;
	*"Widora-NEO")
		name="widora-neo"
		;;
	*"WiTi")
                name="witi"
		;;
	*"WIZARD 8800")
		name="wizard8800"
		;;
	*"WizFi630A")
		name="wizfi630a"
		;;
	*"WL-330N")
		name="wl-330n"
		;;
	*"WL-330N3G")
		name="wl-330n3g"
		;;
	*"WL-341 v3")
		name="wl-341v3"
		;;
	*"WL-351 v1 002")
		name="wl-351"
		;;
	*"WL-WN575A3")
		name="wl-wn575a3"
		;;
	*"WLI-TX4-AG300N")
		name="wli-tx4-ag300n"
		;;
	*"WLR-6000")
		name="wlr-6000"
		;;
	*"WMDR-143N")
		name="wmdr-143n"
		;;
	*"WMR-300")
		name="wmr-300"
		;;
	*"WN3000RPv3")
		name="wn3000rpv3"
		;;
	*"WNCE2001")
		name="wnce2001"
		;;
	*"WNDR3700v5")
		name="wndr3700v5"
		;;
	*"WR512-3GN (4M)")
		name="wr512-3gn-4M"
		;;
	*"WR512-3GN (8M)")
		name="wr512-3gn-8M"
		;;
	*"WR6202")
		name="wr6202"
		;;
	*"WRH-300CR")
		name="wrh-300cr"
		;;
	*"WRTNODE")
		name="wrtnode"
		;;
	*"WRTnode2R")
		name="wrtnode2r"
		;;
	*"WRTnode2P")
		name="wrtnode2p"
		;;
	*"WSR-1166DHP")
		name="wsr-1166"
		;;
	*"WSR-600DHP")
		name="wsr-600"
		;;
	*"WT1520 (4M)")
		name="wt1520-4M"
		;;
	*"WT1520 (8M)")
		name="wt1520-8M"
		;;
	*"WT3020 (4M)")
		name="wt3020-4M"
		;;
	*"WT3020 (8M)")
		name="wt3020-8M"
		;;
	*"WZR-AGL300NH")
		name="wzr-agl300nh"
		;;
	*"X5")
		name="x5"
		;;
	*"X8")
		name="x8"
		;;
	*"Y1")
		name="y1"
		;;
	*"Y1S")
		name="y1s"
		;;
	*"ZBT-APE522II")
		name="zbt-ape522ii"
		;;
	*"ZBT-CPE102")
		name="zbt-cpe102"
		;;
	*"ZBT-WA05")
		name="zbt-wa05"
		;;
	*"ZBT-WE1326")
		name="zbt-we1326"
		;;
	*"ZBT-WE2026")
		name="zbt-we2026"
		;;
	*"ZBT-WE826 (16M)")
		name="zbt-we826-16M"
		;;
	*"ZBT-WE826 (32M)")
		name="zbt-we826-32M"
		;;
	*"ZBT-WG2626")
		name="zbt-wg2626"
		;;
	*"ZBT-WG3526 (16M)")
		name="zbt-wg3526-16M"
		;;
	*"ZBT-WG3526 (32M)")
		name="zbt-wg3526-32M"
		;;
	*"ZBT-WR8305RT")
		name="zbt-wr8305rt"
		;;
	*"ZyXEL Keenetic")
		name="kn"
		;;
	*"ZyXEL Keenetic Omni")
		name="kn_rc"
		;;
	*"ZyXEL Keenetic Omni II")
		name="kn_rf"
		;;
	*"ZyXEL Keenetic Viva")
		name="kng_rc"
		;;
	*"YK1")
		name="youku-yk1"
		;;
	*)
		name="generic"
		;;
	esac

	[ -z "$RAMIPS_BOARD_NAME" ] && RAMIPS_BOARD_NAME="$name"
	[ -z "$RAMIPS_MODEL" ] && RAMIPS_MODEL="$machine"

	[ -e "/tmp/sysinfo/" ] || mkdir -p "/tmp/sysinfo/"

	echo "$RAMIPS_BOARD_NAME" > /tmp/sysinfo/board_name
	echo "$RAMIPS_MODEL" > /tmp/sysinfo/model
}

platform.sh:

#
# Copyright (C) 2010 OpenWrt.org
#

PART_NAME=firmware

platform_check_image() {
	local board=$(board_name)
	local magic="$(get_magic_long "$1")"

	[ "$#" -gt 1 ] && return 1

	case "$board" in
	3g150b|\
	3g300m|\
	a5-v11|\
	ai-br100|\
	air3gii|\
	all0239-3g|\
	all0256n-4M|\
	all0256n-8M|\
	all5002|\
	all5003|\
	ar725w|\
	asl26555-8M|\
	asl26555-16M|\
	awapn2403|\
	awm002-evb-4M|\
	awm002-evb-8M|\
	bc2|\
	broadway|\
	c108|\
	carambola|\
	cf-wr800n|\
	cs-qr10|\
	d105|\
	d240|\
	dap-1350|\
	db-wrt01|\
	dcs-930|\
	dcs-930l-b1|\
	dir-300-b1|\
	dir-300-b7|\
	dir-320-b1|\
	dir-600-b1|\
	dir-615-d|\
	dir-615-h1|\
	dir-620-a1|\
	dir-620-d1|\
	dir-810l|\
	duzun-dm06|\
	dwr-512-b|\
	e1700|\
	esr-9753|\
	ew1200|\
	ex2700|\
	ex3700|\
	f7c027|\
	firewrt|\
	fonera20n|\
	freestation5|\
	gb-pc1|\
	gl-mt300a|\
	gl-mt300n|\
	gl-mt750|\
	gl-mt300n-v2|\
	hc5*61|\
	hc5661a|\
	hg255d|\
	hlk-rm04|\
	hpm|\
	ht-tm02|\
	hw550-3g|\
	ip2202|\
	jhr-n805r|\
	jhr-n825r|\
	jhr-n926r|\
	k2p|\
	kn|\
	kn_rc|\
	kn_rf|\
	kng_rc|\
	linkits7688|\
	linkits7688d|\
	m2m|\
	m3|\
	m4-4M|\
	m4-8M|\
	mac1200rv2|\
	microwrt|\
	miniembplug|\
	miniembwifi|\
	miwifi-mini|\
	miwifi-nano|\
	mlw221|\
	mlwg2|\
	mofi3500-3gn|\
	mpr-a1|\
	mpr-a2|\
	mr-102n|\
	mt7628|\
	mzk-750dhp|\
	mzk-dp150n|\
	mzk-ex300np|\
	mzk-ex750np|\
	mzk-w300nh2|\
	mzk-wdpr|\
	nbg-419n|\
	nbg-419n2|\
	newifi-d1|\
	nixcore-x1-8M|\
	nixcore-x1-16M|\
	nw718|\
	omega2|\
	omega2p|\
	oy-0001|\
	pbr-d1|\
	pbr-m1|\
	psg1208|\
	psg1218a|\
	psg1218b|\
	psr-680w|\
	px-4885-4M|\
	px-4885-8M|\
	rb750gr3|\
	re6500|\
	rp-n53|\
	rt5350f-olinuxino|\
	rt5350f-olinuxino-evb|\
	rt-ac51u|\
	rt-g32-b1|\
	rt-n10-plus|\
	rt-n13u|\
	rt-n14u|\
	rt-n15|\
	rt-n56u|\
	rut5xx|\
	sap-g3200u3|\
	sk-wb8|\
	sl-r7205|\
	tew-638apb-v2|\
	tew-691gr|\
	tew-692gr|\
	tew-714tru|\
	timecloud|\
	tiny-ac|\
	u25awf-h1|\
	ur-326n4g|\
	ur-336un|\
	v22rw-2x2|\
	vocore-8M|\
	vocore-16M|\
	vocore2|\
	vocore2lite|\
	vr500|\
	w150m|\
	w2914nsv2|\
	w306r-v20|\
	w502u|\
	wf-2881|\
	whr-1166d|\
	whr-300hp2|\
	whr-600d|\
	whr-g300n|\
	widora-neo|\
	witi|\
	wizfi630a|\
	wl-330n|\
	wl-330n3g|\
	wl-341v3|\
	wl-351|\
	wl-wn575a3|\
	wli-tx4-ag300n|\
	wlr-6000|\
	wmdr-143n|\
	wmr-300|\
	wn3000rpv3|\
	wnce2001|\
	wndr3700v5|\
	wr512-3gn-4M|\
	wr512-3gn-8M|\
	wr6202|\
	wrh-300cr|\
	wrtnode|\
	wrtnode2r |\
	wrtnode2p |\
	wsr-600|\
	wt1520-4M|\
	wt1520-8M|\
	wt3020-4M|\
	wt3020-8M|\
	wzr-agl300nh|\
	x5|\
	x8|\
	y1|\
	y1s|\
	we1026-5g-16m|\
	zbt-ape522ii|\
	zbt-cpe102|\
	zbt-wa05|\
	zbt-we1326|\
	zbt-we2026|\
	zbt-we826-16M|\
	zbt-we826-32M|\
	zbt-wg2626|\
	zbt-wg3526-16M|\
	zbt-wg3526-32M|\
	zbt-wr8305rt|\
	zte-q7|\
	youku-yk1)
		[ "$magic" != "27051956" ] && {
			echo "Invalid image type."
			return 1
		}
		return 0
		;;
	3g-6200n|\
	3g-6200nl|\
	br-6475nd)
		[ "$magic" != "43535953" ] && {
			echo "Invalid image type."
			return 1
		}
		return 0
		;;

	ar670w)
		[ "$magic" != "6d000080" ] && {
			echo "Invalid image type."
			return 1
		}
		return 0
		;;
	c20|\
	c20i|\
	c50|\
	mr200|\
	tl-wr840n-v4|\
	tl-wr841n-v13|\
	tl-mr3020-v3)
		[ "$magic" != "03000000" ] && {
			echo "Invalid image type."
			return 1
		}
		return 0
		;;
	cy-swr1100|\
	dch-m225|\
	dir-610-a1|\
	dir-645|\
	dir-860l-b1)
		[ "$magic" != "5ea3a417" ] && {
			echo "Invalid image type."
			return 1
		}
		return 0
		;;
	hc5962|\
	mir3g|\
	r6220)
		# these boards use metadata images
		return 0
		;;
	re350-v1)
		[ "$magic" != "01000000" ] && {
			echo "Invalid image type."
			return 1
		}
		return 0
		;;
	ubnt-erx|\
	ubnt-erx-sfp)
		nand_do_platform_check "$board" "$1"
		return $?;
		;;
	wcr-1166ds|\
	wsr-1166)
		[ "$magic" != "48445230" ] && {
			echo "Invalid image type."
			return 1
		}
		return 0
		;;
	esac

	echo "Sysupgrade is not yet supported on $board."
	return 1
}

platform_nand_pre_upgrade() {
	local board=$(board_name)

	case "$board" in
	ubnt-erx|\
	ubnt-erx-sfp)
		platform_upgrade_ubnt_erx "$ARGV"
		;;
	esac
}

platform_do_upgrade() {
	local board=$(board_name)

	case "$board" in
	hc5962|\
	mir3g|\
	r6220|\
	ubnt-erx|\
	ubnt-erx-sfp)
		nand_do_upgrade "$ARGV"
		;;
	*)
		default_do_upgrade "$ARGV"
		;;
	esac
}

disable_watchdog() {
	killall watchdog
	( ps | grep -v 'grep' | grep '/dev/watchdog' ) && {
		echo 'Could not disable watchdog'
		return 1
	}
}

blink_led() {
	. /etc/diag.sh; set_state upgrade
}

append sysupgrade_pre_upgrade disable_watchdog
append sysupgrade_pre_upgrade blink_led

#13

And part of mt76x8.mk:

define Device/tl-mr3020-v3
  DTS := TL-MR3020V3
  IMAGE_SIZE := 7808k
  DEVICE_TITLE := TP-Link TL-MR3020 v3
  TPLINK_FLASHLAYOUT := 8Mmtk
  TPLINK_HWID := 0x08410013
  TPLINK_HWREV := 0x268
  TPLINK_HWREVADD := 0x13
  TPLINK_HVERSION := 3
  KERNEL := $(KERNEL_DTB)
  KERNEL_INITRAMFS := $(KERNEL_DTB) | tplink-v2-header -e
  IMAGES += tftp-recovery.bin
  IMAGE/factory.bin := tplink-v2-image -e
  IMAGE/tftp-recovery.bin := pad-extra 128k | $$(IMAGE/factory.bin)
  IMAGE/sysupgrade.bin := tplink-v2-image -s -e | append-metadata | \
	check-size $$$$(IMAGE_SIZE)
endef
TARGET_DEVICES+=tl-mr3020-v3

#14

From what I see, it is configured correctly.
It's most likely some syntax error.
Please don't create a dtsi just for this one device.
dtsi is used to reuse same code in similar devices.

Put all of the stuff from that dtsi into dts of the device.

Also, since you are reusing whole device definition in mt76x8.mk
Just call 841n-v13 profile instead of defining everything again.
Although I am pretty sure that TPLINK_HWID, TPLINK_HWREV, and TPLINK_HWREVADD are different for MR3020-v3


#15

Ok, thank you.

Do you know values of TPLINK_HWID, TPLINK_HWREV, and TPLINK_HWREVADD or know where to search it for?


#16

They are in GPL sources.
Usually in reduced_data_model.xml


#17

I compared reduced_data_model for 3020v3 and 840v5.

840v5:

<X_TP_ProductID t=u r=R d=0x08400005 nw=1 h=1 /> - from /targets/reduced_data_model_plaintext_WR840NV5.xml
<X_TP_ProductID t=u r=R d=0x89741003 nw=1 h=1 /> - from /sysfiles/config/cn/common/reduced_data_model.xml

Product Id are different, but in mt76x8.mk there is value TPLINK_HWID := 0x08400005.

For 3020v3:
<X_TP_ProductID t=u r=R d=0x89741003 nw=1 h=1 /> - only in /sysfiles/config/en/common/reduced_data_model.xml

with 0x89741003 value - the same as 840v5. I think the right value should be TPLINK_HWID := 0x03020003.
I can't find other variables:

  TPLINK_HWREV
  TPLINK_HWREVADD 
  TPLINK_HVERSION

I think TPLINK_HWREVADD should be set to 0x3 - as router 3020 version V3 - like:

  TPLINK_HWREVADD := 0x5 - in tl-wr840n-v5
  TPLINK_HWREVADD := 0x4 - in tl-wr840n-v4
  TPLINK_HWREVADD := 0x13 - in tl-wr841n-v13

I do not know how to identify TPLINK_HWREV (SoftwareRevision ? ) and TPLINK_HVERSION (PlatformVersion or DevModelVersion ?). Could you describe this variables?


#18

Its TP-Link,pretty hard to guess why they use stuff when they use it.
It could be that stock firmware on MR3020 v3 does not check product ID at all if you were able to flash OpenWRT with 840 v5 ID


#19

The problem with wrong "/tmp/sysinfo/board_name" was in file ramips.sh:

      *"TL-MR3020 V3")
		name="tl-mr3020-v3"
		;;

Should be (change V3 -> v3):

        *"TL-MR3020 v3")
		name="tl-mr3020-v3"
		;;

#20

Do you know where could be problem with strange files in /bin/ ?? - see attachment
Lede - bin

I think they are connected with errors that I can reed from uart inside device:

root@LED/bin/ash: root@LEDE:/#: not found

root@LEDE:/# 

root@LEDE:/# 

root@LEDE:/# 

root@LEDE:/# root@LEDE:/# > 

/bin/ash: syntax error: unexpected newline

root@LEDE:/# 

root@LEDE:/# 

root@LEDE:/# 

root@LEDE:/# /bin/ash: syntax error: unexpected newline

E:/# 

root@LEDE:/# root@LEDE:/# > 

/bin/ash: syntax error: /bin/ash: /bin/ash:: Permission denied

root@LEDE:/# 

root@LEDE:/# 

root@LEDE:/# 

root@LEDE:/# root@LEDE:/#

I switched device to full debug, but there is no errors connected to errors above.