[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v3 3/3] via-ide: Also emulate non 100% native mode
From: |
Michael S. Tsirkin |
Subject: |
Re: [PATCH v3 3/3] via-ide: Also emulate non 100% native mode |
Date: |
Mon, 9 Mar 2020 23:32:05 -0400 |
On Mon, Mar 09, 2020 at 09:50:57PM +0100, BALATON Zoltan wrote:
> On Mon, 9 Mar 2020, Michael S. Tsirkin wrote:
> > On Mon, Mar 09, 2020 at 08:18:13PM +0100, BALATON Zoltan wrote:
> > > Some machines operate in "non 100% native mode" where interrupts are
> > > fixed at legacy IDE interrupts and some guests expect this behaviour
> > > without checking based on knowledge about hardware. Even Linux has
> > > arch specific workarounds for this that are activated on such boards
> > > so this needs to be emulated as well.
> > >
> > > Signed-off-by: BALATON Zoltan <address@hidden>
> > > ---
> > > v2: Don't use PCI_INTERRUPT_LINE in via_ide_set_irq()
> > > v3: Patch pci.c instead of local workaround for PCI reset clearing
> > > PCI_INTERRUPT_PIN config reg
> > >
> > > hw/ide/via.c | 37 +++++++++++++++++++++++++++++--------
> > > hw/mips/mips_fulong2e.c | 2 +-
> > > include/hw/ide.h | 3 ++-
> > > 3 files changed, 32 insertions(+), 10 deletions(-)
> > >
> > > diff --git a/hw/ide/via.c b/hw/ide/via.c
> > > index 096de8dba0..02d29809f2 100644
> > > --- a/hw/ide/via.c
> > > +++ b/hw/ide/via.c
> > > @@ -1,9 +1,10 @@
> > > /*
> > > - * QEMU IDE Emulation: PCI VIA82C686B support.
> > > + * QEMU VIA southbridge IDE emulation (VT82C686B, VT8231)
> > > *
> > > * Copyright (c) 2003 Fabrice Bellard
> > > * Copyright (c) 2006 Openedhand Ltd.
> > > * Copyright (c) 2010 Huacai Chen <address@hidden>
> > > + * Copyright (c) 2019-2020 BALATON Zoltan
> > > *
> > > * Permission is hereby granted, free of charge, to any person obtaining
> > > a copy
> > > * of this software and associated documentation files (the "Software"),
> > > to deal
> > > @@ -25,6 +26,8 @@
> > > */
> > >
> > > #include "qemu/osdep.h"
> > > +#include "qemu/range.h"
> > > +#include "hw/qdev-properties.h"
> > > #include "hw/pci/pci.h"
> > > #include "migration/vmstate.h"
> > > #include "qemu/module.h"
> > > @@ -111,11 +114,18 @@ static void via_ide_set_irq(void *opaque, int n,
> > > int level)
> > > } else {
> > > d->config[0x70 + n * 8] &= ~0x80;
> > > }
> > > -
> > > level = (d->config[0x70] & 0x80) || (d->config[0x78] & 0x80);
> > > - n = pci_get_byte(d->config + PCI_INTERRUPT_LINE);
> > > - if (n) {
> > > - qemu_set_irq(isa_get_irq(NULL, n), level);
> > > +
> > > + /*
> > > + * Some machines operate in "non 100% native mode" where
> > > PCI_INTERRUPT_LINE
> > > + * is not used but IDE always uses ISA IRQ 14 and 15 even in native
> > > mode.
> > > + * Some guest drivers expect this, often without checking.
> > > + */
> > > + if (!(pci_get_byte(d->config + PCI_CLASS_PROG) & (n ? 4 : 1)) ||
> > > + PCI_IDE(d)->flags & BIT(PCI_IDE_LEGACY_IRQ)) {
> > > + qemu_set_irq(isa_get_irq(NULL, (n ? 15 : 14)), level);
> > > + } else {
> > > + qemu_set_irq(isa_get_irq(NULL, 14), level);
> > > }
> > > }
> > >
> > > @@ -169,7 +179,8 @@ static void via_ide_realize(PCIDevice *dev, Error
> > > **errp)
> > >
> > > pci_config_set_prog_interface(pci_conf, 0x8f); /* native PCI ATA
> > > mode */
> > > pci_set_long(pci_conf + PCI_CAPABILITY_LIST, 0x000000c0);
> > > - dev->wmask[PCI_INTERRUPT_LINE] = 0xf;
> > > + dev->wmask[PCI_CLASS_PROG] = 5;
> >
> > What's the story here? Why is class suddenly writeable?
>
> The via-ide (function 1 of some VIA southbridge chips) use bits in this reg
> to set legacy compatibility mode as described in VT82C686B and VT8231
> datasheets and Linux writes this on pegasos2 board I'm emulating. See longer
> description in this message:
>
> https://lists.nongnu.org/archive/html/qemu-devel/2020-03/msg00019.html
>
> Regards,
> BALATON Zoltan
Pls add a code comment so people don't have to dig through mailing list
archives.
--
MST
- Re: [PATCH v3 2/3] pci: Honour wmask when resetting PCI_INTERRUPT_LINE, (continued)
[PATCH v3 1/3] ide: Make room for flags in PCIIDEState and add one for legacy IRQ routing, BALATON Zoltan, 2020/03/09
[PATCH v3 3/3] via-ide: Also emulate non 100% native mode, BALATON Zoltan, 2020/03/09
Re: [PATCH v3 0/3] Implement "non 100% native mode" in via-ide, no-reply, 2020/03/09
Re: [PATCH v3 0/3] Implement "non 100% native mode" in via-ide, Mark Cave-Ayland, 2020/03/10