1 // SPDX-License-Identifier: GPL-2.0-only
6 static ioremap_prot_hook_t ioremap_prot_hook
;
8 int arm64_ioremap_prot_hook_register(ioremap_prot_hook_t hook
)
10 if (WARN_ON(ioremap_prot_hook
))
13 ioremap_prot_hook
= hook
;
17 void __iomem
*ioremap_prot(phys_addr_t phys_addr
, size_t size
,
20 unsigned long last_addr
= phys_addr
+ size
- 1;
21 pgprot_t pgprot
= __pgprot(prot
);
23 /* Don't allow outside PHYS_MASK */
24 if (last_addr
& ~PHYS_MASK
)
27 /* Don't allow RAM to be mapped. */
28 if (WARN_ON(pfn_is_map_memory(__phys_to_pfn(phys_addr
))))
32 * If a hook is registered (e.g. for confidential computing
33 * purposes), call that now and barf if it fails.
35 if (unlikely(ioremap_prot_hook
) &&
36 WARN_ON(ioremap_prot_hook(phys_addr
, size
, &pgprot
))) {
40 return generic_ioremap_prot(phys_addr
, size
, pgprot
);
42 EXPORT_SYMBOL(ioremap_prot
);
45 * Must be called after early_fixmap_init
47 void __init
early_ioremap_init(void)
49 early_ioremap_setup();
52 bool arch_memremap_can_ram_remap(resource_size_t offset
, size_t size
,
55 unsigned long pfn
= PHYS_PFN(offset
);
57 return pfn_is_map_memory(pfn
);