From 46872881b3b44b8d2b3d386690371976f6bc5085 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Thu, 4 Dec 2008 10:40:03 +0000 Subject: [PATCH] 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 --- hw/pass-through.c | 9 +++++++++ 1 file changed, 9 insertions(+) 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 = -- 2.39.5