project/firmware-utils.git
6 years agotplink-safeloader: add support to split & extract firmwares
Alexander Couzens [Thu, 1 Mar 2018 23:44:30 +0000 (00:44 +0100)]
tplink-safeloader: add support to split & extract firmwares

Split the oem firmware upgrade images into seperate files.
Useful when analysing oem firmware files.

Signed-off-by: Alexander Couzens <lynxis@fe80.eu>
6 years agoar71xx: add support for TP-Link RE355
Henryk Heisig [Tue, 6 Feb 2018 21:08:28 +0000 (22:08 +0100)]
ar71xx: add support for TP-Link RE355

This device is identical as TP-Link RE450
RE355 is a dual-band AC1200 router, based on Qualcomm/Atheros
QCA9558+QCA9880.

Specification:

720/600/200 MHz (CPU/DDR/AHB)
64/128 MB of RAM (DDR2)
8 MB of FLASH (SPI NOR)
3T3R 2.4 GHz
3T3R 5 GHz
1x 10/100/1000 Mbps Ethernet
7x LED, 3x button
UART header on PCB

Flash instruction:
Web:
Download lede-ar71xx-generic-archer-c60-v2-squashfs-factory.bin
and use OEM System Tools - Firmware Upgrade site.

Signed-off-by: Henryk Heisig <hyniu@o2.pl>
6 years agoramips: tl-wr840n-v5: increase firmware partition for 4Mmtk layot
Serg Studzinskii [Sun, 24 Dec 2017 16:00:13 +0000 (18:00 +0200)]
ramips: tl-wr840n-v5: increase firmware partition for 4Mmtk layot

According to console log during TP-Link TL-WR840N v5 OEM firmware update
procedure 0x3e0000-0x3f0000 64kB "config" partition, which is used to store
router's configuration settings, is erased and recreated again during every
OEM firmware update procedure, thus does not contain any valuable factory data.
So it is conviniant to use this extra 64kB erase block for jffs overlay due
limited flash size on this device like it used on TP-Link's ar71xx boards.

Signed-off-by: Serg Studzinskii <serguzhg@gmail.com>
6 years agofirmware-tools/ptgen: use portable exit codes
Michael Heimpold [Thu, 21 Dec 2017 22:59:30 +0000 (23:59 +0100)]
firmware-tools/ptgen: use portable exit codes

Signed-off-by: Michael Heimpold <mhei@heimpold.de>
6 years agofirmware-tools/ptgen: fix minor coding style issues
Michael Heimpold [Thu, 21 Dec 2017 22:59:28 +0000 (23:59 +0100)]
firmware-tools/ptgen: fix minor coding style issues

Signed-off-by: Michael Heimpold <mhei@heimpold.de>
7 years agofirmware-utils: mktplinkfw: add support for BR region code
Henryk Heisig [Thu, 7 Dec 2017 20:28:28 +0000 (21:28 +0100)]
firmware-utils: mktplinkfw: add support for BR region code

Signed-off-by: Henryk Heisig <hyniu@o2.pl>
7 years agofirmware-utils: mktplinkfw: fix JFFS2 EOF markers
Sergey Ryazanov [Tue, 10 Oct 2017 22:07:08 +0000 (01:07 +0300)]
firmware-utils: mktplinkfw: fix JFFS2 EOF markers

mktplinkfw/mktplinkfw2 utilities put JFFS2 EOF market only at 64KB
boundary, this could lead to current device configuration lost during
the sysupgrade on a device, which is equpped with flash with the 4KB
erase block size (e.g. TP-Link Archer C20).

This happens when 64KB and 4KB alignments do not match, so the JFFS2
data is written not exactly at the partition beginnig and startup
scripts can not find the JFFS2 during the first boot just after the
sysupgrade.

Fix this by placing additional JFFS2 EOF marker at a 4KB boundary. Also
keep the marker at 64KB intact, so the utilities will produce images
suitable for devices with both 4KB and 64KB erase blocks.

Fixes: 29a2c2ea80441895a2ffe100d854d2b26d5fa606 (add ability to put
jffs2 eof marker into the image)

Signed-off-by: Sergey Ryazanov <ryazanov.s.a@gmail.com>
7 years agofirmware-utils: add otrx tool for handling TRX images
Rafał Miłecki [Fri, 17 Nov 2017 10:42:59 +0000 (11:42 +0100)]
firmware-utils: add otrx tool for handling TRX images

It can be a replacement for the trx tool. The advantage is that otrx
doesn't alloc buffer for the whole TRX which can be a nice optimization
when creating big images.

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
Acked-by: Hauke Mehrtens <hauke@hauke-m.de>
7 years agoar71xx: add support for TP-Link TL-WR1043N v5
Tim Thorpe [Mon, 25 Sep 2017 09:38:49 +0000 (04:38 -0500)]
ar71xx: add support for TP-Link TL-WR1043N v5

TP-Link TL-WR1043N v5 appears to be identical to the TL-WR1043ND v4,
except that the USB port has been removed and there is no longer a
removable antenna option.

The software is more in line with the Archer series in that it uses a
nested bootloader scheme.

Specifications:

 - QCA9563 at 775 MHz
 - 64 MB RAM
 - 16 MB flash
 - 3 (non-detachable) Antennas / 450 Mbit
 - 1x/4x WAN/LAN Gbps Ethernet (QCA8337)
 - reset and Wi-Fi buttons

Signed-off-by: Tim Thorpe <tim@tfthorpe.net>
Signed-off-by: Ludwig Thomeczek <ledesrc@wxorx.net>
7 years agofirmware-utils: tplink-safeloader: add more country codes for Archer C7 v4
Dmitry Tunin [Fri, 3 Nov 2017 14:31:54 +0000 (17:31 +0300)]
firmware-utils: tplink-safeloader: add more country codes for Archer C7 v4

If codes do not match, it is impossible to flash from the stock
firmware.

Signed-off-by: Dmitry Tunin <hanipouspilot@gmail.com>
7 years agoar71xx: increase kernel partition size for TP-Link RE450 v1
Piotr Dymacz [Mon, 6 Nov 2017 22:17:24 +0000 (23:17 +0100)]
ar71xx: increase kernel partition size for TP-Link RE450 v1

This increases kernel partition size and fixes rootfs (file-system)
partition size on TP-Link RE450 v1. Also, while we are at it, switch
from statically defined kernel and rootfs partitions in kernel cmdline
to "tplink-fw" mtd splitter.

Fixes: FS#1072.
Signed-off-by: Piotr Dymacz <pepe2k@gmail.com>
7 years agoar71xx: increase kernel partition size for some TP-Link boards
Henryk Heisig [Thu, 26 Oct 2017 22:23:17 +0000 (00:23 +0200)]
ar71xx: increase kernel partition size for some TP-Link boards

This patch increases kernel partition size and re-enables image
generation for below TP-Link boards:

- archer-c58-v1
- archer-c60-v1
- tl-wr902ac-v1
- tl-wr942n-v1

Signed-off-by: Henryk Heisig <hyniu@o2.pl>
[commit message and title reworded]
Signed-off-by: Piotr Dymacz <pepe2k@gmail.com>
7 years agoramips: add support for TP-Link TL-WR840N v5
Robert Marko [Wed, 8 Nov 2017 13:00:06 +0000 (14:00 +0100)]
ramips: add support for TP-Link TL-WR840N v5

TP-Link TL-WR840N v5 is simple N300 router with 5-port FE switch and
non-detachable antennas, based on MediaTek MT7628NN (aka MT7628N) WiSoC.

Specification:

- MT7628N/N (580 MHz)
- 64 MB of RAM (DDR2)
- 4 MB of FLASH
- 2T2R 2.4 GHz
- 5x 10/100 Mbps Ethernet
- 2x external, non-detachable antennas
- UART (J1) header on PCB (115200 8n1)
- 1x LED (GPIO-controlled), 1x button

* LED in TL-WR840N v5 is a dual-color, dual-leads type which isn't
  (fully) supported by gpio-leds driver. This type of LED requires both
  GPIOs state change at the same time to select color or turn it off.
  For now, we support/use only the green part of the LED.
  Orange LED is registered so you can later use it for your own purposes.

  Flash instruction:

  Unlike TL-WR840N v4 flashing through WEB UI works in v5.
  1. Download lede-ramips-mt76x8-tl-wr840n-v5-squashfs-sysupgrade.bin image.
  2. Go to 192.168.0.1
  3. Flash the sysupgrade image through Firmware upgrade section of WEB UI.
  4. Wait until green LED stops flashing and use the router.

Notes:
TFTP recovery is broken since TP-Link reused bootloader code for v4 and
that does not take into account only 4 MB of flash and bricks the device.
So do not use TFTP Recovery or you will have to rewrite SPI flash.
They fixed it in later GPL code,but it is unknown which version of
bootloader you have.

After manually compiling and flashing bootloader from GPL sources TFTP
recovery works properly.

Signed-off-by: Robert Marko <robimarko@gmail.com>
7 years agotools/firmware-utils: mktplinkfw* fix rootfs offset
Thibaut VARÈNE [Fri, 27 Oct 2017 18:12:15 +0000 (20:12 +0200)]
tools/firmware-utils: mktplinkfw* fix rootfs offset

With '-a' specified on the command line, the current code:
- computes an aligned _kernel length_ instead of an aligned _rootfs
  offset_.
- does not update the rootfs offset after computing the new kernel
  length, and instead retains the layout default.

When the kernel length exceeds the available space left with this
fixed offset, the resulting image header contains invalid data, with
the recorded rootfs offset overlapping the kernel area.

This patch ensures that rootfs offset is correctly computed and
reflected in the final image.

Furthermore, the build_fw() function special cases the rootfs_align
option because of the above invalid logic. This is also fixed and
the computed (or command-line provided, or layout-provided) rootfs_ofs
value is used in all cases.

There seems to be no valid reason to extend the kernel length beyond
the actual length of the kernel itself (OFW images don't do it) so this
part of the existing behavior is dropped.

Example image before the patch:
Kernel data offset     : 0x00000200 /      512 bytes
Kernel data length     : 0x00158438 /  1410104 bytes
Kernel load address    : 0x00000080
Kernel entry point     : 0x00000080
Rootfs data offset     : 0x00140000 /  1310720 bytes
Rootfs data length     : 0x001e4f7e /  1986430 bytes

Example image after the patch:
Kernel data offset     : 0x00000200 /      512 bytes
Kernel data length     : 0x001583fe /  1410046 bytes
Kernel load address    : 0x00000080
Kernel entry point     : 0x00000080
Rootfs data offset     : 0x00158600 /  1410560 bytes
Rootfs data length     : 0x001e4e22 /  1986082 bytes

Tested-by: Mathias Kresin <dev@kresin.me>
Tested-by: Stefan Lippers-Hollmann <s.l-h@gmx.de>
Tested-by: Daniel Engberg <daniel.engberg.lists@pyret.net>
Tested-by: Henryk Heisig <hyniu@o2.pl>
Signed-off-by: Thibaut VARÈNE <hacks@slashdirt.org>
7 years agoar71xx: add support for TP-LINK Archer C7 v4
Felix Fietkau [Tue, 25 Jul 2017 11:32:47 +0000 (13:32 +0200)]
ar71xx: add support for TP-LINK Archer C7 v4

TP-Link Archer C7 v4 is a dual-band AC1750 router, based on Qualcomm/Atheros
QCA9561+QCA9888.

Specification:

- 775/650/258 MHz (CPU/DDR/AHB)
- 128 MB of RAM (DDR2)
- 16 MB of FLASH (SPI NOR)
- 3T3R 2.4 GHz
- 3T3R 5 GHz
- 5x 10/100/1000 Mbps Ethernet
- 7x LED, 2x button
- UART header on PCB

Flash instruction:
1. Upload lede-ar71xx-generic-archer-c7-v4-squashfs-factory.bin via Web interface

Flash instruction using TFTP recovery:
1. Set PC to fixed ip address 192.168.0.66
2. Download lede-ar71xx-generic-archer-c7-v4-squashfs-factory.bin
and rename it to ArcherC7v4_tp_recovery.bin
3. Start a tftp server with the file tp_recovery.bin in its root directory
4. Turn off the router
5. Press and hold Reset button
6. Turn on router with the reset button pressed and wait ~15 seconds
7. Release the reset button and after a short time
the firmware should be transferred from the tftp server
8. Wait ~30 second to complete recovery.

Flash instruction under U-Boot, using UART:

1. tftp 0x81000000 lede-ar71xx-...-sysupgrade.bin
2. erase 0x9f040000 +$filesize
3. cp.b $fileaddr 0x9f040000 $filesize
4. reset

Signed-off-by: Felix Fietkau <nbd@nbd.name>
7 years agotools/firmware-utils: mktplinkfw move build_fw() to lib
Thibaut VARÈNE [Tue, 3 Oct 2017 18:19:52 +0000 (20:19 +0200)]
tools/firmware-utils: mktplinkfw move build_fw() to lib

This patch moves build_fw() to mktplinkfw-lib.c

The versions of mktplinkfw.c and mktplinkfw2.c had slight
differences in code flow, the version from mktplinkfw.c has been
preferred.

While it's expected that this change will not affect mktplinkfw2,
all use cases could not be tested and so this particular change
is committed separately.

Signed-off-by: Thibaut VARÈNE <hacks@slashdirt.org>
7 years agotools/firmware-utils: mktplinkfw regroup duplicate code
Thibaut VARÈNE [Tue, 3 Oct 2017 16:12:27 +0000 (18:12 +0200)]
tools/firmware-utils: mktplinkfw regroup duplicate code

This patch carves out the duplicated code of mktplinfw.c and
mktplinkfw2.c and moves it to mktplinkfw-lib.c

This change is a semantic NOP (the code is unchanged).

To ensure compatibility with gcc-5.x and newer without changing
the code, -fgnu89-inline is added to the build flags for these
two binaries.

Signed-off-by: Thibaut VARÈNE <hacks@slashdirt.org>
7 years agotools/firmware-utils: remove hardcoded values from mktplinkfw2.c
Thibaut VARÈNE [Tue, 3 Oct 2017 10:46:09 +0000 (12:46 +0200)]
tools/firmware-utils: remove hardcoded values from mktplinkfw2.c

This patch removes all the hardcoded board-specific values from
mktplinkfw2.c, and as well as the corresponding support code.

By design, this change also deletes all of the broken matching logic
that was embedded in mktplinkfw2 and aligns the "inspect" behavior
with that of mktplinkfw (i.e. print the parsed header content as
they are without further processing).

Signed-off-by: Thibaut VARÈNE <hacks@slashdirt.org>
7 years agoramips: add support for TP-Link Archer C20 v1
Maxim Anisimov [Fri, 8 Sep 2017 09:39:17 +0000 (12:39 +0300)]
ramips: add support for TP-Link Archer C20 v1

TP-Link Archer C20 v1 is a router with 5-port FE switch and
non-detachable antennas. It's very similiar to TP-Link Archer C50.
Also it's based on MediaTek MT7620A+MT7610EN.

Specification:
- MediaTek MT7620A (580 Mhz)
- 64 MB of RAM
- 8 MB of FLASH
- 2T2R 2.4 GHz and 1T1R 5 GHz
- 5x 10/100 Mbps Ethernet
- 2x external, non-detachable antennas
- UART (J1) header on PCB (115200 8n1)
- 8x LED (GPIO-controlled*), 2x button, power input switch
- 1 x USB 2.0 port

* WAN LED in this devices is a dual-color, dual-leads type which isn't
  (fully) supported by gpio-leds driver. This type of LED requires both
  GPIOs state change at the same time to select color or turn it off.
  For now, we support/use only the blue part of the LED.
* MT7610EN ac chip isn't not supported by LEDE. Therefore 5Ghz won't
  work.

Factory image notes:

These devices use version 3 of TP-Link header, fortunately without RSA
signature (at least in case of devices sold in Europe). The difference
lays in the requirement for a non-zero value in "Additional Hardware
Version" field. Ideally, it should match the value stored in vendor
firmware header on device.

We are able to prepare factory firwmare file which is accepted and
(almost) correctly flashed from the vendor GUI. As it turned out, it
accepts files without U-Boot image with second header at the beginning
but due to some kind of bug in upgrade routine, flashed image gets
corrupted before it's written to flash. So, to flash this device we must
to prepare image using original firmware from tp-link site with uboot.

Flash instruction:

Until (if at all) TP-Link fixes described problem, the only way to flash
LEDE image in these devices is to use tftp recovery mode in U-Boot.
There are two ways to flash the device to LEDE:

1) Using tftp mode with UART connection and original LEDE image

 - Place lede-ramips-mt7620-ArcherC20-squashfs-factory.bin in tftp
   server directory
 - Configure PC with static IP 192.168.0.66/24 and tftp server.
 - Connect PC with one of LAN ports, power up the router and press
   key "4" to access U-Boot CLI.
 - Use the following commands to update the device to LEDE:

    setenv serverip 192.168.0.66
    tftp 0x80060000 lede-ramips-mt7620-ArcherC20-squashfs-factory.bin
    erase tplink 0x20000 0x7a0000
    cp.b 0x80060000 0x20000 0x7a0000
    reset

 - After that the device will reboot and boot to LEDE

2) Using tftp mode without UART connection but require some
   manipulations with target image

 - Download and unpack TP-Link Archer C20 v1 firmware from original web
   site
 - Split uboot.bin from original firmware by this command (example):

    dd if=Archer_C20v1_0.9.1_4.0_up_boot(160427)_2016-04-27_13.53.59.bin of=uboot.bin bs=512 count=256 skip=1

 - Create ArcherC20V1_tp_recovery.bin using this command:

    cat uboot.bin lede-ramips-mt7620-ArcherC20-squashfs-factory.bin > ArcherC20V1_tp_recovery.bin

 - Place ArcherC20V1_tp_recovery.bin in tftp server directory.
 - Configure PC with static IP 192.168.0.66/24 and tftp server.
 - Connect PC with one of LAN ports, press the reset button, power up
   the router and keep button pressed for around 6-7 seconds, until
   device starts downloading the file.
 - Router will download file from server, write it to flash and reboot.

Signed-off-by: Maxim Anisimov <maxim.anisimov.ua@gmail.com>
7 years agotools/firmware-utils: mktplinkfw2: allow parameter override
Thibaut VARENE [Fri, 28 Jul 2017 10:59:42 +0000 (12:59 +0200)]
tools/firmware-utils: mktplinkfw2: allow parameter override

This patch enables commandline override of board hw_ver and hw_ver_add

Signed-off-by: Thibaut VARENE <hacks@slashdirt.org>
7 years agotools/firmware-utils: document reserved fields in mkchkimg
Thibaut VARENE [Sun, 30 Jul 2017 10:40:25 +0000 (12:40 +0200)]
tools/firmware-utils: document reserved fields in mkchkimg

Signed-off-by: Thibaut VARENE <hacks@slashdirt.org>
7 years agofirmware-utils: mktplinkfw2: respect -e option when reading fw info
Rafał Miłecki [Sun, 23 Jul 2017 20:19:21 +0000 (22:19 +0200)]
firmware-utils: mktplinkfw2: respect -e option when reading fw info

When -e option it specified a corresponding flag is set in the
custom_board. By using custom_board as fallback -e option gets respected
for unknown boards.

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
7 years agofirmware-utils: mktplinkfw2: fix info for images with LE kernel LA/EP
Rafał Miłecki [Sun, 23 Jul 2017 20:19:20 +0000 (22:19 +0200)]
firmware-utils: mktplinkfw2: fix info for images with LE kernel LA/EP

With this change endianness is also respected when reading firmware
info.

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
7 years agofirmware-utils: mktplinkfw2: replace "endian_swap" field with "flags"
Rafał Miłecki [Sun, 23 Jul 2017 20:19:19 +0000 (22:19 +0200)]
firmware-utils: mktplinkfw2: replace "endian_swap" field with "flags"

This will allow adding more similar tricks needed by other hardware.

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
7 years agofirmware-utils: tplink-safeloader: add support for TP-Link RE350
Alex Maclean [Mon, 3 Jul 2017 20:05:44 +0000 (21:05 +0100)]
firmware-utils: tplink-safeloader: add support for TP-Link RE350

Signed-off-by: Alex Maclean <monkeh@monkeh.net>
7 years agofirmware-utils: drop mktplinkfw-kernel tool
Piotr Dymacz [Thu, 6 Jul 2017 16:26:23 +0000 (18:26 +0200)]
firmware-utils: drop mktplinkfw-kernel tool

As we can now use combined mode in "mktplinkfw" tool to generate the
same header/image, this tool is no longer needed.

Signed-off-by: Piotr Dymacz <pepe2k@gmail.com>
7 years agofirmware-utils: mktplinkfw: rework combined image option
Piotr Dymacz [Thu, 6 Jul 2017 14:34:47 +0000 (16:34 +0200)]
firmware-utils: mktplinkfw: rework combined image option

We use combined option in "mktplinkfw" tool for generating initramfs
kernel images and header for kernel inside "safeloader" image type (in
fact, only for TL-WR1043ND v4 at this moment).

There is also "mktplinkfw-kernel" tool, a stripped-down version, used
only for generating "simple" header, for safeloader image types.

This changes how "mktplinkfw" handles combined images (which then will
allow us to drop the stripped-down version of the tool):

- drop "ignore size" command line option (it was used only for combined
  images anyway)
- don't require "flash layout id" for combined images (we don't need and
  shouldn't limit size of the initramfs kernel and for kernels inside
  safeloader images, the "tplink-safeloader" tool does the size check)
- require kernel address and entry point in command line parameters for
  combined images (consequence of previous point)
- don't include md5 sum and firmware length values in header (they are
  needed only for update from vendor GUI and are ingored in case of
  initramfs and "tplink-safeloader" images)
- drop "fake" flash layout for TL-WR1043ND v4 as it's no longer needed

Also, adjust "mktplinkfw-combined" command in ar71xx/image/tp-link.mk to
match introduced changes in "mktplinkfw" tool.

Signed-off-by: Piotr Dymacz <pepe2k@gmail.com>
7 years agofirmware-utils: tplink-safeloader: add support for TL-WR902AC v1 US
Piotr Dymacz [Wed, 19 Jul 2017 20:12:07 +0000 (22:12 +0200)]
firmware-utils: tplink-safeloader: add support for TL-WR902AC v1 US

Signed-off-by: Piotr Dymacz <pepe2k@gmail.com>
7 years agofirmware-utils: tplink-safeloader: fix Archer C60 factory image
Henryk Heisig [Fri, 30 Jun 2017 22:45:19 +0000 (00:45 +0200)]
firmware-utils: tplink-safeloader: fix Archer C60 factory image

This commit fixes build factory image for TP-Link Archer C60v1.
Size of partition "SupportList" is only 256 bytes, and can
contain only 3 entries.

Signed-off-by: Henryk Heisig <hyniu@o2.pl>
7 years agofirmware-utils: mktplinkfw2: use static board struct for custom values
Rafał Miłecki [Sun, 2 Jul 2017 21:09:46 +0000 (23:09 +0200)]
firmware-utils: mktplinkfw2: use static board struct for custom values

It seems simpler to store all custom (command line set) option values in
a struct identical to the predefined ones. It doesn't require:
1) Having so many global variables
2) Copying data from the predefined boards

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
7 years agofirmware-utils: mktplinkfw2: update firmware header
Rafał Miłecki [Sun, 2 Jul 2017 09:23:52 +0000 (11:23 +0200)]
firmware-utils: mktplinkfw2: update firmware header

1) Be consistent and use tabs
2) Drop FIXME from boot comments - some images use these fields normally

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
7 years agofirmware-utils: mktplinkfw: add option for endianness swap
Piotr Dymacz [Tue, 4 Jul 2017 13:40:43 +0000 (15:40 +0200)]
firmware-utils: mktplinkfw: add option for endianness swap

This adds command line option in "mktplinkfw" tool for endianness swap
in kernel load address and entry point fields. As in "mktplinkfw2" tool,
we will need this for little-endian targets, like "ramips".

Signed-off-by: Piotr Dymacz <pepe2k@gmail.com>
7 years agofirmware-utils: mktplinkfw2: add missing options descriptions
Piotr Dymacz [Tue, 4 Jul 2017 11:26:40 +0000 (13:26 +0200)]
firmware-utils: mktplinkfw2: add missing options descriptions

Signed-off-by: Piotr Dymacz <pepe2k@gmail.com>
7 years agoar71xx: add support for TP-Link TL-WR902AC v1
Piotr Dymacz [Sun, 2 Jul 2017 16:32:38 +0000 (18:32 +0200)]
ar71xx: add support for TP-Link TL-WR902AC v1

TP-Link TL-WR902AC v1 is a pocket-size, dual-band (AC750), successor of
TL-MR3020 (both devices use very similar enclosure, in same size). New
device is based on Qualcomm QCA9531 v2 + QCA9887. FCC ID: TE7WR902AC.

Specification:

- 650/391/216 MHz (CPU/DDR/AHB)
- 1x 10/100 Mbps Ethernet
- 1x USB 2.0 (GPIO-controlled power)
- 64 MB of RAM (DDR2)
- 8 MB of FLASH
- 2T2R 2.4 GHz (QCA9531)
- 1T1R 5 GHz (QCA9887)
- 5x LED (GPIO-controlled), 2x button, 1x 3-pos switch
- UART pads on PCB (TP1 -> TX, TP2 -> RX, TP3 -> GND, TP4 -> 3V3, jumper
  resitors are missing on TX/RX lines)
- 1x micro USB (for power only)

Flash instructions:

Use "factory" image under vendor GUI.

Recovery instructions:

This device contains tftp recovery mode inside U-Boot. You can use it to
flash LEDE (use "factory" image) or vendor firmware.

1. Configure PC with static IP 192.168.0.66/24 and tftp server.
2. Rename "lede-ar71xx-generic-tl-wr902ac-v1-squashfs-factory.bin"
   to "wr902acv1_un_tp_recovery.bin" and place it in tftp server dir.
3. Connect PC with LAN port, press the reset button, power up the router
   and keep button pressed until WPS LED lights up.
4. Router will download file from server, write it to flash and reboot.

Root access over serial line in vendor firmware: root/sohoadmin.

Signed-off-by: Piotr Dymacz <pepe2k@gmail.com>
7 years agofirmware-utils: mktplinkfw2: fix MD5 salt
Rafał Miłecki [Sun, 2 Jul 2017 15:06:58 +0000 (17:06 +0200)]
firmware-utils: mktplinkfw2: fix MD5 salt

LEDE supports few devices using TP-Link firmware format (V2 or V3):
ArcherC20i, ArcherC50, ArcherMR200, TDW8970, TDW8980, TL-WR840N v4,
TL-WR841N v13 and VR200v

Testing mktplinkfw2 tool with official (vendor generated) firmware files
for above devices has shown an error when comparing calculated and
included MD5 sum, e.g.:
> mktplinkfw2 -i Archer_C20iv1_0.9.1_3.2_up_boot\(170221\)_2017-02-21_17.14.03.bin | grep -A 1 MD5Sum1
Header MD5Sum1         : 22 5a cb 92 10 d2 95 7b df 62 9a f8 62 17 37 10 (*ERROR*)
          --> expected : ad 19 11 d1 78 98 a7 42 5f 2e 64 da 8a 34 ec cb

This problem has been verified to occur with:
Archer_C20iv1_0.9.1_3.2_up_boot(170221)_2017-02-21_17.14.03.bin
Archer MR200v1_0.9.1_1.1_up_boot_v004a.0 Build 160905 Rel.60037n.bin
TD-W8970v3_0.9.1_2.0_up_boot(160816)_2016-08-16_10.40.57.bin
TD-W8980v1_0.6.0_1.8_up_boot(150514)_2015-05-14_11.16.43.bin
Archer_VR200vv2_0.2.0_0.8.0_up_boot(161202)_2016-12-05_14.39.06.bin

For some images, e.g.:
Archer_C50v3_EU_0.9.1_0.3_up_boot[170417-rel52298].bin
TL-WR840Nv4_EU_0.9.1_4.16_up_boot[170421-rel70692].bin
TL-WR841Nv13_0.9.1_3.16_up_boot(161012).bin
mktplinkfw2 calculates zero MD5 so these has to be fixed separately:
> mktplinkfw2 -i TL-WR841Nv13_0.9.1_3.16_up_boot\(161012\).bin | grep -A 1 MD5Sum1
Header MD5Sum1         : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 (*ERROR*)
          --> expected : 6f 1d 9b 57 5d 42 14 6d bf a2 03 9d 46 7d 55 55

It's most likely that MD5 salt used in mktplinkfw2 has been always wrong
(and it's not a matter of e.g. a vendor change). Update it to fix MD5
calculation.

This has been also verified to calculate MD5 correctly for other (not
yet supported) devices, e.g.:
Archer_C3150v2_0.1.0_0.9.1_up_boot(160812)_2016-08-12_10.52.54.bin
Archer_C3200v1_0.9.1_0.1_up_boot(160704)_2016-07-04_15.48.28.bin

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
Acked-by: Mathias Kresin <dev@kresin.me>
7 years agofirmware-utils: mktplinkfw2: fix support for -w option
Rafał Miłecki [Sun, 2 Jul 2017 20:28:24 +0000 (22:28 +0200)]
firmware-utils: mktplinkfw2: fix support for -w option

This fixes copy & paste typo when reading -w argument.

Fixes: 4b35e174caa5b ("firmware-utils: mktplinkfw2: support additional hardware version")
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
7 years agoramips: add support for TP-Link TL-WR840N v4 and TL-WR841N v13
Piotr Dymacz [Wed, 21 Jun 2017 12:16:15 +0000 (14:16 +0200)]
ramips: add support for TP-Link TL-WR840N v4 and TL-WR841N v13

TP-Link TL-WR840N v4 and TL-WR841N v13 are simple N300 routers with
5-port FE switch and non-detachable antennas. Both are very similar
and are based on MediaTek MT7628NN (aka MT7628N) WiSoC.

The difference between these two models is in number of available
LEDs, buttons and power input switch.

This work is partially based on GitHub PR#974.

Specification:

- MT7628N/N (580 MHz)
- 64 MB of RAM (DDR2)
- 8 MB of FLASH
- 2T2R 2.4 GHz
- 5x 10/100 Mbps Ethernet
- 2x external, non-detachable antennas
- UART (J1) header on PCB (115200 8n1)
- TL-WR840N v4: 5x LED (GPIO-controlled), 1x button
- TL-WR841N v13: 8x LED (GPIO-controlled*), 2x button, power input
  switch

* WAN LED in TL-WR841N v13 is a dual-color, dual-leads type which isn't
  (fully) supported by gpio-leds driver. This type of LED requires both
  GPIOs state change at the same time to select color or turn it off.
  For now, we support/use only the green part of the LED.

Factory image notes:

These devices use version 3 of TP-Link header, fortunately without RSA
signature (at least in case of devices sold in Europe). The difference
lays in the requirement for a non-zero value in "Additional Hardware
Version" field. Ideally, it should match the value stored in vendor
firmware header on device ("0x4"/"0x13" for these devices) but it seems
that anything other than "0" is correct.

We are able to prepare factory firwmare file which is accepted and
(almost) correctly flashed from the vendor GUI. As it turned out, it
accepts files without U-Boot image with second header at the beginning
but due to some kind of bug in upgrade routine, flashed image gets
corrupted before it's written to flash.

Tests showed that the GUI upgrade routine copies value of "Additional
Hardware Version" from existing firmware into offset "0x2023c" in
provided file, _before_ storing it in flash. In case of vendor firmware
upgrade files (which all include U-Boot image and two headers), this
offset points to the matching field in kernel+rootfs firmware part
header. Unfortunately, in case of LEDE factory image file which contains
only one header, it points to the offset "0x2023c" in kernel image. This
leads to a corrupted kernel and ends up with a "soft-bricked" device.

The good news is that U-Boot in these devices contains well known tftp
recovery mode, which can be triggered with "reset" button. What's more,
in comparison to some of older MediaTek based TP-Link devices, this
recovery mode doesn't write whole file at offset "0x0" in flash, without
verifying provided file in advance. In case of recovery mode in these
devices, first "0x20000" bytes are always skipped and "0x7a0000" bytes
from rest of the file are stored in flash at offset "0x20000".

Flash instruction:

Until (if at all) TP-Link fixes described problem, the only way to flash
LEDE image in these devices is to use tftp recovery mode in U-Boot:

1. Configure PC with static IP 192.168.0.66/24 and tftp server.
2. Rename "lede-ramips-mt7628-tl-wr84...-squashfs-tftp-recovery.bin"
   to "tp_recovery.bin" and place it in tftp server directory.
3. Connect PC with one of LAN ports, press the reset button, power up
   the router and keep button pressed for around 6-7 seconds, until
   device starts downloading the file.
4. Router will download file from server, write it to flash and reboot.

To access U-Boot CLI, keep pressed "4" key during boot.

Signed-off-by: Piotr Dymacz <pepe2k@gmail.com>
7 years agofirmware-utils: mktplinkfw2: support additional hardware version
Piotr Dymacz [Wed, 21 Jun 2017 12:15:55 +0000 (14:15 +0200)]
firmware-utils: mktplinkfw2: support additional hardware version

As it turned out, some of new MediaTek based TP-Link devices use value
from field at 0x3c offset in version 3 of TP-Link header to specify
"Additional Hardware Version".

Value from this field is validated during regular (GUI) firmware upgrade
on devices like TL-WR840N v4 or TL-WR841N v13. If it's zero (based on
some tests, it seems that firmware will accept anything != 0), errors
like below are printed on console and upgrade fails:

[ rsl_sys_updateFirmware ] 2137:  Firmware Additional HardwareVersion
check failed

[ rdp_updateFirmware ] 345:  perror:4506

Signed-off-by: Piotr Dymacz <pepe2k@gmail.com>
7 years agoar71xx: add support for TP-Link Archer C58 v1
Henryk Heisig [Fri, 16 Jun 2017 13:26:30 +0000 (15:26 +0200)]
ar71xx: add support for TP-Link Archer C58 v1

TP-Link Archer C58 v1 is a dual-band AC1350 router, based on Qualcomm
QCA9561 + QCA9886. It looks like Archer C59 v1 without USB port.

Specification:

- 775/650/258 MHz (CPU/DDR/AHB)
- 64 MB of RAM (DDR2)
- 8 MB of FLASH (SPI NOR)
- 3T3R 2.4 GHz
- 2T2R 5 GHz
- 5x 10/100 Mbps Ethernet
- 6x LED, 3x button
- UART header on PCB, RX, TX at TP4+5 (backside)

QCA9886 wlan needs pre_cal_data file and enable ieee80211 phy hotplug to
patch macaddress.

Flash instruction:

Use "factory" image directly in vendor GUI.

Recovery method:

1. Set PC to fixed ip address 192.168.0.66/24.
2. Download "lede-ar71xx-generic-archer-c58-v1-squashfs-factory.bin" and
   rename it to "tp_recovery.bin".
3. Start a tftp server with the file "tp_recovery.bin" in its root
   directory.
4. Turn off the router.
5. Press and hold Reset button.
6. Turn on router with the reset button pressed and wait ~15 seconds.
7. Release the reset button and after a short time the firmware should
   be transferred from the tftp server.
8. Wait ~30 second to complete recovery.

Flash instruction under U-Boot, using UART:

tftp 0x81000000 lede-ar71xx-...-sysupgrade.bin
erase 0x9f020000 +$filesize
cp.b $fileaddr 0x9f020000 $filesize
reset

This commit is based on GitHub PR#1112

Signed-off-by: Henryk Heisig <hyniu@o2.pl>
7 years agofirmware-utils: tplink-safeloader: add support for Archer C5 v2 JP/US
Jean-Pierre St-Yves [Tue, 27 Jun 2017 08:20:19 +0000 (10:20 +0200)]
firmware-utils: tplink-safeloader: add support for Archer C5 v2 JP/US

Add support for Japan and US versions of TP-Link Archer C5 v2

Signed-off-by: Jean-Pierre St-Yves <jpstyves@gmail.com>
7 years agofirmware-utils: tplink-safeloader: add support for Archer C59/C60 RU
Henryk Heisig [Wed, 14 Jun 2017 14:38:30 +0000 (16:38 +0200)]
firmware-utils: tplink-safeloader: add support for Archer C59/C60 RU

Add support for Russian version of TP-Link Archer C59/C60 v1

Signed-off-by: Henryk Heisig <hyniu@o2.pl>
7 years agoar71xx: add support for TP-Link TL-WA855RE v1
Federico Cappon [Fri, 9 Jun 2017 15:11:39 +0000 (15:11 +0000)]
ar71xx: add support for TP-Link TL-WA855RE v1

TP-Link TL-WA855RE v1 is a wall-plug N300 Wi-Fi range extender,
based on Qualcomm/Atheros QCA9533 v2.

Short specification:

- 550/397/198 MHz (CPU/DDR/AHB)
- 1x 10/100 Mbps Ethernet
- 32 MB of RAM (DDR1)
- 4 MB of FLASH
- 2T2R 2.4 GHz
- 2x external antennas
- 2x LED (green and orange in the same package), 2x button
- UART: TP5(TX) and TP4(RX) test points on PCB

Flash instruction: use "factory" image directly in vendor GUI.

Warning: this device does not include any kind of recovery mechanism
in the bootloader and disassembling process is not trivial.

You can access vendor firmware over serial line using:
- login: root
- password: sohoadmin

Image was tested only in EU version of the device, but should work
also with the same device version sold in other countries.

Signed-off-by: Federico Cappon <dududede371@gmail.com>
7 years agofirmware-utils: fix dgn3500sum compiler warnings
Mathias Kresin [Mon, 26 Jun 2017 17:22:52 +0000 (19:22 +0200)]
firmware-utils: fix dgn3500sum compiler warnings

The sum variable need to be initialised, otherwise it will points to
random stack memory and a bogus image checksum might be calculated.

While at it, fix the segfault in case the product region code isn't
specified and enable compiler warnings which had revealed all the code
issues.

Signed-off-by: Mathias Kresin <dev@kresin.me>
7 years agofirmware-utils: honor env SOURCE_DATE_EPOCH
Alexander Couzens [Sun, 18 Jun 2017 00:21:21 +0000 (02:21 +0200)]
firmware-utils: honor env SOURCE_DATE_EPOCH

Use the timestamp from the enviroment SOURCE_DATE_EPOCH
if set instead of the build time.
Fixes reproducible builds for certain firmware images.

Signed-off-by: Alexander Couzens <lynxis@fe80.eu>
7 years agofirmware-utils: tplink-safeloader: add TP-Link Archer C25 v1
Ludwig Thomeczek [Sat, 13 May 2017 09:40:48 +0000 (11:40 +0200)]
firmware-utils: tplink-safeloader: add TP-Link Archer C25 v1

This adds the necessary firmware layout definitions for the Archer C25.
It has an addtional partition containing some static data ("extra-para")
without which no factory flash is possible, therefore put_data() has been
added.

Signed-off-by: Ludwig Thomeczek <ledesrc@wxorx.net>
7 years agoar71xx: add support for TP-Link TL-WR942N v1
Serg Studzinskii [Wed, 8 Mar 2017 20:10:05 +0000 (22:10 +0200)]
ar71xx: add support for TP-Link TL-WR942N v1

TP-Link TL-WR942N v1 is a 2.4 GHz single-band N450 router, based on
Qualcomm/Atheros QCA9561.

Specification:

- 775/650/258 MHz (CPU/DDR/AHB)
- 128 MB of RAM (DDR2)
- 16 MB of FLASH (SPI NOR)
- 3T3R 2.4 GHz
- 5x 10/100 Mbps Ethernet
- 2x USB 2.0
- 11x LED (most are controlled by 74HC595)
- 2x button
- UART header on PCB*

* Serial console is disabled in OEM non-beta firmwares and corresponding
  GPIO pins 14 and 15 are assigned to control USB1 and USB2 LEDs by
  production (non-beta) U-Boot and firmware.

Currently not working:

1. USB1 and USB2 LEDs if UART RX and TX pins are assigned to their GPIOs
   by some U-Boot versions.

Flash instruction under vendor GUI:

1. Download "lede-ar71xx-generic-tl-wr942n-v1-squashfs-factory.bin".
2. Go to WEB interface and perform usual firmware upgrade.

FLash instruction under U-Boot recovery mode (doesn't work in beta
firmware):

1. Setup PC with static IP "192.168.0.66/24" and tftp server.
2. Change "*-factory" image filename to "WR942v1_recovery.bin" and make
   it available to download from your tftp server.
3. Press "reset" button and power up the router, wait till "WPS" LED
   turns on.

Flash instruction under U-Boot, using UART (can be done only with
preinstalled UART-enabled U-Boot version!):

1. Use "tpl" to stop autobooting and obtain U-Boot CLI access.
2. Setup ip addresses for U-Boot and your tftp server.
3. Issue below commands:
   tftp 0x81000000 lede-ar71xx-generic-tl-wr942n-v1-sysupgrade.bin
   erase 0x9f020000 +$filesize
   cp.b 0x81000000 0x9f020000 $filesize
   reset

Signed-off-by: Serg Studzinskii <serguzhg@gmail.com>
[minor code style fixes, extended commit message]
Signed-off-by: Piotr Dymacz <pepe2k@gmail.com>
7 years agofirmware-utils: tplink-safeloader: support strings as soft_version
Jan Niehusmann [Fri, 19 May 2017 07:42:24 +0000 (09:42 +0200)]
firmware-utils: tplink-safeloader: support strings as soft_version

Some TP-Link routers (C25, C59, C60) contain a version string instead
of a binary structure in the soft_version partition.

Flashing LEDE from the original firmware's GUI, this version string
taken from the soft_ver partition of the firmware image is written to
the router's config partition.

When using tftp recovery to go back to the original Archer C25 firmware,
a version check compares that version to the version of the firmware to
be flashed.

Without proper contents in the config partition, reverting to the
original firmware fails.

Therefore, write the string "soft_ver:1.0.0\n" to that soft_ver
partition.

Signed-off-by: Jan Niehusmann <jan@gondor.com>
7 years agofirmware-utils: tplink-safeloader: add support for Archer C5 V2
Rafał Miłecki [Sat, 11 Mar 2017 11:05:33 +0000 (12:05 +0100)]
firmware-utils: tplink-safeloader: add support for Archer C5 V2

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
7 years agoar71xx: add support for TP-Link TL-WA850RE v2
Piotr Dymacz [Fri, 10 Feb 2017 12:44:06 +0000 (13:44 +0100)]
ar71xx: add support for TP-Link TL-WA850RE v2

TP-Link TL-WA850RE v2 is a wall-plug N300 Wi-Fi range extender,
based on Qualcomm/Atheros QCA9533 v2.

Short specification:

- 550/391/195 MHz (CPU/DDR/AHB)
- 1x 10/100 Mbps Ethernet
- 32 MB of RAM (DDR1)
- 4 MB of FLASH
- 2T2R 2.4 GHz
- 2x internal antennas (embedded on PCB)
- 9x LED (all can be turned off with GPIO15), 2x button
- UART (J3) header on PCB

Flash instruction: use "factory" image directly in vendor GUI.

Warning: this device does not include any kind of recovery mechanism
in the bootloader and disassembling process is not trivial.

You can access vendor firmware over serial line using:
- login: root
- password: sohoadmin

Image was tested only in US version of the device, but should work
also with the same device version sold in other countries.

Available FLASH space, with LEDE trunk, is only 240 KB.

Signed-off-by: Piotr Dymacz <pepe2k@gmail.com>
7 years agofirmware-utils: improve tools for Buffalo DHP series
FUKAUMI Naoki [Sat, 28 Jan 2017 16:05:54 +0000 (01:05 +0900)]
firmware-utils: improve tools for Buffalo DHP series

some of Buffalo DHP series use slightly different trx magic, buffalo-enc,
buffalo-tag, and factory image begin with 'bgn'.

this patch adds support for building those images.

Signed-off-by: FUKAUMI Naoki <naobsd@gmail.com>
7 years agoar71xx: add support to TP-Link Archer C59v1 and C60v1
Henryk Heisig [Tue, 27 Dec 2016 21:41:41 +0000 (22:41 +0100)]
ar71xx: add support to TP-Link Archer C59v1 and C60v1

TP-Link Archer C59v1 is a dual-band AC1350 router, based on Qualcomm/Atheros
QCA9561+QCA9886.

Specification:

- 775/650/258 MHz (CPU/DDR/AHB)
- 128 MB of RAM (DDR2)
- 16 MB of FLASH (SPI NOR)
- 3T3R 2.4 GHz
- 2T2R 5 GHz
- 5x 10/100 Mbps Ethernet
- USB 2.0 port
- 8x LED (controled by 74HC595), 3x button
- UART header on PCB

TP-Link Archer C60v1 is a dual-band AC1350 router, based on Qualcomm/Atheros
QCA9561+QCA9886.

Specification:

- 775/650/258 MHz (CPU/DDR/AHB)
- 64 MB of RAM (DDR2)
- 8 MB of FLASH (SPI NOR)
- 3T3R 2.4 GHz
- 2T2R 5 GHz
- 5x 10/100 Mbps Ethernet
- 7x LED, 2x button
- UART header on PCB

Currently not working:
- Port LAN1 on C59, LAN4 on C60
- WiFi 5GHz (missing ath10k firmware for QCA9886 chip)
- Update from oficial web interface ( tplink-saveloader not support "product-info")

Flash instruction:
1. Set PC to fixed ip address 192.168.0.66
2. Download lede-ar71xx-generic-archer-cXX-v1-squashfs-factory.bin
and rename it to tp_recovery.bin
3. Start a tftp server with the file tp_recovery.bin in its root directory
4. Turn off the router
5. Press and hold Reset button
6. Turn on router with the reset button pressed and wait ~15 seconds
7. Release the reset button and after a short time
the firmware should be transferred from the tftp server
8. Wait ~30 second to complete recovery.

Flash instruction under U-Boot, using UART:

1. tftp 0x81000000 lede-ar71xx-...-sysupgrade.bin
2. erase 0x9f020000 +$filesize
3. cp.b $fileaddr 0x9f020000 $filesize
4. reset

Signed-off-by: Henryk Heisig <hyniu@o2.pl>
[Jo-Philipp Wich: remove duplicate ATH79_MACH_ARCHER_C59/C60_V1 entries]
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
7 years agoRevert "tools: wrt400n: fix making factory images with kernel bigger than 1MB"
John Crispin [Fri, 20 Jan 2017 05:39:39 +0000 (06:39 +0100)]
Revert "tools: wrt400n: fix making factory images with kernel bigger than 1MB"

This reverts commit 5f9b20bc7d0bde6c100a3dec5f02b56f7ef7a61d.

The builders were failing with a segfault when generating the image

Signed-off-by: John Crispin <john@phrozen.org>
7 years agotools: wrt400n: fix making factory images with kernel bigger than 1MB
Yousong Zhou [Thu, 29 Dec 2016 07:26:58 +0000 (15:26 +0800)]
tools: wrt400n: fix making factory images with kernel bigger than 1MB

Signed-off-by: Yousong Zhou <yszhou4tech@gmail.com>
7 years agofirmware-utils: tplink-safeloader: add support for TP-Link WBS210/510 1.2
Matthias Schiffer [Thu, 5 Jan 2017 15:01:17 +0000 (16:01 +0100)]
firmware-utils: tplink-safeloader: add support for TP-Link WBS210/510 1.2

Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
7 years agoramips: Add support to TP-Link Archer MR200
Henryk Heisig [Sat, 24 Sep 2016 19:41:43 +0000 (21:41 +0200)]
ramips: Add support to TP-Link Archer MR200

CPU: MT7620N 580MHz
Flash: 8MB
RAM: 64MB
build-in modem 3G/4G
four ethernet port 10/100Mbps

Signed-off-by: Henryk Heisig <hyniu@o2.pl>
7 years agofirmware-utils/tplink-safeloader: add support for TP-Link RE450
Radek Dostál [Thu, 15 Dec 2016 19:41:09 +0000 (20:41 +0100)]
firmware-utils/tplink-safeloader: add support for TP-Link RE450

Signed-off-by: Radek Dostál <rd@radekdostal.com>
[Jo-Philipp Wich: use .support_trail member]
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
7 years agofirmware-utils: kernel image generator for TP-Link RE450
Tal Keren [Thu, 7 Jan 2016 00:40:47 +0000 (02:40 +0200)]
firmware-utils: kernel image generator for TP-Link RE450

The firmware image that is used in TP-Link RE450 (and some more devices from
the RE series) is tplink-safeloader.
In the kernel partition, the kernel is compressed in a regular tp-link
firmware that is just used for booting. Since it is only used for compressing
and booting, only four fields are filled in the header:
Vendor, version, kernel load address and kernel entry point.
mktplinkfw-kernel is a simpler version of mktpolinkfw that generate such
images. It also specifies the hardware id (as it is in the product info
section), so when doing a sysupgrade - the existing code will check for
hardware compatibility.

Signed-off-by: Tal Keren <kooolk@gmail.com>
[rd@radekdostal.com: add build target to .../image/tp-link.mk]
Signed-off-by: Radek Dostál <rd@radekdostal.com>
7 years agofirmware-utils: add support for TL-WR1043ND v4 to mktplinkfw and tplink-safeloader
Matthias Schiffer [Sat, 10 Dec 2016 19:45:50 +0000 (20:45 +0100)]
firmware-utils: add support for TL-WR1043ND v4 to mktplinkfw and tplink-safeloader

The TL-WR1043ND v4 uses a kernel image with a mktplinkfw header inside the
os-image partition of a tplink-safeloader image.

Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
7 years agofirmware-utils/tplink-safeloader: refactor code for further board support
Jo-Philipp Wich [Wed, 24 Aug 2016 17:42:19 +0000 (19:42 +0200)]
firmware-utils/tplink-safeloader: refactor code for further board support

In order to make it easier to add new boards in the future, refactor the code
to describe the image layouts of supported boards in a struct array and alter
the image generation routines to figure out the sysupgrade partitions
automatically.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
7 years agofirmware-utils/tplink-safeloader: make vendor data optional
Jo-Philipp Wich [Wed, 24 Aug 2016 07:30:56 +0000 (09:30 +0200)]
firmware-utils/tplink-safeloader: make vendor data optional

Restructure the code a bit to allow for omitting vendor data when generating
factory images.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
8 years agofirmware-utils: add E2100L support to addpattern.c
Jo-Philipp Wich [Fri, 2 Dec 2016 10:39:42 +0000 (11:39 +0100)]
firmware-utils: add E2100L support to addpattern.c

Based on OpenWrt PR#250

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
8 years agofirmware-utils: tplink-safeloader: update support lists for CPE210/510/...
Matthias Schiffer [Sun, 11 Dec 2016 17:00:13 +0000 (18:00 +0100)]
firmware-utils: tplink-safeloader: update support lists for CPE210/510/...

Adds support for new EU and US variants; removes a few strings that were
never actually used and have been removed from the stock firmwares.

Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
8 years agofirmware-utils: replace md5 code with Alexander Peslyak's implementation
Rafał Miłecki [Sat, 19 Nov 2016 20:09:53 +0000 (21:09 +0100)]
firmware-utils: replace md5 code with Alexander Peslyak's implementation

Our current implementation is pretty old and uses some pre-standard/old
ANSI C style that triggers warnings like:
warning: call to function 'MD5_Init' without a real prototype [-Wunprototyped-calls]

This is caused by declarations specified in a following way:
src/md5.h:60:6: note: 'MD5_Init' was declared here
 void MD5_Init ();

Having these warnings makes it harded to notice real problems. We could
try hiding them but it makes more sense to just use a cleaner code.
Another tiny gain from this switch is slightly reduced binary size, on
x86_64 tplink-safeloader's size 48104 became 48003.

The new code is public domain, uses "heavily cut-down BSD license".

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
8 years agofirmware-utils: Fix build failure in mkmerakifw.c FS#298
Florian Fainelli [Wed, 23 Nov 2016 20:50:25 +0000 (12:50 -0800)]
firmware-utils: Fix build failure in mkmerakifw.c FS#298

Earlier compilers such as GCC 4 do not like anynomous unions, make it a named
union "u", and update the code where relevant.

Fixes FS#298
Fixes: a72e1692b8b3 ("firmware-utils: Add support for the Cisco Meraki MX60/MX60W")
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
8 years agofirmware-utils: Add support for the Cisco Meraki MX60/MX60W
Chris Blake [Wed, 16 Nov 2016 14:35:54 +0000 (08:35 -0600)]
firmware-utils: Add support for the Cisco Meraki MX60/MX60W

This patch adds header support for the Cisco Meraki MX60/MX60W, which
are a part of the apm821xx target. Some structure changes were needed
due to the fact this device uses U-Boot (unlike other devices in
mkmerakifw.c) which uses a different header structure to define the load
offsets for the image.

A thanks to Christian for helping implement this properly.

Cc: Christian Lamparter <chunkeey@gmail.com>
Signed-off-by: Chris Blake <chrisrblake93@gmail.com>
8 years agofirmware-utils: tplink-safeloader: keep per-device info on trailing char
Rafał Miłecki [Sat, 19 Nov 2016 21:42:50 +0000 (22:42 +0100)]
firmware-utils: tplink-safeloader: keep per-device info on trailing char

Recent refactoring introduced a regression. It ignored second argument
of make_support_list function which was originally true for C2600. The
new generic build_image function always passes false.

This patch allows specifying trailing char in a device specific info. It
also switches Archer C9 to the \0 char to make it compliant with vendor
images.

I verified generated images to be binary identical to the ones that
were created before whole refactoring.

Reported-by: Jo-Philipp Wich <jo@mein.io>
Fixes: fd924d2068f ("firmware-utils: tplink-safeloader: use one function for generating images")
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
8 years agofirmware-utils: tplink-safeloader: add Archer C9 support
Rafał Miłecki [Sat, 19 Nov 2016 06:58:25 +0000 (07:58 +0100)]
firmware-utils: tplink-safeloader: add Archer C9 support

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
8 years agofirmware-utils: tplink-safeloader: use one function for generating images
Rafał Miłecki [Sun, 13 Nov 2016 17:30:48 +0000 (18:30 +0100)]
firmware-utils: tplink-safeloader: use one function for generating images

Thanks to the struct device_info we can now use one unified function.

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
8 years agofirmware-utils: tplink-safeloader: add struct device_info
Rafał Miłecki [Sun, 13 Nov 2016 17:30:47 +0000 (18:30 +0100)]
firmware-utils: tplink-safeloader: add struct device_info

This struct stores all device specific info which allows making do_eap
function more generic.

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
8 years agofirmware-utils: add tool to create zyxel images
Vitaly Chekryzhev [Sat, 29 Oct 2016 12:26:58 +0000 (17:26 +0500)]
firmware-utils: add tool to create zyxel images

Signed-off-by: Vitaly Chekryzhev <13hakta@gmail.com>
[moved to firmware-utils package]
[dropped the compiled binary]
Signed-off-by: Mathias Kresin <dev@kresin.me>
8 years agoar71xx: add support for Buffalo BHR-4GRV2
FUKAUMI Naoki [Tue, 8 Nov 2016 13:45:00 +0000 (22:45 +0900)]
ar71xx: add support for Buffalo BHR-4GRV2

Signed-off-by: FUKAUMI Naoki <naobsd@gmail.com>
8 years agofirmware-utils: fix compilation on MacOS X
Alexandru Ardelean [Fri, 28 Oct 2016 06:52:12 +0000 (09:52 +0300)]
firmware-utils: fix compilation on MacOS X

Looking into /usr/include/stdlib.h, there's a `devname()` function defined
under some #ifdef's which conflicts with the `static char *devname` definition
in `src/mkwrggimg.c`.

Defining `_ANSI_SOURCE` in the `src/mkwrggimg.c` file, omits that part of the
header.

Another more intrusive approach is to rename `devname` to something like
`g_devname` in `src/mkwrggimg.c`. But I think the `_ANSI_SOURCE` define should
be enough.

Compilation error is:

    src/mkwrggimg.c:64:14: error: redefinition of 'devname' as different kind of symbol
    static char *devname;
                 ^
    /usr/include/stdlib.h:286:7: note: previous definition is here
    char    *devname(dev_t, mode_t);
             ^
    src/mkwrggimg.c:147:12: error: non-object type 'char *(dev_t, mode_t)' (aka 'char *(int, unsigned short)') is not assignable
                            devname = optarg;
                            ~~~~~~~ ^
    src/mkwrggimg.c:192:6: warning: comparison of function 'devname' equal to a null pointer is always false [-Wtautological-pointer-compare]
            if (devname == NULL) {
                ^~~~~~~    ~~~~
    src/mkwrggimg.c:192:6: note: prefix with the address-of operator to silence this warning
            if (devname == NULL) {
                ^
                &
    src/mkwrggimg.c:251:27: warning: incompatible pointer types passing 'char *(dev_t, mode_t)' (aka 'char *(int, unsigned short)') to parameter of type 'const char *' [-Wincompatible-pointer-types]
            strncpy(header->devname, devname, sizeof(header->devname));
                                     ^~~~~~~
    /usr/include/secure/_string.h:119:34: note: expanded from macro 'strncpy'
      __builtin___strncpy_chk (dest, src, len, __darwin_obsz (dest))

Signed-off-by: Alexandru Ardelean <ardeleanalex@gmail.com>
[Jo-Philipp Wich: slightly reformat commit message]
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
8 years agofirmware-utils: mkwrggimg: new tool for D-Link DAP-2695
Stijn Tintel [Sat, 6 Aug 2016 17:36:24 +0000 (19:36 +0200)]
firmware-utils: mkwrggimg: new tool for D-Link DAP-2695

Based on mkwrgimg.c.

Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
Acked-by: John Crispin <john@phrozen.org>
8 years agoar71xx: Add support to TP-Link EAP120
Henryk Heisig [Thu, 6 Oct 2016 21:46:38 +0000 (23:46 +0200)]
ar71xx: Add support to TP-Link EAP120

Signed-off-by: Henryk Heisig <hyniu@o2.pl>
8 years agoptgen: work around gcc miscompilation
Jonas Gorski [Mon, 12 Sep 2016 10:59:21 +0000 (12:59 +0200)]
ptgen: work around gcc miscompilation

Some gcc versions seem to miscompile code using ternary operators,
work around this by just returning the result if exp is 0.

Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
8 years agotools/firmware-utils: fix portability issue in mkmerakifw-old
Felix Fietkau [Thu, 22 Sep 2016 11:37:22 +0000 (13:37 +0200)]
tools/firmware-utils: fix portability issue in mkmerakifw-old

Fixes build failure on Mac OS X

Signed-off-by: Felix Fietkau <nbd@nbd.name>
8 years agofirmware-utils mkmerakifw-old: firmware generator for Z1
Christian Lamparter [Sun, 18 Sep 2016 15:12:54 +0000 (10:12 -0500)]
firmware-utils mkmerakifw-old: firmware generator for Z1

This patch adds firmware generation tool for Cisco's Z1

Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
8 years agofirmware-utils: mksenaofw: rework option validation
Mathias Kresin [Wed, 17 Aug 2016 18:08:52 +0000 (20:08 +0200)]
firmware-utils: mksenaofw: rework option validation

The options firmware_type, vendor_id and product_id are not required
for decoding an image file.

Signed-off-by: Mathias Kresin <dev@kresin.me>
8 years agofirmware-utils: mktplinkfw: add support for TP-Link's new region codes
Matthias Schiffer [Sun, 28 Aug 2016 17:43:25 +0000 (19:43 +0200)]
firmware-utils: mktplinkfw: add support for TP-Link's new region codes

TP-Link has changed the way the region is stored in the firmware header,
and now provides US- and EU-specific images for the Archer C7. Adding the
new region codes is necessary to make LEDE/OpenWrt flashable on devices
with the new stock firmwares again.

Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
8 years agoapm821xx: add support for the Cisco Meraki MR24
Chris Blake [Wed, 20 Jul 2016 13:44:51 +0000 (15:44 +0200)]
apm821xx: add support for the Cisco Meraki MR24

This patch adds support for the Cisco Meraki MR24 Access point
to the apm821xx target.

Board: MR24 - Meraki MR24 Cloud Managed Access Point
CPU: APM82181 SoC 800 MHz (PLB=200 OPB=100 EBC=100)
Flash size: 32MiB
RAM Size: 128MiB
Wireless: Atheros AR9380 5.0GHz + Atheros AR9380 2.4GHz
Ethernet ports: 1x Gigabit Atheros AR8035

WARNING: The serial port needs a TTL/RS-232 v3.3 level converter!

For flashing instructions, visit:
<https://github.com/riptidewave93/Openwrt-MR24/blob/master/README.md#flashing>

Signed-off-by: Chris Blake <chrisrblake93@gmail.com>
8 years agofirmware-utils: oseama: support extracting entity
Rafał Miłecki [Thu, 5 May 2016 12:32:00 +0000 (14:32 +0200)]
firmware-utils: oseama: support extracting entity

This updates oseama in firmware-utils to the version from packages
keeping them synced.

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
8 years agotools/mkfwimage2: remove 256 length limit for partition images
Alexander Couzens [Sat, 11 Jun 2016 02:12:38 +0000 (04:12 +0200)]
tools/mkfwimage2: remove 256 length limit for partition images

Signed-off-by: Alexander Couzens <lynxis@fe80.eu>
8 years agotools/firmware-utils: Add Archer C50 to mktplinkfw2
Henryk Heisig [Sun, 12 Jun 2016 21:49:02 +0000 (23:49 +0200)]
tools/firmware-utils: Add Archer C50 to mktplinkfw2

Signed-off-by: Henryk Heisig <hyniu@o2.pl>
8 years agotreewide: replace nbd@openwrt.org with nbd@nbd.name
Felix Fietkau [Tue, 7 Jun 2016 06:58:31 +0000 (08:58 +0200)]
treewide: replace nbd@openwrt.org with nbd@nbd.name

Signed-off-by: Felix Fietkau <nbd@nbd.name>
8 years agotools/tplink-safeloader: split CPE210 from CPE510 profile
Alexander Couzens [Sun, 29 May 2016 00:02:20 +0000 (02:02 +0200)]
tools/tplink-safeloader: split CPE210 from CPE510 profile

The CPE210 was still described for the OEM upgrade as compatible,
even the wireless configuration isn't compatible anymore between
both series (2ghz and 5ghz).
Update the CPE210 image profile to use the new profile.

Signed-off-by: Alexander Couzens <lynxis@fe80.eu>
8 years agofw-utils/tplink-safeloader.c: Add support for Archer C2600
Ash Benz [Fri, 27 May 2016 14:26:39 +0000 (22:26 +0800)]
fw-utils/tplink-safeloader.c: Add support for Archer C2600

Signed-off-by: Ash Benz <ash.benz@bk.ru>
8 years agotools/firmware-utils: remove obsolete firmware utility for airlink 525w
Felix Fietkau [Thu, 12 May 2016 15:39:46 +0000 (17:39 +0200)]
tools/firmware-utils: remove obsolete firmware utility for airlink 525w

Signed-off-by: Felix Fietkau <nbd@nbd.name>
8 years agotools: firmware-utils: add region code support to mktplinkfw
John Crispin [Thu, 21 Apr 2016 19:47:15 +0000 (19:47 +0000)]
tools: firmware-utils: add region code support to mktplinkfw

Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
SVN-Revision: 49215

8 years agotools: firmware-utils: clean up mktplinkfw
John Crispin [Thu, 21 Apr 2016 19:47:12 +0000 (19:47 +0000)]
tools: firmware-utils: clean up mktplinkfw

Remove the whole board list from mktplinkfw, as OpenWrt doesn't use it and
it was severely out of sync with the list of built images for ar71xx.

Also:
* fix -Wall warnings
* add const where appropriate

Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
SVN-Revision: 49214

8 years agoar71xx: add TP-Link TL-WA901ND-v4 support
John Crispin [Sat, 9 Apr 2016 10:26:46 +0000 (10:26 +0000)]
ar71xx: add TP-Link TL-WA901ND-v4 support

Signed-off-by: Tiziano Bacocco <tizbac2@gmail.com>
SVN-Revision: 49158

8 years agoar71xx: Add support for the OMYlink OMY-X1
John Crispin [Wed, 16 Mar 2016 09:26:58 +0000 (09:26 +0000)]
ar71xx: Add support for the OMYlink OMY-X1

This patch adds support for the OMYlink OMY-X1

https://wiki.openwrt.org/toh/omylink/omy-x1

http://www.omylink.com/

Signed-off-by: L. D. Pinney <ldpinney@gmail.com>
SVN-Revision: 49026

8 years agoramips: Add a tool to create JCG factory images
John Crispin [Fri, 4 Mar 2016 08:32:54 +0000 (08:32 +0000)]
ramips: Add a tool to create JCG factory images

replace spaces with tabs

Signed-off-by: Reinhard Max <reinhard@m4x.de>
SVN-Revision: 48901

8 years agoramips: Add a tool to create JCG factory images
John Crispin [Thu, 3 Mar 2016 20:24:30 +0000 (20:24 +0000)]
ramips: Add a tool to create JCG factory images

This tool creates factory images for JCG routers.
Details can be found in the header comment of jcgimage.c.

Signed-off-by: Reinhard Max <reinhard@m4x.de>
Reviewed-by: Torsten Duwe <duwe@lst.de>
SVN-Revision: 48888

8 years agofirmware-utils: mkfwimage: fix firmware_max_length for XM layout
Felix Fietkau [Mon, 29 Feb 2016 20:11:33 +0000 (20:11 +0000)]
firmware-utils: mkfwimage: fix firmware_max_length for XM layout

The new u-boot version bundled with the 5.6.x firmwares from Ubiquiti gets
confused by the smaller rootfs partition size; this can lead to various
issues:

1. We've gotten reports that flashing from the 5.6.x stock firmware to
   OpenWrt will brick devices; I wasn't able to reproduce this myself
2. Flashing from 5.5.x stock firmware to OpenWrt and back to stock (via
   TFTP recovery), following by an update to 5.6.x via web interface can
   yield a bricked device with the following properties:
   - It can't be booted without entering commands over a serial console, as
     u-boot supplies the wrong MTD layout
   - The web interface won't accept any image with the original flash
     layout, so stock firmware upgrades are impossible
   - As the TFTP recovery doesn't update u-boot, returning to the old
     u-boot from firmware 5.5.x is impossible

To recover from 2., creating an OpenWrt image which doesn't set u-boot as
read-only and flashing a backup of the old u-boot from there is the only
way known to me. (Fixing the mtdparts variable in u-boot-env from OpenWrt
might also work; settings this from u-boot over serial didn't have
any permanent effect.)

Fix all of this by setting the correct flash layout also used by the stock
firmware. Flashing has been tested from both firmware 5.5.x and 5.6.x. The
fixed layout also matches the mtdparts defined by OpenWrt.

Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
SVN-Revision: 48829

8 years agoar71xx, firmware-utils: split ubdev01 flash layout from XM
Felix Fietkau [Mon, 29 Feb 2016 20:11:30 +0000 (20:11 +0000)]
ar71xx, firmware-utils: split ubdev01 flash layout from XM

The ubdev01 profile defines its own MTDPARTS with smaller firmware
partition, so give it its own UBNT_BOARD in mkfwimage.

Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
SVN-Revision: 48828

8 years agofirmware-utils: mkfwimage: add -Wall, fix obvious bugs causing compile warnings
Felix Fietkau [Mon, 29 Feb 2016 20:11:26 +0000 (20:11 +0000)]
firmware-utils: mkfwimage: add -Wall, fix obvious bugs causing compile warnings

Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
SVN-Revision: 48827

8 years agoar71xx: Added support for TL-WA801NDv3
John Crispin [Fri, 12 Feb 2016 08:30:28 +0000 (08:30 +0000)]
ar71xx: Added support for TL-WA801NDv3

Signed-off-by: Tiziano Bacocco <tizbac2@gmail.com>
SVN-Revision: 48705

8 years agofirmware-utils: add oseama tool for creating Seama entities
Rafał Miłecki [Mon, 1 Feb 2016 12:42:00 +0000 (12:42 +0000)]
firmware-utils: add oseama tool for creating Seama entities

It has an important feature (compared to seama) of using multiple input
files, aligning them and padding zeroes until reaching a specified
absolute offset. This is needed for a proper flash layout on NAND. We
want kernel partition to be big enough to handle future updates without
a need to resize it and wipe whole "ubi" partition. It's important as
we don't want to lose block counters.

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
SVN-Revision: 48601

8 years agolantiq: add support for TP-Link VR200v
Hauke Mehrtens [Mon, 18 Jan 2016 20:40:03 +0000 (20:40 +0000)]
lantiq: add support for TP-Link VR200v

This adds basic support for TP-Link VR200v.
Currently the following parts are not working: FXO, Voice, DECT, WIFI (both)

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
SVN-Revision: 48328

8 years agofirmware-utils: allow mkfwimage2 to use - in partition names
John Crispin [Wed, 23 Dec 2015 14:43:47 +0000 (14:43 +0000)]
firmware-utils: allow mkfwimage2 to use - in partition names

Signed-off-by: Roman Yeryomin <roman@advem.lv>
SVN-Revision: 47975