|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [qemu-xen-4.3-testing] passthrough: Correctly expose PCH ISA bridge for IGD passthrough
commit 0bd3d991be73031b8d9c07ccf43e5785ca26ca71
Author: G.R <firemeteor.guo@xxxxxxxxx>
AuthorDate: Thu Jul 25 08:11:55 2013 +0000
Commit: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>
CommitDate: Fri Oct 11 19:04:04 2013 +0100
passthrough: Correctly expose PCH ISA bridge for IGD passthrough
The i915 driver probes chip version through PCH ISA bridge device / vendor
ID.
Previously, the PCH ISA bridge is exposed as PCI-PCI bridge in
qemu-xen-trad,
which breaks the assumption of the driver. This change fixes the issue by
correctly exposing the ISA bridge to domU.
Signed-off-by: Rui Guo <firemeteor@xxxxxxxxxxxxxxxxxxxxx>
Tested-by: Rui Guo <firemeteor@xxxxxxxxxxxxxxxxxxxxx>
Acked-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
Acked-by: Jan Beulich <JBeulich@xxxxxxxx>
(cherry picked from commit 73c4ad5a3d065267b878c8ae31ff0b4833f093e4)
---
hw/pci.c | 10 ++++++++++
hw/pci.h | 3 +++
hw/pt-graphics.c | 9 ++++++---
3 files changed, 19 insertions(+), 3 deletions(-)
diff --git a/hw/pci.c b/hw/pci.c
index f051de1..c423285 100644
--- a/hw/pci.c
+++ b/hw/pci.c
@@ -938,6 +938,16 @@ PCIBus *pci_bridge_init(PCIBus *bus, int devfn, uint16_t
vid, uint16_t did,
return s->bus;
}
+PCIBus *pci_isa_bridge_init(PCIBus *bus, int devfn, uint16_t vid, uint16_t did,
+ uint8_t rid, pci_map_irq_fn map_irq, const char
*name)
+{
+ PCIBus *s = pci_bridge_init(bus, devfn, vid, did, rid, map_irq, name);
+
+ pci_config_set_class(s->parent_dev->config, PCI_CLASS_BRIDGE_ISA);
+ s->parent_dev->config[PCI_HEADER_TYPE] = 0x80;
+ return s;
+}
+
int pt_chk_bar_overlap(PCIBus *bus, int devfn, uint32_t addr,
uint32_t size, uint8_t type)
{
diff --git a/hw/pci.h b/hw/pci.h
index edc58b6..cacbdd2 100644
--- a/hw/pci.h
+++ b/hw/pci.h
@@ -271,6 +271,9 @@ void pci_info(void);
PCIBus *pci_bridge_init(PCIBus *bus, int devfn, uint16_t vid, uint16_t did,
uint8_t rid, pci_map_irq_fn map_irq, const char *name);
+PCIBus *pci_isa_bridge_init(PCIBus *bus, int devfn, uint16_t vid, uint16_t did,
+ uint8_t rid, pci_map_irq_fn map_irq, const char
*name);
+
#define NR_PCI_FUNC 8
#define NR_PCI_DEV 32
#define NR_PCI_DEVFN (NR_PCI_FUNC * NR_PCI_DEV)
diff --git a/hw/pt-graphics.c b/hw/pt-graphics.c
index c6f8869..7302b25 100644
--- a/hw/pt-graphics.c
+++ b/hw/pt-graphics.c
@@ -3,6 +3,7 @@
*/
#include "pass-through.h"
+#include "pci.h"
#include "pci/header.h"
#include "pci/pci.h"
@@ -40,9 +41,11 @@ void intel_pch_init(PCIBus *bus)
did = pt_pci_host_read(pci_dev_1f, PCI_DEVICE_ID, 2);
rid = pt_pci_host_read(pci_dev_1f, PCI_REVISION, 1);
- if ( vid == PCI_VENDOR_ID_INTEL )
- pci_bridge_init(bus, PCI_DEVFN(0x1f, 0), vid, did, rid,
- pch_map_irq, "intel_bridge_1f");
+ if (vid == PCI_VENDOR_ID_INTEL) {
+ pci_isa_bridge_init(bus, PCI_DEVFN(0x1f, 0), vid, did, rid,
+ pch_map_irq, "intel_bridge_1f");
+
+ }
}
uint32_t igd_read_opregion(struct pt_dev *pci_dev)
--
generated by git-patchbot for /home/xen/git/qemu-xen-4.3-testing.git
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |