[PATCH] arm64: xilinx: Move board_get_usable_ram_top() to common location

Michal Simek michal.simek at amd.com
Wed Aug 31 10:13:26 CEST 2022



On 8/25/22 14:23, Michal Simek wrote:
> The commit ce39ee28ec31 ("zynqmp: Do not place u-boot to reserved memory
> location") adds functionality for ZynqMP to read reserved memory node and
> do not place U-Boot to reserved location. This functionality is generic
> across all Xilinx SOCs that's why move it to common location to be used by
> all Xilinx SOCs.
> 
> On zynq platform this is also fixing issue where U-Boot was placed to
> locating which was reserved already which ends up with error message
> "ERROR: reserving fdt memory region failed (addr=30000000 size=10000000
> flags=4)" which is shown when bdinfo is called.
> 
> Tested on vck190, zcu102, zc706 and kc705 to cover all platforms.
> 
> Signed-off-by: Michal Simek <michal.simek at amd.com>
> ---
> 
>   board/xilinx/common/board.c                   | 29 +++++++++++++++++++
>   .../microblaze-generic/microblaze-generic.c   | 21 --------------
>   board/xilinx/versal/board.c                   | 23 ---------------
>   board/xilinx/zynqmp/zynqmp.c                  | 29 -------------------
>   4 files changed, 29 insertions(+), 73 deletions(-)
> 
> diff --git a/board/xilinx/common/board.c b/board/xilinx/common/board.c
> index 9b4aded466ab..5e3638636123 100644
> --- a/board/xilinx/common/board.c
> +++ b/board/xilinx/common/board.c
> @@ -8,6 +8,8 @@
>   #include <efi.h>
>   #include <efi_loader.h>
>   #include <env.h>
> +#include <image.h>
> +#include <lmb.h>
>   #include <log.h>
>   #include <asm/global_data.h>
>   #include <asm/sections.h>
> @@ -602,3 +604,30 @@ int embedded_dtb_select(void)
>   	return 0;
>   }
>   #endif
> +
> +#if defined(CONFIG_LMB)
> +ulong board_get_usable_ram_top(ulong total_size)
> +{
> +	phys_size_t size;
> +	phys_addr_t reg;
> +	struct lmb lmb;
> +
> +	if (!total_size)
> +		return gd->ram_top;
> +
> +	if (!IS_ALIGNED((ulong)gd->fdt_blob, 0x8))
> +		panic("Not 64bit aligned DT location: %p\n", gd->fdt_blob);
> +
> +	/* found enough not-reserved memory to relocated U-Boot */
> +	lmb_init(&lmb);
> +	lmb_add(&lmb, gd->ram_base, gd->ram_size);
> +	boot_fdt_add_mem_rsv_regions(&lmb, (void *)gd->fdt_blob);
> +	size = ALIGN(CONFIG_SYS_MALLOC_LEN + total_size, MMU_SECTION_SIZE);
> +	reg = lmb_alloc(&lmb, size, MMU_SECTION_SIZE);
> +
> +	if (!reg)
> +		reg = gd->ram_top - size;
> +
> +	return reg + size;
> +}
> +#endif
> diff --git a/board/xilinx/microblaze-generic/microblaze-generic.c b/board/xilinx/microblaze-generic/microblaze-generic.c
> index f58ecd1590c9..a427ac94a170 100644
> --- a/board/xilinx/microblaze-generic/microblaze-generic.c
> +++ b/board/xilinx/microblaze-generic/microblaze-generic.c
> @@ -14,8 +14,6 @@
>   #include <config.h>
>   #include <env.h>
>   #include <init.h>
> -#include <image.h>
> -#include <lmb.h>
>   #include <log.h>
>   #include <asm/global_data.h>
>   #include <dm/lists.h>
> @@ -38,25 +36,6 @@ int dram_init(void)
>   	return 0;
>   };
>   
> -ulong board_get_usable_ram_top(ulong total_size)
> -{
> -	phys_size_t size;
> -	phys_addr_t reg;
> -	struct lmb lmb;
> -
> -	/* found enough not-reserved memory to relocated U-Boot */
> -	lmb_init(&lmb);
> -	lmb_add(&lmb, gd->ram_base, gd->ram_size);
> -	boot_fdt_add_mem_rsv_regions(&lmb, (void *)gd->fdt_blob);
> -	size = ALIGN(CONFIG_SYS_MALLOC_LEN + total_size, MMU_SECTION_SIZE);
> -	reg = lmb_alloc(&lmb, size, MMU_SECTION_SIZE);
> -
> -	if (!reg)
> -		reg = gd->ram_top - size;
> -
> -	return reg + size;
> -}
> -
>   int board_late_init(void)
>   {
>   	ulong max_size;
> diff --git a/board/xilinx/versal/board.c b/board/xilinx/versal/board.c
> index d8f39be56c87..f9f5457ed20f 100644
> --- a/board/xilinx/versal/board.c
> +++ b/board/xilinx/versal/board.c
> @@ -9,7 +9,6 @@
>   #include <env.h>
>   #include <fdtdec.h>
>   #include <init.h>
> -#include <image.h>
>   #include <env_internal.h>
>   #include <log.h>
>   #include <malloc.h>
> @@ -270,28 +269,6 @@ int dram_init(void)
>   	return 0;
>   }
>   
> -ulong board_get_usable_ram_top(ulong total_size)
> -{
> -	phys_size_t size;
> -	phys_addr_t reg;
> -	struct lmb lmb;
> -
> -	if (!total_size)
> -		return gd->ram_top;
> -
> -	/* found enough not-reserved memory to relocated U-Boot */
> -	lmb_init(&lmb);
> -	lmb_add(&lmb, gd->ram_base, gd->ram_size);
> -	boot_fdt_add_mem_rsv_regions(&lmb, (void *)gd->fdt_blob);
> -	size = ALIGN(CONFIG_SYS_MALLOC_LEN + total_size, MMU_SECTION_SIZE);
> -	reg = lmb_alloc(&lmb, size, MMU_SECTION_SIZE);
> -
> -	if (!reg)
> -		reg = gd->ram_top - size;
> -
> -	return reg + size;
> -}
> -
>   void reset_cpu(void)
>   {
>   }
> diff --git a/board/xilinx/zynqmp/zynqmp.c b/board/xilinx/zynqmp/zynqmp.c
> index 21bcc266826a..62537760dfa1 100644
> --- a/board/xilinx/zynqmp/zynqmp.c
> +++ b/board/xilinx/zynqmp/zynqmp.c
> @@ -12,8 +12,6 @@
>   #include <env.h>
>   #include <env_internal.h>
>   #include <init.h>
> -#include <image.h>
> -#include <lmb.h>
>   #include <log.h>
>   #include <net.h>
>   #include <sata.h>
> @@ -256,33 +254,6 @@ int dram_init(void)
>   	return 0;
>   }
>   
> -#if defined(CONFIG_LMB)
> -ulong board_get_usable_ram_top(ulong total_size)
> -{
> -	phys_size_t size;
> -	phys_addr_t reg;
> -	struct lmb lmb;
> -
> -	if (!total_size)
> -		return gd->ram_top;
> -
> -	if (!IS_ALIGNED((ulong)gd->fdt_blob, 0x8))
> -		panic("Not 64bit aligned DT location: %p\n", gd->fdt_blob);
> -
> -	/* found enough not-reserved memory to relocated U-Boot */
> -	lmb_init(&lmb);
> -	lmb_add(&lmb, gd->ram_base, gd->ram_size);
> -	boot_fdt_add_mem_rsv_regions(&lmb, (void *)gd->fdt_blob);
> -	size = ALIGN(CONFIG_SYS_MALLOC_LEN + total_size, MMU_SECTION_SIZE);
> -	reg = lmb_alloc(&lmb, size, MMU_SECTION_SIZE);
> -
> -	if (!reg)
> -		reg = gd->ram_top - size;
> -
> -	return reg + size;
> -}
> -#endif
> -
>   #else
>   int dram_init_banksize(void)
>   {

Applied.
M


More information about the U-Boot mailing list