[U-Boot] [PATCH 5/5] boot: fdt: fixup the memory dt nodes falcon boot

Lukasz Majewski lukma at denx.de
Tue Apr 18 13:25:12 UTC 2017


Hi Ravi,

> In single stage bootmode or falcon boot mode,
> the SPL shall update the memory dt nodes
> spl_fixup_fdt() based on DDR configuration for
> specific platform.
> 
> Signed-off-by: Ravi Babu <ravibabu at ti.com>
> ---
>  common/spl/spl.c | 40 ++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 40 insertions(+)
> 
> diff --git a/common/spl/spl.c b/common/spl/spl.c
> index f11b370..b9b1331 100644
> --- a/common/spl/spl.c
> +++ b/common/spl/spl.c
> @@ -17,6 +17,7 @@
>  #include <malloc.h>
>  #include <dm/root.h>
>  #include <linux/compiler.h>
> +#include <fdt_support.h>
>  
>  DECLARE_GLOBAL_DATA_PTR;
>  
> @@ -56,6 +57,14 @@ __weak int spl_start_uboot(void)
>  	return 1;
>  }
>  
> +/* weak default platform specific function to initialize
> + * dram banks
> + */
> +__weak int dram_init_banksize(void)
> +{
> +	return 0;
> +}
> +
>  /*
>   * Weak default function for arch specific zImage check. Return zero
>   * and fill start and end address if image is recognized.
> @@ -66,6 +75,33 @@ int __weak bootz_setup(ulong image, ulong *start,
> ulong *end) }
>  #endif
>  
> +void spl_fixup_fdt(void)
> +{
> +#if defined(CONFIG_SPL_OF_LIBFDT) &&
> defined(CONFIG_SYS_SPL_ARGS_ADDR)
> +	void *fdt_blob = (void *)CONFIG_SYS_SPL_ARGS_ADDR;
> +	int err;
> +
> +	err = fdt_check_header(fdt_blob);
> +	if (err < 0) {
> +		printf("fdt_root: %s\n", fdt_strerror(err));
> +		return;
> +	}
> +
> +	/* fixup the memory dt node */
> +	err = fdt_shrink_to_minimum(fdt_blob, 0);
> +	if (err == 0) {
> +		printf("spl: fdt_shrink_to_minimum err - %d\n", err);
> +		return;
> +	}
> +
> +	err = arch_fixup_fdt(fdt_blob);
> +	if (err) {
> +		printf("spl: arch_fixup_fdt err - %d\n", err);
> +		return;
> +	}
> +#endif
> +}
> +
>  /*
>   * Weak default function for board specific cleanup/preparation
> before
>   * Linux boot. Some boards/platforms might not need it, so just
> provide @@ -323,6 +359,9 @@ void board_init_r(gd_t *dummy1, ulong
> dummy2) 
>  	debug(">>spl:board_init_r()\n");
>  	gd->bd = &bdata;
> +#ifdef CONFIG_SPL_OS_BOOT
> +	dram_init_banksize();

	What is the purpose of this function? In this point the SDRAM
	should be already configured.

In patch 2/5 you already configured TI's specific "board_init_f" to add
some memory related information to gd struct.


> +#endif
>  
>  #if defined(CONFIG_SYS_SPL_MALLOC_START)
>  	mem_malloc_init(CONFIG_SYS_SPL_MALLOC_START,
> @@ -361,6 +400,7 @@ void board_init_r(gd_t *dummy1, ulong dummy2)
>  #ifdef CONFIG_SPL_OS_BOOT
>  	case IH_OS_LINUX:
>  		debug("Jumping to Linux\n");
> +		spl_fixup_fdt();
>  		spl_board_prepare_for_linux();
>  		jump_to_image_linux(&spl_image,
>  				    (void
> *)CONFIG_SYS_SPL_ARGS_ADDR);




Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de


More information about the U-Boot mailing list