Mikel Rychliski 72e0ef0e5f PCI: Use ioremap(), not phys_to_virt() for platform ROM
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 8d 74 26 00 68 dc 06
  EAX: 3e8ed03c EBX: 00000000 ECX: 3e8ed03c EDX: 00010000
  ESI: 00040000 EDI: eec04000 EBP: eef3fc60 ESP: eef3fbe0
  DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 EFLAGS: 00010206
  CR0: 80050033 CR2: 3e8ed03c CR3: 2ec77000 CR4: 000006d0
  Call Trace:
   r520_init+0x26/0x240 [radeon]
   radeon_device_init+0x533/0xa50 [radeon]
   radeon_driver_load_kms+0x80/0x220 [radeon]
   drm_dev_register+0xa7/0x180 [drm]
   radeon_pci_probe+0x10f/0x1a0 [radeon]
   pci_device_probe+0xd4/0x140

Fix the issue by updating all drivers which can access a platform provided
ROM. Instead of calling the helper function pci_platform_rom() which uses
phys_to_virt(), call ioremap() directly on the pdev->rom.

radeon_read_platform_bios() previously directly accessed an __iomem
pointer. Avoid this by calling memcpy_fromio() instead of kmemdup().

pci_platform_rom() now has no remaining callers, so remove it.

Link: https://lore.kernel.org/r/20200319021623.5426-1-mikel@mikelr.com
Signed-off-by: Mikel Rychliski <mikel@mikelr.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
2020-03-30 09:52:23 -05:00
..
2019-08-09 09:15:05 +02:00
2020-02-08 14:04:19 -08:00
2019-09-16 09:56:27 -07:00
2019-12-11 09:12:38 +01:00
2019-11-12 11:43:29 -05:00
2020-02-04 07:17:41 +00:00
2020-01-31 14:40:36 -08:00
2020-01-27 17:49:15 +01:00
2019-07-08 09:54:55 -07:00
2020-01-27 14:35:32 +01:00
2020-02-08 14:04:19 -08:00
2020-01-23 12:37:18 +00:00
2020-02-07 17:39:56 -08:00
2020-02-04 03:05:26 +00:00
2020-02-04 03:05:26 +00:00
2020-01-29 18:16:16 -08:00
2019-11-26 10:26:26 +01:00
2020-02-08 14:04:19 -08:00
2020-01-23 00:35:50 +01:00
2019-09-23 11:21:04 -07:00
2019-10-09 19:33:43 -07:00
2019-06-24 10:23:16 +02:00
2019-11-28 11:16:43 -08:00
2020-01-27 10:55:50 -08:00
2019-12-03 11:20:37 +01:00
2019-09-05 19:52:33 -06:00
2020-01-27 11:09:31 +01:00
2020-01-17 16:48:07 -08:00
2020-01-18 09:19:18 -05:00
2020-01-13 21:48:42 +01:00
2019-12-11 12:22:38 -08:00
2019-11-20 09:40:10 +01:00
2019-11-27 11:06:20 -08:00
2019-12-01 12:59:06 -08:00
2019-09-05 11:40:54 +02:00
2020-01-15 16:21:28 +10:00
2019-11-08 08:46:49 -08:00
2019-07-05 21:34:50 +02:00
2019-06-26 13:19:46 -07:00
2019-10-04 12:31:46 -07:00
2019-10-15 13:34:25 +02:00
2019-11-11 09:02:56 +01:00
2020-02-09 12:11:12 -08:00
2019-12-04 19:44:14 -08:00
2020-01-31 17:33:54 +00:00
2019-12-11 09:12:38 +01:00
2019-07-08 19:36:47 -07:00
2019-09-02 11:43:54 +01:00
2020-02-06 06:11:50 +00:00
2019-10-15 20:40:06 -07:00
2019-09-05 12:32:05 +02:00
2019-09-29 10:33:41 -07:00
2019-12-06 10:28:09 -08:00
2020-02-04 07:21:04 +00:00
2020-02-04 07:24:48 +00:00
2020-02-01 10:01:52 -08:00
2019-12-09 10:55:03 +01:00
2019-08-14 15:30:35 +02:00
2019-08-08 09:09:25 +02:00
2019-11-14 19:06:47 -08:00
2020-01-15 10:54:33 -05:00
2020-01-14 12:20:48 +01:00
2019-12-11 16:37:02 +08:00
2019-11-13 19:09:47 +08:00
2020-01-16 17:09:18 +01:00
2020-01-15 16:30:28 +00:00
2019-07-16 19:23:25 -07:00
2019-12-06 10:47:28 +01:00
2020-01-13 18:16:43 -08:00
2020-01-10 14:00:58 -08:00
2020-01-24 10:24:31 -08:00
2020-01-24 10:24:31 -08:00
2019-12-05 11:43:31 -08:00
2019-11-14 13:07:48 +08:00
2020-01-29 19:38:34 -08:00
2019-10-10 14:55:24 -07:00
2020-02-04 03:05:24 +00:00
2019-11-13 12:15:34 -08:00
2020-01-13 18:31:48 -08:00
2020-02-04 03:05:26 +00:00
2020-01-29 19:38:34 -08:00
2019-11-13 00:33:21 +11:00
2019-08-30 07:27:17 -07:00
2019-08-01 20:51:22 +02:00
2019-07-31 19:03:35 +02:00
2020-02-06 07:12:11 +00:00
2019-12-01 14:00:59 -08:00
2020-01-14 12:20:48 +01:00
2019-11-14 12:20:02 +08:00
2019-07-14 16:51:47 -07:00
2020-01-17 22:33:37 -05:00