qemu-commits
[Top][All Lists]
Advanced

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

[Qemu-commits] [COMMIT c0b1905] qemu/pci: reset device registers on bus


From: Anthony Liguori
Subject: [Qemu-commits] [COMMIT c0b1905] qemu/pci: reset device registers on bus reset
Date: Mon, 05 Oct 2009 14:53:32 -0000

From: Michael S. Tsirkin <address@hidden>

Reset BARs and a couple of other registers on bus reset, as per PCI
spec.

Signed-off-by: Michael S. Tsirkin <address@hidden>
Signed-off-by: Anthony Liguori <address@hidden>

diff --git a/hw/pci.c b/hw/pci.c
index 2dd7213..e2f88ff 100644
--- a/hw/pci.c
+++ b/hw/pci.c
@@ -92,7 +92,20 @@ static inline int pci_bar(int reg)
 
 static void pci_device_reset(PCIDevice *dev)
 {
+    int r;
+
     memset(dev->irq_state, 0, sizeof dev->irq_state);
+    dev->config[PCI_COMMAND] &= ~(PCI_COMMAND_IO | PCI_COMMAND_MEMORY |
+                                  PCI_COMMAND_MASTER);
+    dev->config[PCI_CACHE_LINE_SIZE] = 0x0;
+    dev->config[PCI_INTERRUPT_LINE] = 0x0;
+    for (r = 0; r < PCI_NUM_REGIONS; ++r) {
+        if (!dev->io_regions[r].size) {
+            continue;
+        }
+        pci_set_long(dev->config + pci_bar(r), dev->io_regions[r].type);
+    }
+    pci_update_mappings(dev);
 }
 
 static void pci_bus_reset(void *opaque)




reply via email to

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