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:
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;
|
||||
|
|
Loading…
Reference in New Issue