TP-Link Archer C60 v2 stuck in HTTP upgrade

Successfully installed OpenWrt 18.06 several times using tftp. But there never seemed enough space to install many packages. So I tried to go back to the original TP-Link firmware to see what might be going on. Somehow I stuffed it up, and now when I start the router it starts up an HTTP server asking for the firmware to be installed. When I try the firmware from TP-Link it fails, and so does any other firmware (OpenWrt) that I have tried.

I'm in Australia, the router says Archer C60(EU) Ver 2.1. From TP-Link Aus site I downloaded 'Archer C60(EU)_V2_161206.zip' with contents including 'ArcherC60v2_un-up-ver2-0-0-P1[20161206-rel60287].bin' (size 8028850 bytes). Renamed it to 'original.bin'. Installed in /var/lib/tftpboot directory for tftpd-hpa (Linux, Ubuntu 18.04), on server with IP 192.168.0.10.

When I connect a browser from 192.168.0.10 to the router on 192.168.0.1 it prompts for a firmware file, which I browse to the bin file mentioned above. After 40% of what the web page says is the upgrade I get 'Firmware upgrade failed'.

I'm running 'screen /dev/ttyUSB0 115200' to the UART on the router. On boot it reports

U-Boot 1.1.4 (Dec  6 2016 - 14:40:45)

ap151 - Dragonfly 1.0

DRAM:  64 MB
Top of RAM usable for U-Boot at: 84000000
Reserving 402k for U-Boot at: 83f98000
Reserving 32832k for malloc() at: 81f88000
Reserving 44 Bytes for Board Info at: 81f87fd4
Reserving 36 Bytes for Global Data at: 81f87fb0
Reserving 128k for boot params() at: 81f67fb0
Stack Pointer at: 81f67f98
Now running in RAM - U-Boot at: 83f98000
Flash Manuf Id 0xc8, DeviceId0 0x40, DeviceId1 0x17
flash size 8MB, sector count = 128
Flash:  8 MB
Using default environment

In:    serial
Out:   serial
Err:   serial
Net:   ath_gmac_enet_initialize...
No valid address in Flash. Using fixed address
No valid address in Flash. Using fixed address
ath_gmac_enet_initialize: reset mask:c02200
Dragonfly----> S27 PHY *
: cfg1 0x80000000 cfg2 0x7114
eth0: 00:03:7f:09:0b:ad
athrs27_phy_setup ATHR_PHY_CONTROL 4 :1000
athrs27_phy_setup ATHR_PHY_SPEC_STAUS 4 :10
eth0 up
ATHRS27: resetting s27
ATHRS27: s27 reset done
: cfg1 0x800c0000 cfg2 0x7214
eth1: 00:03:7f:09:0b:ad
athrs27_phy_setup ATHR_PHY_CONTROL 0 :1000
athrs27_phy_setup ATHR_PHY_SPEC_STAUS 0 :10
athrs27_phy_setup ATHR_PHY_CONTROL 1 :1000
athrs27_phy_setup ATHR_PHY_SPEC_STAUS 1 :50
athrs27_phy_setup ATHR_PHY_CONTROL 2 :1000
athrs27_phy_setup ATHR_PHY_SPEC_STAUS 2 :50
athrs27_phy_setup ATHR_PHY_CONTROL 3 :1000
athrs27_phy_setup ATHR_PHY_SPEC_STAUS 3 :50
eth1 up
eth0, eth1
Setting 0x181162c0 to 0x82
Reading Partition Table from NVRAM ... OK
Parsing Partition Table ... [NM_Error](nm_lib_parsePtnIndexFile) 00603: invalid partition-index-file para id.
FAILED
[NM_Error](nm_api_checkInteger) 00360: factory boot check integer partition init fail.
Autobooting in 1 seconds
Trying eth0
eth0 link down
FAIL
Trying eth1
eth1 link down
FAIL
Trying eth0
eth0 link down
FAIL
Trying eth1
enet1 port0 up
dup 1 speed 1000
HTTP server is starting at IP: 192.168.0.1
HTTP server is ready!

After downloading the firmware file, the UART reports

         ... many elided #/s
         #######################################
         #######################################
         #######################################
         #######################################
         ###############

Reading Partition Table from NVRAM ... OK
Parsing Partition Table ... [NM_Error](nm_lib_parsePtnIndexFile) 00603: invalid partition-index-file para id.
FAILED
[NM_Error](nm_tpFirmwareCheck) 01367: Init failed.
## Error: HTTP upgrade file check failed!

I've tried installing OpenWrt from the ath> prompt like I did before, but now it doesn't work. On reset the same boot messages including 'invalid partition-index-file para id' and starting up the HTTP upgrade firmware server

Any clues about how to restore either OpenWrt or the original firmware? Or is it ready for the bin?

Thanks, Jan

I had the same problem. Apparently there is something wrong with tplink's firmware or the tftp recovery progress, that corrupted one or some critical partition ("tplink" in my case).

If you don't want to throw it away or build anything, thanks to this post, you can follow the normal Installation via UART guide on device wiki, only change the last step, from reset to bootm 0x9f030000 , like this:

Ath> tftp 0x81000000 openwrt-18.06.1-ar71xx-generic-archer-c60-v2-squashfs-sysupgrade.bin
Ath> erase 0x9f030000 +$filesize
Ath> cp.b 0x81000000 0x9f030000 $filesize
Ath> bootm 0x9f030000 

This will skip the factory boot check integer partition, but you have to repeat this every time the power goes out.

Thanks xpduyson! Yes, that works. You are right, bootm needs to be called on each restart. I just saw the recent thread Archer C60 V2 Softbricked. It says the same, and mentions a command 'saveenv' which may or may not be present. It isn't there on mine, sadly. The default bootcmd on mine is currently set to 'go 0x80010000', not 'bootm 0x9f030000' :-(.

1 Like

Have you fixed your router?!!

Well, I have to get back into U-boot, and then run bootm on each power restart. So theoretically yes, but in practice it is still no good. I would need to permanently override the bootcmd but I don't know how to do that (yet).

My Archer is tossed in the corner and I don't even bother turning it on anymore, since manually writing commands on each boot is not great, even more since I live in a place which the energy fails every now and then.

But I'm watching this thread for some months now, and if someone has the magic command for the partitions, I would be very happy!

If you can find a working c60v2, you can clone partitions from the good one to overdrive the corrupted one. If you were using tftp to back to stock, openwrt bootm works and everything else on that openwrt works (MACs, wifi, ethernet, ...), then I highly suspect that only non-critical partitions were corrupted.

Based on what I found, only tplink partition are left untouched by openwrt, so I think this is the one most people here having trouble.

Do you know, by any chance, what I need to do on the working router with OpenWRT, because I have one with a successfull flash of OpenWRT.

Thanks in advance.

All of my c60v2 are now back in duty, so the instruction below is based on what I could remember. Please let me know if you got stuck anywhere.

Let's call the corrupted one router B, and the good one router A.

  1. First, bootm router B to backup everything. Open Luci, go to System > Flash / Backup Firmware. At Save mtdblock contents, save every partition to a safe place, then rename them to their label name (eg. mtd0 to uboot)

  2. Now we should do a self-check for router B before continue:

  • Check if all of your MAC address from Interface tab still from Luci. If it's good then your mac partition is safe.
  • Check if your wifi still working, both 2.4Ghz and 5Ghz. If it's ok then your art partition is safe.
  • If any of them not working, you better stop here. For art I have no idea how to fix. For mac you can search how to change MAC address via hex. I've never tried myself.
  • If everything works, then your tplink partition is probably corrupted. But we should double check before continue.
  1. Do the backup step with router A, but now we only need tplink.

  2. Compare tplink partition of router A with router B side by side. You can use your favorite text editor to open them. If they are vastly different from each other, then B's tplink is corrupted. Below is my case, the left side is corrupted.

Before continue, you should know that, tplink is different per devices and probably needed by stock firmware. I recommend you not to go back to stock fw or share your good tplink to anyone.

  1. Copy good tplink to B. You can simply use scp in any command line:
scp "R:\tplink.good.bin" root@192.168.1.1:/tmp
  1. Login to B's ssh. Use opkg to install kmod-mtd-rw.
opkg update
opkg install kmod-mtd-rw
  1. Use cat /proc/mtd to determine where is tplink. It should be at mtd7

  2. Unlock tplink

insmod mtd-rw i_want_a_brick=1
mtd unlock tplink
  1. Write good tplink:
dd if=/tmp/tplink.good.bin of=/dev/mtd7

or

mtd write /tmp/tplink.good.bin tplink

Both of them should work.

Now reboot router B. It should boot to Openwrt.

Thanks so much for the extensive tutorial/explanation!

Since my other router is unacessible (since I don't own it anymore, gave it to a friend), do you have the binaries? It would help a ton!

Thanks in advance!

Unfortunately I can't share it. As mentioned in previous post, tplink is not the same on every device.