program loading: provide one cache maintenance callback

Instead of having 2 different functions to call when a program
is loaded provide a single callback with flags parameter. The
previous callbacks for cache management routines did this:

for_each_program_segment:
	arch_program_segment_loaded(start, size);
arch_program_loaded();

Now, use one callback instead:
for_each_program_segment:
	arch_segment_loaded(start, size, SEG_FINAL?);

Change-Id: I3811cba92e3355d172f605e4444f053321b07a2a
Signed-off-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-on: http://review.coreboot.org/8838
Tested-by: build bot (Jenkins)
Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
This commit is contained in:
Aaron Durbin
2015-03-20 09:42:05 -05:00
committed by Aaron Durbin
parent ebf2ed4621
commit 6e76fff969
5 changed files with 23 additions and 24 deletions

View File

@ -314,9 +314,16 @@ static int load_self_segments(
struct payload *payload)
{
struct segment *ptr;
struct segment *last_non_empty;
const unsigned long one_meg = (1UL << 20);
unsigned long bounce_high = lb_end;
/* Determine last non-empty loaded segment. */
last_non_empty = NULL;
for(ptr = head->next; ptr != head; ptr = ptr->next)
if (ptr->s_filesz != 0)
last_non_empty = ptr;
for(ptr = head->next; ptr != head; ptr = ptr->next) {
if (bootmem_region_targets_usable_ram(ptr->s_dstaddr,
ptr->s_memsz))
@ -442,17 +449,11 @@ static int load_self_segments(
* Each architecture can perform additonal operations
* on the loaded segment
*/
arch_program_segment_loaded((uintptr_t)dest,
ptr->s_memsz);
arch_segment_loaded((uintptr_t)dest, ptr->s_memsz,
last_non_empty == ptr ? SEG_FINAL : 0);
}
}
/*
* Each architecture can perform additonal operations once the entire
* program is loaded
*/
arch_program_loaded();
return 1;
}