[U-Boot] [BUG] x86: incorrect dram definition in dram_init_banksize().
Heinrich Schuchardt
xypron.glpk at gmx.de
Mon Jan 8 11:31:36 UTC 2018
On 01/06/2018 11:51 PM, Heinrich Schuchardt wrote:
> Function efi_add_known_memory uses the configured DRAM banks
> (gd->bd->bi_dram) to define the memory that an EFI application may use.
>
> For qemu-x86_defconfig this will result in the first 1 MB of physical
> memory being available. Here we find the BIOS, interrupt vectors and the
> VGA memory (0xA0000-0xBFFFF).
>
> As a result grubia32.efi writes unknowingly to the video memory.
>
> For reference:
> In function install_e820_map() we block
> [ISA_START_ADDRESS, ISA_END_ADDRESS[.
>
> The problem seems to stem from file arch/x86/cpu/qemu/dram.c, function
> dram_init_banksize():
>
> gd->bd->bi_dram[0].start = 0;
> gd->bd->bi_dram[0].size = gd->ram_size;
>
> Probably exluding [ISA_START_ADDRESS, ISA_END_ADDRESS[ is not sufficient
> as this does not protect interrupt vectors.
>
> Could you, please, provide reasonable values.
>
> Maybe a better idea would be to define reserved memory like the ones
> that we find in the device trees, e.g.
>
> reserved-memory {
> #address-cells = <2>;
> #size-cells = <2>;
> ranges;
>
> /* 16 MiB reserved for Hardware ROM Firmware */
> hwrom_reserved: hwrom at 0 {
> reg = <0x0 0x0 0x0 0x1000000>;
> no-map;
> };
>
> But U-Boot does not yet support the concept of reserved memory.
This is how memory is reserved in arch/arm/mach-meson/board.c:
static void meson_board_add_reserved_memory(void *fdt, u64 start, u64 size)
{
int ret;
ret = fdt_add_mem_rsv(fdt, start, size);
if (ret)
printf("Could not reserve zone @ 0x%llx\n", start);
if (IS_ENABLED(CONFIG_EFI_LOADER)) {
efi_add_memory_map(start,
ALIGN(size, EFI_PAGE_SIZE) >> EFI_PAGE_SHIFT,
EFI_RESERVED_MEMORY_TYPE, false);
}
}
Similar code can be found in:
arch/arm/cpu/armv8/fsl-layerscape/fdt.c
board/raspberrypi/rpi/rpi.c
Maybe we can generalize this.
>
> Best regards
>
> Heinrich
>
More information about the U-Boot
mailing list