[PATCH] lmb: Reinstate access to memory above ram_top

Marek Vasut marek.vasut at mailbox.org
Sat May 30 16:22:56 CEST 2026


On 5/30/26 3:44 PM, Peter Robinson wrote:

>> The revert is wrong as that breaks other things , like use of DRAM above
>> 4 GiB boundary, which is exactly why this change was implemented. If RPi
>> has limitations, then those limitations should be imposed on RPi, not
>> globally, so add the LMB reservations on RPi.
> 
> I have no idea how LMB works so please send a patch that does that.

Try this:

// Enable CONFIG_LMB_ARCH_MEM_MAP=y

#include <lmb.h>

void lmb_arch_add_memory(void)
{
	int i;
	phys_addr_t bank_end;
	phys_size_t size;
	u64 ram_top = gd->ram_top;
	struct bd_info *bd = gd->bd;

	/* Assume a 4GB ram_top if not defined */
	if (!ram_top)
		ram_top = 0x100000000ULL;

	for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++) {
		size = bd->bi_dram[i].size;
		bank_end = bd->bi_dram[i].start + size;

		if (size) {
			/*
			 * Reserve memory above ram_top as
			 * no-overwrite so that it cannot be
			 * allocated
			 */
			if (bd->bi_dram[i].start >= ram_top)
				lmb_reserve(bd->bi_dram[i].start, size,
					    LMB_NOOVERWRITE);
			else if (bank_end > ram_top)
				lmb_reserve(ram_top, bank_end - ram_top,
					    LMB_NOOVERWRITE);
		}
	}
}


More information about the U-Boot mailing list