File Index
Files and directories
Sign in
FILE

ioremap.c

File preview with syntax highlighting.

linux-6.19.14/arch/arm64/mm/ioremap.c C
 1// SPDX-License-Identifier: GPL-2.0-only
 2
 3#include <linux/mm.h>
 4#include <linux/io.h>
 5
 6static ioremap_prot_hook_t ioremap_prot_hook;
 7
 8int arm64_ioremap_prot_hook_register(ioremap_prot_hook_t hook)
 9{
10	if (WARN_ON(ioremap_prot_hook))
11		return -EBUSY;
12
13	ioremap_prot_hook = hook;
14	return 0;
15}
16
17void __iomem *__ioremap_prot(phys_addr_t phys_addr, size_t size,
18			     pgprot_t pgprot)
19{
20	unsigned long last_addr = phys_addr + size - 1;
21
22	/* Don't allow outside PHYS_MASK */
23	if (last_addr & ~PHYS_MASK)
24		return NULL;
25
26	/* Don't allow RAM to be mapped. */
27	if (WARN_ON(pfn_is_map_memory(__phys_to_pfn(phys_addr))))
28		return NULL;
29
30	/*
31	 * If a hook is registered (e.g. for confidential computing
32	 * purposes), call that now and barf if it fails.
33	 */
34	if (unlikely(ioremap_prot_hook) &&
35	    WARN_ON(ioremap_prot_hook(phys_addr, size, &pgprot))) {
36		return NULL;
37	}
38
39	return generic_ioremap_prot(phys_addr, size, pgprot);
40}
41EXPORT_SYMBOL(__ioremap_prot);
42
43/*
44 * Must be called after early_fixmap_init
45 */
46void __init early_ioremap_init(void)
47{
48	early_ioremap_setup();
49}
50
51bool arch_memremap_can_ram_remap(resource_size_t offset, size_t size,
52				 unsigned long flags)
53{
54	unsigned long pfn = PHYS_PFN(offset);
55
56	return pfn_is_map_memory(pfn);
57}
~/ Read-only file preview.