mirror of
https://git.openwrt.org/openwrt/openwrt.git
synced 2026-03-14 23:09:45 +01:00
Due to issues surrounding the implementation of the vendor BMT/BBT on Airoha, upstream ATF + uboot has switched to UBI flash partitions. However, some devices shipped on this platform are bootloader locked, and thus it is impossible to replace ATF + uboot. During testing for the Gemtek W1700K (#17869), sysupgrades from Linux (which is unaware of the underlying BMT/BBT) would occasionally write data into blocks which were remapped by the vendor uboot when it was read on the following reboot, causing a soft brick. An acceptable workaround [1],[2] was discussed where an intermediate uboot would be written by the vendor uboot (which is aware of Airoha BMT/BBT). This chainloader would then ignore the regions of flash used by the vendor uboot, and store all relevant data inside of UBI. UBI would then be used to handle bad block management. As the vendor ATF + uboot do not read or interact with the UBI region, we would avoid unwanted remaps from BMT/BBT. This commit introduces support for building such a chainloader, by packaging u-boot and DTS into a FIT image; to be flashed like a kernel. Configuration for the Gemtek W1700K is provided as an example of how the chainloader is used. [1] https://github.com/openwrt/openwrt/pull/17869#discussion_r2836066746 [2] https://github.com/openwrt/openwrt/pull/17869#discussion_r2838395671 Signed-off-by: Kenneth Kasilag <kenneth@kasilag.me> [ move FIP_COMPRESS to Build/Compile, wrap some long lines ] Link: https://github.com/openwrt/openwrt/pull/22151 Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
119 lines
3.1 KiB
Makefile
119 lines
3.1 KiB
Makefile
include $(TOPDIR)/rules.mk
|
|
include $(INCLUDE_DIR)/kernel.mk
|
|
|
|
PKG_VERSION:=2026.01
|
|
PKG_HASH:=b60d5865cefdbc75da8da4156c56c458e00de75a49b80c1a2e58a96e30ad0d54
|
|
PKG_BUILD_DEPENDS:=arm-trusted-firmware-tools/host
|
|
|
|
UBOOT_USE_INTREE_DTC:=1
|
|
|
|
include $(INCLUDE_DIR)/u-boot.mk
|
|
include $(INCLUDE_DIR)/package.mk
|
|
include $(INCLUDE_DIR)/host-build.mk
|
|
|
|
define U-Boot/Default
|
|
BUILD_TARGET:=airoha
|
|
LZMA_COMPRESS:=1
|
|
endef
|
|
|
|
define U-Boot/en7523_rfb
|
|
NAME:=EN7523 Reference Board
|
|
UBOOT_CONFIG:=en7523_evb
|
|
BUILD_DEVICES:=airoha_en7523-evb
|
|
BUILD_SUBTARGET:=en7523
|
|
UBOOT_IMAGE:=u-boot.fip
|
|
BL2_IMAGE:=en7523-bl2.bin
|
|
BL31_IMAGE:=en7523-bl31.bin
|
|
endef
|
|
|
|
define U-Boot/an7581_rfb
|
|
NAME:=AN7581 Reference Board
|
|
UBOOT_CONFIG:=an7581_evb
|
|
BUILD_DEVICES:=airoha_an7581-evb
|
|
BUILD_SUBTARGET:=an7581
|
|
UBOOT_IMAGE:=u-boot.fip
|
|
BL2_IMAGE:=an7581-bl2.bin
|
|
BL31_IMAGE:=an7581-bl31.bin
|
|
endef
|
|
|
|
define U-Boot/an7583_rfb
|
|
NAME:=AN7583 Reference Board
|
|
UBOOT_CONFIG:=an7583_evb
|
|
BUILD_DEVICES:=airoha_an7583-evb
|
|
BUILD_SUBTARGET:=an7583
|
|
UBOOT_IMAGE:=u-boot.fip
|
|
BL2_IMAGE:=an7583-bl2.bin
|
|
BL31_IMAGE:=an7583-bl31.bin
|
|
endef
|
|
|
|
define U-Boot/an7581_gemtek_w1700k
|
|
NAME:=Gemtek W1700K (UBI)
|
|
UBOOT_CONFIG:=an7581_w1700k
|
|
BUILD_DEVICES:=gemtek_w1700k-ubi
|
|
BUILD_SUBTARGET:=an7581
|
|
UBOOT_IMAGE:=u-boot.bin
|
|
endef
|
|
|
|
UBOOT_TARGETS := \
|
|
en7523_rfb \
|
|
an7581_rfb \
|
|
an7583_rfb \
|
|
an7581_gemtek_w1700k
|
|
|
|
UBOOT_CUSTOMIZE_CONFIG := \
|
|
--disable TOOLS_KWBIMAGE \
|
|
--disable TOOLS_LIBCRYPTO \
|
|
--disable TOOLS_MKEFICAPSULE \
|
|
--enable SERIAL_RX_BUFFER \
|
|
--set-val SERIAL_RX_BUFFER_SIZE 256
|
|
|
|
define Build/fip-image-bl2
|
|
$(STAGING_DIR_HOST)/bin/fiptool create \
|
|
--tb-fw files/$(BL2_IMAGE) \
|
|
$(PKG_BUILD_DIR)/bl2.fip
|
|
endef
|
|
|
|
define Build/fip-image
|
|
$(if $(LZMA_COMPRESS), $(STAGING_DIR_HOST)/bin/lzma e \
|
|
files/$(BL31_IMAGE) \
|
|
$(PKG_BUILD_DIR)/bl31.bin.lzma)
|
|
$(STAGING_DIR_HOST)/bin/fiptool create \
|
|
--soc-fw $(PKG_BUILD_DIR)/bl31.bin$(if $(LZMA_COMPRESS),.lzma) \
|
|
--nt-fw $(PKG_BUILD_DIR)/u-boot.bin$(if $(LZMA_COMPRESS),.lzma) \
|
|
$(PKG_BUILD_DIR)/u-boot.fip
|
|
endef
|
|
|
|
define Build/Configure
|
|
$(call Build/Configure/U-Boot)
|
|
sed -i 's/CONFIG_TOOLS_LIBCRYPTO=y/# CONFIG_TOOLS_LIBCRYPTO is not set/' $(PKG_BUILD_DIR)/.config
|
|
endef
|
|
|
|
define Build/Compile
|
|
$(call Build/Compile/U-Boot)
|
|
$(if $(LZMA_COMPRESS), $(STAGING_DIR_HOST)/bin/lzma e \
|
|
$(PKG_BUILD_DIR)/u-boot.bin \
|
|
$(PKG_BUILD_DIR)/u-boot.bin.lzma)
|
|
ifeq ($(UBOOT_IMAGE),u-boot.fip)
|
|
$(call Build/fip-image-bl2)
|
|
$(call Build/fip-image)
|
|
endif
|
|
endef
|
|
|
|
# don't stage files to bindir, let target/linux/airoha/image/*.mk do that
|
|
define Package/u-boot/install
|
|
endef
|
|
|
|
define Build/InstallDev
|
|
$(INSTALL_DIR) $(STAGING_DIR_IMAGE)
|
|
ifeq ($(UBOOT_IMAGE),u-boot.fip)
|
|
$(INSTALL_DATA) $(PKG_BUILD_DIR)/bl2.fip $(STAGING_DIR_IMAGE)/$(BUILD_VARIANT)-bl2.fip
|
|
$(INSTALL_DATA) $(PKG_BUILD_DIR)/u-boot.fip $(STAGING_DIR_IMAGE)/$(BUILD_VARIANT)-bl31-u-boot.fip
|
|
else
|
|
$(INSTALL_DATA) $(PKG_BUILD_DIR)/u-boot.bin$(if $(LZMA_COMPRESS),.lzma) \
|
|
$(STAGING_DIR_IMAGE)/$(BUILD_VARIANT)-u-boot.bin$(if $(LZMA_COMPRESS),.lzma)
|
|
$(INSTALL_DATA) $(PKG_BUILD_DIR)/u-boot.dtb \
|
|
$(STAGING_DIR_IMAGE)/$(BUILD_VARIANT)-u-boot.dtb
|
|
endif
|
|
endef
|
|
|
|
$(eval $(call BuildPackage/U-Boot))
|