ar71xx: Enable mtdsplit support for RB SPI NOR devices

This patch enables mtdsplit for the MikroTik subtarget.
It converts mach-rbspi.c to use a single "firmware" partition.
Finally, it converts the SPI NOR profile to metadata images:
the original combined-image format is gone, the images are now
"standard" sysupgrade images with metadata appended.

Note: kernel2minor apparently pads the kernel container to erase-block
boundary, but this is undocumented behaviour, so we do not rely on it
and call pad-to anyway.

Note: in platform.sh, the boards are tested last in platform_check_image()
as this should eventually become the "*)" default case when more devices
switch to metadata images.

Signed-off-by: Thibaut VARENE <hacks@slashdirt.org>
openwrt-18.06
Thibaut VARENE 2017-02-15 11:40:06 +01:00 committed by Felix Fietkau
parent 53c862705d
commit f6a52bf337
4 changed files with 17 additions and 32 deletions

View File

@ -344,11 +344,6 @@ platform_check_image() {
ls-sr71|\ ls-sr71|\
pb42|\ pb42|\
pb44|\ pb44|\
rb-750-r2|\
rb-750up-r2|\
rb-941-2nd|\
rb-951ui-2nd|\
rb-mapl-2nd|\
routerstation-pro|\ routerstation-pro|\
routerstation|\ routerstation|\
wp543|\ wp543|\
@ -637,6 +632,14 @@ platform_check_image() {
return 0; return 0;
;; ;;
# these boards use metadata images
rb-750-r2|\
rb-750up-r2|\
rb-941-2nd|\
rb-951ui-2nd|\
rb-mapl-2nd)
return 0
;;
esac esac
echo "Sysupgrade is not yet supported on $board." echo "Sysupgrade is not yet supported on $board."
@ -707,14 +710,6 @@ platform_do_upgrade() {
local board=$(ar71xx_board_name) local board=$(ar71xx_board_name)
case "$board" in case "$board" in
rb-750-r2|\
rb-750up-r2|\
rb-941-2nd|\
rb-951ui-2nd|\
rb-mapl-2nd)
PLATFORM_DO_UPGRADE_COMBINED_SEPARATE_MTD=1
platform_do_upgrade_combined "$ARGV"
;;
all0258n) all0258n)
platform_do_upgrade_allnet "0x9f050000" "$ARGV" platform_do_upgrade_allnet "0x9f050000" "$ARGV"
;; ;;

View File

@ -380,6 +380,7 @@ CONFIG_MTD_SPLIT_LZMA_FW=y
CONFIG_MTD_SPLIT_SEAMA_FW=y CONFIG_MTD_SPLIT_SEAMA_FW=y
CONFIG_MTD_SPLIT_UIMAGE_FW=y CONFIG_MTD_SPLIT_UIMAGE_FW=y
CONFIG_MTD_SPLIT_WRGG_FW=y CONFIG_MTD_SPLIT_WRGG_FW=y
CONFIG_MTD_SPLIT_MINOR_FW=y
CONFIG_MTD_TPLINK_PARTS=y CONFIG_MTD_TPLINK_PARTS=y
CONFIG_MYLOADER=y CONFIG_MYLOADER=y
CONFIG_NEED_DMA_MAP_STATE=y CONFIG_NEED_DMA_MAP_STATE=y

View File

@ -60,7 +60,6 @@
#define RB_ROUTERBOOT_OFFSET 0x0000 #define RB_ROUTERBOOT_OFFSET 0x0000
#define RB_BIOS_SIZE 0x1000 #define RB_BIOS_SIZE 0x1000
#define RB_SOFT_CFG_SIZE 0x1000 #define RB_SOFT_CFG_SIZE 0x1000
#define RB_KERNEL_SIZE (2 * 1024 * 1024) /* 2MB kernel */
/* Flash partitions indexes */ /* Flash partitions indexes */
enum { enum {
@ -69,8 +68,7 @@ enum {
RBSPI_PART_BIOS, RBSPI_PART_BIOS,
RBSPI_PART_RBOOT2, RBSPI_PART_RBOOT2,
RBSPI_PART_SCONF, RBSPI_PART_SCONF,
RBSPI_PART_KERN, RBSPI_PART_FIRMW,
RBSPI_PART_ROOT,
RBSPI_PARTS RBSPI_PARTS
}; };
@ -79,8 +77,6 @@ static struct mtd_partition rbspi_spi_partitions[RBSPI_PARTS];
/* /*
* Setup the SPI flash partition table based on initial parsing. * Setup the SPI flash partition table based on initial parsing.
* The kernel can be at any aligned position and have any size. * The kernel can be at any aligned position and have any size.
* The size of the kernel partition is the desired RB_KERNEL_SIZE
* minus the size of the preceding partitions (128KB).
*/ */
static void __init rbspi_init_partitions(const struct rb_info *info) static void __init rbspi_init_partitions(const struct rb_info *info)
{ {
@ -114,16 +110,10 @@ static void __init rbspi_init_partitions(const struct rb_info *info)
parts[RBSPI_PART_SCONF].offset = info->soft_cfg_offs; parts[RBSPI_PART_SCONF].offset = info->soft_cfg_offs;
parts[RBSPI_PART_SCONF].size = RB_SOFT_CFG_SIZE; parts[RBSPI_PART_SCONF].size = RB_SOFT_CFG_SIZE;
parts[RBSPI_PART_KERN].name = "kernel"; parts[RBSPI_PART_FIRMW].name = "firmware";
parts[RBSPI_PART_KERN].offset = parts[RBSPI_PART_SCONF].offset parts[RBSPI_PART_FIRMW].offset = parts[RBSPI_PART_SCONF].offset
+ parts[RBSPI_PART_SCONF].size; + parts[RBSPI_PART_SCONF].size;
parts[RBSPI_PART_KERN].size = RB_KERNEL_SIZE parts[RBSPI_PART_FIRMW].size = MTDPART_SIZ_FULL;
- parts[RBSPI_PART_KERN].offset;
parts[RBSPI_PART_ROOT].name = "rootfs";
parts[RBSPI_PART_ROOT].offset = parts[RBSPI_PART_KERN].offset
+ parts[RBSPI_PART_KERN].size;
parts[RBSPI_PART_ROOT].size = MTDPART_SIZ_FULL;
} }
static struct flash_platform_data rbspi_spi_flash_data = { static struct flash_platform_data rbspi_spi_flash_data = {

View File

@ -27,14 +27,13 @@ TARGET_DEVICES += nand-64m nand-large
define Device/rb-nor-flash-16M define Device/rb-nor-flash-16M
DEVICE_TITLE := MikroTik RouterBoard with 16 MB SPI NOR flash DEVICE_TITLE := MikroTik RouterBoard with 16 MB SPI NOR flash
DEVICE_PACKAGES := rbcfg DEVICE_PACKAGES := rbcfg
BLOCKSIZE := 64k
IMAGE_SIZE := 16000k IMAGE_SIZE := 16000k
LOADER_TYPE := elf LOADER_TYPE := elf
KERNEL_INSTALL := 1 KERNEL_INSTALL := 1
KERNEL := kernel-bin | lzma | loader-kernel | kernel2minor -s 1024 -e KERNEL := kernel-bin | lzma | loader-kernel
KERNEL_INITRAMFS := kernel-bin | lzma | loader-kernel SUPPORTED_DEVICES := rb-750-r2 rb-750up-r2 rb-941-2nd rb-951ui-2nd rb-mapl-2nd
IMAGES := sysupgrade.bin IMAGE/sysupgrade.bin = append-kernel | kernel2minor -s 1024 -e | pad-to $$$$(BLOCKSIZE) | \
IMAGE/sysupgrade.bin = append-rootfs | pad-rootfs | combined-image | check-size $$$$(IMAGE_SIZE) append-rootfs | pad-rootfs | append-metadata | check-size $$$$(IMAGE_SIZE)
endef endef
TARGET_DEVICES += rb-nor-flash-16M TARGET_DEVICES += rb-nor-flash-16M