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

Alexander Graf agraf at suse.de
Tue Feb 12 09:38:02 UTC 2019


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