die() when attempting to use bounce buffer on non-i386.
Only i386 has code to support bounce buffer. For others coreboot would silently discard part of binary which doesn't work and is a hell to debug. Instead just die. Change-Id: I37ae24ea5d13aae95f9856a896700a0408747233 Signed-off-by: Vladimir Serbinenko <phcoder@gmail.com> Reviewed-on: https://review.coreboot.org/13750 Tested-by: build bot (Jenkins) Reviewed-by: Aaron Durbin <adurbin@chromium.org>
This commit is contained in:
parent
4f22267b09
commit
f0d39c409b
|
@ -25,3 +25,8 @@ void arch_prog_run(struct prog *prog)
|
|||
doit = prog_entry(prog);
|
||||
doit(prog_entry_arg(prog));
|
||||
}
|
||||
|
||||
int arch_supports_bounce_buffer(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -72,6 +72,11 @@ void arch_prog_run(struct prog *prog)
|
|||
doit(prog_entry_arg(prog));
|
||||
}
|
||||
|
||||
int arch_supports_bounce_buffer(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Generic stage entry point. Can be overridden by board/SoC if needed. */
|
||||
__attribute__((weak)) void stage_entry(void)
|
||||
{
|
||||
|
|
|
@ -23,3 +23,8 @@ void arch_prog_run(struct prog *prog)
|
|||
|
||||
doit(cb_tables);
|
||||
}
|
||||
|
||||
int arch_supports_bounce_buffer(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -21,3 +21,8 @@ void arch_prog_run(struct prog *prog)
|
|||
|
||||
doit(prog_entry_arg(prog));
|
||||
}
|
||||
|
||||
int arch_supports_bounce_buffer(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -30,3 +30,8 @@ void arch_prog_run(struct prog *prog)
|
|||
doit(prog_entry_arg(prog));
|
||||
}
|
||||
}
|
||||
|
||||
int arch_supports_bounce_buffer(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -192,6 +192,11 @@ static void jmp_payload(void *entry, unsigned long buffer, unsigned long size)
|
|||
);
|
||||
}
|
||||
|
||||
int arch_supports_bounce_buffer(void)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void try_payload(struct prog *prog)
|
||||
{
|
||||
if (prog_type(prog) == PROG_PAYLOAD) {
|
||||
|
|
|
@ -41,6 +41,9 @@ enum prog_type {
|
|||
* set on the last segment loaded. */
|
||||
void arch_segment_loaded(uintptr_t start, size_t size, int flags);
|
||||
|
||||
/* Return true if arch supports bounce buffer. */
|
||||
int arch_supports_bounce_buffer(void);
|
||||
|
||||
/* Representation of a program. */
|
||||
struct prog {
|
||||
/* The region_device is the source of program content to load. After
|
||||
|
|
|
@ -114,6 +114,9 @@ static int relocate_segment(unsigned long buffer, struct segment *seg)
|
|||
if (!overlaps_coreboot(seg))
|
||||
return 0;
|
||||
|
||||
if (!arch_supports_bounce_buffer())
|
||||
die ("bounce buffer not supported");
|
||||
|
||||
start = seg->s_dstaddr;
|
||||
middle = start + seg->s_filesz;
|
||||
end = start + seg->s_memsz;
|
||||
|
|
Loading…
Reference in New Issue