pmem.c 836 B

12345678910111213141516171819202122232425262728293031323334
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Copyright (C) 2022 Ventana Micro Systems Inc.
  4. */
  5. #include <linux/export.h>
  6. #include <linux/libnvdimm.h>
  7. #include <asm/cacheflush.h>
  8. #include <asm/dma-noncoherent.h>
  9. void arch_wb_cache_pmem(void *addr, size_t size)
  10. {
  11. #ifdef CONFIG_RISCV_NONSTANDARD_CACHE_OPS
  12. if (unlikely(noncoherent_cache_ops.wback)) {
  13. noncoherent_cache_ops.wback(virt_to_phys(addr), size);
  14. return;
  15. }
  16. #endif
  17. ALT_CMO_OP(CLEAN, addr, size, riscv_cbom_block_size);
  18. }
  19. EXPORT_SYMBOL_GPL(arch_wb_cache_pmem);
  20. void arch_invalidate_pmem(void *addr, size_t size)
  21. {
  22. #ifdef CONFIG_RISCV_NONSTANDARD_CACHE_OPS
  23. if (unlikely(noncoherent_cache_ops.inv)) {
  24. noncoherent_cache_ops.inv(virt_to_phys(addr), size);
  25. return;
  26. }
  27. #endif
  28. ALT_CMO_OP(INVAL, addr, size, riscv_cbom_block_size);
  29. }
  30. EXPORT_SYMBOL_GPL(arch_invalidate_pmem);