From ee771d3dd01c811d2a28eab09a700cefdafd05af Mon Sep 17 00:00:00 2001 From: Russell Senior Date: Wed, 22 Apr 2026 22:38:51 -0700 Subject: [PATCH] airoha: increase the size of reserved_bmt partition MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The vendor firmware checks for a bmt header in the last 528 erase blocks of flash. The OpenWrt partition table did not respect that requirement, and therefore the vendor and openwrt chainloader fight over those blocks on every boot, potentially corrupting data stored in UBI blocks there. This commit increases the size of the reserved_bmt partition to avoid that fight. Although the vendor bootloader only seems to touch the final 250 erase blocks[1], the original vendor firmware system partition ended at 0x1be00000[2], so to be conservative, the consensus is to use that as the end of mtd2 (ubi) partition and leave the last 528 blocks for mtd3 (reserved_bmt). From https://openwrt.org/toh/gemtek/mxf-w1700k: [1] OEM bootlog: [ 5.324337] bmt pool size: 250 [2] OEM bootlog: [ 5.478927] 0x000008600000-0x00001be00000 : "system" Adds a compat_version to warn users to re-install to accomodate the shrunken mtd2 ubi partition. Fixed two nits suggested by Claude, zero padding a hex value and removed an extra space. Removed the wildcard setting of compat_version for other boards, as suggested by Robert Marko, set compat_version only for the w1700k. Reported-by: Loïc Yhuel Signed-off-by: Russell Senior Link: https://github.com/openwrt/openwrt/pull/23061 Signed-off-by: Robert Marko --- .../patches/999-airoha-add-gemtek-w1700k.patch | 6 +++--- .../base-files/etc/board.d/05_compat-version | 18 ++++++++++++++++++ target/linux/airoha/dts/an7581-w1700k-ubi.dts | 6 +++--- target/linux/airoha/image/an7581.mk | 4 ++++ 4 files changed, 28 insertions(+), 6 deletions(-) create mode 100644 target/linux/airoha/an7581/base-files/etc/board.d/05_compat-version diff --git a/package/boot/uboot-airoha/patches/999-airoha-add-gemtek-w1700k.patch b/package/boot/uboot-airoha/patches/999-airoha-add-gemtek-w1700k.patch index c346499dedf..4c13fe32644 100644 --- a/package/boot/uboot-airoha/patches/999-airoha-add-gemtek-w1700k.patch +++ b/package/boot/uboot-airoha/patches/999-airoha-add-gemtek-w1700k.patch @@ -276,13 +276,13 @@ Signed-off-by: Kenneth Kasilag + + ubi@700000 { + label = "ubi"; -+ reg = <0x00700000 0x1f700000>; ++ reg = <0x00700000 0x1b700000>; + }; + + /* reserved for bad block table */ -+ reserved_bmt@1fe00000 { ++ reserved_bmt@1be00000 { + label = "reserved_bmt"; -+ reg = <0x1fe00000 0x00200000>; ++ reg = <0x1be00000 0x04200000>; + read-only; + }; + }; diff --git a/target/linux/airoha/an7581/base-files/etc/board.d/05_compat-version b/target/linux/airoha/an7581/base-files/etc/board.d/05_compat-version new file mode 100644 index 00000000000..faa379fc423 --- /dev/null +++ b/target/linux/airoha/an7581/base-files/etc/board.d/05_compat-version @@ -0,0 +1,18 @@ +# +# Copyright (C) 2020 OpenWrt.org +# + +. /lib/functions.sh +. /lib/functions/uci-defaults.sh + +board_config_update + +case "$(board_name)" in + gemtek,w1700k-ubi) + ucidef_set_compat_version "2.0" + ;; +esac + +board_config_flush + +exit 0 diff --git a/target/linux/airoha/dts/an7581-w1700k-ubi.dts b/target/linux/airoha/dts/an7581-w1700k-ubi.dts index 6f4158599f9..a44610e345f 100644 --- a/target/linux/airoha/dts/an7581-w1700k-ubi.dts +++ b/target/linux/airoha/dts/an7581-w1700k-ubi.dts @@ -182,7 +182,7 @@ partition@700000 { label = "ubi"; - reg = <0x00700000 0x1f700000>; + reg = <0x00700000 0x1b700000>; compatible = "linux,ubi"; volumes { @@ -211,9 +211,9 @@ }; /* reserved for bad block table */ - reserved_bmt@1fe00000 { + reserved_bmt@1be00000 { label = "reserved_bmt"; - reg = <0x1fe00000 0x00200000>; + reg = <0x1be00000 0x04200000>; read-only; }; }; diff --git a/target/linux/airoha/image/an7581.mk b/target/linux/airoha/image/an7581.mk index ca90b5ee2d6..30a7b6e538c 100644 --- a/target/linux/airoha/image/an7581.mk +++ b/target/linux/airoha/image/an7581.mk @@ -97,6 +97,10 @@ define Device/gemtek_w1700k-ubi DEVICE_ALT2_MODEL := W1700K DEVICE_ALT2_VARIANT := UBI DEVICE_DTS := an7581-w1700k-ubi + DEVICE_COMPAT_VERSION := 2.0 + DEVICE_COMPAT_MESSAGE := Partition table has been changed to cooperate \ + with the vendor bootloader with regard to the BMT/BBT partition at \ + the end of flash. A reinstall including corrected chainloader is needed. DEVICE_PACKAGES := airoha-en7581-mt7996-npu-firmware \ fitblk kmod-i2c-an7581 kmod-hwmon-nct7802 \ kmod-mt7996-firmware kmod-phy-rtl8261n \