1 | // SPDX-License-Identifier: GPL-2.0-only |
---|---|
2 | |
3 | #include <linux/mm.h> |
4 | #include <linux/io.h> |
5 | |
6 | void __iomem *ioremap_prot(phys_addr_t phys_addr, size_t size, |
7 | unsigned long prot) |
8 | { |
9 | unsigned long last_addr = phys_addr + size - 1; |
10 | |
11 | /* Don't allow outside PHYS_MASK */ |
12 | if (last_addr & ~PHYS_MASK) |
13 | return NULL; |
14 | |
15 | /* Don't allow RAM to be mapped. */ |
16 | if (WARN_ON(pfn_is_map_memory(__phys_to_pfn(phys_addr)))) |
17 | return NULL; |
18 | |
19 | return generic_ioremap_prot(phys_addr, size, __pgprot(prot)); |
20 | } |
21 | EXPORT_SYMBOL(ioremap_prot); |
22 | |
23 | /* |
24 | * Must be called after early_fixmap_init |
25 | */ |
26 | void __init early_ioremap_init(void) |
27 | { |
28 | early_ioremap_setup(); |
29 | } |
30 | |
31 | bool arch_memremap_can_ram_remap(resource_size_t offset, size_t size, |
32 | unsigned long flags) |
33 | { |
34 | unsigned long pfn = PHYS_PFN(offset); |
35 | |
36 | return pfn_is_map_memory(pfn); |
37 | } |
38 |