[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