^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) // SPDX-License-Identifier: GPL-2.0+
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) #include <linux/pci.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) #include <loongson.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) static void pci_fixup_radeon(struct pci_dev *pdev)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) struct resource *res = &pdev->resource[PCI_ROM_RESOURCE];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) if (res->start)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) if (!loongson_sysconf.vgabios_addr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) pci_disable_rom(pdev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) if (res->parent)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) release_resource(res);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) res->start = virt_to_phys((void *) loongson_sysconf.vgabios_addr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) res->end = res->start + 256*1024 - 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) res->flags = IORESOURCE_MEM | IORESOURCE_ROM_SHADOW |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) IORESOURCE_PCI_FIXED;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) dev_info(&pdev->dev, "BAR %d: assigned %pR for Radeon ROM\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) PCI_ROM_RESOURCE, res);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) DECLARE_PCI_FIXUP_CLASS_FINAL(PCI_VENDOR_ID_ATI, 0x9615,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) PCI_CLASS_DISPLAY_VGA, 8, pci_fixup_radeon);