mirror of
https://github.com/qemu/qemu.git
synced 2024-12-05 17:53:36 +08:00
riscv: spike: allow base == 0
The sanity check on base doesn't allow htif to be mapped @0. Check if the symbol exists instead so we can map it where we want. Reviewed-by: Michael Clark <mjc@sifive.com> Signed-off-by: KONRAD Frederic <frederic.konrad@adacore.com> Signed-off-by: Michael Clark <mjc@sifive.com> Message-Id: <1525360636-18229-2-git-send-email-frederic.konrad@adacore.com>
This commit is contained in:
parent
c8b7e627b4
commit
17b9751e85
@ -41,17 +41,20 @@
|
|||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
static uint64_t fromhost_addr, tohost_addr;
|
static uint64_t fromhost_addr, tohost_addr;
|
||||||
|
static int address_symbol_set;
|
||||||
|
|
||||||
void htif_symbol_callback(const char *st_name, int st_info, uint64_t st_value,
|
void htif_symbol_callback(const char *st_name, int st_info, uint64_t st_value,
|
||||||
uint64_t st_size)
|
uint64_t st_size)
|
||||||
{
|
{
|
||||||
if (strcmp("fromhost", st_name) == 0) {
|
if (strcmp("fromhost", st_name) == 0) {
|
||||||
|
address_symbol_set |= 1;
|
||||||
fromhost_addr = st_value;
|
fromhost_addr = st_value;
|
||||||
if (st_size != 8) {
|
if (st_size != 8) {
|
||||||
error_report("HTIF fromhost must be 8 bytes");
|
error_report("HTIF fromhost must be 8 bytes");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
} else if (strcmp("tohost", st_name) == 0) {
|
} else if (strcmp("tohost", st_name) == 0) {
|
||||||
|
address_symbol_set |= 2;
|
||||||
tohost_addr = st_value;
|
tohost_addr = st_value;
|
||||||
if (st_size != 8) {
|
if (st_size != 8) {
|
||||||
error_report("HTIF tohost must be 8 bytes");
|
error_report("HTIF tohost must be 8 bytes");
|
||||||
@ -248,7 +251,7 @@ HTIFState *htif_mm_init(MemoryRegion *address_space, MemoryRegion *main_mem,
|
|||||||
qemu_chr_fe_init(&s->chr, chr, &error_abort);
|
qemu_chr_fe_init(&s->chr, chr, &error_abort);
|
||||||
qemu_chr_fe_set_handlers(&s->chr, htif_can_recv, htif_recv, htif_event,
|
qemu_chr_fe_set_handlers(&s->chr, htif_can_recv, htif_recv, htif_event,
|
||||||
htif_be_change, s, NULL, true);
|
htif_be_change, s, NULL, true);
|
||||||
if (base) {
|
if (address_symbol_set == 3) {
|
||||||
memory_region_init_io(&s->mmio, NULL, &htif_mm_ops, s,
|
memory_region_init_io(&s->mmio, NULL, &htif_mm_ops, s,
|
||||||
TYPE_HTIF_UART, size);
|
TYPE_HTIF_UART, size);
|
||||||
memory_region_add_subregion(address_space, base, &s->mmio);
|
memory_region_add_subregion(address_space, base, &s->mmio);
|
||||||
|
Loading…
Reference in New Issue
Block a user