diff --git a/drivers/video/tegra/nvmap/nvmap_alloc.c b/drivers/video/tegra/nvmap/nvmap_alloc.c index 46b3dd33..931425bd 100644 --- a/drivers/video/tegra/nvmap/nvmap_alloc.c +++ b/drivers/video/tegra/nvmap/nvmap_alloc.c @@ -718,7 +718,14 @@ static void alloc_handle(struct nvmap_client *client, MEMREMAP_WB); if (cpu_addr != NULL) { memset(cpu_addr, 0, h->size); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 0, 0) + dcache_clean_inval_poc( + (unsigned long)cpu_addr, + (unsigned long)cpu_addr + + h->size); +#else __dma_flush_area(cpu_addr, h->size); +#endif memunmap(cpu_addr); } } diff --git a/drivers/video/tegra/nvmap/nvmap_cache.c b/drivers/video/tegra/nvmap/nvmap_cache.c index 9f0bf9c4..67de73aa 100644 --- a/drivers/video/tegra/nvmap/nvmap_cache.c +++ b/drivers/video/tegra/nvmap/nvmap_cache.c @@ -62,12 +62,21 @@ void nvmap_clean_cache(struct page **pages, int numpages) void inner_cache_maint(unsigned int op, void *vaddr, size_t size) { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 0, 0) + if (op == NVMAP_CACHE_OP_WB_INV) + dcache_clean_inval_poc((unsigned long)vaddr, (unsigned long)vaddr + size); + else if (op == NVMAP_CACHE_OP_INV) + dcache_inval_poc((unsigned long)vaddr, (unsigned long)vaddr + size); + else + dcache_clean_poc((unsigned long)vaddr, (unsigned long)vaddr + size); +#else if (op == NVMAP_CACHE_OP_WB_INV) __dma_flush_area(vaddr, size); else if (op == NVMAP_CACHE_OP_INV) __dma_map_area(vaddr, size, DMA_FROM_DEVICE); else __dma_map_area(vaddr, size, DMA_TO_DEVICE); +#endif } static void heap_page_cache_maint( @@ -149,7 +158,11 @@ int nvmap_cache_maint_phys_range(unsigned int op, phys_addr_t pstart, phys_addr_t next = (loop + PAGE_SIZE) & PAGE_MASK; void *base; next = min(next, pend); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 0, 0) + io_addr = ioremap_prot(loop, PAGE_SIZE, (unsigned long)PAGE_KERNEL); +#else io_addr = __ioremap(loop, PAGE_SIZE, PG_PROT_KERNEL); +#endif if (io_addr == NULL) return -ENOMEM; base = (__force void *)io_addr + (loop & ~PAGE_MASK); diff --git a/drivers/video/tegra/nvmap/nvmap_core.c b/drivers/video/tegra/nvmap/nvmap_core.c index ce978df6..efc7aa5d 100644 --- a/drivers/video/tegra/nvmap/nvmap_core.c +++ b/drivers/video/tegra/nvmap/nvmap_core.c @@ -81,8 +81,11 @@ void *__nvmap_kmap(struct nvmap_handle *h, unsigned int pagenum) h->pgalloc.pages[pagenum])); else paddr = h->carveout->base + pagenum * PAGE_SIZE; - +#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 0, 0) + addr = ioremap_prot(phys_addr, PAGE_SIZE, pgprot_val(prot)); +#else addr = __ioremap(paddr, PAGE_SIZE, prot); +#endif if (addr == NULL) goto out; kaddr = (unsigned long)addr; @@ -119,7 +122,11 @@ void __nvmap_kunmap(struct nvmap_handle *h, unsigned int pagenum, if (h->flags != NVMAP_HANDLE_UNCACHEABLE && h->flags != NVMAP_HANDLE_WRITE_COMBINE) { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 0, 0) + dcache_clean_inval_poc(addr, PAGE_SIZE); +#else __dma_flush_area(addr, PAGE_SIZE); +#endif outer_flush_range(paddr, paddr + PAGE_SIZE); /* FIXME */ } iounmap((void __iomem *)addr); @@ -203,8 +210,12 @@ void *__nvmap_mmap(struct nvmap_handle *h) vaddr = vmap(pages, nr_pages, VM_MAP, prot); } else { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 0, 0) + vaddr = ioremap_prot(h->carveout->base, adj_size, pgprot_val(prot)); +#else vaddr = (__force void *)__ioremap(h->carveout->base, adj_size, prot); +#endif } if (vaddr == NULL) goto out;