• Bjorn Helgaas's avatar
    MIPS: Loongson 3: Keep CPU physical (not virtual) addresses in shadow ROM resource · 97f47e73
    Bjorn Helgaas authored
    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: default avatarBjorn Helgaas <bhelgaas@google.com>
    97f47e73
fixup-loongson3.c 2.22 KB