^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) // SPDX-License-Identifier: GPL-2.0-only
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) #include <linux/io.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) #include <ioremap.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) void __iomem *ioremap_prot(phys_addr_t offset, unsigned long size,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) unsigned long prot_val)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) unsigned long flags = prot_val & _CACHE_MASK;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) u64 base = (flags == _CACHE_UNCACHED ? IO_BASE : UNCAC_BASE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) void __iomem *addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) addr = plat_ioremap(offset, size, flags);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) if (!addr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) addr = (void __iomem *)(unsigned long)(base + offset);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) return addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) EXPORT_SYMBOL(ioremap_prot);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) void iounmap(const volatile void __iomem *addr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) plat_iounmap(addr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) EXPORT_SYMBOL(iounmap);