xref: /kernel/linux/linux-6.6/arch/xtensa/mm/ioremap.c (revision 62306a36)
162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * ioremap implementation.
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright (C) 2015 Cadence Design Systems Inc.
662306a36Sopenharmony_ci */
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#include <linux/io.h>
962306a36Sopenharmony_ci#include <linux/pgtable.h>
1062306a36Sopenharmony_ci#include <asm/cacheflush.h>
1162306a36Sopenharmony_ci#include <asm/io.h>
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_civoid __iomem *ioremap_prot(phys_addr_t phys_addr, size_t size,
1462306a36Sopenharmony_ci			   unsigned long prot)
1562306a36Sopenharmony_ci{
1662306a36Sopenharmony_ci	unsigned long pfn = __phys_to_pfn((phys_addr));
1762306a36Sopenharmony_ci	WARN_ON(pfn_valid(pfn));
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ci	return generic_ioremap_prot(phys_addr, size, __pgprot(prot));
2062306a36Sopenharmony_ci}
2162306a36Sopenharmony_ciEXPORT_SYMBOL(ioremap_prot);
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_civoid iounmap(volatile void __iomem *addr)
2462306a36Sopenharmony_ci{
2562306a36Sopenharmony_ci	unsigned long va = (unsigned long) addr;
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ci	if ((va >= XCHAL_KIO_CACHED_VADDR &&
2862306a36Sopenharmony_ci	      va - XCHAL_KIO_CACHED_VADDR < XCHAL_KIO_SIZE) ||
2962306a36Sopenharmony_ci	    (va >= XCHAL_KIO_BYPASS_VADDR &&
3062306a36Sopenharmony_ci	      va - XCHAL_KIO_BYPASS_VADDR < XCHAL_KIO_SIZE))
3162306a36Sopenharmony_ci		return;
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ci	generic_iounmap(addr);
3462306a36Sopenharmony_ci}
3562306a36Sopenharmony_ciEXPORT_SYMBOL(iounmap);
36