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 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 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