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; | 	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) | int dram_init(void) | ||||||
| { | { | ||||||
| 	if (fdtdec_setup_mem_size_base() != 0) | 	const void *atf_fdt_blob = (const void *)(rcar_atf_boot_args[1]); | ||||||
| 		return -EINVAL; | 	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) | 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; | 	return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -69,17 +69,37 @@ int board_init(void) | ||||||
| 	return 0; | 	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) | int dram_init(void) | ||||||
| { | { | ||||||
| 	if (fdtdec_setup_mem_size_base() != 0) | 	const void *atf_fdt_blob = (const void *)(rcar_atf_boot_args[1]); | ||||||
| 		return -EINVAL; | 	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) | 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; | 	return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -68,17 +68,37 @@ int board_init(void) | ||||||
| 	return 0; | 	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) | int dram_init(void) | ||||||
| { | { | ||||||
| 	if (fdtdec_setup_mem_size_base() != 0) | 	const void *atf_fdt_blob = (const void *)(rcar_atf_boot_args[1]); | ||||||
| 		return -EINVAL; | 	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) | 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; | 	return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue