1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
29e5c33d7SMark Salter #ifndef _ASM_EARLY_IOREMAP_H_
39e5c33d7SMark Salter #define _ASM_EARLY_IOREMAP_H_
49e5c33d7SMark Salter 
59e5c33d7SMark Salter #include <linux/types.h>
69e5c33d7SMark Salter 
79e5c33d7SMark Salter /*
89e5c33d7SMark Salter  * early_ioremap() and early_iounmap() are for temporary early boot-time
99e5c33d7SMark Salter  * mappings, before the real ioremap() is functional.
109e5c33d7SMark Salter  */
119e5c33d7SMark Salter extern void __iomem *early_ioremap(resource_size_t phys_addr,
129e5c33d7SMark Salter 				   unsigned long size);
139e5c33d7SMark Salter extern void *early_memremap(resource_size_t phys_addr,
149e5c33d7SMark Salter 			    unsigned long size);
152592dbbbSJuergen Gross extern void *early_memremap_ro(resource_size_t phys_addr,
162592dbbbSJuergen Gross 			       unsigned long size);
17f88a68faSTom Lendacky extern void *early_memremap_prot(resource_size_t phys_addr,
18f88a68faSTom Lendacky 				 unsigned long size, unsigned long prot_val);
199e5c33d7SMark Salter extern void early_iounmap(void __iomem *addr, unsigned long size);
209e5c33d7SMark Salter extern void early_memunmap(void *addr, unsigned long size);
219e5c33d7SMark Salter 
229e5c33d7SMark Salter #if defined(CONFIG_GENERIC_EARLY_IOREMAP) && defined(CONFIG_MMU)
239e5c33d7SMark Salter /* Arch-specific initialization */
249e5c33d7SMark Salter extern void early_ioremap_init(void);
259e5c33d7SMark Salter 
269e5c33d7SMark Salter /* Generic initialization called by architecture code */
279e5c33d7SMark Salter extern void early_ioremap_setup(void);
289e5c33d7SMark Salter 
299e5c33d7SMark Salter /*
309e5c33d7SMark Salter  * Called as last step in paging_init() so library can act
319e5c33d7SMark Salter  * accordingly for subsequent map/unmap requests.
329e5c33d7SMark Salter  */
339e5c33d7SMark Salter extern void early_ioremap_reset(void);
349e5c33d7SMark Salter 
356b0f68e3SMark Salter /*
366b0f68e3SMark Salter  * Early copy from unmapped memory to kernel mapped memory.
376b0f68e3SMark Salter  */
386b0f68e3SMark Salter extern void copy_from_early_mem(void *dest, phys_addr_t src,
396b0f68e3SMark Salter 				unsigned long size);
406b0f68e3SMark Salter 
419e5c33d7SMark Salter #else
early_ioremap_init(void)429e5c33d7SMark Salter static inline void early_ioremap_init(void) { }
early_ioremap_setup(void)439e5c33d7SMark Salter static inline void early_ioremap_setup(void) { }
early_ioremap_reset(void)449e5c33d7SMark Salter static inline void early_ioremap_reset(void) { }
459e5c33d7SMark Salter #endif
469e5c33d7SMark Salter 
479e5c33d7SMark Salter #endif /* _ASM_EARLY_IOREMAP_H_ */
48