nvmap: Remove use of __dma_flush_area

__dma_flush_area is defined in downstream, we need maintenance effort
when kernel version is upgraded. Instead, use arch_invalidate_pmem
function provided by the upstream.

Bug 3855165

Change-Id: Ie62935aba7f3c31e6e233816b3bff507197d3f86
Signed-off-by: Ketan Patil <ketanp@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvidia/+/2804844
Reviewed-by: svcacv <svcacv@nvidia.com>
Reviewed-by: svc_kernel_abi <svc_kernel_abi@nvidia.com>
Reviewed-by: Jonathan Hunter <jonathanh@nvidia.com>
Reviewed-by: Sachin Nikam <snikam@nvidia.com>
GVS: Gerrit_Virtual_Submit <buildbot_gerritrpt@nvidia.com>
This commit is contained in:
Ketan Patil
2022-11-08 06:23:15 +00:00
committed by Laxman Dewangan
parent 596156cc4b
commit 9045984efb
4 changed files with 30 additions and 1 deletions

View File

@@ -37,6 +37,13 @@ ifneq ($(CONFIG_DMA_SHARED_BUFFER),y)
$(error CONFIG_DMA_SHARED_BUFFER is not set) $(error CONFIG_DMA_SHARED_BUFFER is not set)
endif endif
# Check if CONFIG_ARCH_HAS_PMEM_API enabled for OOT/Kstable kernel
# CONFIG_ARCH_HAS_PMEM_API is needed for arch_invalidate_pmem
ifeq ($(CONFIG_TEGRA_OOT_MODULE),m)
ifneq ($(CONFIG_ARCH_HAS_PMEM_API),y)
$(error CONFIG_ARCH_HAS_PMEM_API is not set)
endif
endif
################################################################################ ################################################################################
# Section 2 # Section 2
# This config is used to include the memory management driver for the # This config is used to include the memory management driver for the

View File

@@ -34,6 +34,9 @@
#endif #endif
#endif /* !NVMAP_LOADABLE_MODULE */ #endif /* !NVMAP_LOADABLE_MODULE */
#ifdef NVMAP_UPSTREAM_KERNEL
#include <linux/libnvdimm.h>
#endif /* NVMAP_UPSTREAM_KERNEL */
#include "nvmap_priv.h" #include "nvmap_priv.h"
bool nvmap_convert_carveout_to_iovmm; bool nvmap_convert_carveout_to_iovmm;
@@ -714,12 +717,16 @@ static void alloc_handle(struct nvmap_client *client,
/* Clear the allocated buffer */ /* Clear the allocated buffer */
if (nvmap_cpu_map_is_allowed(h)) { if (nvmap_cpu_map_is_allowed(h)) {
void *cpu_addr; void *cpu_addr;
cpu_addr = memremap(b->base, h->size, cpu_addr = memremap(b->base, h->size,
MEMREMAP_WB); MEMREMAP_WB);
if (cpu_addr != NULL) { if (cpu_addr != NULL) {
memset(cpu_addr, 0, h->size); memset(cpu_addr, 0, h->size);
#ifdef NVMAP_UPSTREAM_KERNEL
arch_invalidate_pmem(cpu_addr, h->size);
#else
__dma_flush_area(cpu_addr, h->size); __dma_flush_area(cpu_addr, h->size);
#endif
memunmap(cpu_addr); memunmap(cpu_addr);
} }
} }

View File

@@ -25,6 +25,10 @@
#include <soc/tegra/fuse.h> #include <soc/tegra/fuse.h>
#endif #endif
#ifdef NVMAP_UPSTREAM_KERNEL
#include <linux/libnvdimm.h>
#endif /* NVMAP_UPSTREAM_KERNEL */
#include <linux/sys_soc.h> #include <linux/sys_soc.h>
#ifdef NVMAP_LOADABLE_MODULE #ifdef NVMAP_LOADABLE_MODULE
__weak struct arm64_ftr_reg arm64_ftr_reg_ctrel0; __weak struct arm64_ftr_reg arm64_ftr_reg_ctrel0;
@@ -63,7 +67,11 @@ void nvmap_clean_cache(struct page **pages, int numpages)
void inner_cache_maint(unsigned int op, void *vaddr, size_t size) void inner_cache_maint(unsigned int op, void *vaddr, size_t size)
{ {
if (op == NVMAP_CACHE_OP_WB_INV) if (op == NVMAP_CACHE_OP_WB_INV)
#ifdef NVMAP_UPSTREAM_KERNEL
arch_invalidate_pmem(vaddr, size);
#else
__dma_flush_area(vaddr, size); __dma_flush_area(vaddr, size);
#endif
else if (op == NVMAP_CACHE_OP_INV) else if (op == NVMAP_CACHE_OP_INV)
__dma_map_area(vaddr, size, DMA_FROM_DEVICE); __dma_map_area(vaddr, size, DMA_FROM_DEVICE);
else else

View File

@@ -31,6 +31,9 @@
#include <linux/nvmap.h> #include <linux/nvmap.h>
#include <trace/events/nvmap.h> #include <trace/events/nvmap.h>
#ifdef NVMAP_UPSTREAM_KERNEL
#include <linux/libnvdimm.h>
#endif /* NVMAP_UPSTREAM_KERNEL */
#include "nvmap_priv.h" #include "nvmap_priv.h"
@@ -122,7 +125,11 @@ void __nvmap_kunmap(struct nvmap_handle *h, unsigned int pagenum,
if (h->flags != NVMAP_HANDLE_UNCACHEABLE && if (h->flags != NVMAP_HANDLE_UNCACHEABLE &&
h->flags != NVMAP_HANDLE_WRITE_COMBINE) { h->flags != NVMAP_HANDLE_WRITE_COMBINE) {
#ifdef NVMAP_UPSTREAM_KERNEL
arch_invalidate_pmem(addr, PAGE_SIZE);
#else
__dma_flush_area(addr, PAGE_SIZE); __dma_flush_area(addr, PAGE_SIZE);
#endif
outer_flush_range(paddr, paddr + PAGE_SIZE); /* FIXME */ outer_flush_range(paddr, paddr + PAGE_SIZE); /* FIXME */
} }
iounmap((void __iomem *)addr); iounmap((void __iomem *)addr);