Message ID | 87imwkbpvn.fsf@husum.klickitat.com |
---|---|
State | Rejected, archived |
Headers | show |
Series | [OpenWrt-Devel] ath79: add support for tplink tl-wdr3600 modified with 16M flash | expand |
Hi! On Fri, Mar 15, 2019 at 2:42 PM Russell Senior <russell@personaltelco.net> wrote: > > > To modify a WDR3600 with 16MB flash, you will need an external SPI programmer > and soldering tools. First, obtain a copy of the starting contents either with > the external programmer or from commands in OpenWrt: Unfortunately OpenWrt never accepts device support requiring hardware modifications. I think part of the reason is that there are too many possible variants when it comes to hardware modifications and all those variants will make users confused. Some maintainers talked about this problem in a past thread but I can't find it now. Regards, Chuanhong Guo
Hi, W dniu 2019-03-15 o 10:18, Chuanhong Guo pisze: > Hi! > On Fri, Mar 15, 2019 at 2:42 PM Russell Senior > <russell@personaltelco.net> wrote: >> To modify a WDR3600 with 16MB flash, you will need an external SPI programmer >> and soldering tools. First, obtain a copy of the starting contents either with >> the external programmer or from commands in OpenWrt: > Unfortunately OpenWrt never accepts device support requiring hardware > modifications. > I think part of the reason is that there are too many possible > variants when it comes to hardware modifications and all those > variants will make users confused. Yeah, that's the rule. In ar71xx such Device Tree mods weren't needed at all, flash size was autodetected at bootup. Maybe you can think about implementing such generic autodetection mechanism for ath79 target instead, so there would be no need to support modded routers explicitly, so standard images could be used on modded routers too. I think that quite many users could benefit from this. > Some maintainers talked about this problem in a past thread but I > can't find it now. > > Regards, > Chuanhong Guo > > _______________________________________________ > openwrt-devel mailing list > openwrt-devel@lists.openwrt.org > https://lists.openwrt.org/mailman/listinfo/openwrt-devel >
diff --git a/target/linux/ath79/base-files/etc/board.d/02_network b/target/linux/ath79/base-files/etc/board.d/02_network index e66eb938fd..5701372ed5 100755 --- a/target/linux/ath79/base-files/etc/board.d/02_network +++ b/target/linux/ath79/base-files/etc/board.d/02_network @@ -170,6 +170,7 @@ ath79_setup_interfaces() tplink,archer-c7-v4|\ tplink,archer-c7-v5|\ tplink,tl-wdr3600|\ + tplink,tl-wdr3600-16m|\ tplink,tl-wdr4300) ucidef_add_switch "switch0" \ "0@eth0" "2:lan:1" "3:lan:2" "4:lan:3" "5:lan:4" "1:wan" diff --git a/target/linux/ath79/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom b/target/linux/ath79/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom index 84e4d07b35..40ea3f3a42 100644 --- a/target/linux/ath79/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom +++ b/target/linux/ath79/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom @@ -146,6 +146,7 @@ case "$FIRMWARE" in ;; ocedo,raccoon|\ tplink,tl-wdr3600|\ + tplink,tl-wdr3600-16m|\ tplink,tl-wdr4300|\ tplink,tl-wdr4900-v2|\ winchannel,wb2000) diff --git a/target/linux/ath79/dts/ar9344_tplink_tl-wdr3600-16m.dts b/target/linux/ath79/dts/ar9344_tplink_tl-wdr3600-16m.dts new file mode 100644 index 0000000000..ca8fd077e3 --- /dev/null +++ b/target/linux/ath79/dts/ar9344_tplink_tl-wdr3600-16m.dts @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT +/dts-v1/; + +#include "ar9344_tplink_tl-wdr4300.dtsi" + +/ { + model = "TP-Link WDR3600 16M"; + compatible = "tplink,tl-wdr3600-16m", "qca,ar9344"; +}; + +&spi { + num-cs = <1>; + + status = "okay"; + + flash@0 { + compatible = "jedec,spi-nor"; + reg = <0>; + spi-max-frequency = <25000000>; + + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + uboot: partition@0 { + label = "u-boot"; + reg = <0x000000 0x020000>; + read-only; + }; + + partition@20000 { + compatible = "tplink,firmware"; + label = "firmware"; + reg = <0x020000 0xfd0000>; + }; + + art: partition@7f0000 { + label = "art"; + reg = <0xff0000 0x010000>; + read-only; + }; + }; + }; +}; + diff --git a/target/linux/ath79/image/generic-tp-link.mk b/target/linux/ath79/image/generic-tp-link.mk index e82a5a3073..bd8365618b 100644 --- a/target/linux/ath79/image/generic-tp-link.mk +++ b/target/linux/ath79/image/generic-tp-link.mk @@ -152,6 +152,16 @@ define Device/tplink_tl-wdr3600 endef TARGET_DEVICES += tplink_tl-wdr3600 +define Device/tplink_tl-wdr3600-16m + $(Device/tplink-16mlzma) + ATH_SOC := ar9344 + DEVICE_TITLE := TP-Link TL-WDR3600 16M + DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport + TPLINK_HWID := 0x36000001 + SUPPORTED_DEVICES += tl-wdr3600-16m +endef +TARGET_DEVICES += tplink_tl-wdr3600-16m + define Device/tplink_tl-wdr4300 $(Device/tplink-8mlzma) ATH_SOC := ar9344
To modify a WDR3600 with 16MB flash, you will need an external SPI programmer and soldering tools. First, obtain a copy of the starting contents either with the external programmer or from commands in OpenWrt: # dd if=/dev/mtdblock0 of=/tmp/uboot.img # dd if=/dev/mtdblock1 of=/tmp/firmware.img # dd if=/dev/mtdblock5 of=/tmp/art.img Copy the files off the router. In order to make clean reads/writes with the external SPI programmer, it is helpful to hold the CPU in reset. To do this, solder a shunt across R2 near the JTAG header so that a jumper between pin 10 and pin 11 of the JTAG header can hold the RESET pin low. It is probabaly worth trying out your external SPI programmer by reading a few copies before desoldering the original flash part. Desolder the SPI flash in the middle of the board. Solder on the new one, noting the correct orientation. Build the pepe2k u-boot for the WDR3600 (branch with support added): $ git clone https://github.com/RussellSenior/u-boot_mod/tree/add-wdr3600-16m $ make tp-link_tl-wdr3600_16m Extract the novel bits from your original uboot.img, thusly: $ dd if=uboot.img of=macaddr.bin bs=1 skip=130048 count=6 $ dd if=uboot.img of=model.bin bs=1 skip=130304 count=8 $ dd if=uboot.img of=pin.bin bs=1 skip=130560 count=8 $ dd if=/dev/zero bs=64k count=2 | tr '\000' '\377' > u-boot-new.img $ dd if=u-boot_mod.bin of=u-boot-new.img conv=notrunc $ dd if=macaddr.bin of=u-boot-new.img bs=1 count=6 seek=130048 conv=notrunc $ dd if=model.bin of=u-boot-new.img bs=1 count=8 seek=130304 conv=notrunc $ dd if=pin.bin of=u-boot-new.img bs=1 count=8 seek=130560 conv=notrunc where u-boot_mod.bin is the u-boot image built using the pepe2k tree with patches for the 16MB flash size. Compose a new 16MB image: $ dd if=/dev/zero bs=1M count=16 | tr '\000' '\377' > 16MB-new.img $ dd if=u-boot-new.img of=16MB-new.img conv=notrunc $ dd if=openwrt-ath79-generic-tplink_tl-wdr3600-16m-squashfs-sysupgrade.bin of=16MB-new.img bs=64k seek=2 conv=notrunc $ dd if=art.bin of=16MB-new.img bs=64k seek=255 conv=notrunc Then, use your external SPI flash programmer to write 16MB-new.img to the new flash part. Signed-off-by: Russell Senior <russell@personaltelco.net> --- .../ath79/base-files/etc/board.d/02_network | 1 + .../etc/hotplug.d/firmware/10-ath9k-eeprom | 1 + .../dts/ar9344_tplink_tl-wdr3600-16m.dts | 46 +++++++++++++++++++ target/linux/ath79/image/generic-tp-link.mk | 10 ++++ 4 files changed, 58 insertions(+) create mode 100644 target/linux/ath79/dts/ar9344_tplink_tl-wdr3600-16m.dts