[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 2/2] xen-pciback: Allow enabling/disabling expansion ROM
From: Dwayne Litzenberger <dlitz@xxxxxxxxx> Newer AMD GPUs store their initialization routines as bytecode on the ROM. This fixes the following initialization error inside the VM when doing PCI passthrough: radeon 0000:00:05.0: Invalid PCI ROM header signature: expecting 0xaa55, got 0xffff radeon 0000:00:05.0: Invalid PCI ROM header signature: expecting 0xaa55, got 0xffff [drm:radeon_get_bios [radeon]] *ERROR* Unable to locate a BIOS ROM radeon 0000:00:05.0: Fatal error during GPU init Signed-off-by: Dwayne Litzenberger <dlitz@xxxxxxxxx> --- drivers/xen/xen-pciback/conf_space_header.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/drivers/xen/xen-pciback/conf_space_header.c b/drivers/xen/xen-pciback/conf_space_header.c index 697d0a8..bc145d3 100644 --- a/drivers/xen/xen-pciback/conf_space_header.c +++ b/drivers/xen/xen-pciback/conf_space_header.c @@ -150,21 +150,21 @@ static int rom_write(struct pci_dev *dev, int offset, u32 value, void *data) if ((value | ~PCI_ROM_ADDRESS_MASK) == ~0U) bar->which = 1; else { - u32 tmpval; - err = pci_read_config_dword(dev, offset, &tmpval); + u32 newval = bar->val; + + /* Allow enabling/disabling rom, if present */ + if (newval & PCI_ROM_ADDRESS_MASK) { + newval &= ~PCI_ROM_ADDRESS_ENABLE; + newval |= value & PCI_ROM_ADDRESS_ENABLE; + } + + err = pci_write_config_dword(dev, offset, newval); if (err) goto out; - if (tmpval != bar->val && value == bar->val) { - /* Allow restoration of bar value. */ - err = pci_write_config_dword(dev, offset, bar->val); - if (err) - goto out; - } + bar->val = newval; bar->which = 0; } - /* Do we need to support enabling/disabling the rom address here? */ - out: return err; } -- git-series 0.9.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |