summaryrefslogtreecommitdiff
path: root/arch/arm
diff options
context:
space:
mode:
authorTom Rini <[email protected]>2026-06-24 10:02:34 -0600
committerTom Rini <[email protected]>2026-06-24 10:02:34 -0600
commit77a48fa272161df9b778ffc09af814eec11cddd2 (patch)
tree69ac4345f7f9696f0c7f79fdaddf81e3ef4577eb /arch/arm
parentfcda974e36033ad5331a9b4a4a551af4e141ad7d (diff)
parentb4fa246a1565aa63375de06b732c6d1eb1f82d27 (diff)
Merge tag 'mediatek-for-master-2026-06-24' of https://source.denx.de/u-boot/custodians/u-boot-mediatek
- Cherry-pick upstream devicetree fix for duplicate regulator names. - Fix regressions due to recent mach-wide cleanups accidentally changing gd->bd->bi_dram[0].size.
Diffstat (limited to 'arch/arm')
-rw-r--r--arch/arm/mach-mediatek/Kconfig2
-rw-r--r--arch/arm/mach-mediatek/mt7988/init.c10
-rw-r--r--arch/arm/mach-mediatek/mt8188/init.c4
-rw-r--r--arch/arm/mach-mediatek/mt8189/init.c4
-rw-r--r--arch/arm/mach-mediatek/mt8195/init.c4
-rw-r--r--arch/arm/mach-mediatek/mt8512/init.c4
-rw-r--r--arch/arm/mach-mediatek/tzcfg.c22
7 files changed, 31 insertions, 19 deletions
diff --git a/arch/arm/mach-mediatek/Kconfig b/arch/arm/mach-mediatek/Kconfig
index 80f7185e929..799c630fed3 100644
--- a/arch/arm/mach-mediatek/Kconfig
+++ b/arch/arm/mach-mediatek/Kconfig
@@ -199,8 +199,6 @@ config SYS_CONFIG_NAME
default "mt7629" if TARGET_MT7629
default "mt7981" if TARGET_MT7981
default "mt7986" if TARGET_MT7986
- default "mt7987" if TARGET_MT7987
- default "mt7988" if TARGET_MT7988
default "mt8183" if TARGET_MT8183
default "mt8512" if TARGET_MT8512
default "mt8516" if TARGET_MT8516
diff --git a/arch/arm/mach-mediatek/mt7988/init.c b/arch/arm/mach-mediatek/mt7988/init.c
index 7f4d934bfe9..5b37a91cd72 100644
--- a/arch/arm/mach-mediatek/mt7988/init.c
+++ b/arch/arm/mach-mediatek/mt7988/init.c
@@ -6,6 +6,7 @@
#include <fdtdec.h>
#include <init.h>
+#include <linux/kernel.h>
#include <linux/sizes.h>
#include <asm/armv8/mmu.h>
#include <asm/global_data.h>
@@ -26,6 +27,15 @@ int dram_init(void)
return 0;
}
+phys_addr_t board_get_usable_ram_top(phys_size_t total_size)
+{
+ /*
+ * Limit gd->ram_top not exceeding SZ_4G. Because some peripherals like
+ * MMC requires DMA buffer allocated below SZ_4G.
+ */
+ return min(gd->ram_top, SZ_4G);
+}
+
void reset_cpu(ulong addr)
{
psci_system_reset();
diff --git a/arch/arm/mach-mediatek/mt8188/init.c b/arch/arm/mach-mediatek/mt8188/init.c
index a48a41f3b97..1108bc19373 100644
--- a/arch/arm/mach-mediatek/mt8188/init.c
+++ b/arch/arm/mach-mediatek/mt8188/init.c
@@ -20,13 +20,13 @@ int dram_init(void)
return fdtdec_setup_mem_size_base();
}
-phys_size_t get_effective_memsize(void)
+phys_addr_t board_get_usable_ram_top(phys_size_t total_size)
{
/*
* Limit gd->ram_top not exceeding SZ_4G. Because some peripherals like
* MMC requires DMA buffer allocated below SZ_4G.
*/
- return min(SZ_4G - gd->ram_base, gd->ram_size);
+ return min(gd->ram_top, SZ_4G);
}
void reset_cpu(void)
diff --git a/arch/arm/mach-mediatek/mt8189/init.c b/arch/arm/mach-mediatek/mt8189/init.c
index ec7587c3586..4435c75a656 100644
--- a/arch/arm/mach-mediatek/mt8189/init.c
+++ b/arch/arm/mach-mediatek/mt8189/init.c
@@ -20,13 +20,13 @@ int dram_init(void)
return fdtdec_setup_mem_size_base();
}
-phys_size_t get_effective_memsize(void)
+phys_addr_t board_get_usable_ram_top(phys_size_t total_size)
{
/*
* Limit gd->ram_top not exceeding SZ_4G. Because some peripherals like
* MMC requires DMA buffer allocated below SZ_4G.
*/
- return min(SZ_4G - gd->ram_base, gd->ram_size);
+ return min(gd->ram_top, SZ_4G);
}
void reset_cpu(ulong addr)
diff --git a/arch/arm/mach-mediatek/mt8195/init.c b/arch/arm/mach-mediatek/mt8195/init.c
index e31d4eec0fb..83cac9d01d6 100644
--- a/arch/arm/mach-mediatek/mt8195/init.c
+++ b/arch/arm/mach-mediatek/mt8195/init.c
@@ -20,13 +20,13 @@ int dram_init(void)
return fdtdec_setup_mem_size_base();
}
-phys_size_t get_effective_memsize(void)
+phys_addr_t board_get_usable_ram_top(phys_size_t total_size)
{
/*
* Limit gd->ram_top not exceeding SZ_4G. Because some peripherals like
* MMC requires DMA buffer allocated below SZ_4G.
*/
- return min(SZ_4G - gd->ram_base, gd->ram_size);
+ return min(gd->ram_top, SZ_4G);
}
int mtk_soc_early_init(void)
diff --git a/arch/arm/mach-mediatek/mt8512/init.c b/arch/arm/mach-mediatek/mt8512/init.c
index bc1d515fcca..6a9ae776794 100644
--- a/arch/arm/mach-mediatek/mt8512/init.c
+++ b/arch/arm/mach-mediatek/mt8512/init.c
@@ -29,10 +29,10 @@ int dram_init(void)
return fdtdec_setup_mem_size_base();
}
-phys_size_t get_effective_memsize(void)
+phys_addr_t board_get_usable_ram_top(phys_size_t total_size)
{
/* limit stack below tee reserve memory */
- return gd->ram_size - 6 * SZ_1M;
+ return gd->ram_base + gd->ram_size - 6 * SZ_1M;
}
void reset_cpu(void)
diff --git a/arch/arm/mach-mediatek/tzcfg.c b/arch/arm/mach-mediatek/tzcfg.c
index c8fe8ac0e9b..fbc96d96a4b 100644
--- a/arch/arm/mach-mediatek/tzcfg.c
+++ b/arch/arm/mach-mediatek/tzcfg.c
@@ -35,12 +35,13 @@ struct tz_reserved_region {
};
static bool fix_tz_region(struct tz_reserved_region region[],
- uint32_t used_regions)
+ uint32_t used_regions,
+ phys_addr_t ram_top)
{
phys_addr_t size;
- if (region[0].addr + region[0].size > gd->ram_top) {
- if (region[0].addr >= gd->ram_top) {
+ if (region[0].addr + region[0].size > ram_top) {
+ if (region[0].addr >= ram_top) {
debug("Discarded region 0x%08llx, size 0x%llx\n",
region[0].addr, region[0].size);
@@ -50,7 +51,7 @@ static bool fix_tz_region(struct tz_reserved_region region[],
return true;
}
- size = gd->ram_top - region[0].addr;
+ size = ram_top - region[0].addr;
debug("Truncated region 0x%08llx, size 0x%llx -> 0x%llx\n",
region[0].addr, region[0].size, size);
@@ -63,12 +64,15 @@ static bool fix_tz_region(struct tz_reserved_region region[],
phys_addr_t board_get_usable_ram_top(phys_size_t total_size)
{
- phys_addr_t uboot_ram_top, pstore_size, uboot_size = 0;
+ phys_addr_t uboot_ram_top, ram_top, pstore_size = 0, uboot_size = 0;
struct tz_reserved_region region[2], tmp;
phys_addr_t top_addr, low_addr;
struct arm_smccc_res res;
u32 used_regions = 1;
+ /* ram_top must be <= 4GiB due to DMA limitations */
+ ram_top = min_t(phys_addr_t, gd->ram_top, SZ_4G);
+
/* BL31 region */
arm_smccc_smc(MTK_SIP_GET_BL31_REGION, 0, 0, 0, 0, 0, 0, 0, &res);
if (res.a0) {
@@ -119,14 +123,14 @@ phys_addr_t board_get_usable_ram_top(phys_size_t total_size)
}
debug("Effective memory @ 0x%08zx, size 0x%llx\n", gd->ram_base,
- gd->ram_top - gd->ram_base);
+ ram_top - gd->ram_base);
/* Discard/fix region which is outside the effective memory */
- if (fix_tz_region(region, used_regions)) {
+ if (fix_tz_region(region, used_regions, ram_top)) {
used_regions--;
if (used_regions) {
- if (fix_tz_region(region, used_regions))
+ if (fix_tz_region(region, used_regions, ram_top))
used_regions--;
}
}
@@ -144,7 +148,7 @@ phys_addr_t board_get_usable_ram_top(phys_size_t total_size)
uboot_size += U_BOOT_MIN_STACK_SIZE + REGION_ALIGNMENT - 1;
uboot_size &= ~(REGION_ALIGNMENT - 1);
- uboot_ram_top = gd->ram_top & ~(REGION_ALIGNMENT - 1);
+ uboot_ram_top = ram_top & ~(REGION_ALIGNMENT - 1);
if (!used_regions ||
(uboot_ram_top - region[0].addr - region[0].size >= uboot_size)) {