forked from OERV-BSP/u-boot
arm: mediatek: mt8195: fix gd->ram_top limit
Fix the implementation of the gd->ram_top limit for mt8195. The intention of the comment about MMC/DMA is correct, but the implementation was wrong. gd->mon_len is set to the code size of U-Boot, so trying to set it to limit gd->ram_top does not make sense. Instead, there is already a get_effective_memsize() weak function that we can override to implement the required limit on the usable memory size. This is used to set gd->ram_top in setup_dest_addr(). The comment about the extra SZ_1M needing to be reserved is not correct as U-Boot already takes care of this (with the actual size of U-Boot) in the various board_f functions, so it is removed. This fixes DMA not working on MMC on mt8195. Reviewed-by: Julien Stephan <jstephan@baylibre.com> Tested-by: Julien Stephan <jstephan@baylibre.com> Link: https://patch.msgid.link/20260319-mtk-init-fix-dram-v1-12-6171ec141f40@baylibre.com Signed-off-by: David Lechner <dlechner@baylibre.com>
This commit is contained in:
@@ -9,6 +9,7 @@
|
||||
#include <asm/armv8/mmu.h>
|
||||
#include <asm/system.h>
|
||||
#include <dm/uclass.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/sizes.h>
|
||||
#include <wdt.h>
|
||||
|
||||
@@ -16,23 +17,16 @@ DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
int dram_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = fdtdec_setup_mem_size_base();
|
||||
if (ret)
|
||||
return ret;
|
||||
return fdtdec_setup_mem_size_base();
|
||||
}
|
||||
|
||||
phys_size_t get_effective_memsize(void)
|
||||
{
|
||||
/*
|
||||
* Limit gd->ram_top not exceeding SZ_4G. Some periphals like mmc
|
||||
* requires DMA buffer allocated below SZ_4G.
|
||||
*
|
||||
* Note: SZ_1M is for adjusting gd->relocaddr, the reserved memory for
|
||||
* u-boot itself.
|
||||
* Limit gd->ram_top not exceeding SZ_4G. Because some peripherals like
|
||||
* MMC requires DMA buffer allocated below SZ_4G.
|
||||
*/
|
||||
if (gd->ram_base + gd->ram_size >= SZ_4G)
|
||||
gd->mon_len = (gd->ram_base + gd->ram_size + SZ_1M) - SZ_4G;
|
||||
|
||||
return 0;
|
||||
return min(SZ_4G - gd->ram_base, gd->ram_size);
|
||||
}
|
||||
|
||||
int mtk_soc_early_init(void)
|
||||
|
||||
Reference in New Issue
Block a user