bootmem: Clarify usage with bounce-buffer
Add bootmem_targets_usable_with_bounce() to handle cases of payload loading via bounce-buffer. Change-Id: I9ebbc621f8810c0317d7c97c6b4cdd41527ddcbb Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com> Reviewed-on: https://review.coreboot.org/26985 Reviewed-by: Aaron Durbin <adurbin@chromium.org> Reviewed-by: Julius Werner <jwerner@chromium.org> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
		
				
					committed by
					
						 Patrick Georgi
						Patrick Georgi
					
				
			
			
				
	
			
			
			
						parent
						
							43fc1aee4d
						
					
				
				
					commit
					d022718001
				
			| @@ -97,6 +97,11 @@ bool bootmem_walk(range_action_t action, void *arg); | ||||
| /* Return 1 if region targets usable RAM, 0 otherwise. */ | ||||
| int bootmem_region_targets_usable_ram(uint64_t start, uint64_t size); | ||||
|  | ||||
| /* Return 1 if region targets usable RAM, and we allow memory ranges | ||||
|  * with type >BM_MEM_OS_CUTOFF to be overwritten at the time we jump | ||||
|  * to payload. 0 otherwise. */ | ||||
| int bootmem_region_usable_with_bounce(uint64_t start, uint64_t size); | ||||
|  | ||||
| /* Allocate a temporary buffer from the unused RAM areas. */ | ||||
| void *bootmem_allocate_buffer(size_t size); | ||||
|  | ||||
|   | ||||
| @@ -201,12 +201,12 @@ bool bootmem_walk(range_action_t action, void *arg) | ||||
| 	return false; | ||||
| } | ||||
|  | ||||
| int bootmem_region_targets_usable_ram(uint64_t start, uint64_t size) | ||||
| static int bootmem_region_targets_ram(uint64_t start, uint64_t end, | ||||
| 				struct memranges *bm) | ||||
| { | ||||
| 	const struct range_entry *r; | ||||
| 	uint64_t end = start + size; | ||||
|  | ||||
| 	memranges_each_entry(r, &bootmem) { | ||||
| 	memranges_each_entry(r, bm) { | ||||
| 		/* All further bootmem entries are beyond this range. */ | ||||
| 		if (end <= range_entry_base(r)) | ||||
| 			break; | ||||
| @@ -219,6 +219,24 @@ int bootmem_region_targets_usable_ram(uint64_t start, uint64_t size) | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| /* Common testcase for loading any segments to bootmem. | ||||
|  * Returns 1 if the requested memory range is all tagged as type BM_MEM_RAM. | ||||
|  * Otherwise returns 0. | ||||
|  */ | ||||
| int bootmem_region_targets_usable_ram(uint64_t start, uint64_t size) | ||||
| { | ||||
| 	return bootmem_region_targets_ram(start, start + size, &bootmem); | ||||
| } | ||||
|  | ||||
| /* Special testcase to use when loading payload segments when bounce-buffer is | ||||
|  * supported. Memory ranges tagged with >BM_MEM_OS_CUTOFF may be overwritten at | ||||
|  * the time we jump to payload. | ||||
|  */ | ||||
| int bootmem_region_usable_with_bounce(uint64_t start, uint64_t size) | ||||
| { | ||||
| 	return bootmem_region_targets_ram(start, start + size, &bootmem_os); | ||||
| } | ||||
|  | ||||
| void *bootmem_allocate_buffer(size_t size) | ||||
| { | ||||
| 	const struct range_entry *r; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user