18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 28c2ecf20Sopenharmony_ci#include <linux/io.h> 38c2ecf20Sopenharmony_ci#include <ioremap.h> 48c2ecf20Sopenharmony_ci 58c2ecf20Sopenharmony_civoid __iomem *ioremap_prot(phys_addr_t offset, unsigned long size, 68c2ecf20Sopenharmony_ci unsigned long prot_val) 78c2ecf20Sopenharmony_ci{ 88c2ecf20Sopenharmony_ci unsigned long flags = prot_val & _CACHE_MASK; 98c2ecf20Sopenharmony_ci u64 base = (flags == _CACHE_UNCACHED ? IO_BASE : UNCAC_BASE); 108c2ecf20Sopenharmony_ci void __iomem *addr; 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_ci addr = plat_ioremap(offset, size, flags); 138c2ecf20Sopenharmony_ci if (!addr) 148c2ecf20Sopenharmony_ci addr = (void __iomem *)(unsigned long)(base + offset); 158c2ecf20Sopenharmony_ci return addr; 168c2ecf20Sopenharmony_ci} 178c2ecf20Sopenharmony_ciEXPORT_SYMBOL(ioremap_prot); 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_civoid iounmap(const volatile void __iomem *addr) 208c2ecf20Sopenharmony_ci{ 218c2ecf20Sopenharmony_ci plat_iounmap(addr); 228c2ecf20Sopenharmony_ci} 238c2ecf20Sopenharmony_ciEXPORT_SYMBOL(iounmap); 24