Commit 148b2ba1 authored by Thomas Huth's avatar Thomas Huth Committed by Paolo Bonzini
Browse files

hw/mips/jazz: 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 pica61 machine you now get:

$ mips64-softmmu/qemu-system-mips64 -M pica61 -cdrom x.iso
qemu-system-mips64: -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.

Fixes: 14545097
Signed-off-by: default avatarThomas Huth <thuth@redhat.com>
Message-Id: <1520414644-11535-1-git-send-email-thuth@redhat.com>
Reviewed-by: default avatarHervé Poussineau <hpoussin@reactos.org>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent 7e563bfb
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -146,6 +146,7 @@ static void mips_jazz_init(MachineState *machine,
    MemoryRegion *ram = g_new(MemoryRegion, 1);
    MemoryRegion *bios = g_new(MemoryRegion, 1);
    MemoryRegion *bios2 = g_new(MemoryRegion, 1);
    ESPState *esp;

    /* init CPUs */
    cpu = MIPS_CPU(cpu_create(machine->cpu_type));
@@ -277,9 +278,9 @@ static void mips_jazz_init(MachineState *machine,
    }

    /* SCSI adapter */
    esp_init(0x80002000, 0,
             rc4030_dma_read, rc4030_dma_write, dmas[0],
    esp = esp_init(0x80002000, 0, rc4030_dma_read, rc4030_dma_write, dmas[0],
                   qdev_get_gpio_in(rc4030, 5), &esp_reset, &dma_enable);
    scsi_bus_legacy_handle_cmdline(&esp->bus);

    /* Floppy */
    for (n = 0; n < MAX_FD; n++) {
+7 −5
Original line number Diff line number Diff line
@@ -618,7 +618,7 @@ static const MemoryRegionOps sysbus_esp_mem_ops = {
    .valid.accepts = esp_mem_accepts,
};

void esp_init(hwaddr espaddr, int it_shift,
ESPState *esp_init(hwaddr espaddr, int it_shift,
                   ESPDMAMemoryReadWriteFunc dma_memory_read,
                   ESPDMAMemoryReadWriteFunc dma_memory_write,
                   void *dma_opaque, qemu_irq irq, qemu_irq *reset,
@@ -644,6 +644,8 @@ void esp_init(hwaddr espaddr, int it_shift,
    sysbus_mmio_map(s, 0, espaddr);
    *reset = qdev_get_gpio_in(dev, 0);
    *dma_enable = qdev_get_gpio_in(dev, 1);

    return esp;
}

static const struct SCSIBusInfo esp_scsi_info = {
+5 −5
Original line number Diff line number Diff line
@@ -7,11 +7,6 @@
/* esp.c */
#define ESP_MAX_DEVS 7
typedef void (*ESPDMAMemoryReadWriteFunc)(void *opaque, uint8_t *buf, int len);
void esp_init(hwaddr espaddr, int it_shift,
              ESPDMAMemoryReadWriteFunc dma_memory_read,
              ESPDMAMemoryReadWriteFunc dma_memory_write,
              void *dma_opaque, qemu_irq irq, qemu_irq *reset,
              qemu_irq *dma_enable);

#define ESP_REGS 16
#define TI_BUFSZ 16
@@ -136,6 +131,11 @@ typedef struct {
#define TCHI_FAS100A 0x4
#define TCHI_AM53C974 0x12

ESPState *esp_init(hwaddr espaddr, int it_shift,
                   ESPDMAMemoryReadWriteFunc dma_memory_read,
                   ESPDMAMemoryReadWriteFunc dma_memory_write,
                   void *dma_opaque, qemu_irq irq, qemu_irq *reset,
                   qemu_irq *dma_enable);
void esp_dma_enable(ESPState *s, int irq, int level);
void esp_request_cancelled(SCSIRequest *req);
void esp_command_complete(SCSIRequest *req, uint32_t status, size_t resid);