Messages in this thread Patch in this message | | | From | Marek Marczykowski-Górecki <> | Subject | [PATCH 2/2] xen-pciback: Allow enabling/disabling expansion ROM | Date | Sun, 2 Dec 2018 18:47:33 +0100 |
| |
From: Dwayne Litzenberger <dlitz@dlitz.net>
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@dlitz.net> --- 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
| |