[PATCH v4 21/39] mach-snapdragon: dynamic load addresses
Sumit Garg
sumit.garg at linaro.org
Tue Feb 20 14:34:19 CET 2024
On Fri, 16 Feb 2024 at 02:22, Caleb Connolly <caleb.connolly at linaro.org> wrote:
>
> Heavily inspired by Apple board code. Use the LMB allocator to configure
> load addresses at runtime, and implement a lookup table for selecting a
> devicetree.
>
> As some Qualcomm RBx boards have different RAM capacities and base
> addresses, it isn't possible to hardcode these regions.
>
> Signed-off-by: Caleb Connolly <caleb.connolly at linaro.org>
> ---
> arch/arm/Kconfig | 1 +
> arch/arm/mach-snapdragon/board.c | 34 ++++++++++++++++++++++++
> board/qualcomm/dragonboard410c/dragonboard410c.c | 2 +-
> 3 files changed, 36 insertions(+), 1 deletion(-)
>
Reviewed-by: Sumit Garg <sumit.garg at linaro.org>
-Sumit
> diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
> index 672577d0ddcc..0dba77f86b49 100644
> --- a/arch/arm/Kconfig
> +++ b/arch/arm/Kconfig
> @@ -1095,6 +1095,7 @@ config ARCH_SNAPDRAGON
> select OF_SEPARATE
> select SMEM
> select SPMI
> + select BOARD_LATE_INIT
> select OF_BOARD
> select SAVE_PREV_BL_FDT_ADDR
> select LINUX_KERNEL_IMAGE_HEADER
> diff --git a/arch/arm/mach-snapdragon/board.c b/arch/arm/mach-snapdragon/board.c
> index a1867852bcca..f445bed3af00 100644
> --- a/arch/arm/mach-snapdragon/board.c
> +++ b/arch/arm/mach-snapdragon/board.c
> @@ -22,6 +22,7 @@
> #include <linux/bug.h>
> #include <linux/psci.h>
> #include <linux/sizes.h>
> +#include <lmb.h>
> #include <malloc.h>
> #include <usb.h>
>
> @@ -159,6 +160,39 @@ int board_init(void)
> return 0;
> }
>
> +void __weak qcom_late_init(void)
> +{
> +}
> +
> +#define KERNEL_COMP_SIZE SZ_64M
> +
> +#define addr_alloc(lmb, size) lmb_alloc(lmb, size, SZ_2M)
> +
> +/* Stolen from arch/arm/mach-apple/board.c */
> +int board_late_init(void)
> +{
> + struct lmb lmb;
> + u32 status = 0;
> +
> + lmb_init_and_reserve(&lmb, gd->bd, (void *)gd->fdt_blob);
> +
> + /* We need to be fairly conservative here as we support boards with just 1G of TOTAL RAM */
> + status |= env_set_hex("kernel_addr_r", addr_alloc(&lmb, SZ_128M));
> + status |= env_set_hex("ramdisk_addr_r", addr_alloc(&lmb, SZ_128M));
> + status |= env_set_hex("kernel_comp_addr_r", addr_alloc(&lmb, KERNEL_COMP_SIZE));
> + status |= env_set_hex("kernel_comp_size", KERNEL_COMP_SIZE);
> + status |= env_set_hex("scriptaddr", addr_alloc(&lmb, SZ_4M));
> + status |= env_set_hex("pxefile_addr_r", addr_alloc(&lmb, SZ_4M));
> + status |= env_set_hex("fdt_addr_r", addr_alloc(&lmb, SZ_2M));
> +
> + if (status)
> + log_warning("%s: Failed to set run time variables\n", __func__);
> +
> + qcom_late_init();
> +
> + return 0;
> +}
> +
> static void build_mem_map(void)
> {
> int i;
> diff --git a/board/qualcomm/dragonboard410c/dragonboard410c.c b/board/qualcomm/dragonboard410c/dragonboard410c.c
> index 0136cc2237de..fbbfc0e65e24 100644
> --- a/board/qualcomm/dragonboard410c/dragonboard410c.c
> +++ b/board/qualcomm/dragonboard410c/dragonboard410c.c
> @@ -88,7 +88,7 @@ int misc_init_r(void)
> return 0;
> }
>
> -int board_late_init(void)
> +int qcom_late_init(void)
> {
> char serial[16];
>
>
> --
> 2.43.1
>
More information about the U-Boot
mailing list