mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-24 10:34:43 +03:00
gpu: nvgpu: use dma-attr wrappers for K4.9 compatibility
On kernel 4.9, the DMA API has changed, so use the NVIDIA compatibility wrappers from dma-attrs.h to allow the code to build for both 4.4 and 4.9. Bug 1853519 Change-Id: I0196936e81c7f72b41b38a67f42af0dc0b5518df Signed-off-by: Konsta Holtta <kholtta@nvidia.com> Reviewed-on: http://git-master/r/1321102 Reviewed-by: svccoveritychecker <svccoveritychecker@nvidia.com> Reviewed-by: Alex Waterman <alexw@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
This commit is contained in:
committed by
mobile promotions
parent
8f3875393e
commit
fcd7fce9bc
@@ -2929,15 +2929,23 @@ int gk20a_gmmu_alloc_sys(struct gk20a *g, size_t size, struct mem_desc *mem)
|
||||
return gk20a_gmmu_alloc_flags_sys(g, 0, size, mem);
|
||||
}
|
||||
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 9, 0)
|
||||
static void gk20a_dma_flags_to_attrs(unsigned long *attrs,
|
||||
unsigned long flags)
|
||||
#define ATTR_ARG(x) *x
|
||||
#else
|
||||
static void gk20a_dma_flags_to_attrs(struct dma_attrs *attrs,
|
||||
unsigned long flags)
|
||||
#define ATTR_ARG(x) x
|
||||
#endif
|
||||
{
|
||||
if (flags & NVGPU_DMA_NO_KERNEL_MAPPING)
|
||||
dma_set_attr(DMA_ATTR_NO_KERNEL_MAPPING, attrs);
|
||||
dma_set_attr(DMA_ATTR_NO_KERNEL_MAPPING, ATTR_ARG(attrs));
|
||||
if (flags & NVGPU_DMA_FORCE_CONTIGUOUS)
|
||||
dma_set_attr(DMA_ATTR_FORCE_CONTIGUOUS, attrs);
|
||||
dma_set_attr(DMA_ATTR_FORCE_CONTIGUOUS, ATTR_ARG(attrs));
|
||||
if (flags & NVGPU_DMA_READ_ONLY)
|
||||
dma_set_attr(DMA_ATTR_READ_ONLY, attrs);
|
||||
dma_set_attr(DMA_ATTR_READ_ONLY, ATTR_ARG(attrs));
|
||||
#undef ATTR_ARG
|
||||
}
|
||||
|
||||
int gk20a_gmmu_alloc_flags_sys(struct gk20a *g, unsigned long flags,
|
||||
@@ -2956,12 +2964,14 @@ int gk20a_gmmu_alloc_flags_sys(struct gk20a *g, unsigned long flags,
|
||||
|
||||
if (flags & NVGPU_DMA_NO_KERNEL_MAPPING) {
|
||||
mem->pages = dma_alloc_attrs(d,
|
||||
size, &iova, GFP_KERNEL, &dma_attrs);
|
||||
size, &iova, GFP_KERNEL,
|
||||
__DMA_ATTR(dma_attrs));
|
||||
if (!mem->pages)
|
||||
return -ENOMEM;
|
||||
} else {
|
||||
mem->cpu_va = dma_alloc_attrs(d,
|
||||
size, &iova, GFP_KERNEL, &dma_attrs);
|
||||
size, &iova, GFP_KERNEL,
|
||||
__DMA_ATTR(dma_attrs));
|
||||
if (!mem->cpu_va)
|
||||
return -ENOMEM;
|
||||
}
|
||||
@@ -3009,11 +3019,11 @@ static void gk20a_gmmu_free_sys(struct gk20a *g, struct mem_desc *mem)
|
||||
if (mem->flags & NVGPU_DMA_NO_KERNEL_MAPPING) {
|
||||
dma_free_attrs(d, mem->size, mem->pages,
|
||||
sg_dma_address(mem->sgt->sgl),
|
||||
&dma_attrs);
|
||||
__DMA_ATTR(dma_attrs));
|
||||
} else {
|
||||
dma_free_attrs(d, mem->size, mem->cpu_va,
|
||||
sg_dma_address(mem->sgt->sgl),
|
||||
&dma_attrs);
|
||||
__DMA_ATTR(dma_attrs));
|
||||
}
|
||||
} else {
|
||||
dma_free_coherent(d, mem->size, mem->cpu_va,
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
#include <linux/delay.h>
|
||||
#include <uapi/linux/nvgpu.h>
|
||||
#include <linux/dma-buf.h>
|
||||
#include <linux/dma-attrs.h>
|
||||
#include <linux/nvmap.h>
|
||||
#include <linux/reset.h>
|
||||
#include <linux/tegra_soctherm.h>
|
||||
@@ -98,7 +99,7 @@ static void gk20a_tegra_secure_page_destroy(struct device *dev,
|
||||
DEFINE_DMA_ATTRS(attrs);
|
||||
dma_free_attrs(&tegra_vpr_dev, secure_buffer->size,
|
||||
(void *)(uintptr_t)secure_buffer->iova,
|
||||
secure_buffer->iova, &attrs);
|
||||
secure_buffer->iova, __DMA_ATTR(attrs));
|
||||
}
|
||||
|
||||
int gk20a_tegra_secure_page_alloc(struct device *dev)
|
||||
@@ -113,7 +114,7 @@ int gk20a_tegra_secure_page_alloc(struct device *dev)
|
||||
return -EINVAL;
|
||||
|
||||
(void)dma_alloc_attrs(&tegra_vpr_dev, size, &iova,
|
||||
DMA_MEMORY_NOMAP, &attrs);
|
||||
DMA_MEMORY_NOMAP, __DMA_ATTR(attrs));
|
||||
if (dma_mapping_error(&tegra_vpr_dev, iova))
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -133,7 +134,7 @@ static void gk20a_tegra_secure_destroy(struct gk20a *g,
|
||||
phys_addr_t pa = sg_phys(desc->mem.sgt->sgl);
|
||||
dma_free_attrs(&tegra_vpr_dev, desc->mem.size,
|
||||
(void *)(uintptr_t)pa,
|
||||
pa, &attrs);
|
||||
pa, __DMA_ATTR(attrs));
|
||||
gk20a_free_sgtable(&desc->mem.sgt);
|
||||
desc->mem.sgt = NULL;
|
||||
}
|
||||
@@ -154,7 +155,7 @@ int gk20a_tegra_secure_alloc(struct device *dev,
|
||||
return -EINVAL;
|
||||
|
||||
(void)dma_alloc_attrs(&tegra_vpr_dev, size, &iova,
|
||||
DMA_MEMORY_NOMAP, &attrs);
|
||||
DMA_MEMORY_NOMAP, __DMA_ATTR(attrs));
|
||||
if (dma_mapping_error(&tegra_vpr_dev, iova))
|
||||
return -ENOMEM;
|
||||
|
||||
@@ -185,7 +186,7 @@ fail_sgt:
|
||||
kfree(sgt);
|
||||
fail:
|
||||
dma_free_attrs(&tegra_vpr_dev, desc->mem.size,
|
||||
(void *)(uintptr_t)iova, iova, &attrs);
|
||||
(void *)(uintptr_t)iova, iova, __DMA_ATTR(attrs));
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user