|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 2/3] V4 qemu-xen-trad: Correctly expose PCH ISA bridge for IGD passthrough
>>> On 17.06.13 at 14:42, "G.R." <firemeteor@xxxxxxxxxxxxxxxxxxxxx> wrote:
> 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.
>
> Note the PIIX3 ISA bridge is still present on the bus (dropping it seems
> break qemu all-together), i915 driver still need to be updated to handle
> this.
>
> Change since last version:
> 1. Introduce helper function to avoid exposing PCI_Bus / PCI_Bridge
> definition to public.
>
> Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>,
> Rui Guo <firemeteor@xxxxxxxxxxxxxxxxxxxxx>
> Tested-by: Rui Guo <firemeteor@xxxxxxxxxxxxxxxxxxxxx>
I'm fine with this version, but does the above indeed reflect
reality? I.e. wasn't it you who wrote the patch in its current
form?
Jan
> --- 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)
> {
> --- 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)
> --- 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)
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |