diff mbox series

[2/2] xilinx: use get_mem_top() to compute ram_top

Message ID 20241025121547.181633-3-sughosh.ganu@linaro.org
State Superseded
Headers show
Series Add generic function for computing ram_top | expand

Commit Message

Sughosh Ganu Oct. 25, 2024, 12:15 p.m. UTC
Use the get_mem_top function to compute the value of ram_top. This was
earlier done through LMB API's, which are no longer available till
after relocation. Use get_mem_top() instead to compute the ram_top
value.

Signed-off-by: Sughosh Ganu <sughosh.ganu@linaro.org>
---
 board/xilinx/common/board.c | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

Comments

Michal Simek Oct. 25, 2024, 12:32 p.m. UTC | #1
On 10/25/24 14:15, Sughosh Ganu wrote:
> Use the get_mem_top function to compute the value of ram_top. This was
> earlier done through LMB API's, which are no longer available till
> after relocation. Use get_mem_top() instead to compute the ram_top
> value.
> 
> Signed-off-by: Sughosh Ganu <sughosh.ganu@linaro.org>
> ---
>   board/xilinx/common/board.c | 25 +++++++++++++++++++++++++
>   1 file changed, 25 insertions(+)
> 
> diff --git a/board/xilinx/common/board.c b/board/xilinx/common/board.c
> index 38dd80533fa..e14ed2cff00 100644
> --- a/board/xilinx/common/board.c
> +++ b/board/xilinx/common/board.c
> @@ -19,6 +19,7 @@
>   #include <i2c.h>
>   #include <linux/sizes.h>
>   #include <malloc.h>
> +#include <memtop.h>
>   #include <mtd_node.h>
>   #include "board.h"
>   #include <dm.h>
> @@ -676,3 +677,27 @@ int ft_board_setup(void *blob, struct bd_info *bd)
>   	return 0;
>   }
>   #endif
> +
> +#ifndef MMU_SECTION_SIZE
> +#define MMU_SECTION_SIZE        (1 * 1024 * 1024)
> +#endif
> +
> +phys_addr_t board_get_usable_ram_top(phys_size_t total_size)
> +{
> +	phys_size_t size;
> +	phys_addr_t reg;
> +
> +	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);
> +
> +	size = ALIGN(CONFIG_SYS_MALLOC_LEN + total_size, MMU_SECTION_SIZE);
> +	reg = get_mem_top(gd->ram_base, gd->ram_size, size,
> +			  (void *)gd->fdt_blob);
> +	if (!reg)
> +		reg = gd->ram_top - size;
> +
> +	return reg + size;
> +}

Reviewed-by: Michal Simek <michal.simek@amd.com>

Thanks,
Michal
diff mbox series

Patch

diff --git a/board/xilinx/common/board.c b/board/xilinx/common/board.c
index 38dd80533fa..e14ed2cff00 100644
--- a/board/xilinx/common/board.c
+++ b/board/xilinx/common/board.c
@@ -19,6 +19,7 @@ 
 #include <i2c.h>
 #include <linux/sizes.h>
 #include <malloc.h>
+#include <memtop.h>
 #include <mtd_node.h>
 #include "board.h"
 #include <dm.h>
@@ -676,3 +677,27 @@  int ft_board_setup(void *blob, struct bd_info *bd)
 	return 0;
 }
 #endif
+
+#ifndef MMU_SECTION_SIZE
+#define MMU_SECTION_SIZE        (1 * 1024 * 1024)
+#endif
+
+phys_addr_t board_get_usable_ram_top(phys_size_t total_size)
+{
+	phys_size_t size;
+	phys_addr_t reg;
+
+	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);
+
+	size = ALIGN(CONFIG_SYS_MALLOC_LEN + total_size, MMU_SECTION_SIZE);
+	reg = get_mem_top(gd->ram_base, gd->ram_size, size,
+			  (void *)gd->fdt_blob);
+	if (!reg)
+		reg = gd->ram_top - size;
+
+	return reg + size;
+}