]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
arm64: xilinx: Move board_get_usable_ram_top() to common location
authorMichal Simek <michal.simek@amd.com>
Thu, 25 Aug 2022 12:23:10 +0000 (14:23 +0200)
committerMichal Simek <michal.simek@amd.com>
Tue, 13 Sep 2022 09:32:48 +0000 (11:32 +0200)
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@amd.com>
Link: https://lore.kernel.org/r/b0817807912f7c7af6a8e1cf9ee04e5ab5de5f6a.1661430188.git.michal.simek@amd.com
board/xilinx/common/board.c
board/xilinx/microblaze-generic/microblaze-generic.c
board/xilinx/versal/board.c
board/xilinx/zynqmp/zynqmp.c

index 9b4aded466abfb056704d132aa761448b68a62d1..5e36386361230e0ae47116f87ee023edfca31cfe 100644 (file)
@@ -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
index f58ecd1590c91d99c383cd94b5b004e741b3bcd9..a427ac94a1703ee3478787a2df5a40ea60888a77 100644 (file)
@@ -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;
index d8f39be56c873aefb5571425329862e6c04b7604..f9f5457ed20f43e049422b2405a6e4f6803b39c2 100644 (file)
@@ -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)
 {
 }
index 21bcc266826a408e45c3b175a1d7b180460f3c56..62537760dfa1fa0fd8bb84152e0980b893d9fa25 100644 (file)
@@ -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)
 {