diff mbox

[10/17] magnum: disable floppy DMA for now

Message ID 1451376295-28834-12-git-send-email-hpoussin@reactos.org
State New
Headers show

Commit Message

Hervé Poussineau Dec. 29, 2015, 8:04 a.m. UTC
Floppy uses the DMA controller in rc4030 chipset, and not the i8259 from the ISA bus.
It's better to disable DMA than to call the wrong DMA controller.

Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
---
 hw/block/fdc.c         | 5 +++--
 hw/mips/mips_jazz.c    | 3 ++-
 include/hw/block/fdc.h | 2 +-
 3 files changed, 6 insertions(+), 4 deletions(-)

Comments

John Snow Jan. 5, 2016, 10:02 p.m. UTC | #1
On 12/29/2015 03:04 AM, Hervé Poussineau wrote:
> Floppy uses the DMA controller in rc4030 chipset, and not the i8259 from the ISA bus.
> It's better to disable DMA than to call the wrong DMA controller.
> 

I'll trust that these platforms' FDCs are already terribly broken and
unusable, I've not tested them personally.

> Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
> ---
>  hw/block/fdc.c         | 5 +++--
>  hw/mips/mips_jazz.c    | 3 ++-
>  include/hw/block/fdc.h | 2 +-
>  3 files changed, 6 insertions(+), 4 deletions(-)
> 
> diff --git a/hw/block/fdc.c b/hw/block/fdc.c
> index 4292ece..cfdd625 100644
> --- a/hw/block/fdc.c
> +++ b/hw/block/fdc.c
> @@ -2255,7 +2255,7 @@ ISADevice *fdctrl_init_isa(ISABus *bus, DriveInfo **fds)
>      return isadev;
>  }
>  
> -void fdctrl_init_sysbus(qemu_irq irq, int dma_chann,
> +void fdctrl_init_sysbus(qemu_irq irq, int dma_chann, IsaDma *dma,
>                          hwaddr mmio_base, DriveInfo **fds)
>  {
>      FDCtrl *fdctrl;
> @@ -2266,7 +2266,8 @@ void fdctrl_init_sysbus(qemu_irq irq, int dma_chann,
>      dev = qdev_create(NULL, "sysbus-fdc");
>      sys = SYSBUS_FDC(dev);
>      fdctrl = &sys->state;
> -    fdctrl->dma_chann = dma_chann; /* FIXME */
> +    fdctrl->dma = dma;

You haven't added this field yet; so this breaks the bisect.

> +    fdctrl->dma_chann = dma ? dma_chann : -1;
>      if (fds[0]) {
>          qdev_prop_set_drive_nofail(dev, "driveA", blk_by_legacy_dinfo(fds[0]));
>      }
> diff --git a/hw/mips/mips_jazz.c b/hw/mips/mips_jazz.c
> index 64a0de2..300c199 100644
> --- a/hw/mips/mips_jazz.c
> +++ b/hw/mips/mips_jazz.c
> @@ -296,7 +296,8 @@ static void mips_jazz_init(MachineState *machine,
>      for (n = 0; n < MAX_FD; n++) {
>          fds[n] = drive_get(IF_FLOPPY, 0, n);
>      }
> -    fdctrl_init_sysbus(qdev_get_gpio_in(rc4030, 1), 0, 0x80003000, fds);
> +    /* FIXME: we should enable DMA with a custom IsaDma device */
> +    fdctrl_init_sysbus(qdev_get_gpio_in(rc4030, 1), 0, NULL, 0x80003000, fds);
>  
>      /* Real time clock */
>      rtc_init(isa_bus, 1980, NULL);
> diff --git a/include/hw/block/fdc.h b/include/hw/block/fdc.h
> index d48b2f8..f92e44f 100644
> --- a/include/hw/block/fdc.h
> +++ b/include/hw/block/fdc.h
> @@ -16,7 +16,7 @@ typedef enum FDriveType {
>  #define TYPE_ISA_FDC "isa-fdc"
>  
>  ISADevice *fdctrl_init_isa(ISABus *bus, DriveInfo **fds);
> -void fdctrl_init_sysbus(qemu_irq irq, int dma_chann,
> +void fdctrl_init_sysbus(qemu_irq irq, int dma_chann, IsaDma *dma,
>                          hwaddr mmio_base, DriveInfo **fds);
>  void sun4m_fdctrl_init(qemu_irq irq, hwaddr io_base,
>                         DriveInfo **fds, qemu_irq *fdc_tc);
>
diff mbox

Patch

diff --git a/hw/block/fdc.c b/hw/block/fdc.c
index 4292ece..cfdd625 100644
--- a/hw/block/fdc.c
+++ b/hw/block/fdc.c
@@ -2255,7 +2255,7 @@  ISADevice *fdctrl_init_isa(ISABus *bus, DriveInfo **fds)
     return isadev;
 }
 
-void fdctrl_init_sysbus(qemu_irq irq, int dma_chann,
+void fdctrl_init_sysbus(qemu_irq irq, int dma_chann, IsaDma *dma,
                         hwaddr mmio_base, DriveInfo **fds)
 {
     FDCtrl *fdctrl;
@@ -2266,7 +2266,8 @@  void fdctrl_init_sysbus(qemu_irq irq, int dma_chann,
     dev = qdev_create(NULL, "sysbus-fdc");
     sys = SYSBUS_FDC(dev);
     fdctrl = &sys->state;
-    fdctrl->dma_chann = dma_chann; /* FIXME */
+    fdctrl->dma = dma;
+    fdctrl->dma_chann = dma ? dma_chann : -1;
     if (fds[0]) {
         qdev_prop_set_drive_nofail(dev, "driveA", blk_by_legacy_dinfo(fds[0]));
     }
diff --git a/hw/mips/mips_jazz.c b/hw/mips/mips_jazz.c
index 64a0de2..300c199 100644
--- a/hw/mips/mips_jazz.c
+++ b/hw/mips/mips_jazz.c
@@ -296,7 +296,8 @@  static void mips_jazz_init(MachineState *machine,
     for (n = 0; n < MAX_FD; n++) {
         fds[n] = drive_get(IF_FLOPPY, 0, n);
     }
-    fdctrl_init_sysbus(qdev_get_gpio_in(rc4030, 1), 0, 0x80003000, fds);
+    /* FIXME: we should enable DMA with a custom IsaDma device */
+    fdctrl_init_sysbus(qdev_get_gpio_in(rc4030, 1), 0, NULL, 0x80003000, fds);
 
     /* Real time clock */
     rtc_init(isa_bus, 1980, NULL);
diff --git a/include/hw/block/fdc.h b/include/hw/block/fdc.h
index d48b2f8..f92e44f 100644
--- a/include/hw/block/fdc.h
+++ b/include/hw/block/fdc.h
@@ -16,7 +16,7 @@  typedef enum FDriveType {
 #define TYPE_ISA_FDC "isa-fdc"
 
 ISADevice *fdctrl_init_isa(ISABus *bus, DriveInfo **fds);
-void fdctrl_init_sysbus(qemu_irq irq, int dma_chann,
+void fdctrl_init_sysbus(qemu_irq irq, int dma_chann, IsaDma *dma,
                         hwaddr mmio_base, DriveInfo **fds);
 void sun4m_fdctrl_init(qemu_irq irq, hwaddr io_base,
                        DriveInfo **fds, qemu_irq *fdc_tc);