[openwrt/openwrt] arm-trusted-firmware-mediatek: add builds for MT7987

LEDE Commits lede-commits at lists.infradead.org
Wed Nov 5 06:23:03 PST 2025


dangole pushed a commit to openwrt/openwrt.git, branch main:
https://git.openwrt.org/de8fc8b2f9bde19ef9ca9b1ed932a8226ec70d92

commit de8fc8b2f9bde19ef9ca9b1ed932a8226ec70d92
Author: Daniel Golle <daniel at makrotopia.org>
AuthorDate: Sun Oct 5 01:04:54 2025 +0100

    arm-trusted-firmware-mediatek: add builds for MT7987
    
    Build TF-A for the MediaTek MT7987 SoC family.
    Add necessary downstream patches in preparation for the BananaPi R4 Lite,
    which connects both flash chips to SPI2 and got broken MMC bus.
    
    Signed-off-by: Daniel Golle <daniel at makrotopia.org>
---
 .../boot/arm-trusted-firmware-mediatek/Makefile    |  64 +++++++++++
 ...5-mt7987-make-SPI-controller-configurable.patch | 128 +++++++++++++++++++++
 ...k-mt7987-mmc-use-4-bit-bus-width-for-eMMC.patch |  24 ++++
 ...ck-mt7987-bl2-move-FIP-offset-to-0x100000.patch |  27 +++++
 4 files changed, 243 insertions(+)

diff --git a/package/boot/arm-trusted-firmware-mediatek/Makefile b/package/boot/arm-trusted-firmware-mediatek/Makefile
index c014eee732..7045133739 100644
--- a/package/boot/arm-trusted-firmware-mediatek/Makefile
+++ b/package/boot/arm-trusted-firmware-mediatek/Makefile
@@ -38,6 +38,7 @@ define Trusted-Firmware-A/Default
   USE_UBI:=
   FIP_OFFSET:=
   FIP_SIZE:=
+  SPIM_CTRL:=
 endef
 
 define Trusted-Firmware-A/mt7622-nor-1ddr
@@ -393,6 +394,61 @@ define Trusted-Firmware-A/mt7986-spim-nand-ubi-ddr3
   USE_UBI:=1
 endef
 
+define Trusted-Firmware-A/mt7987-emmc-comb
+  NAME:=MediaTek MT7987 (eMMC)
+  BOOT_DEVICE:=emmc
+  BUILD_SUBTARGET:=filogic
+  PLAT:=mt7987
+  DRAM_USE_COMB:=1
+endef
+
+define Trusted-Firmware-A/mt7987-nor-comb
+  NAME:=MediaTek MT7987 (NOR)
+  BOOT_DEVICE:=nor
+  BUILD_SUBTARGET:=filogic
+  PLAT:=mt7987
+  DRAM_USE_COMB:=1
+endef
+
+define Trusted-Firmware-A/mt7987-sdmmc-comb
+  NAME:=MediaTek MT7987 (SD card)
+  BOOT_DEVICE:=sdmmc
+  BUILD_SUBTARGET:=filogic
+  PLAT:=mt7987
+  DRAM_USE_COMB:=1
+endef
+
+define Trusted-Firmware-A/mt7987-spim-nand0-ubi-comb
+  NAME:=MediaTek MT7987 (SPI-NAND via SPIM, UBI)
+  BOOT_DEVICE:=spim-nand
+  BUILD_SUBTARGET:=filogic
+  PLAT:=mt7987
+  DRAM_USE_COMB:=1
+  USE_UBI:=1
+  SPIM_CTRL:=0
+endef
+
+define Trusted-Firmware-A/mt7987-spim-nand2-ubi-comb
+  NAME:=MediaTek MT7987 (SPI-NAND via SPIM, UBI)
+  BOOT_DEVICE:=spim-nand
+  BUILD_SUBTARGET:=filogic
+  PLAT:=mt7987
+  DRAM_USE_COMB:=1
+  USE_UBI:=1
+  SPIM_CTRL:=2
+endef
+
+define Trusted-Firmware-A/mt7987-ram-comb
+  NAME:=MediaTek MT7987 (RAM)
+  BOOT_DEVICE:=ram
+  BUILD_SUBTARGET:=filogic
+  PLAT:=mt7987
+  DRAM_USE_COMB:=1
+  RAM_BOOT_UART_DL:=1
+  HIDDEN:=
+  DEFAULT:=TARGET_mediatek_filogic
+endef
+
 define Trusted-Firmware-A/mt7988-nor-ddr3
   NAME:=MediaTek MT7988 (SPI-NOR, DDR3)
   BOOT_DEVICE:=nor
@@ -604,6 +660,12 @@ TFA_TARGETS:= \
 	mt7986-spim-nand-ddr4 \
 	mt7986-spim-nand-ubi-ddr4 \
 	mt7986-spim-nand-4k-ddr4 \
+	mt7987-emmc-comb \
+	mt7987-nor-comb \
+	mt7987-sdmmc-comb \
+	mt7987-spim-nand0-ubi-comb \
+	mt7987-spim-nand2-ubi-comb \
+	mt7987-ram-comb \
 	mt7988-emmc-ddr3 \
 	mt7988-nor-ddr3 \
 	mt7988-sdmmc-ddr3 \
@@ -641,6 +703,7 @@ TFA_MAKE_FLAGS += \
 	$(if $(USE_UBI),UBI=1 $(if $(findstring mt7986,$(PLAT)),OVERRIDE_UBI_START_ADDR=0x200000)) \
 	$(if $(FIP_OFFSET),OVERRIDE_FIP_BASE=$(FIP_OFFSET)) \
 	$(if $(FIP_SIZE),OVERRIDE_FIP_SIZE=$(FIP_SIZE)) \
+	$(if $(SPIM_CTRL),SPIM_CTRL=$(SPIM_CTRL)) \
 	$(if $(RAM_BOOT_UART_DL),bl2,all)
 
 define Package/trusted-firmware-a-ram/install
@@ -653,6 +716,7 @@ Package/trusted-firmware-a-mt7981-ram-ddr3/install = $(Package/trusted-firmware-
 Package/trusted-firmware-a-mt7981-ram-ddr4/install = $(Package/trusted-firmware-a-ram/install)
 Package/trusted-firmware-a-mt7986-ram-ddr3/install = $(Package/trusted-firmware-a-ram/install)
 Package/trusted-firmware-a-mt7986-ram-ddr4/install = $(Package/trusted-firmware-a-ram/install)
+Package/trusted-firmware-a-mt7987-ram-comb/install = $(Package/trusted-firmware-a-ram/install)
 Package/trusted-firmware-a-mt7988-ram-comb/install = $(Package/trusted-firmware-a-ram/install)
 Package/trusted-firmware-a-mt7988-ram-ddr4/install = $(Package/trusted-firmware-a-ram/install)
 
diff --git a/package/boot/arm-trusted-firmware-mediatek/patches/0005-mt7987-make-SPI-controller-configurable.patch b/package/boot/arm-trusted-firmware-mediatek/patches/0005-mt7987-make-SPI-controller-configurable.patch
new file mode 100644
index 0000000000..41017844bb
--- /dev/null
+++ b/package/boot/arm-trusted-firmware-mediatek/patches/0005-mt7987-make-SPI-controller-configurable.patch
@@ -0,0 +1,128 @@
+From e2e43103c00b5f7ccedbdbdece0f622cb420b4a5 Mon Sep 17 00:00:00 2001
+From: Daniel Golle <daniel at makrotopia.org>
+Date: Fri, 3 Oct 2025 12:53:10 +0100
+Subject: [PATCH] mt7987: make SPI controller configurable
+
+Allow selecting the SPI controller used for SPIM-NAND or SPI-NOR boot
+devices (either SPI0 or SPI2).
+
+Signed-off-by: Daniel Golle <daniel at makrotopia.org>
+---
+ plat/mediatek/apsoc_common/Config.in        |  1 +
+ plat/mediatek/mt7987/Config.in              | 29 +++++++++++++++++++++
+ plat/mediatek/mt7987/bl2/bl2.mk             | 12 +++++++++
+ plat/mediatek/mt7987/bl2/bl2_dev_spi_nand.c | 10 ++++++-
+ plat/mediatek/mt7987/platform.mk            |  4 +--
+ 5 files changed, 53 insertions(+), 3 deletions(-)
+ create mode 100644 plat/mediatek/mt7987/Config.in
+
+--- a/plat/mediatek/apsoc_common/Config.in
++++ b/plat/mediatek/apsoc_common/Config.in
+@@ -783,6 +783,7 @@ config ENABLE_BL31_RUNTIME_LOG
+ 	default 1
+ 	depends on _ENABLE_BL31_RUNTIME_LOG
+ 
++source "plat/mediatek/mt7987/Config.in"
+ source "plat/mediatek/mt7988/Config.in"
+ 
+ endmenu # Platform configurations
+--- /dev/null
++++ b/plat/mediatek/mt7987/Config.in
+@@ -0,0 +1,29 @@
++# SPDX-License-Identifier: BSD-3-Clause
++#
++# Copyright (c) 2025 Daniel Golle <daniel at makrotopia.org>
++#
++# MT7987 platform-specific configurations
++#
++
++if _PLAT_MT7987
++
++choice
++	prompt "SPI controller"
++	depends on (_BOOT_DEVICE_SPIM_NAND || _BOOT_DEVICE_SPI_NOR)
++	default _SPIM_CTRL_0 if _BOOT_DEVICE_SPIM_NAND
++	default _SPIM_CTRL_2 if _BOOT_DEVICE_SPI_NOR
++
++	config _SPIM_CTRL_0
++		bool "0"
++
++	config _SPIM_CTRL_2
++		bool "2"
++
++endchoice
++
++config SPIM_CTRL
++	int
++	default 0 if _SPIM_CTRL_0
++	default 2 if _SPIM_CTRL_2
++
++endif # _PLAT_MT7987
+--- a/plat/mediatek/mt7987/bl2/bl2.mk
++++ b/plat/mediatek/mt7987/bl2/bl2.mk
+@@ -91,7 +91,11 @@ endif # END OF BOOT_DEVICE = ram
+ ifeq ($(BOOT_DEVICE),nor)
+ $(eval $(call BL2_BOOT_NOR))
+ BL2_SOURCES		+=	$(MTK_PLAT_SOC)/bl2/bl2_dev_spi_nor.c
++ifeq ($(SPIM_CTRL),0)
++DTS_NAME		:=	mt7987-spi0
++else
+ DTS_NAME		:=	mt7987-spi2
++endif
+ endif # END OF BOOTDEVICE = nor
+ 
+ ifeq ($(BOOT_DEVICE),emmc)
+@@ -112,10 +116,18 @@ ifeq ($(BOOT_DEVICE),spim-nand)
+ $(eval $(call BL2_BOOT_SPI_NAND,0,0))
+ BL2_SOURCES		+=	$(MTK_PLAT_SOC)/bl2/bl2_dev_spi_nand.c
+ NAND_TYPE		?=	spim:2k+64
++ifeq ($(SPIM_CTRL),2)
++DTS_NAME		:=	mt7987-spi2
++else
+ DTS_NAME		:=	mt7987-spi0
++endif
+ $(eval $(call BL2_BOOT_NAND_TYPE_CHECK,$(NAND_TYPE),spim:2k+64 spim:2k+128 spim:4k+256))
+ endif # END OF BOOTDEVICE = spim-nand
+ 
++ifneq ($(SPIM_CTRL),)
++BL2_CPPFLAGS		+=	-DSPIM_CTRL=$(SPIM_CTRL)
++endif
++
+ ifeq ($(BROM_HEADER_TYPE),)
+ $(error BOOT_DEVICE has invalid value. Please re-check.)
+ endif
+--- a/plat/mediatek/mt7987/bl2/bl2_dev_spi_nand.c
++++ b/plat/mediatek/mt7987/bl2/bl2_dev_spi_nand.c
+@@ -12,10 +12,18 @@
+ 
+ #define MTK_QSPI_SRC_CLK		CB_MPLL_D2
+ 
++#if SPIM_CTRL == 0
++#define SELECTED_SPIM SPIM0
++#elif SPIM_CTRL == 2
++#define SELECTED_SPIM SPIM2
++#else
++#error "Invalid SPI controller selection"
++#endif
++
+ uint32_t mtk_plat_get_qspi_src_clk(void)
+ {
+ 	/* config GPIO pinmux to spi mode */
+-	mtk_spi_gpio_init(SPIM0);
++	mtk_spi_gpio_init(SELECTED_SPIM);
+ 
+ 	/* select 208M clk */
+ 	mtk_spi_source_clock_select(MTK_QSPI_SRC_CLK);
+--- a/plat/mediatek/mt7987/platform.mk
++++ b/plat/mediatek/mt7987/platform.mk
+@@ -56,8 +56,8 @@ include make_helpers/dep.mk
+ 
+ $(call GEN_DEP_RULES,bl2,emicfg bl2_boot_ram bl2_boot_nand_nmbm bl2_dev_mmc bl2_plat_init bl2_plat_setup mt7987_gpio dtb)
+ $(call MAKE_DEP,bl2,emicfg,DDR4_4BG_MODE DRAM_DEBUG_LOG DDR3_FREQ_2133 DDR3_FREQ_1866 DDR4_FREQ_3200 DDR4_FREQ_2666)
+-$(call MAKE_DEP,bl2,bl2_plat_init,BL2_COMPRESS)
+-$(call MAKE_DEP,bl2,bl2_plat_setup,BOOT_DEVICE TRUSTED_BOARD_BOOT BL32_TZRAM_BASE BL32_TZRAM_SIZE BL32_LOAD_OFFSET)
++$(call MAKE_DEP,bl2,bl2_plat_init,BL2_COMPRESS SPIM_CTRL)
++$(call MAKE_DEP,bl2,bl2_plat_setup,BOOT_DEVICE TRUSTED_BOARD_BOOT BL32_TZRAM_BASE BL32_TZRAM_SIZE BL32_LOAD_OFFSET SPIM_CTRL)
+ $(call MAKE_DEP,bl2,bl2_dev_mmc,BOOT_DEVICE)
+ $(call MAKE_DEP,bl2,bl2_boot_ram,RAM_BOOT_DEBUGGER_HOOK RAM_BOOT_UART_DL)
+ $(call MAKE_DEP,bl2,bl2_boot_nand_nmbm,NMBM_MAX_RATIO NMBM_MAX_RESERVED_BLOCKS NMBM_DEFAULT_LOG_LEVEL)
diff --git a/package/boot/arm-trusted-firmware-mediatek/patches/0006-hack-mt7987-mmc-use-4-bit-bus-width-for-eMMC.patch b/package/boot/arm-trusted-firmware-mediatek/patches/0006-hack-mt7987-mmc-use-4-bit-bus-width-for-eMMC.patch
new file mode 100644
index 0000000000..0f64a7e142
--- /dev/null
+++ b/package/boot/arm-trusted-firmware-mediatek/patches/0006-hack-mt7987-mmc-use-4-bit-bus-width-for-eMMC.patch
@@ -0,0 +1,24 @@
+From 0a09912eb336bee788443b919ea5b99b195f5a91 Mon Sep 17 00:00:00 2001
+From: Daniel Golle <daniel at makrotopia.org>
+Date: Sat, 4 Oct 2025 22:13:49 +0100
+Subject: [PATCH] hack: mt7987: mmc: use 4-bit bus-width for eMMC
+
+The BananaPi R4 Lite has broken DAT5 signal of the MMC bus, which
+results in 8-bit buswidth not working well for the eMMC.
+Reduce to 4-bit buswidth fixes it (and makes all other boards with
+eMMC a tiny bit slower to boot, but it's in the milliseconds).
+---
+ plat/mediatek/mt7987/bl2/bl2_dev_mmc.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/plat/mediatek/mt7987/bl2/bl2_dev_mmc.c
++++ b/plat/mediatek/mt7987/bl2/bl2_dev_mmc.c
+@@ -74,7 +74,7 @@ static const struct mt7987_msdc_conf {
+ 	{
+ 		.base = MSDC0_BASE,
+ 		.top_base = MSDC0_TOP_BASE,
+-		.bus_width = MMC_BUS_WIDTH_8,
++		.bus_width = MMC_BUS_WIDTH_4,
+ 		.type = MMC_IS_EMMC,
+ 		.src_clk = 200000000,
+ 		.dev_comp = &mt7987_msdc_compat,
diff --git a/package/boot/arm-trusted-firmware-mediatek/patches/0007-hack-mt7987-bl2-move-FIP-offset-to-0x100000.patch b/package/boot/arm-trusted-firmware-mediatek/patches/0007-hack-mt7987-bl2-move-FIP-offset-to-0x100000.patch
new file mode 100644
index 0000000000..fcb60b41a1
--- /dev/null
+++ b/package/boot/arm-trusted-firmware-mediatek/patches/0007-hack-mt7987-bl2-move-FIP-offset-to-0x100000.patch
@@ -0,0 +1,27 @@
+From 6725bb3c2aa9330f37a591e1e539badf67021b47 Mon Sep 17 00:00:00 2001
+From: Daniel Golle <daniel at makrotopia.org>
+Date: Sat, 4 Oct 2025 23:59:54 +0100
+Subject: [PATCH] hack: mt7987: bl2: move FIP offset to 0x100000
+
+There is no use in allocating more than 2MB to the factory partition.
+After all, even for WiFi 7 tri-band devices the calibration data is
+still in the kilobytes range.
+Move FIP offset to 0x100000 to not waste so much space on small NOR
+flash.
+
+Signed-off-by: Daniel Golle <daniel at makrotopia.org>
+---
+ plat/mediatek/mt7987/bl2/bl2_dev_spi_nor.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/plat/mediatek/mt7987/bl2/bl2_dev_spi_nor.c
++++ b/plat/mediatek/mt7987/bl2/bl2_dev_spi_nor.c
+@@ -7,7 +7,7 @@
+ #include <stdint.h>
+ #include <boot_spi.h>
+ 
+-#define FIP_BASE			0x250000
++#define FIP_BASE			0x100000
+ #define FIP_SIZE			0x80000
+ 
+ #define MTK_QSPI_SRC_CLK		CB_MPLL_D2




More information about the lede-commits mailing list