mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 19:08:57 +09:00
driver: rknpu: Compatible with kernel 6.1 compilation, version: 0.8.9
Signed-off-by: Felix Zeng <felix.zeng@rock-chips.com> Change-Id: I88ca7a85e3ea5e2a410f48a5789f17b57ffb267e
This commit is contained in:
@@ -30,10 +30,10 @@
|
||||
|
||||
#define DRIVER_NAME "rknpu"
|
||||
#define DRIVER_DESC "RKNPU driver"
|
||||
#define DRIVER_DATE "20230428"
|
||||
#define DRIVER_DATE "20230625"
|
||||
#define DRIVER_MAJOR 0
|
||||
#define DRIVER_MINOR 8
|
||||
#define DRIVER_PATCHLEVEL 8
|
||||
#define DRIVER_PATCHLEVEL 9
|
||||
|
||||
#define LOG_TAG "RKNPU"
|
||||
|
||||
|
||||
@@ -163,6 +163,8 @@ int rknpu_gem_fault(struct vm_fault *vmf);
|
||||
int rknpu_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf);
|
||||
#endif
|
||||
|
||||
int rknpu_gem_mmap_obj(struct drm_gem_object *obj, struct vm_area_struct *vma);
|
||||
|
||||
/* set vm_flags and we can change the vm attribute to other one at here. */
|
||||
int rknpu_gem_mmap(struct file *filp, struct vm_area_struct *vma);
|
||||
|
||||
@@ -176,8 +178,13 @@ struct drm_gem_object *
|
||||
rknpu_gem_prime_import_sg_table(struct drm_device *dev,
|
||||
struct dma_buf_attachment *attach,
|
||||
struct sg_table *sgt);
|
||||
#if KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE
|
||||
void *rknpu_gem_prime_vmap(struct drm_gem_object *obj);
|
||||
void rknpu_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr);
|
||||
#else
|
||||
int rknpu_gem_prime_vmap(struct drm_gem_object *obj, struct iosys_map *map);
|
||||
void rknpu_gem_prime_vunmap(struct drm_gem_object *obj, struct iosys_map *map);
|
||||
#endif
|
||||
int rknpu_gem_prime_mmap(struct drm_gem_object *obj,
|
||||
struct vm_area_struct *vma);
|
||||
|
||||
|
||||
@@ -10,8 +10,12 @@
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/iommu.h>
|
||||
#include <linux/dma-iommu.h>
|
||||
#include <linux/iova.h>
|
||||
#include <linux/version.h>
|
||||
|
||||
#if KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE
|
||||
#include <linux/dma-iommu.h>
|
||||
#endif
|
||||
|
||||
#include "rknpu_drv.h"
|
||||
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/iommu.h>
|
||||
#include <linux/dma-iommu.h>
|
||||
#include <linux/iova.h>
|
||||
|
||||
#include "rknpu_drv.h"
|
||||
|
||||
@@ -457,7 +457,11 @@ CREATE_FAIL:
|
||||
#ifdef CONFIG_ROCKCHIP_RKNPU_PROC_FS
|
||||
static int rknpu_procfs_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
#if KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE
|
||||
struct rknpu_debugger_node *node = PDE_DATA(inode);
|
||||
#else
|
||||
struct rknpu_debugger_node *node = pde_data(inode);
|
||||
#endif
|
||||
|
||||
return single_open(file, node->info_ent->show, node);
|
||||
}
|
||||
|
||||
@@ -33,7 +33,6 @@
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <linux/devfreq_cooling.h>
|
||||
#include <linux/regmap.h>
|
||||
#include <linux/dma-iommu.h>
|
||||
#include <linux/of_address.h>
|
||||
|
||||
#ifndef FPGA_PLATFORM
|
||||
@@ -489,11 +488,13 @@ const struct file_operations rknpu_fops = {
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ROCKCHIP_RKNPU_DRM_GEM
|
||||
#if KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE
|
||||
static const struct vm_operations_struct rknpu_gem_vm_ops = {
|
||||
.fault = rknpu_gem_fault,
|
||||
.open = drm_gem_vm_open,
|
||||
.close = drm_gem_vm_close,
|
||||
};
|
||||
#endif
|
||||
|
||||
static int rknpu_action_ioctl(struct drm_device *dev, void *data,
|
||||
struct drm_file *file_priv)
|
||||
@@ -555,27 +556,29 @@ static struct drm_driver rknpu_drm_driver = {
|
||||
#else
|
||||
.driver_features = DRIVER_GEM | DRIVER_PRIME | DRIVER_RENDER,
|
||||
#endif
|
||||
#if KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE
|
||||
.gem_free_object_unlocked = rknpu_gem_free_object,
|
||||
.gem_vm_ops = &rknpu_gem_vm_ops,
|
||||
.dumb_destroy = drm_gem_dumb_destroy,
|
||||
.gem_prime_export = drm_gem_prime_export,
|
||||
.gem_prime_get_sg_table = rknpu_gem_prime_get_sg_table,
|
||||
.gem_prime_vmap = rknpu_gem_prime_vmap,
|
||||
.gem_prime_vunmap = rknpu_gem_prime_vunmap,
|
||||
#endif
|
||||
.dumb_create = rknpu_gem_dumb_create,
|
||||
#if KERNEL_VERSION(4, 19, 0) > LINUX_VERSION_CODE
|
||||
.dumb_map_offset = rknpu_gem_dumb_map_offset,
|
||||
#else
|
||||
.dumb_map_offset = drm_gem_dumb_map_offset,
|
||||
#endif
|
||||
.dumb_destroy = drm_gem_dumb_destroy,
|
||||
.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
|
||||
.prime_fd_to_handle = drm_gem_prime_fd_to_handle,
|
||||
.gem_prime_export = drm_gem_prime_export,
|
||||
#if KERNEL_VERSION(4, 13, 0) <= LINUX_VERSION_CODE
|
||||
.gem_prime_import = rknpu_gem_prime_import,
|
||||
#else
|
||||
.gem_prime_import = drm_gem_prime_import,
|
||||
#endif
|
||||
.gem_prime_get_sg_table = rknpu_gem_prime_get_sg_table,
|
||||
.gem_prime_import_sg_table = rknpu_gem_prime_import_sg_table,
|
||||
.gem_prime_vmap = rknpu_gem_prime_vmap,
|
||||
.gem_prime_vunmap = rknpu_gem_prime_vunmap,
|
||||
.gem_prime_mmap = rknpu_gem_prime_mmap,
|
||||
.ioctls = rknpu_ioctls,
|
||||
.num_ioctls = ARRAY_SIZE(rknpu_ioctls),
|
||||
@@ -742,7 +745,8 @@ static int rknpu_power_on(struct rknpu_device *rknpu_dev)
|
||||
}
|
||||
|
||||
#ifndef FPGA_PLATFORM
|
||||
#if KERNEL_VERSION(5, 10, 0) <= LINUX_VERSION_CODE
|
||||
#if KERNEL_VERSION(5, 10, 0) <= LINUX_VERSION_CODE && \
|
||||
KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE
|
||||
rockchip_monitor_volt_adjust_lock(rknpu_dev->mdev_info);
|
||||
#endif
|
||||
#endif
|
||||
@@ -803,7 +807,8 @@ static int rknpu_power_on(struct rknpu_device *rknpu_dev)
|
||||
|
||||
out:
|
||||
#ifndef FPGA_PLATFORM
|
||||
#if KERNEL_VERSION(5, 10, 0) <= LINUX_VERSION_CODE
|
||||
#if KERNEL_VERSION(5, 10, 0) <= LINUX_VERSION_CODE && \
|
||||
KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE
|
||||
rockchip_monitor_volt_adjust_unlock(rknpu_dev->mdev_info);
|
||||
#endif
|
||||
#endif
|
||||
@@ -819,7 +824,8 @@ static int rknpu_power_off(struct rknpu_device *rknpu_dev)
|
||||
int ret;
|
||||
bool val;
|
||||
|
||||
#if KERNEL_VERSION(5, 10, 0) <= LINUX_VERSION_CODE
|
||||
#if KERNEL_VERSION(5, 10, 0) <= LINUX_VERSION_CODE && \
|
||||
KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE
|
||||
rockchip_monitor_volt_adjust_lock(rknpu_dev->mdev_info);
|
||||
#endif
|
||||
#endif
|
||||
@@ -843,7 +849,8 @@ static int rknpu_power_off(struct rknpu_device *rknpu_dev)
|
||||
if (ret) {
|
||||
LOG_DEV_ERROR(dev, "iommu still enabled\n");
|
||||
pm_runtime_get_sync(dev);
|
||||
#if KERNEL_VERSION(5, 10, 0) <= LINUX_VERSION_CODE
|
||||
#if KERNEL_VERSION(5, 10, 0) <= LINUX_VERSION_CODE && \
|
||||
KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE
|
||||
rockchip_monitor_volt_adjust_unlock(
|
||||
rknpu_dev->mdev_info);
|
||||
#endif
|
||||
@@ -862,7 +869,8 @@ static int rknpu_power_off(struct rknpu_device *rknpu_dev)
|
||||
}
|
||||
|
||||
#ifndef FPGA_PLATFORM
|
||||
#if KERNEL_VERSION(5, 10, 0) <= LINUX_VERSION_CODE
|
||||
#if KERNEL_VERSION(5, 10, 0) <= LINUX_VERSION_CODE && \
|
||||
KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE
|
||||
rockchip_monitor_volt_adjust_unlock(rknpu_dev->mdev_info);
|
||||
#endif
|
||||
#endif
|
||||
@@ -881,6 +889,7 @@ static int rknpu_power_off(struct rknpu_device *rknpu_dev)
|
||||
}
|
||||
|
||||
#ifndef FPGA_PLATFORM
|
||||
#if KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE
|
||||
static struct monitor_dev_profile npu_mdevp = {
|
||||
.type = MONITOR_TYPE_DEV,
|
||||
.low_temp_adjust = rockchip_monitor_dev_low_temp_adjust,
|
||||
@@ -1143,6 +1152,7 @@ static struct devfreq_dev_profile npu_devfreq_profile = {
|
||||
.get_dev_status = npu_devfreq_get_dev_status,
|
||||
.get_cur_freq = npu_devfreq_get_cur_freq,
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PM_DEVFREQ
|
||||
static int devfreq_rknpu_ondemand_func(struct devfreq *df, unsigned long *freq)
|
||||
@@ -1170,6 +1180,7 @@ static struct devfreq_governor devfreq_rknpu_ondemand = {
|
||||
};
|
||||
#endif
|
||||
|
||||
#if KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE
|
||||
static unsigned long npu_get_static_power(struct devfreq *devfreq,
|
||||
unsigned long voltage)
|
||||
{
|
||||
@@ -1543,6 +1554,7 @@ err_remove_table:
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
static int rknpu_devfreq_remove(struct rknpu_device *rknpu_dev)
|
||||
{
|
||||
@@ -1565,9 +1577,12 @@ static int rknpu_register_irq(struct platform_device *pdev,
|
||||
{
|
||||
const struct rknpu_config *config = rknpu_dev->config;
|
||||
struct device *dev = &pdev->dev;
|
||||
#if KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE
|
||||
struct resource *res;
|
||||
#endif
|
||||
int i, ret, irq;
|
||||
|
||||
#if KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE
|
||||
res = platform_get_resource_byname(pdev, IORESOURCE_IRQ,
|
||||
config->irqs[0].name);
|
||||
if (res) {
|
||||
@@ -1606,6 +1621,25 @@ static int rknpu_register_irq(struct platform_device *pdev,
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
#else
|
||||
/* there are irq names in dts */
|
||||
for (i = 0; i < config->num_irqs; i++) {
|
||||
irq = platform_get_irq_byname(pdev, config->irqs[i].name);
|
||||
if (irq < 0) {
|
||||
LOG_DEV_ERROR(dev, "no npu %s in dts\n",
|
||||
config->irqs[i].name);
|
||||
return irq;
|
||||
}
|
||||
|
||||
ret = devm_request_irq(dev, irq, config->irqs[i].irq_hdl,
|
||||
IRQF_SHARED, dev_name(dev), rknpu_dev);
|
||||
if (ret < 0) {
|
||||
LOG_DEV_ERROR(dev, "request %s failed: %d\n",
|
||||
config->irqs[i].name, ret);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1744,7 +1778,8 @@ static int rknpu_probe(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
#ifndef FPGA_PLATFORM
|
||||
#if KERNEL_VERSION(5, 10, 0) <= LINUX_VERSION_CODE
|
||||
#if KERNEL_VERSION(5, 10, 0) <= LINUX_VERSION_CODE && \
|
||||
KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE
|
||||
if (strstr(__clk_get_name(rknpu_dev->clks[0].clk), "scmi"))
|
||||
rknpu_dev->opp_info.scmi_clk = rknpu_dev->clks[0].clk;
|
||||
#endif
|
||||
@@ -1886,7 +1921,9 @@ static int rknpu_probe(struct platform_device *pdev)
|
||||
goto err_remove_drv;
|
||||
|
||||
#ifndef FPGA_PLATFORM
|
||||
#if KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE
|
||||
rknpu_devfreq_init(rknpu_dev);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// set default power put delay to 3s
|
||||
@@ -1995,7 +2032,8 @@ static int rknpu_remove(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
#ifndef FPGA_PLATFORM
|
||||
#if KERNEL_VERSION(5, 10, 0) <= LINUX_VERSION_CODE
|
||||
#if KERNEL_VERSION(5, 10, 0) <= LINUX_VERSION_CODE && \
|
||||
KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE
|
||||
static int rknpu_runtime_suspend(struct device *dev)
|
||||
{
|
||||
struct rknpu_device *rknpu_dev = dev_get_drvdata(dev);
|
||||
@@ -2054,7 +2092,8 @@ static struct platform_driver rknpu_driver = {
|
||||
.owner = THIS_MODULE,
|
||||
.name = "RKNPU",
|
||||
#ifndef FPGA_PLATFORM
|
||||
#if KERNEL_VERSION(5, 5, 0) < LINUX_VERSION_CODE
|
||||
#if KERNEL_VERSION(5, 5, 0) < LINUX_VERSION_CODE && \
|
||||
KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE
|
||||
.pm = &rknpu_pm_ops,
|
||||
#endif
|
||||
#endif
|
||||
@@ -2081,3 +2120,6 @@ MODULE_ALIAS("rockchip-rknpu");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
MODULE_VERSION(RKNPU_GET_DRV_VERSION_STRING(DRIVER_MAJOR, DRIVER_MINOR,
|
||||
DRIVER_PATCHLEVEL));
|
||||
#if defined(CONFIG_ROCKCHIP_RKNPU_DMA_HEAP) && KERNEL_VERSION(5, 16, 0) < LINUX_VERSION_CODE
|
||||
MODULE_IMPORT_NS(DMA_BUF);
|
||||
#endif
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
#include <linux/shmem_fs.h>
|
||||
#include <linux/dma-buf.h>
|
||||
#include <linux/iommu.h>
|
||||
#include <linux/dma-iommu.h>
|
||||
#include <linux/pfn_t.h>
|
||||
#include <linux/version.h>
|
||||
#include <asm/cacheflush.h>
|
||||
@@ -253,10 +252,15 @@ static int rknpu_gem_alloc_buf(struct rknpu_gem_object *rknpu_obj)
|
||||
i, &s->dma_address, s->length);
|
||||
}
|
||||
|
||||
if (drm_prime_sg_to_page_addr_arrays(sgt, rknpu_obj->pages, NULL,
|
||||
nr_pages)) {
|
||||
LOG_DEV_ERROR(drm->dev, "invalid sgtable.\n");
|
||||
ret = -EINVAL;
|
||||
#if KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE
|
||||
ret = drm_prime_sg_to_page_addr_arrays(sgt, rknpu_obj->pages, NULL,
|
||||
nr_pages);
|
||||
#else
|
||||
ret = drm_prime_sg_to_page_array(sgt, rknpu_obj->pages, nr_pages);
|
||||
#endif
|
||||
|
||||
if (ret < 0) {
|
||||
LOG_DEV_ERROR(drm->dev, "invalid sgtable, ret: %d\n", ret);
|
||||
goto err_free_sg_table;
|
||||
}
|
||||
|
||||
@@ -335,6 +339,24 @@ static int rknpu_gem_handle_destroy(struct drm_file *file_priv,
|
||||
return drm_gem_handle_delete(file_priv, handle);
|
||||
}
|
||||
|
||||
#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE
|
||||
static const struct vm_operations_struct vm_ops = {
|
||||
.fault = rknpu_gem_fault,
|
||||
.open = drm_gem_vm_open,
|
||||
.close = drm_gem_vm_close,
|
||||
};
|
||||
|
||||
static const struct drm_gem_object_funcs rknpu_gem_object_funcs = {
|
||||
.free = rknpu_gem_free_object,
|
||||
.export = drm_gem_prime_export,
|
||||
.get_sg_table = rknpu_gem_prime_get_sg_table,
|
||||
.vmap = rknpu_gem_prime_vmap,
|
||||
.vunmap = rknpu_gem_prime_vunmap,
|
||||
.mmap = rknpu_gem_mmap_obj,
|
||||
.vm_ops = &vm_ops,
|
||||
};
|
||||
#endif
|
||||
|
||||
static struct rknpu_gem_object *rknpu_gem_init(struct drm_device *drm,
|
||||
unsigned long size)
|
||||
{
|
||||
@@ -348,6 +370,9 @@ static struct rknpu_gem_object *rknpu_gem_init(struct drm_device *drm,
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
obj = &rknpu_obj->base;
|
||||
#if KERNEL_VERSION(6, 1, 0) <= LINUX_VERSION_CODE
|
||||
obj->funcs = &rknpu_gem_object_funcs;
|
||||
#endif
|
||||
|
||||
ret = drm_gem_object_init(drm, obj, size);
|
||||
if (ret < 0) {
|
||||
@@ -422,7 +447,7 @@ static int rknpu_gem_alloc_buf_with_cache(struct rknpu_gem_object *rknpu_obj,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
cookie = domain->iova_cookie;
|
||||
cookie = (void *)domain->iova_cookie;
|
||||
iovad = &cookie->iovad;
|
||||
rknpu_obj->iova_size = iova_align(iovad, cache_size + rknpu_obj->size);
|
||||
rknpu_obj->iova_start = rknpu_iommu_dma_alloc_iova(
|
||||
@@ -534,8 +559,8 @@ cache_unmap:
|
||||
iommu_unmap(domain, rknpu_obj->iova_start, cache_size);
|
||||
|
||||
free_iova:
|
||||
rknpu_iommu_dma_free_iova(domain->iova_cookie, rknpu_obj->iova_start,
|
||||
rknpu_obj->iova_size);
|
||||
rknpu_iommu_dma_free_iova((void *)domain->iova_cookie,
|
||||
rknpu_obj->iova_start, rknpu_obj->iova_size);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -566,7 +591,7 @@ static void rknpu_gem_free_buf_with_cache(struct rknpu_gem_object *rknpu_obj,
|
||||
if (rknpu_obj->size > 0)
|
||||
iommu_unmap(domain, rknpu_obj->iova_start + cache_size,
|
||||
rknpu_obj->size);
|
||||
rknpu_iommu_dma_free_iova(domain->iova_cookie,
|
||||
rknpu_iommu_dma_free_iova((void *)domain->iova_cookie,
|
||||
rknpu_obj->iova_start,
|
||||
rknpu_obj->iova_size);
|
||||
}
|
||||
@@ -1148,8 +1173,7 @@ out:
|
||||
}
|
||||
#endif
|
||||
|
||||
static int rknpu_gem_mmap_obj(struct drm_gem_object *obj,
|
||||
struct vm_area_struct *vma)
|
||||
int rknpu_gem_mmap_obj(struct drm_gem_object *obj, struct vm_area_struct *vma)
|
||||
{
|
||||
struct rknpu_gem_object *rknpu_obj = to_rknpu_obj(obj);
|
||||
int ret = -EINVAL;
|
||||
@@ -1246,8 +1270,12 @@ rknpu_gem_prime_import_sg_table(struct drm_device *dev,
|
||||
goto err;
|
||||
}
|
||||
|
||||
#if KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE
|
||||
ret = drm_prime_sg_to_page_addr_arrays(sgt, rknpu_obj->pages, NULL,
|
||||
npages);
|
||||
#else
|
||||
ret = drm_prime_sg_to_page_array(sgt, rknpu_obj->pages, npages);
|
||||
#endif
|
||||
if (ret < 0)
|
||||
goto err_free_large;
|
||||
|
||||
@@ -1275,6 +1303,7 @@ err:
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
#if KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE
|
||||
void *rknpu_gem_prime_vmap(struct drm_gem_object *obj)
|
||||
{
|
||||
struct rknpu_gem_object *rknpu_obj = to_rknpu_obj(obj);
|
||||
@@ -1290,6 +1319,25 @@ void rknpu_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr)
|
||||
{
|
||||
vunmap(vaddr);
|
||||
}
|
||||
#else
|
||||
int rknpu_gem_prime_vmap(struct drm_gem_object *obj, struct iosys_map *map)
|
||||
{
|
||||
struct rknpu_gem_object *rknpu_obj = to_rknpu_obj(obj);
|
||||
|
||||
if (!rknpu_obj->pages)
|
||||
return -EINVAL;
|
||||
|
||||
map->vaddr = vmap(rknpu_obj->pages, rknpu_obj->num_pages, VM_MAP,
|
||||
PAGE_KERNEL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void rknpu_gem_prime_vunmap(struct drm_gem_object *obj, struct iosys_map *map)
|
||||
{
|
||||
vunmap(map->vaddr);
|
||||
}
|
||||
#endif
|
||||
|
||||
int rknpu_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma)
|
||||
{
|
||||
@@ -1306,6 +1354,7 @@ static int rknpu_cache_sync(struct rknpu_gem_object *rknpu_obj,
|
||||
unsigned long *length, unsigned long *offset,
|
||||
enum rknpu_cache_type cache_type)
|
||||
{
|
||||
#if KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE
|
||||
struct drm_gem_object *obj = &rknpu_obj->base;
|
||||
struct rknpu_device *rknpu_dev = obj->dev->dev_private;
|
||||
void __iomem *cache_base_io = NULL;
|
||||
@@ -1348,6 +1397,8 @@ static int rknpu_cache_sync(struct rknpu_gem_object *rknpu_obj,
|
||||
*length -= cache_length;
|
||||
*offset = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -18,6 +18,8 @@ dma_addr_t rknpu_iommu_dma_alloc_iova(struct iommu_domain *domain, size_t size,
|
||||
|
||||
shift = iova_shift(iovad);
|
||||
iova_len = size >> shift;
|
||||
|
||||
#if KERNEL_VERSION(6, 1, 0) > LINUX_VERSION_CODE
|
||||
/*
|
||||
* Freeing non-power-of-two-sized allocations back into the IOVA caches
|
||||
* will come back to bite us badly, so we have to waste a bit of space
|
||||
@@ -26,6 +28,7 @@ dma_addr_t rknpu_iommu_dma_alloc_iova(struct iommu_domain *domain, size_t size,
|
||||
*/
|
||||
if (iova_len < (1 << (IOVA_RANGE_CACHE_MAX_SIZE - 1)))
|
||||
iova_len = roundup_pow_of_two(iova_len);
|
||||
#endif
|
||||
|
||||
#if (KERNEL_VERSION(5, 10, 0) <= LINUX_VERSION_CODE)
|
||||
dma_limit = min_not_zero(dma_limit, dev->bus_dma_limit);
|
||||
|
||||
Reference in New Issue
Block a user