qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v2 3/8] hw/ide/piix: Convert reset handler to DeviceReset


From: Philippe Mathieu-Daudé
Subject: Re: [PATCH v2 3/8] hw/ide/piix: Convert reset handler to DeviceReset
Date: Wed, 9 Oct 2019 21:50:21 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.1.0

On 10/9/19 3:08 AM, Li Qiang wrote:
Philippe Mathieu-Daudé <address@hidden <mailto:address@hidden>> 于 2019年10月8日周二 下午10:32写道:

    The PIIX3/IDE is a PCI device within the PIIX3 chipset, it will be reset
    when the PCI bus it stands on is reset.

    Convert its reset handler into a proper Device reset method.

    Signed-off-by: Philippe Mathieu-Daudé <address@hidden
    <mailto:address@hidden>>
    ---
      hw/ide/piix.c | 8 +++-----
      1 file changed, 3 insertions(+), 5 deletions(-)

    diff --git a/hw/ide/piix.c b/hw/ide/piix.c
    index fba6bc8bff..18b2c3b722 100644
    --- a/hw/ide/piix.c
    +++ b/hw/ide/piix.c
    @@ -30,7 +30,6 @@
      #include "sysemu/block-backend.h"
      #include "sysemu/blockdev.h"
      #include "sysemu/dma.h"
    -#include "sysemu/reset.h"

      #include "hw/ide/pci.h"
      #include "trace.h"
    @@ -103,9 +102,9 @@ static void bmdma_setup_bar(PCIIDEState *d)
          }
      }

    -static void piix3_reset(void *opaque)
    +static void piix3_ide_reset(DeviceState *dev)
      {
    -    PCIIDEState *d = opaque;
    +    PCIIDEState *d = PCI_IDE(dev);
          PCIDevice *pd = PCI_DEVICE(d);
          uint8_t *pci_conf = pd->config;
          int i;
    @@ -154,8 +153,6 @@ static void pci_piix_ide_realize(PCIDevice *dev,
    Error **errp)

          pci_conf[PCI_CLASS_PROG] = 0x80; // legacy ATA mode

    -    qemu_register_reset(piix3_reset, d);
    -
          bmdma_setup_bar(d);
          pci_register_bar(dev, 4, PCI_BASE_ADDRESS_SPACE_IO,
    &d->bmdma_bar);

    @@ -247,6 +244,7 @@ static void piix3_ide_class_init(ObjectClass
    *klass, void *data)
          DeviceClass *dc = DEVICE_CLASS(klass);
          PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);

    +    dc->reset = piix3_ide_reset;
          k->realize = pci_piix_ide_realize;
          k->exit = pci_piix_ide_exitfn;
          k->vendor_id = PCI_VENDOR_ID_INTEL;
--


Shouldn't we also add the reset callback for piix4 ide device?

Yes! You catched a nice bug which would have rendered the Malta board broken on reboot, thanks a lot!

Phil.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]