diff options
author | Bjorn Helgaas <bhelgaas@google.com> | 2016-03-03 04:42:04 +0100 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2016-03-12 13:00:29 +0100 |
commit | 97f47e73c4a0dc2519276cd63274696c850e0613 (patch) | |
tree | 16905743f6759d80a8c3386d8860b9f28bc9d0e7 /drivers/pci/rom.c | |
parent | MIPS: Loongson 3: Use temporary struct resource * to avoid repetition (diff) | |
download | linux-97f47e73c4a0dc2519276cd63274696c850e0613.tar.xz linux-97f47e73c4a0dc2519276cd63274696c850e0613.zip |
MIPS: Loongson 3: Keep CPU physical (not virtual) addresses in shadow ROM resource
Loongson 3 used the IORESOURCE_ROM_COPY flag for its ROM resource. There
are two problems with this:
- When IORESOURCE_ROM_COPY is set, pci_map_rom() assumes the resource
contains virtual addresses, so it doesn't ioremap the resource. This
implies loongson_sysconf.vgabios_addr is a virtual address. That's a
problem because resources should contain CPU *physical* addresses not
virtual addresses.
- When IORESOURCE_ROM_COPY is set, pci_cleanup_rom() calls kfree() on the
resource. We did not kmalloc() the loongson_sysconf.vgabios_addr area,
so it is incorrect to kfree() it.
If we're using a shadow copy in RAM for the Loongson 3 VGA BIOS area,
disable the ROM BAR and release the address space it was consuming.
Use IORESOURCE_ROM_SHADOW instead of IORESOURCE_ROM_COPY. This means the
struct resource contains CPU physical addresses, and pci_map_rom() will
ioremap() it as needed.
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Diffstat (limited to 'drivers/pci/rom.c')
0 files changed, 0 insertions, 0 deletions