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

Lokesh Vutla lokeshvutla at ti.com
Thu Apr 20 01:54:00 UTC 2017


Hi Lukasz,

On Tuesday 18 April 2017 06:55 PM, Lukasz Majewski wrote:
> 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.

So dram_init_banksize() initializes each base address and size of each
bank. Before jumping to kernel, these values will be used to update
memory nodes in DT(done by arch_fixup_fdt()). This is how it is being
done in U-boot as well.

Thanks and regards,
Lokesh

> 
> 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
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> https://lists.denx.de/listinfo/u-boot
> 


More information about the U-Boot mailing list