common: Rewrite hiding the end of memory
As the name may be confusing, the CONFIG_SYS_MEM_TOP_HIDE reserves some memory from the end of ram, tracked by gd->ram_size. It is not always the top of u-boot visible memory. Rewrite the macro with a weak function to provide flexibility for complex calcuation. Legacy use of this macro is still supported. Signed-off-by: York Sun <yorksun@freescale.com> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
		
							parent
							
								
									c107c0c05c
								
							
						
					
					
						commit
						aabd7ddb88
					
				
							
								
								
									
										2
									
								
								README
								
								
								
								
							
							
						
						
									
										2
									
								
								README
								
								
								
								
							|  | @ -3877,7 +3877,7 @@ Configuration Settings: | |||
| 		the RAM base is not zero, or RAM is divided into banks, | ||||
| 		this variable needs to be recalcuated to get the address. | ||||
| 
 | ||||
| - CONFIG_SYS_MEM_TOP_HIDE (PPC only): | ||||
| - CONFIG_SYS_MEM_TOP_HIDE: | ||||
| 		If CONFIG_SYS_MEM_TOP_HIDE is defined in the board config header, | ||||
| 		this specified memory area will get subtracted from the top | ||||
| 		(end) of RAM and won't get "touched" at all by U-Boot. By | ||||
|  |  | |||
|  | @ -317,6 +317,15 @@ __weak ulong board_get_usable_ram_top(ulong total_size) | |||
| 	return gd->ram_top; | ||||
| } | ||||
| 
 | ||||
| __weak phys_size_t board_reserve_ram_top(phys_size_t ram_size) | ||||
| { | ||||
| #ifdef CONFIG_SYS_MEM_TOP_HIDE | ||||
| 	return ram_size - CONFIG_SYS_MEM_TOP_HIDE; | ||||
| #else | ||||
| 	return ram_size; | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| static int setup_dest_addr(void) | ||||
| { | ||||
| 	debug("Monitor len: %08lX\n", gd->mon_len); | ||||
|  | @ -333,19 +342,17 @@ static int setup_dest_addr(void) | |||
| 	 */ | ||||
| 	gd->secure_ram = gd->ram_size; | ||||
| #endif | ||||
| #if defined(CONFIG_SYS_MEM_TOP_HIDE) | ||||
| 	/*
 | ||||
| 	 * Subtract specified amount of memory to hide so that it won't | ||||
| 	 * get "touched" at all by U-Boot. By fixing up gd->ram_size | ||||
| 	 * the Linux kernel should now get passed the now "corrected" | ||||
| 	 * memory size and won't touch it either. This should work | ||||
| 	 * for arch/ppc and arch/powerpc. Only Linux board ports in | ||||
| 	 * arch/powerpc with bootwrapper support, that recalculate the | ||||
| 	 * memory size from the SDRAM controller setup will have to | ||||
| 	 * get fixed. | ||||
| 	 * memory size and won't touch it either. This has been used | ||||
| 	 * by arch/powerpc exclusively. Now ARMv8 takes advantage of | ||||
| 	 * thie mechanism. If memory is split into banks, addresses | ||||
| 	 * need to be calculated. | ||||
| 	 */ | ||||
| 	gd->ram_size -= CONFIG_SYS_MEM_TOP_HIDE; | ||||
| #endif | ||||
| 	gd->ram_size = board_reserve_ram_top(gd->ram_size); | ||||
| 
 | ||||
| #ifdef CONFIG_SYS_SDRAM_BASE | ||||
| 	gd->ram_top = CONFIG_SYS_SDRAM_BASE; | ||||
| #endif | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue