ARM: renesas: Configure DRAM size from ATF DT fragment
The ATF can pass additional information via the first four registers, x0...x3. The R-Car Gen3 with mainline ATF, register x1 contains pointer to a device tree with platform information. Parse this device tree and extract DRAM size information from it. This is useful on systems where the DRAM size can vary between configurations. Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com> Cc: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
This commit is contained in:
		
							parent
							
								
									80b44fb376
								
							
						
					
					
						commit
						175f502734
					
				|  | @ -43,17 +43,37 @@ int board_init(void) | |||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * If the firmware passed a device tree use it for U-Boot DRAM setup. | ||||
|  */ | ||||
| extern u64 rcar_atf_boot_args[]; | ||||
| 
 | ||||
| int dram_init(void) | ||||
| { | ||||
| 	if (fdtdec_setup_mem_size_base() != 0) | ||||
| 		return -EINVAL; | ||||
| 	const void *atf_fdt_blob = (const void *)(rcar_atf_boot_args[1]); | ||||
| 	const void *blob; | ||||
| 
 | ||||
| 	return 0; | ||||
| 	/* Check if ATF passed us DTB. If not, fall back to builtin DTB. */ | ||||
| 	if (fdt_magic(atf_fdt_blob) == FDT_MAGIC) | ||||
| 		blob = atf_fdt_blob; | ||||
| 	else | ||||
| 		blob = gd->fdt_blob; | ||||
| 
 | ||||
| 	return fdtdec_setup_mem_size_base_fdt(blob); | ||||
| } | ||||
| 
 | ||||
| int dram_init_banksize(void) | ||||
| { | ||||
| 	fdtdec_setup_memory_banksize(); | ||||
| 	const void *atf_fdt_blob = (const void *)(rcar_atf_boot_args[1]); | ||||
| 	const void *blob; | ||||
| 
 | ||||
| 	/* Check if ATF passed us DTB. If not, fall back to builtin DTB. */ | ||||
| 	if (fdt_magic(atf_fdt_blob) == FDT_MAGIC) | ||||
| 		blob = atf_fdt_blob; | ||||
| 	else | ||||
| 		blob = gd->fdt_blob; | ||||
| 
 | ||||
| 	fdtdec_setup_memory_banksize_fdt(blob); | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
|  |  | |||
|  | @ -69,17 +69,37 @@ int board_init(void) | |||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * If the firmware passed a device tree use it for U-Boot DRAM setup. | ||||
|  */ | ||||
| extern u64 rcar_atf_boot_args[]; | ||||
| 
 | ||||
| int dram_init(void) | ||||
| { | ||||
| 	if (fdtdec_setup_mem_size_base() != 0) | ||||
| 		return -EINVAL; | ||||
| 	const void *atf_fdt_blob = (const void *)(rcar_atf_boot_args[1]); | ||||
| 	const void *blob; | ||||
| 
 | ||||
| 	return 0; | ||||
| 	/* Check if ATF passed us DTB. If not, fall back to builtin DTB. */ | ||||
| 	if (fdt_magic(atf_fdt_blob) == FDT_MAGIC) | ||||
| 		blob = atf_fdt_blob; | ||||
| 	else | ||||
| 		blob = gd->fdt_blob; | ||||
| 
 | ||||
| 	return fdtdec_setup_mem_size_base_fdt(blob); | ||||
| } | ||||
| 
 | ||||
| int dram_init_banksize(void) | ||||
| { | ||||
| 	fdtdec_setup_memory_banksize(); | ||||
| 	const void *atf_fdt_blob = (const void *)(rcar_atf_boot_args[1]); | ||||
| 	const void *blob; | ||||
| 
 | ||||
| 	/* Check if ATF passed us DTB. If not, fall back to builtin DTB. */ | ||||
| 	if (fdt_magic(atf_fdt_blob) == FDT_MAGIC) | ||||
| 		blob = atf_fdt_blob; | ||||
| 	else | ||||
| 		blob = gd->fdt_blob; | ||||
| 
 | ||||
| 	fdtdec_setup_memory_banksize_fdt(blob); | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
|  |  | |||
|  | @ -68,17 +68,37 @@ int board_init(void) | |||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * If the firmware passed a device tree use it for U-Boot DRAM setup. | ||||
|  */ | ||||
| extern u64 rcar_atf_boot_args[]; | ||||
| 
 | ||||
| int dram_init(void) | ||||
| { | ||||
| 	if (fdtdec_setup_mem_size_base() != 0) | ||||
| 		return -EINVAL; | ||||
| 	const void *atf_fdt_blob = (const void *)(rcar_atf_boot_args[1]); | ||||
| 	const void *blob; | ||||
| 
 | ||||
| 	return 0; | ||||
| 	/* Check if ATF passed us DTB. If not, fall back to builtin DTB. */ | ||||
| 	if (fdt_magic(atf_fdt_blob) == FDT_MAGIC) | ||||
| 		blob = atf_fdt_blob; | ||||
| 	else | ||||
| 		blob = gd->fdt_blob; | ||||
| 
 | ||||
| 	return fdtdec_setup_mem_size_base_fdt(blob); | ||||
| } | ||||
| 
 | ||||
| int dram_init_banksize(void) | ||||
| { | ||||
| 	fdtdec_setup_memory_banksize(); | ||||
| 	const void *atf_fdt_blob = (const void *)(rcar_atf_boot_args[1]); | ||||
| 	const void *blob; | ||||
| 
 | ||||
| 	/* Check if ATF passed us DTB. If not, fall back to builtin DTB. */ | ||||
| 	if (fdt_magic(atf_fdt_blob) == FDT_MAGIC) | ||||
| 		blob = atf_fdt_blob; | ||||
| 	else | ||||
| 		blob = gd->fdt_blob; | ||||
| 
 | ||||
| 	fdtdec_setup_memory_banksize_fdt(blob); | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue