diff options
Diffstat (limited to 'drivers/firmware/efi/arm-init.c')
| -rw-r--r-- | drivers/firmware/efi/arm-init.c | 18 | 
1 files changed, 15 insertions, 3 deletions
| diff --git a/drivers/firmware/efi/arm-init.c b/drivers/firmware/efi/arm-init.c index aa1f743152a2..8714f8c271ba 100644 --- a/drivers/firmware/efi/arm-init.c +++ b/drivers/firmware/efi/arm-init.c @@ -203,7 +203,19 @@ void __init efi_init(void)  	reserve_regions();  	early_memunmap(memmap.map, params.mmap_size); -	memblock_mark_nomap(params.mmap & PAGE_MASK, -			    PAGE_ALIGN(params.mmap_size + -				       (params.mmap & ~PAGE_MASK))); + +	if (IS_ENABLED(CONFIG_ARM)) { +		/* +		 * ARM currently does not allow ioremap_cache() to be called on +		 * memory regions that are covered by struct page. So remove the +		 * UEFI memory map from the linear mapping. +		 */ +		memblock_mark_nomap(params.mmap & PAGE_MASK, +				    PAGE_ALIGN(params.mmap_size + +					       (params.mmap & ~PAGE_MASK))); +	} else { +		memblock_reserve(params.mmap & PAGE_MASK, +				 PAGE_ALIGN(params.mmap_size + +					    (params.mmap & ~PAGE_MASK))); +	}  } | 
