Hi Alex, Adding Stephen Warren to Cc.
On Thu, Nov 22, 2018 at 02:30:34PM +0000, Alexander Graf wrote: > > Am 22.11.2018 um 11:42 schrieb Baruch Siach <bar...@tkos.co.il>: > > > > EFI memory allocation code return values that are not mapped by U-Boot > > MMU. This causes a crash when tftp calls efi_set_bootdev(). Fix this > > similarly to commit 0797f7f0b7e1 ("ARM: tegra: reserve unmapped RAM so > > EFI doesn't use it"). > > > > Signed-off-by: Baruch Siach <bar...@tkos.co.il> > > Hm, how about we fox this up in the common memory registration function and > add addresses > board_get_usable_ram_top() as boot time data? That would be much nicer indeed. Where should I look in lib/efi_loader/ to implement that? With that in place we can revert commit 0797f7f0b7e1, right? Stephen, do you concur? > As a side note, why do we not map everything in the first place? Is it just > to prevent 32bit DMAs from failing? baruch > > --- > > arch/arm/mach-mvebu/arm64-common.c | 13 ++----------- > > arch/arm/mach-mvebu/include/mach/cpu.h | 9 +++++++++ > > board/Marvell/mvebu_armada-8k/board.c | 17 +++++++++++++++++ > > 3 files changed, 28 insertions(+), 11 deletions(-) > > > > diff --git a/arch/arm/mach-mvebu/arm64-common.c > > b/arch/arm/mach-mvebu/arm64-common.c > > index 47bbf69944ec..b82f33093a2c 100644 > > --- a/arch/arm/mach-mvebu/arm64-common.c > > +++ b/arch/arm/mach-mvebu/arm64-common.c > > @@ -17,19 +17,10 @@ > > > > DECLARE_GLOBAL_DATA_PTR; > > > > -/* > > - * Not all memory is mapped in the MMU. So we need to restrict the > > - * memory size so that U-Boot does not try to access it. Also, the > > - * internal registers are located at 0xf000.0000 - 0xffff.ffff. > > - * Currently only 2GiB are mapped for system memory. This is what > > - * we pass to the U-Boot subsystem here. > > - */ > > -#define USABLE_RAM_SIZE 0x80000000 > > - > > ulong board_get_usable_ram_top(ulong total_size) > > { > > - if (gd->ram_size > USABLE_RAM_SIZE) > > - return USABLE_RAM_SIZE; > > + if (gd->ram_size > MVEBU_ARM64_USABLE_RAM_SIZE) > > + return MVEBU_ARM64_USABLE_RAM_SIZE; > > > > return gd->ram_size; > > } > > diff --git a/arch/arm/mach-mvebu/include/mach/cpu.h > > b/arch/arm/mach-mvebu/include/mach/cpu.h > > index 85d7dd1610a8..e22a14977859 100644 > > --- a/arch/arm/mach-mvebu/include/mach/cpu.h > > +++ b/arch/arm/mach-mvebu/include/mach/cpu.h > > @@ -177,5 +177,14 @@ int mvebu_lcd_register_init(struct mvebu_lcd_info > > *lcd_info); > > */ > > u32 get_ref_clk(void); > > > > +/* > > + * Not all memory is mapped in the MMU. So we need to restrict the > > + * memory size so that U-Boot does not try to access it. Also, the > > + * internal registers are located at 0xf000.0000 - 0xffff.ffff. > > + * Currently only 2GiB are mapped for system memory. This is what > > + * we pass to the U-Boot subsystem in board_get_usable_ram_top(). > > + */ > > +#define MVEBU_ARM64_USABLE_RAM_SIZE 0x80000000 > > + > > #endif /* __ASSEMBLY__ */ > > #endif /* _MVEBU_CPU_H */ > > diff --git a/board/Marvell/mvebu_armada-8k/board.c > > b/board/Marvell/mvebu_armada-8k/board.c > > index e927e338ea6e..2fffe05c4958 100644 > > --- a/board/Marvell/mvebu_armada-8k/board.c > > +++ b/board/Marvell/mvebu_armada-8k/board.c > > @@ -6,6 +6,7 @@ > > #include <common.h> > > #include <dm.h> > > #include <i2c.h> > > +#include <efi_loader.h> > > #include <asm/io.h> > > #include <asm/arch/cpu.h> > > #include <asm/arch/soc.h> > > @@ -154,6 +155,22 @@ int board_init(void) > > > > int board_late_init(void) > > { > > + uint64_t unmapped_ram_start = gd->bd->bi_dram[0].start > > + + MVEBU_ARM64_USABLE_RAM_SIZE; > > + uint64_t unmapped_ram_size = gd->bd->bi_dram[0].size > > + - MVEBU_ARM64_USABLE_RAM_SIZE; > > + > > +#if CONFIG_IS_ENABLED(EFI_LOADER) > > + if (gd->bd->bi_dram[0].size > MVEBU_ARM64_USABLE_RAM_SIZE) > > + efi_add_memory_map(unmapped_ram_start, > > + unmapped_ram_size >> EFI_PAGE_SHIFT, > > + EFI_BOOT_SERVICES_DATA, false); > > + if (gd->bd->bi_dram[1].start) > > + efi_add_memory_map(gd->bd->bi_dram[1].start, > > + gd->bd->bi_dram[1].size >> EFI_PAGE_SHIFT, > > + EFI_BOOT_SERVICES_DATA, false); > > +#endif > > + > > /* Pre-configure the USB ports (overcurrent, VBus) */ > > board_xhci_config(); -- http://baruch.siach.name/blog/ ~. .~ Tk Open Systems =}------------------------------------------------ooO--U--Ooo------------{= - bar...@tkos.co.il - tel: +972.2.679.5364, http://www.tkos.co.il - _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot