[U-Boot] [RFC] Reserve ATF memory on Marvell Armdada 3700/7K/8K

Marcin Wojtas mw at semihalf.com
Tue Feb 12 10:31:17 UTC 2019


Hi Patrick,

You can refer to the mainline edk2 patch:
https://github.com/tianocore/edk2-platforms/commit/bf1c4a2cf8024669d1748e78c7e417433f85707e

Best regards,
Marcin

wt., 12 lut 2019 o 10:38 Alexander Graf <agraf at suse.de> napisaƂ(a):

> On 02/04/2019 05:51 PM, Patrick Wildt wrote:
> > On Fri, Apr 06, 2018 at 12:22:03PM +0200, Alexander Graf wrote:
> >> On 31.03.18 16:13, Mark Kettenis wrote:
> >>> Currently U-Boot doesn't make any effort to reserve the memory used by
> >>> ARM Trusted Firmware on these platforms.  The result is that the
> >>> memory is listed as available in the EFI memory map.  And as soon as a
> >>> loaded kernel tries to use this memory things explode.  I've seen this
> >>> with the OpenBSD kernel.  But I totally expect a Linux kernel to
> >>> suffer the same fate.
> >>>
> >>> I'm currently using the diff below, but it is not entirely clear to me
> >>> if arch_early_init_r() is the appropriate place to do this.  I'm also
> >>> wondering whether the block should also be marked as reserved in the
> >>> FDT using fdt_add_mem_rsv().  If the latter is required this probably
> >>> needs to be done by ft_board_setup() or ft_system_setup().
> >>>
> >>> The address and size of the region have been taken from Marvell's ATF
> >>> fork at
> >>>
> >>>    https://github.com/MarvellEmbeddedProcessors/atf-marvell
> >>>
> >>> The memory layout is defined in
> >>>
> >>>    plat/marvell/a8k/common/include/platform_def.h
> >>>
> >>> where there are lots of defines and a diagram that attempt to describe
> >>> the memory.  It is not entirely obvious to me what part needs to be
> >>> reserved.  But 0x0400000-0x04200000 works.
> >>>
> >>>
> >>>
> >>>
> >>> diff --git a/arch/arm/mach-mvebu/arm64-common.c
> b/arch/arm/mach-mvebu/arm64-common.c
> >>> index 3c84043a2c..895cd2852f 100644
> >>> --- a/arch/arm/mach-mvebu/arm64-common.c
> >>> +++ b/arch/arm/mach-mvebu/arm64-common.c
> >>> @@ -95,5 +95,11 @@ int arch_early_init_r(void)
> >>>     pci_init();
> >>>   #endif
> >>>
> >>> +#ifdef CONFIG_EFI_LOADER
> >>> +   /* Reserve trusted SRAM section */
> >>> +   efi_add_memory_map(0x04000000, 0x00200000 >> EFI_PAGE_SHIFT,
> >>> +                      EFI_RESERVED_MEMORY_TYPE, false);
> >> I also forgot to comment here. 2MB is probably not enough:
> >>
> >>
> >>
> https://github.com/MarvellEmbeddedProcessors/atf-marvell/blob/atf-v1.3-armada-17.10/plat/marvell/a8k/common/include/platform_def.h#L110
> >>
> >> That sounds more like it should span 65MB (PLAT_MARVELL_TRUSTED_ROM_SIZE
> >> plus 0x100000).
> >>
> >> Looking at what edk2 does, it seems to use the same range as you:
> >>
> >>
> >>
> https://github.com/MarvellEmbeddedProcessors/edk2-open-platform/blob/marvell-armada-wip/Platforms/Marvell/Armada/Armada.dsc.inc#L347
> >>
> >> So let's also CC Marcin :). Maybe his range is too short!
> >>
> >>
> >> Alex
> >> _______________________________________________
> >> U-Boot mailing list
> >> U-Boot at lists.denx.de
> >> https://lists.denx.de/listinfo/u-boot
> > The current ATF and EDK2 branch from Marvell seem to reserve a bit more.
> > I just had the same issue and am using this diff.  This then creates the
> > same map of usable memory as EDK2 does.
>
> Could you please resend as proper patch (with SoB, separate email) with
> a reference to the edk2 code in the commit message?
>
>
> Thanks,
>
> Alex
>
> >
> > Best regards,
> > Patrick
> >
> > diff --git a/arch/arm/mach-mvebu/arm64-common.c
> b/arch/arm/mach-mvebu/arm64-common.c
> > index 47bbf69944..56c0d3f6b9 100644
> > --- a/arch/arm/mach-mvebu/arm64-common.c
> > +++ b/arch/arm/mach-mvebu/arm64-common.c
> > @@ -14,6 +14,7 @@
> >   #include <asm/arch/cpu.h>
> >   #include <asm/arch/soc.h>
> >   #include <asm/armv8/mmu.h>
> > +#include <efi_loader.h>
> >
> >   DECLARE_GLOBAL_DATA_PTR;
> >
> > @@ -142,5 +143,11 @@ int arch_early_init_r(void)
> >       pci_init();
> >   #endif
> >
> > +#ifdef CONFIG_EFI_LOADER
> > +     /* Reserve trusted SRAM section */
> > +     efi_add_memory_map(0x04000000, 0x01400000 >> EFI_PAGE_SHIFT,
> > +                        EFI_RESERVED_MEMORY_TYPE, false);
> > +#endif
> > +
> >       return 0;
> >   }
>
>
>


More information about the U-Boot mailing list