diff --git a/hw/pci.c b/hw/pci.c
-index ec8b0c4..5a65d4c 100644
+index ec8b0c4..0453f8c 100644
--- a/hw/pci.c
+++ b/hw/pci.c
-@@ -636,7 +636,8 @@ uint32_t pci_data_read(void *opaque, uint32_t addr, int len)
+@@ -635,9 +635,12 @@ uint32_t pci_data_read(void *opaque, uint32_t addr, int len)
+ if (config_addr == 0xa0 && len == 2)
val = pt_pci_host_read_word(0, 0, 0, 0xa0);
}
- else if (vga_passthrough && pci_dev->devfn == 0x10 && // intel graphic card
+- else if (vga_passthrough && pci_dev->devfn == 0x10 && // intel graphic card
- config_addr == 0xfc) // OpRegion address
-+ ( config_addr == 0xfc /* OpRegion address */ ||
-+ config_addr == 0x90 /*temporarily disable msi capabilities for iGfx*/ ))
- val = 0; // force to fall back to SMI mode
+- val = 0; // force to fall back to SMI mode
++ /* intel graphic card and OpRegion address */
++ else if ( vga_passthrough && pci_dev->devfn == 0x10 && config_addr == 0xfc )
++ val = 0; // force to fall back to SMI mode
++ /* For intel graphics card, temporarily disable msi capabilities for iGfx */
++ else if ( vga_passthrough && pci_dev->devfn == 0x10 && config_addr == 0x34 )
++ val = 0xd0; /* skip msi and chain right to power management capabilities register */
else
val = pci_dev->config_read(pci_dev, config_addr, len);
+ #if defined(DEBUG_PCI)