From: Ian Jackson Date: Thu, 4 Dec 2008 10:40:03 +0000 (+0000) Subject: fix invisibility of PCI Option ROM X-Git-Tag: t.master-before-merge~48^2~2 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=46872881b3b44b8d2b3d386690371976f6bc5085;p=qemu-xen-4.0-testing.git fix invisibility of PCI Option ROM If 'lspci -v' command on Dom0 shows '[virtual]' as follows, the option ROM can't be read by the guest. $ lspci -v -s 0:1 ... [virtual] Expansion ROM at fdb00000 [disabled] [size=256K] Signed-off-by: Kouya Shimura --- diff --git a/hw/pass-through.c b/hw/pass-through.c index f0760877..d280ff6b 100644 --- a/hw/pass-through.c +++ b/hw/pass-through.c @@ -1405,6 +1405,15 @@ static int pt_register_regions(struct pt_dev *assigned_device) /* Register expansion ROM address */ if ( pci_dev->rom_base_addr && pci_dev->rom_size ) { + + /* Re-set BAR reported by OS, otherwise ROM can't be read. */ + bar_data = pci_read_long(pci_dev, PCI_ROM_ADDRESS); + if ( (bar_data & PCI_ROM_ADDRESS_MASK) == 0 ) + { + bar_data |= (pci_dev->rom_base_addr & PCI_ROM_ADDRESS_MASK); + pci_write_long(pci_dev, PCI_ROM_ADDRESS, bar_data); + } + assigned_device->bases[PCI_ROM_SLOT].e_physbase = pci_dev->rom_base_addr; assigned_device->bases[PCI_ROM_SLOT].access.maddr =