diff options
Diffstat (limited to 'arch/x86/platform/efi/efi-bgrt.c')
| -rw-r--r-- | arch/x86/platform/efi/efi-bgrt.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/arch/x86/platform/efi/efi-bgrt.c b/arch/x86/platform/efi/efi-bgrt.c index 7145ec63c520..f15103dff4b4 100644 --- a/arch/x86/platform/efi/efi-bgrt.c +++ b/arch/x86/platform/efi/efi-bgrt.c | |||
| @@ -42,14 +42,15 @@ void __init efi_bgrt_init(void) | |||
| 42 | 42 | ||
| 43 | if (bgrt_tab->header.length < sizeof(*bgrt_tab)) | 43 | if (bgrt_tab->header.length < sizeof(*bgrt_tab)) |
| 44 | return; | 44 | return; |
| 45 | if (bgrt_tab->version != 1) | 45 | if (bgrt_tab->version != 1 || bgrt_tab->status != 1) |
| 46 | return; | 46 | return; |
| 47 | if (bgrt_tab->image_type != 0 || !bgrt_tab->image_address) | 47 | if (bgrt_tab->image_type != 0 || !bgrt_tab->image_address) |
| 48 | return; | 48 | return; |
| 49 | 49 | ||
| 50 | image = efi_lookup_mapped_addr(bgrt_tab->image_address); | 50 | image = efi_lookup_mapped_addr(bgrt_tab->image_address); |
| 51 | if (!image) { | 51 | if (!image) { |
| 52 | image = ioremap(bgrt_tab->image_address, sizeof(bmp_header)); | 52 | image = early_memremap(bgrt_tab->image_address, |
| 53 | sizeof(bmp_header)); | ||
| 53 | ioremapped = true; | 54 | ioremapped = true; |
| 54 | if (!image) | 55 | if (!image) |
| 55 | return; | 56 | return; |
| @@ -57,7 +58,7 @@ void __init efi_bgrt_init(void) | |||
| 57 | 58 | ||
| 58 | memcpy_fromio(&bmp_header, image, sizeof(bmp_header)); | 59 | memcpy_fromio(&bmp_header, image, sizeof(bmp_header)); |
| 59 | if (ioremapped) | 60 | if (ioremapped) |
| 60 | iounmap(image); | 61 | early_iounmap(image, sizeof(bmp_header)); |
| 61 | bgrt_image_size = bmp_header.size; | 62 | bgrt_image_size = bmp_header.size; |
| 62 | 63 | ||
| 63 | bgrt_image = kmalloc(bgrt_image_size, GFP_KERNEL); | 64 | bgrt_image = kmalloc(bgrt_image_size, GFP_KERNEL); |
| @@ -65,7 +66,8 @@ void __init efi_bgrt_init(void) | |||
| 65 | return; | 66 | return; |
| 66 | 67 | ||
| 67 | if (ioremapped) { | 68 | if (ioremapped) { |
| 68 | image = ioremap(bgrt_tab->image_address, bmp_header.size); | 69 | image = early_memremap(bgrt_tab->image_address, |
| 70 | bmp_header.size); | ||
| 69 | if (!image) { | 71 | if (!image) { |
| 70 | kfree(bgrt_image); | 72 | kfree(bgrt_image); |
| 71 | bgrt_image = NULL; | 73 | bgrt_image = NULL; |
| @@ -75,5 +77,5 @@ void __init efi_bgrt_init(void) | |||
| 75 | 77 | ||
| 76 | memcpy_fromio(bgrt_image, image, bgrt_image_size); | 78 | memcpy_fromio(bgrt_image, image, bgrt_image_size); |
| 77 | if (ioremapped) | 79 | if (ioremapped) |
| 78 | iounmap(image); | 80 | early_iounmap(image, bmp_header.size); |
| 79 | } | 81 | } |
