[openwrt/openwrt] uboot-mediatek: add builds for the MediaTek MT7987 reference board

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


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

commit 6d35edad6e6456feb9ab0bf61f1549d34b1fe7d2
Author: Daniel Golle <daniel at makrotopia.org>
AuthorDate: Sun Oct 5 01:07:05 2025 +0100

    uboot-mediatek: add builds for the MediaTek MT7987 reference board
    
    Build the (upstream) configuration for the MT7987 reference board, and
    enable support for DT-overlay application which will be necessary to
    use the image for the MT7987 RFB generated in OpenWrt.
    Adapt our downstream patches (generic reset button, rootdisk selection)
    for MT7987 to prepare for real-world boards.
    
    Signed-off-by: Daniel Golle <daniel at makrotopia.org>
---
 package/boot/uboot-mediatek/Makefile               | 39 +++++++++++++
 .../007-ARM-dts-build-DT-for-MT7987-RFB.patch      | 26 +++++++++
 ...06-mt7987-generic-reset-button-ignore-env.patch | 40 +++++++++++++
 .../patches/315-mt7987-select-rootdisk.patch       | 67 ++++++++++++++++++++++
 .../patches/500-adapt-mt7987-rfb.patch             | 30 ++++++++++
 5 files changed, 202 insertions(+)

diff --git a/package/boot/uboot-mediatek/Makefile b/package/boot/uboot-mediatek/Makefile
index f0d4534a4e..f3ef8841fa 100644
--- a/package/boot/uboot-mediatek/Makefile
+++ b/package/boot/uboot-mediatek/Makefile
@@ -881,6 +881,42 @@ define U-Boot/mt7988_bananapi_bpi-r4-poe-snand
   DEPENDS:=+trusted-firmware-a-mt7988-spim-nand-ubi-comb
 endef
 
+define U-Boot/mt7987_rfb-emmc
+  NAME:=MT7987 Reference Board
+  BUILD_SUBTARGET:=filogic
+  BUILD_DEVICES:=mediatek_mt7987a-rfb
+  UBOOT_CONFIG:=mt7987_emmc_rfb
+  UBOOT_IMAGE:=u-boot.fip
+  BL2_BOOTDEV:=sdmmc
+  BL2_SOC:=mt7987
+  BL2_DDRTYPE:=comb
+  DEPENDS:=+trusted-firmware-a-mt7987-emmc-comb
+endef
+
+define U-Boot/mt7987_rfb-spim-nand
+  NAME:=MT7987 Reference Board
+  BUILD_SUBTARGET:=filogic
+  BUILD_DEVICES:=mediatek_mt7987a-rfb
+  UBOOT_CONFIG:=mt7987_rfb
+  UBOOT_IMAGE:=u-boot.fip
+  BL2_BOOTDEV:=spim-nand0-ubi
+  BL2_SOC:=mt7987
+  BL2_DDRTYPE:=comb
+  DEPENDS:=+trusted-firmware-a-mt7987-spim-nand0-ubi-comb
+endef
+
+define U-Boot/mt7987_rfb-sd
+  NAME:=MT7987 Reference Board
+  BUILD_SUBTARGET:=filogic
+  BUILD_DEVICES:=mediatek_mt7987a-rfb
+  UBOOT_CONFIG:=mt7987_sd_rfb
+  UBOOT_IMAGE:=u-boot.fip
+  BL2_BOOTDEV:=sdmmc
+  BL2_SOC:=mt7987
+  BL2_DDRTYPE:=comb
+  DEPENDS:=+trusted-firmware-a-mt7987-sdmmc-comb
+endef
+
 define U-Boot/mt7988_rfb-spim-nand
   NAME:=MT7988 Reference Board
   BUILD_SUBTARGET:=filogic
@@ -1009,6 +1045,9 @@ UBOOT_TARGETS := \
 	mt7986_xiaomi_redmi-router-ax6000 \
 	mt7986_zyxel_ex5601-t0 \
 	mt7986_rfb \
+	mt7987_rfb-emmc \
+	mt7987_rfb-sd \
+	mt7987_rfb-spim-nand \
 	mt7988_arcadyan_mozart \
 	mt7988_asus_zenwifi-bt8 \
 	mt7988_bananapi_bpi-r4-emmc \
diff --git a/package/boot/uboot-mediatek/patches/007-ARM-dts-build-DT-for-MT7987-RFB.patch b/package/boot/uboot-mediatek/patches/007-ARM-dts-build-DT-for-MT7987-RFB.patch
new file mode 100644
index 0000000000..045d4c5847
--- /dev/null
+++ b/package/boot/uboot-mediatek/patches/007-ARM-dts-build-DT-for-MT7987-RFB.patch
@@ -0,0 +1,26 @@
+From a4d4096d6b80a2b6f5bc800426380cdc60d9b037 Mon Sep 17 00:00:00 2001
+From: Daniel Golle <daniel at makrotopia.org>
+Date: Thu, 2 Oct 2025 14:57:16 +0100
+Subject: [PATCH] ARM: dts: build DT for MT7987 RFB
+
+Compile the added device tree sources into blobs, which was forgotten
+when adding the source files.
+
+Fixes: 2d6962e0618 (arm: mediatek: add support for MediaTek MT7987 SoC)
+Signed-off-by: Daniel Golle <daniel at makrotopia.org>
+---
+ arch/arm/dts/Makefile | 3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/arch/arm/dts/Makefile
++++ b/arch/arm/dts/Makefile
+@@ -1131,6 +1131,9 @@ dtb-$(CONFIG_ARCH_MEDIATEK) += \
+ 	mt7986b-sd-rfb.dtb \
+ 	mt7986a-emmc-rfb.dtb \
+ 	mt7986b-emmc-rfb.dtb \
++	mt7987a-emmc-rfb.dtb \
++	mt7987a-rfb.dtb \
++	mt7987a-sd-rfb.dtb \
+ 	mt7988-rfb.dtb \
+ 	mt7988-sd-rfb.dtb \
+ 	mt8183-pumpkin.dtb \
diff --git a/package/boot/uboot-mediatek/patches/306-mt7987-generic-reset-button-ignore-env.patch b/package/boot/uboot-mediatek/patches/306-mt7987-generic-reset-button-ignore-env.patch
new file mode 100644
index 0000000000..5168735e06
--- /dev/null
+++ b/package/boot/uboot-mediatek/patches/306-mt7987-generic-reset-button-ignore-env.patch
@@ -0,0 +1,40 @@
+--- a/board/mediatek/mt7987/mt7987_rfb.c
++++ b/board/mediatek/mt7987/mt7987_rfb.c
+@@ -4,3 +4,37 @@
+  * Author: Sam Shih <sam.shih at mediatek.com>
+  */
+ 
++#include <config.h>
++#include <dm.h>
++#include <button.h>
++#include <env.h>
++#include <init.h>
++#include <asm/global_data.h>
++#include <linux/delay.h>
++
++#ifndef CONFIG_RESET_BUTTON_LABEL
++#define CONFIG_RESET_BUTTON_LABEL "reset"
++#endif
++
++int board_late_init(void)
++{
++	gd->env_valid = 1; //to load environment variable from persistent store
++	struct udevice *dev;
++
++	gd->env_valid = ENV_VALID;
++	if (!button_get_by_label(CONFIG_RESET_BUTTON_LABEL, &dev)) {
++		puts("reset button found\n");
++#ifdef CONFIG_RESET_BUTTON_SETTLE_DELAY
++		if (CONFIG_RESET_BUTTON_SETTLE_DELAY > 0) {
++			button_get_state(dev);
++			mdelay(CONFIG_RESET_BUTTON_SETTLE_DELAY);
++		}
++#endif
++		if (button_get_state(dev) == BUTTON_ON) {
++			puts("button pushed, resetting environment\n");
++			gd->env_valid = ENV_INVALID;
++		}
++	}
++	env_relocate();
++	return 0;
++}
diff --git a/package/boot/uboot-mediatek/patches/315-mt7987-select-rootdisk.patch b/package/boot/uboot-mediatek/patches/315-mt7987-select-rootdisk.patch
new file mode 100644
index 0000000000..645e478300
--- /dev/null
+++ b/package/boot/uboot-mediatek/patches/315-mt7987-select-rootdisk.patch
@@ -0,0 +1,67 @@
+--- a/board/mediatek/mt7987/mt7987_rfb.c
++++ b/board/mediatek/mt7987/mt7987_rfb.c
+@@ -10,7 +10,9 @@
+ #include <env.h>
+ #include <init.h>
+ #include <asm/global_data.h>
++#include <asm/io.h>
+ #include <linux/delay.h>
++#include <linux/libfdt.h>
+ 
+ #ifndef CONFIG_RESET_BUTTON_LABEL
+ #define CONFIG_RESET_BUTTON_LABEL "reset"
+@@ -38,3 +40,54 @@ int board_late_init(void)
+ 	env_relocate();
+ 	return 0;
+ }
++
++#define	MT7987_BOOT_SD		0
++#define	MT7987_BOOT_NOR		1
++#define	MT7987_BOOT_SPIM_NAND	2
++#define	MT7987_BOOT_EMMC	3
++
++int mtk_ft_system_setup(void *blob, struct bd_info *bd)
++{
++	const u32 *media_handle_p;
++	int chosen, len, ret;
++	const char *media;
++	u32 media_handle;
++
++	switch ((readl(0x1001f6f0) & 0xc0) >> 6) {
++	case MT7987_BOOT_SD:
++		media = "rootdisk-sd";
++		break
++		;;
++	case MT7987_BOOT_NOR:
++		media = "rootdisk-nor";
++		break
++		;;
++	case MT7987_BOOT_SPIM_NAND:
++		media = "rootdisk-spim-nand";
++		break
++		;;
++	case MT7987_BOOT_EMMC:
++		media = "rootdisk-emmc";
++		break
++		;;
++	}
++
++	chosen = fdt_path_offset(blob, "/chosen");
++	if (chosen <= 0)
++		return 0;
++
++	media_handle_p = fdt_getprop(blob, chosen, media, &len);
++	if (media_handle_p <= 0 || len != 4)
++		return 0;
++
++	media_handle = *media_handle_p;
++	ret = fdt_setprop(blob, chosen, "rootdisk", &media_handle, sizeof(media_handle));
++	if (ret) {
++		printf("cannot set media phandle %s as rootdisk /chosen node\n", media);
++		return ret;
++	}
++
++	printf("set /chosen/rootdisk to bootrom media: %s (phandle 0x%08x)\n", media, fdt32_to_cpu(media_handle));
++
++	return 0;
++}
diff --git a/package/boot/uboot-mediatek/patches/500-adapt-mt7987-rfb.patch b/package/boot/uboot-mediatek/patches/500-adapt-mt7987-rfb.patch
new file mode 100644
index 0000000000..39f6282d1c
--- /dev/null
+++ b/package/boot/uboot-mediatek/patches/500-adapt-mt7987-rfb.patch
@@ -0,0 +1,30 @@
+--- a/configs/mt7987_rfb_defconfig
++++ b/configs/mt7987_rfb_defconfig
+@@ -70,6 +70,7 @@ CONFIG_SPI_FLASH_XTX=y
+ CONFIG_SPI_FLASH_ZBIT=y
+ CONFIG_SPI_FLASH_MTD=y
+ CONFIG_MTD_UBI=y
++CONFIG_OF_LIBFDT_OVERLAY=y
+ CONFIG_PHY_ETHERNET_ID=y
+ CONFIG_MEDIATEK_ETH=y
+ CONFIG_PINCTRL=y
+--- a/configs/mt7987_emmc_rfb_defconfig
++++ b/configs/mt7987_emmc_rfb_defconfig
+@@ -75,6 +75,7 @@ CONFIG_SPI_FLASH_XTX=y
+ CONFIG_SPI_FLASH_ZBIT=y
+ CONFIG_SPI_FLASH_MTD=y
+ CONFIG_MTD_UBI=y
++CONFIG_OF_LIBFDT_OVERLAY=y
+ CONFIG_PHY_ETHERNET_ID=y
+ CONFIG_MEDIATEK_ETH=y
+ CONFIG_PINCTRL=y
+--- a/configs/mt7987_sd_rfb_defconfig
++++ b/configs/mt7987_sd_rfb_defconfig
+@@ -75,6 +75,7 @@ CONFIG_SPI_FLASH_XTX=y
+ CONFIG_SPI_FLASH_ZBIT=y
+ CONFIG_SPI_FLASH_MTD=y
+ CONFIG_MTD_UBI=y
++CONFIG_OF_LIBFDT_OVERLAY=y
+ CONFIG_PHY_ETHERNET_ID=y
+ CONFIG_MEDIATEK_ETH=y
+ CONFIG_PINCTRL=y




More information about the lede-commits mailing list