diff options
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_bios.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_bios.c b/drivers/gpu/drm/radeon/radeon_bios.c index 63ccb8fa799c..d27e4ccb848c 100644 --- a/drivers/gpu/drm/radeon/radeon_bios.c +++ b/drivers/gpu/drm/radeon/radeon_bios.c | |||
| @@ -76,7 +76,7 @@ static bool igp_read_bios_from_vram(struct radeon_device *rdev) | |||
| 76 | 76 | ||
| 77 | static bool radeon_read_bios(struct radeon_device *rdev) | 77 | static bool radeon_read_bios(struct radeon_device *rdev) |
| 78 | { | 78 | { |
| 79 | uint8_t __iomem *bios; | 79 | uint8_t __iomem *bios, val1, val2; |
| 80 | size_t size; | 80 | size_t size; |
| 81 | 81 | ||
| 82 | rdev->bios = NULL; | 82 | rdev->bios = NULL; |
| @@ -86,15 +86,19 @@ static bool radeon_read_bios(struct radeon_device *rdev) | |||
| 86 | return false; | 86 | return false; |
| 87 | } | 87 | } |
| 88 | 88 | ||
| 89 | if (size == 0 || bios[0] != 0x55 || bios[1] != 0xaa) { | 89 | val1 = readb(&bios[0]); |
| 90 | val2 = readb(&bios[1]); | ||
| 91 | |||
| 92 | if (size == 0 || val1 != 0x55 || val2 != 0xaa) { | ||
| 90 | pci_unmap_rom(rdev->pdev, bios); | 93 | pci_unmap_rom(rdev->pdev, bios); |
| 91 | return false; | 94 | return false; |
| 92 | } | 95 | } |
| 93 | rdev->bios = kmemdup(bios, size, GFP_KERNEL); | 96 | rdev->bios = kzalloc(size, GFP_KERNEL); |
| 94 | if (rdev->bios == NULL) { | 97 | if (rdev->bios == NULL) { |
| 95 | pci_unmap_rom(rdev->pdev, bios); | 98 | pci_unmap_rom(rdev->pdev, bios); |
| 96 | return false; | 99 | return false; |
| 97 | } | 100 | } |
| 101 | memcpy_fromio(rdev->bios, bios, size); | ||
| 98 | pci_unmap_rom(rdev->pdev, bios); | 102 | pci_unmap_rom(rdev->pdev, bios); |
| 99 | return true; | 103 | return true; |
| 100 | } | 104 | } |
