]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
xilinx: Handle board_get_usable_ram_top(0) properly
authorMichal Simek <monstr@monstr.eu>
Fri, 29 Apr 2022 09:52:27 +0000 (11:52 +0200)
committerMichal Simek <michal.simek@amd.com>
Fri, 13 May 2022 07:10:02 +0000 (09:10 +0200)
board_get_usable_ram_top() was designed for getting the top most location
for U-Boot allocation that's why function itself supports via total_size
parameter to find out where the right location for U-Boot is.
But function itself is also reused by different (EFI) which is passing
total_size as 0 to find out where the usable ram top is. For this case
doesn't make sense (a waste time) to call any lmb functions.
That's why simply return gd->ram_top.

And gd->ram_top is filled already based on previous call for U-Boot iself.
The same solution is also used by stm32mp by commit 92b611e8b003 ("stm32mp:
correctly handle board_get_usable_ram_top(0)") and commit c8510e397fad
("stm32mp: Fix board_get_usable_ram_top()").

Signed-off-by: Michal Simek <michal.simek@amd.com>
Link: https://lore.kernel.org/r/44470619e74f3e480b70deac24578e3e0d5c907e.1651225945.git.michal.simek@amd.com
board/xilinx/versal/board.c
board/xilinx/zynqmp/zynqmp.c

index 2e2807eee463b572a45be27ab0ae44d922a4796f..a88f5bb177e2dd886bb1bfd04d2de113f46dc0f5 100644 (file)
@@ -256,6 +256,9 @@ ulong board_get_usable_ram_top(ulong total_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);
index 41ecc9559c4b693d92211a3f3f343d8ece291dcf..e311aa772ccedace7edb5146bb760814999e2f0c 100644 (file)
@@ -516,6 +516,9 @@ ulong board_get_usable_ram_top(ulong total_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);