| // SPDX-License-Identifier: GPL-2.0-only |
| /* |
| * ioremap implementation. |
| * |
| * Copyright (C) 2015 Cadence Design Systems Inc. |
| */ |
| |
| #include <linux/io.h> |
| #include <linux/pgtable.h> |
| #include <asm/cacheflush.h> |
| #include <asm/io.h> |
| |
| void __iomem *ioremap_prot(phys_addr_t phys_addr, size_t size, |
| unsigned long prot) |
| { |
| unsigned long pfn = __phys_to_pfn((phys_addr)); |
| WARN_ON(pfn_valid(pfn)); |
| |
| return generic_ioremap_prot(phys_addr, size, __pgprot(prot)); |
| } |
| EXPORT_SYMBOL(ioremap_prot); |
| |
| void iounmap(volatile void __iomem *addr) |
| { |
| unsigned long va = (unsigned long) addr; |
| |
| if ((va >= XCHAL_KIO_CACHED_VADDR && |
| va - XCHAL_KIO_CACHED_VADDR < XCHAL_KIO_SIZE) || |
| (va >= XCHAL_KIO_BYPASS_VADDR && |
| va - XCHAL_KIO_BYPASS_VADDR < XCHAL_KIO_SIZE)) |
| return; |
| |
| generic_iounmap(addr); |
| } |
| EXPORT_SYMBOL(iounmap); |