xref: /openbmc/linux/arch/riscv/mm/pmem.c (revision b79f300c)
1a49ab905SAnup Patel // SPDX-License-Identifier: GPL-2.0
2a49ab905SAnup Patel /*
3a49ab905SAnup Patel  * Copyright (C) 2022 Ventana Micro Systems Inc.
4a49ab905SAnup Patel  */
5a49ab905SAnup Patel 
6a49ab905SAnup Patel #include <linux/export.h>
7a49ab905SAnup Patel #include <linux/libnvdimm.h>
8a49ab905SAnup Patel 
9a49ab905SAnup Patel #include <asm/cacheflush.h>
10*b79f300cSLad Prabhakar #include <asm/dma-noncoherent.h>
11a49ab905SAnup Patel 
arch_wb_cache_pmem(void * addr,size_t size)12a49ab905SAnup Patel void arch_wb_cache_pmem(void *addr, size_t size)
13a49ab905SAnup Patel {
14*b79f300cSLad Prabhakar #ifdef CONFIG_RISCV_NONSTANDARD_CACHE_OPS
15*b79f300cSLad Prabhakar 	if (unlikely(noncoherent_cache_ops.wback)) {
16*b79f300cSLad Prabhakar 		noncoherent_cache_ops.wback(virt_to_phys(addr), size);
17*b79f300cSLad Prabhakar 		return;
18*b79f300cSLad Prabhakar 	}
19*b79f300cSLad Prabhakar #endif
20a49ab905SAnup Patel 	ALT_CMO_OP(clean, addr, size, riscv_cbom_block_size);
21a49ab905SAnup Patel }
22a49ab905SAnup Patel EXPORT_SYMBOL_GPL(arch_wb_cache_pmem);
23a49ab905SAnup Patel 
arch_invalidate_pmem(void * addr,size_t size)24a49ab905SAnup Patel void arch_invalidate_pmem(void *addr, size_t size)
25a49ab905SAnup Patel {
26*b79f300cSLad Prabhakar #ifdef CONFIG_RISCV_NONSTANDARD_CACHE_OPS
27*b79f300cSLad Prabhakar 	if (unlikely(noncoherent_cache_ops.inv)) {
28*b79f300cSLad Prabhakar 		noncoherent_cache_ops.inv(virt_to_phys(addr), size);
29*b79f300cSLad Prabhakar 		return;
30*b79f300cSLad Prabhakar 	}
31*b79f300cSLad Prabhakar #endif
32a49ab905SAnup Patel 	ALT_CMO_OP(inval, addr, size, riscv_cbom_block_size);
33a49ab905SAnup Patel }
34a49ab905SAnup Patel EXPORT_SYMBOL_GPL(arch_invalidate_pmem);
35