• Mikel Rychliski's avatar
    PCI: Use ioremap(), not phys_to_virt() for platform ROM · 72e0ef0e
    Mikel Rychliski authored
    On some EFI systems, the video BIOS is provided by the EFI firmware.  The
    boot stub code stores the physical address of the ROM image in pdev->rom.
    Currently we attempt to access this pointer using phys_to_virt(), which
    doesn't work with CONFIG_HIGHMEM.
    
    On these systems, attempting to load the radeon module on a x86_32 kernel
    can result in the following:
    
      BUG: unable to handle page fault for address: 3e8ed03c
      #PF: supervisor read access in kernel mode
      #PF: error_code(0x0000) - not-present page
      *pde = 00000000
      Oops: 0000 [#1] PREEMPT SMP
      CPU: 0 PID: 317 Comm: systemd-udevd Not tainted 5.6.0-rc3-next-20200228 #2
      Hardware name: Apple Computer, Inc. MacPro1,1/Mac-F4208DC8, BIOS     MP11.88Z.005C.B08.0707021221 07/02/07
      EIP: radeon_get_bios+0x5ed/0xe50 [radeon]
      Code: 00 00 84 c0 0f 85 12 fd ff ff c7 87 64 01 00 00 00 00 00 00 8b 47 08 8b 55 b0 e8 1e 83 e1 d6 85 c0 74 1a 8b 55 c0 85 d2 74 13 <80> 38 55 75 0e 80 78 01 aa 0f 84 a4 03 00 00...
    72e0ef0e
amdgpu_bios.c 10.6 KB