Commit Graph

47 Commits

Author SHA1 Message Date
Rafał Miłecki
80041dea70 bcm53xx: sysupgrade: refactor handling different firmware formats
List of supported formats grew over time and implementation got a bit
messy. There are multiple functions with format-specific parameters and
commands.

Refactor it by making platform_identify() setup all required info right
after detecting firmware format. This simplifies formats handling in
platform_other_check_image() and platform_do_upgrade() a lot.

This has been tested on:
1. SmartRG SR400ac (TRX): non-NAND sysupgrade
2. Netgear R8000 (CHK): NAND aware and standard sysupgrade-s
3. D-Link DIR-885L (Seama): NAND aware and standard sysupgrade-s
4. Luxul XWR-3150 (LXL): NAND aware and standard sysupgrade-s

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
2021-12-02 09:15:18 +01:00
Rafał Miłecki
e7bd6cce4c bcm53xx: sysupgrade: simplify extracting image from Seama seal
Use "oseama extract" which supports now writing to stdout.

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
2021-12-02 09:15:18 +01:00
Christian Lamparter
0e4092cbad bcm53xx: add Cisco Meraki MR32
This patch adds support for Cisco Meraki MR32.
The unit was donated by Chris Blake. Thank you!

WARNING:
Only the 1x1:1 abgn Air Marshal WIPS wifi is currently supported by b43:
 b43-phy2: Found PHY: Analog 9, Type 4 (N), Revision 16
 b43-phy2: Found Radio: Manuf 0x17F, ID 0x2057, Revision 9, Version 1
 b43-phy2: Loading firmware version 784.2 (2012-08-15 21:35:19)
 and only as 802.11ABG!

while WIFI1 and WIFI2 (both BCM4352) are not:
 b43-phy0: Broadcom 4352 WLAN found (core revision 42)
 b43-phy0 ERROR: FOUND UNSUPPORTED PHY (Analog 12, Type 11 (AC), Revision 1)

Hardware Highlights:

SoC:	Broadcom BCM53016A1 (1 GHz, 2 cores)
RAM:	128 MiB
NAND:	128 MiB Spansion S34ML01G2 (~114 MiB useable)
ETH:	1GBit Ethernet Port - PoE
WIFI1:	Broadcom BCM43520 an+ac (2x2:2 - id: 0x4352)
WIFI2:	Broadcom BCM43520 bgn (2x2:2 - id: 0x4352)
WIFI3:	Broadcom BCM43428 abgn (1x1:1 - id: 43428)

BLE:	Broadcom BCM20732 (ttyS1)
LEDS:   1 x Programmable RGB Status LED (driven by a PWM)
	1 x White LED (GPIO)
	1 x Orange LED Fault Indicator (GPIO)
	2 x LAN Activity / Speed LEDs (On the RJ45 Port)
BUTTON: one Reset button
MISC:   AT24C64 8KiB EEPROM (i2c - stores Ethernet MAC + Serial#!)
	ina219 hardware monitor (i2c)
	Kensington Lock

SERIAL:
	WARNING: The serial port needs a TTL/RS-232 3V3 level converter!
	The Serial setting is 115200-8-N-1. The board has a populated
	right angle 1x4 0.1" pinheader.
	The pinout is: VCC, RX, TX, GND. (Use a multimeter)

Flashing needs a serial adaptor (due to the lack of a working dropbear on
the original firmware).

This flashing procedure for the MR32 was tested with firmware:
"r23-149867:150252-aacharya".

0. Create a seperate Ethernet LAN which does not have access to the internet.
   Ideally use 192.168.1.2 for your PC. Make sure to reserve 192.168.1.1 it
   will be used later on by the OpenWrt firmware. The original Meraki firmware
   will likely try to setup the network via DHCP Discovery, so make sure your
   PC is running a DHCP-Server (i.e.: dnsmasq)
   '# dnsmasq -i eth# -F 192.168.1.5,192.168.1.50
   Furthermore, the PC needs a supported ssh/http/ftp server in order to
   retrieve the initramfs + dtb file

1. Disassemble the MR32 device by removing all screws (4 screws are located
   under the 4 rubber feets!) and prying open the plastic covers without
   breaking the plastic retention clips. Once inside, remove all the screws
   on the outer metal shielding to get to the PCB. It's not necessary to
   remove the antennas!

2. Connect the serial cable to the serial header.

3. Partially reassemble the outer metal shielding to ensure that the SoC
   has a proper heat sink.

4. Connect the Ethernet patch cable to the device and the power cable.

5. Wait for the device to boot and enter the root shell.
   (rooting is not discussed in detail here please refer to
   Chris Blake - "pwning the meraki mr18" blog post:
   <https://servernetworktech.com/2016/02/pwning-the-meraki-mr18/>
   (The same method works with the MR32's r23-149867:150252-aacharya)

   Wait for the MR32 to enter the "<Meraki>" prompt and enter:
   <Meraki> odm serial_num read
   (Verify that it matches what's on the S/N Sticker on the back!)
   <Meraki> odm serial_num write Q2XX-XXXX-XXXV
   <Meraki> odm serial_num read
   (Verify that the S/N has changed - and the LED start to flash)

   now to flash the firmware:
   <Meraki> odm firmware part.safe "http://192.168.1.2/mr32-initramfs.bin"

Once OpenWrt booted use sysupgrade to permanently install
OpenWrt. To do this: Download the latest sysupgrade.bin file
for the MR32 to the device and use sysupgrade *sysupgrade.bin
to install it.

WARNING: DO NOT DELETE the "storage" ubi volume!

To flash later MR32 Firmwares like r25-201804051805-G885d6d78-dhow-rel
requires in-circut-i2c tools to access the I2C EEPROM AT24C64 next to
the SoC. The idea is pretty much the same as from Step 5 from above:
Change the serial number to Q2XXXXXXXXXV (should be around 0x7c), then
attach a serial cable, ethernet (but make sure the device can't reach
the internet!) hit "s" (the small s!) during boot to enter the root-shell
and add the following commands to the /storage/config there:

serial_allow_odm true
serial_access_enabled true
serial_access_check false
valid_config true

and then hit exit to let it finish booting.

Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
2020-09-25 19:32:34 +02:00
Rafał Miłecki
8abefc8896 bcm53xx: sysupgrade: optimize building UBI image
Use "truncate" to adjust size of existing file instead of "dd" which
required creating a copy. This saves space on tmpfs. It may be as low
as 2.1 MiB when using OpenWrt default user space and way more (20+ MiB)
when flashing vendor firmware.

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
2020-03-21 22:31:35 +01:00
Dan Haab
63c43e5674 bcm53xx: sysupgrade: support Luxul NAND devices
This adds support for UBI-aware sysupgrade using Luxul formats.

Signed-off-by: Dan Haab <dan.haab@legrand.com>
2019-10-15 20:23:04 +02:00
Rafał Miłecki
64b7dbb300 bcm53xx: fix sysupgrade for Luxul XWC-2000
Use a correct "compatible" value as in the upstream DTS file.

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
2019-10-04 11:41:32 +02:00
Dan Haab
bc5db7364d bcm53xx: sysupgrade: support Luxul firmware format
Allow flashing Luxul devices using vendor firmware format. The next step
will be building proper images once they are conirmed to work.

Signed-off-by: Dan Haab <dan.haab@legrand.com>
2019-09-16 16:01:42 +02:00
Rafał Miłecki
c19b9f9a26 bcm53xx: extend firmware validation
This provides TRX validation result to the validation JSON. It also
prevents users from installing broken firmware files.

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
2019-09-06 12:52:59 +02:00
Rafał Miłecki
ccf8a8e863 bcm53xx: sysupgrade: call nand_do_upgrade() from platform_do_upgrade()
Calling nand_do_upgrade() from platform_pre_upgrade() was obsoleted in
the commit 30f61a34b4 ("base-files: always use staged sysupgrade").

This change brings bcm53xx in sync with other targets and allows
dropping backward compatibility code. It shouldn't change any user
visible behavior.

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
2019-07-08 07:38:12 +02:00
Rafał Miłecki
a07730472c bcm53xx: backport BCM5301X/BCM53573 dts commits from 4.19+
This includes Linksys EA9500 support, BCM53573 timer fix and
upstream-ready partitions patch that replaces two downstream hacks.

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
2018-07-28 21:48:10 +02:00
Rafał Miłecki
93cc44c433 bcm53xx: exit if writing kernel during sysupgrade fails
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
2018-06-18 13:47:08 +02:00
Rafał Miłecki
3267ce750e bcm53xx: use iflag=skip_bytes for dd command during sysupgrade
Since BusyBox 1.25.0 dd command supports iflag=skip_bytes which allows
skipping requested amount of bytes without reducing blocksize. Thanks to
this we can leave default blocksize and let dd work more efficiently.

On Netgear R6250 "dd skip=58 iflag=skip_bytes" can be 5 times faster
than "dd bs=58 skip=1" when extracting TRX out of CHK.

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
2017-12-29 23:18:45 +01:00
Mathias Kresin
f12a32630f treewide: use the generic board_name function
Use the generic function instead ot the target specific ones.

Signed-off-by: Mathias Kresin <dev@kresin.me>
2017-07-15 23:13:34 +02:00
Matthias Schiffer
438dcbfe74
base-files: automatically handle paths and symlinks for RAMFS_COPY_BIN
Depending on busybox applet selection, paths of basic utiilties may differ,
and may not work as symlinks to busybox. Simply using whatever binary is
found in PATH and detecting symlinks automatically is more robust and
easier to maintain.

The list of binaries is also slightly cleaned up and duplicates are
removed.

Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
2017-07-11 17:26:32 +02:00
Matthias Schiffer
73f675415c
bcm53xx: upgrade: fix RAMFS_COPY_*
Fixes: 30f61a34b4 "base-files: always use staged sysupgrade"
Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
2017-07-11 17:19:23 +02:00
Felix Fietkau
727e244fae bcm53xx: suppress osafeloader info error messages during flashing
Signed-off-by: Felix Fietkau <nbd@nbd.name>
2017-01-30 13:00:11 +01:00
Rafał Miłecki
5e339a48aa bcm53xx: build image for TP-LINK Archer C9 v1
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
2016-11-19 07:58:26 +01:00
Rafał Miłecki
2d61c26f02 bcm53xx: support SafeLoader format in sysupgrade
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
2016-11-19 07:58:26 +01:00
Rafał Miłecki
776b24d9aa bcm53xx: properly support sysupgrade using Seama on NAND devices
It updates kernel and then formats UBI without loosing erase counters.

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
2016-06-20 08:02:32 +02:00
Rafał Miłecki
cb0de9a68e bcm53xx: sysupgrade: move TRX specific code to separated function
This will allow adding support for other formats (e.g. Seama) in a clean
way.

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
2016-06-13 22:52:04 +02:00
Rafał Miłecki
997a3cb41c bcm53xx: add basic support for Netgear R7900
Signed-off-by: Rafał Miłecki <zajec5@gmail.com>

SVN-Revision: 49122
2016-04-09 09:59:21 +00:00
Rafał Miłecki
9a69e00baa bcm53xx: support Netgear R8500 in sysupgrade
Signed-off-by: Rafał Miłecki <zajec5@gmail.com>

SVN-Revision: 48572
2016-01-30 16:57:35 +00:00
Rafał Miłecki
926c8dfc7b bcm53xx: specify magic expected in sysupgrade for D-Link DIR-885L
Signed-off-by: Rafał Miłecki <zajec5@gmail.com>

SVN-Revision: 48553
2016-01-29 22:31:43 +00:00
Rafał Miłecki
c0edf30bdc bcm53xx: basic support for Seama format in sysupgrade
Signed-off-by: Rafał Miłecki <zajec5@gmail.com>

SVN-Revision: 48535
2016-01-28 22:38:37 +00:00
Rafał Miłecki
1dfa8f37db bcm53xx: detect Seama sysupgrade format
It's used e.g. by D-Link devices. We don't support it yet.

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

SVN-Revision: 48509
2016-01-27 10:40:58 +00:00
Rafał Miłecki
f87990840d bcm53xx: support sysupgrade with Netgear R7000 original firmware
Signed-off-by: Rafał Miłecki <zajec5@gmail.com>

SVN-Revision: 46732
2015-08-26 15:21:14 +00:00
Rafał Miłecki
46a25c6e8a bcm53xx: fallback to default_do_upgrade if NAND upgrade fails
Signed-off-by: Rafał Miłecki <zajec5@gmail.com>

SVN-Revision: 45915
2015-06-06 17:52:53 +00:00
Rafał Miłecki
3d4f163df1 bcm53xx: sysupgrade: drop useless shift in platform.sh
Signed-off-by: Rafał Miłecki <zajec5@gmail.com>

SVN-Revision: 45914
2015-06-06 17:26:05 +00:00
Rafał Miłecki
54fb91f0cf bcm53xx: extract TRX from image on the fly
Extracting TRX to separated file in /tmp/ just wastes some RAM while we
can just pass a proper extracting command to the default_do_upgrade.

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

SVN-Revision: 45912
2015-06-06 17:23:03 +00:00
Rafał Miłecki
5e90144aec bcm53xx: sysupgrade: extract TRX partitions directly from vendor image
Extracting full TRX out of vendor format is not needed as otrx supports
passing TRX offset. This saves some RAM during sysupgrade.

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

SVN-Revision: 45911
2015-06-06 17:05:31 +00:00
Rafał Miłecki
866fe3895d bcm53xx: sysupgrade: check if new kernel fits partition size
Signed-off-by: Rafał Miłecki <zajec5@gmail.com>

SVN-Revision: 45547
2015-04-21 11:21:34 +00:00
Rafał Miłecki
457d9caf4d bcm53xx: sysupgrade: improve NAND warnings
Signed-off-by: Rafał Miłecki <zajec5@gmail.com>

SVN-Revision: 45546
2015-04-21 11:04:38 +00:00
Rafał Miłecki
a86e7330dc bcm53xx: sysupgrade: drop some debugging message
Signed-off-by: Rafał Miłecki <zajec5@gmail.com>

SVN-Revision: 45544
2015-04-21 08:34:25 +00:00
Rafał Miłecki
688c1d74b9 bcm53xx: sysupgrade: allow flashing NAND devices without --force
Signed-off-by: Rafał Miłecki <zajec5@gmail.com>

SVN-Revision: 45543
2015-04-21 08:32:59 +00:00
Rafał Miłecki
d263c8e1a9 bcm53xx: sysupgrade: support flashing TRX with UBI image
Signed-off-by: Dan Haab <dhaab@luxul.com>

SVN-Revision: 45542
2015-04-21 08:20:06 +00:00
Rafał Miłecki
9e03c36259 bcm53xx: fix handling absolute paths in sysupgrade (for vendor formats)
Signed-off-by: Rafał Miłecki <zajec5@gmail.com>

SVN-Revision: 45473
2015-04-17 06:03:00 +00:00
Rafał Miłecki
3edb55143d bcm53xx: add (disabled) support for upgrading kernel during sysupgrade
Signed-off-by: Rafał Miłecki <zajec5@gmail.com>

SVN-Revision: 45445
2015-04-14 20:50:59 +00:00
Rafał Miłecki
3cb8bf44e6 otrx: change command line API to start with a mode
This will allow adding more modes without options conflict.

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

SVN-Revision: 45443
2015-04-14 20:50:46 +00:00
Rafał Miłecki
95ef64a779 bcm53xx: allow sysupgrade firmwares without UBI containing rootfs
In most cases it allows reverting back to the vendor firmware (as they
usually don't use UBI). If users wants to do that we can't do anything
anyway. Erease counters will be just lost. The only thing we do is warn:
"Flashing firmware without UBI for rootfs. All erase counters will be
lost."
It still requires forcing sysupgrade.

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

SVN-Revision: 45392
2015-04-12 12:04:13 +00:00
Rafał Miłecki
24d40980b0 bcm53xx: add platform_pre_upgrade to prepare for kernel+UBI sysupgrade
We can now detect that provided firmware contains kernel and UBI image
partitions. Flashing it in a sane way (keeping erase counters) still
needs to be implemented.

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

SVN-Revision: 45391
2015-04-12 11:46:16 +00:00
Rafał Miłecki
a04b71d330 bcm53xx: rework vendor fw handling to don't duplicate upgrade calls
Signed-off-by: Rafał Miłecki <zajec5@gmail.com>

SVN-Revision: 45389
2015-04-12 10:42:27 +00:00
Rafał Miłecki
2198db252c bcm53xx: switch to the otrx for verifying TRX images
This adds checking CRC32 of provided firmware image.

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

SVN-Revision: 45320
2015-04-09 06:33:56 +00:00
Rafał Miłecki
b6e8da2e14 bcm53xx: image: share function checking TRX in provided firmware
Signed-off-by: Rafał Miłecki <zajec5@gmail.com>

SVN-Revision: 45292
2015-04-07 14:14:08 +00:00
Rafał Miłecki
7abd779730 bcm53xx: display all errors (not just the 1st one) when checking image
Signed-off-by: Rafał Miłecki <zajec5@gmail.com>

SVN-Revision: 45291
2015-04-07 14:14:02 +00:00
Rafał Miłecki
a19b69a717 bcm53xx: compare provided firmware magic with device magic
Signed-off-by: Rafał Miłecki <zajec5@gmail.com>

SVN-Revision: 45290
2015-04-07 14:13:56 +00:00
Rafał Miłecki
d1a28cfbb2 bcm53xx: support flashing CHK and CyberTAN images
SVN-Revision: 43800
2014-12-30 17:45:53 +00:00
Rafał Miłecki
dd9ca05249 bcm53xx: sysupgrade support for devices with serial flash
Signed-off-by: Rafał Miłecki <zajec5@gmail.com>

SVN-Revision: 43719
2014-12-15 15:43:46 +00:00