From 12850b1bb31876fc7f6382ebffe137357b42e26e Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Wed, 7 Mar 2018 10:39:28 +0100 Subject: [PATCH 1/2] hw/sparc/sun4m: Fix implicit creation of "-drive if=scsi" devices The global hack for creating SCSI devices has recently been removed, but this apparently broke SCSI devices on some boards that were not ready for this change yet. For the sun4m machines you now get: $ sparc-softmmu/qemu-system-sparc -boot d -cdrom x.iso qemu-system-sparc: -cdrom x.iso: machine type does not support if=scsi,bus=0,unit=2 Fix it by calling scsi_bus_legacy_handle_cmdline() after creating the corresponding SCSI controller. Reported-by: Mark Cave-Ayland Fixes: 1454509726719e0933c800fad00d6999752688ea Signed-off-by: Thomas Huth Signed-off-by: Mark Cave-Ayland --- hw/sparc/sun4m.c | 1 + 1 file changed, 1 insertion(+) diff --git a/hw/sparc/sun4m.c b/hw/sparc/sun4m.c index 61eb424bbc..0f5804b3b4 100644 --- a/hw/sparc/sun4m.c +++ b/hw/sparc/sun4m.c @@ -324,6 +324,7 @@ static void *sparc32_dma_init(hwaddr dma_base, esp = ESP_STATE(object_resolve_path_component(OBJECT(espdma), "esp")); sysbus_mmio_map(SYS_BUS_DEVICE(esp), 0, esp_base); + scsi_bus_legacy_handle_cmdline(&esp->esp.bus); ledma = SPARC32_LEDMA_DEVICE(object_resolve_path_component( OBJECT(dma), "ledma")); From 6e10f37c86068e35151f982c976a85f1bec07ef2 Mon Sep 17 00:00:00 2001 From: KONRAD Frederic Date: Fri, 2 Mar 2018 10:59:25 +0100 Subject: [PATCH 2/2] sparc: fix leon3 casa instruction when MMU is disabled Since the commit af7a06bac7d3abb2da48ef3277d2a415772d2ae8: `casa [..](10), .., ..` (and probably others alternate space instructions) triggers a data access exception when the MMU is disabled. When we enter get_asi(...) dc->mem_idx is set to MMU_PHYS_IDX when the MMU is disabled. Just keep mem_idx unchanged in this case so we passthrough the MMU when it is disabled. Signed-off-by: KONRAD Frederic Signed-off-by: Mark Cave-Ayland --- target/sparc/translate.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/target/sparc/translate.c b/target/sparc/translate.c index 71e0853e43..5aa367a182 100644 --- a/target/sparc/translate.c +++ b/target/sparc/translate.c @@ -2093,6 +2093,11 @@ static DisasASI get_asi(DisasContext *dc, int insn, TCGMemOp memop) type = GET_ASI_BFILL; break; } + + /* MMU_PHYS_IDX is used when the MMU is disabled to passthrough the + * permissions check in get_physical_address(..). + */ + mem_idx = (dc->mem_idx == MMU_PHYS_IDX) ? MMU_PHYS_IDX : mem_idx; } else { gen_exception(dc, TT_PRIV_INSN); type = GET_ASI_EXCP;