Merge commit '7abaac5a040a93d175d649897e1c8f7b196a1a3b'

* commit '7abaac5a040a93d175d649897e1c8f7b196a1a3b':
  PCIe: dw: rockchip: Disabled BAR0 and BAR1
  rknpu: Add MODULE_IMPORT_NS(DMA_BUF) for kernel 5.16
  driver: rknpu: Fix build errors in kernel 6.1, version: 0.8.9
  video: rockchip: rga3: adapt to kernel-6.1/5.10/4.19
  video: rockchip: rga: adapt to kernel-6.1
  video: rockchip: rga2: adapt to kernel-6.1
  drm/rockchip: drv: logo: fix modpost memblock_phys_free error for GKI

Change-Id: I1a3d3f7663963b8f2b79b61de6fc88af3276803f
This commit is contained in:
Tao Huang
2023-06-27 16:46:09 +08:00
15 changed files with 202 additions and 35 deletions

View File

@@ -204,7 +204,7 @@ void rockchip_free_loader_memory(struct drm_device *drm)
rockchip_drm_release_reserve_vm(drm, &logo->logo_reserved_node);
}
memblock_phys_free(logo->start, logo->size);
memblock_free(logo->kvaddr, logo->size);
rockchip_drm_free_reserved_area(logo->start, logo->start + logo->size,
-1, "drm_logo");
kfree(logo);

View File

@@ -1145,6 +1145,10 @@ static int rk_add_pcie_port(struct rk_pcie *rk_pcie, struct platform_device *pde
return ret;
}
/* Disable BAR0 BAR1 */
dw_pcie_writel_dbi(pci, PCIE_TYPE0_HDR_DBI2_OFFSET + 0x10 + BAR_0 * 4, 0);
dw_pcie_writel_dbi(pci, PCIE_TYPE0_HDR_DBI2_OFFSET + 0x10 + BAR_1 * 4, 0);
return 0;
}

View File

@@ -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"

View File

@@ -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);

View File

@@ -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"

View File

@@ -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);
}

View File

@@ -488,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)
@@ -554,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),
@@ -741,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
@@ -802,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
@@ -818,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
@@ -842,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
@@ -861,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
@@ -880,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,
@@ -1142,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)
@@ -1169,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)
{
@@ -1542,6 +1554,7 @@ err_remove_table:
return ret;
}
#endif
#endif
static int rknpu_devfreq_remove(struct rknpu_device *rknpu_dev)
{
@@ -1564,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) {
@@ -1605,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;
}
@@ -1743,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
@@ -1885,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
@@ -1994,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);
@@ -2053,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
@@ -2080,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

View File

@@ -252,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;
}
@@ -334,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)
{
@@ -347,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) {
@@ -421,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(
@@ -533,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;
}
@@ -565,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);
}
@@ -1147,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;
@@ -1245,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;
@@ -1274,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);
@@ -1289,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)
{
@@ -1305,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;
@@ -1347,6 +1397,8 @@ static int rknpu_cache_sync(struct rknpu_gem_object *rknpu_obj,
*length -= cache_length;
*offset = 0;
}
#endif
return 0;
}

View File

@@ -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);

View File

@@ -1109,6 +1109,9 @@ static int rga_get_img_info(rga_img_info_t *img,
struct dma_buf_attachment *attach = NULL;
struct device *rga_dev = NULL;
struct sg_table *sgt = NULL;
#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)
struct iosys_map map;
#endif
struct dma_buf *dma_buf = NULL;
u32 vir_w, vir_h;
int yrgb_addr = -1;
@@ -1137,11 +1140,20 @@ static int rga_get_img_info(rga_img_info_t *img,
}
#if RGA_DEBUGFS
if (RGA_CHECK_MODE) {
#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)
ret = dma_buf_vmap(dma_buf, &map);
vaddr = ret ? NULL : map.vaddr;
#else
vaddr = dma_buf_vmap(dma_buf);
#endif
if (vaddr)
rga_memory_check(vaddr, img->vir_w, img->vir_h,
img->format, img->yrgb_addr);
#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)
dma_buf_vunmap(dma_buf, &map);
#else
dma_buf_vunmap(dma_buf, vaddr);
#endif
}
#endif
*pattach = attach;

View File

@@ -278,13 +278,12 @@ static int rga_procfs_open(struct inode *inode, struct file *file)
return single_open(file, node->info_ent->show, node);
}
static const struct file_operations rga_procfs_fops = {
.owner = THIS_MODULE,
.open = rga_procfs_open,
.read = seq_read,
.llseek = seq_lseek,
.release = single_release,
.write = rga_debugger_write,
static const struct proc_ops rga_procfs_fops = {
.proc_open = rga_procfs_open,
.proc_read = seq_read,
.proc_lseek = seq_lseek,
.proc_release = single_release,
.proc_write = rga_debugger_write,
};
static int rga_procfs_remove_files(struct rga_debugger *debugger)

View File

@@ -265,12 +265,20 @@ static int rga2_dma_memory_check(struct rga_dma_buffer_t *buffer,
{
int ret = 0;
void *vaddr;
#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)
struct iosys_map map;
#endif
struct dma_buf *dma_buffer;
dma_buffer = buffer->dma_buf;
if (!IS_ERR_OR_NULL(dma_buffer)) {
#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)
ret = dma_buf_vmap(dma_buffer, &map);
vaddr = ret ? NULL : map.vaddr;
#else
vaddr = dma_buf_vmap(dma_buffer);
#endif
if (vaddr) {
ret = rga2_virtual_memory_check(vaddr, img->vir_w, img->vir_h,
img->format, img->yrgb_addr);
@@ -279,7 +287,11 @@ static int rga2_dma_memory_check(struct rga_dma_buffer_t *buffer,
return -EINVAL;
}
#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)
dma_buf_vunmap(dma_buffer, &map);
#else
dma_buf_vunmap(dma_buffer, vaddr);
#endif
}
return ret;

View File

@@ -621,7 +621,11 @@ CREATE_FAIL:
#ifdef CONFIG_ROCKCHIP_RGA_PROC_FS
static int rga_procfs_open(struct inode *inode, struct file *file)
{
#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)
struct rga_debugger_node *node = pde_data(inode);
#else
struct rga_debugger_node *node = PDE_DATA(inode);
#endif
return single_open(file, node->info_ent->show, node);
}
@@ -836,8 +840,10 @@ static int rga_dump_image_to_file(struct rga_internal_buffer *dump_buffer,
struct file *file;
size_t size = 0;
loff_t pos = 0;
#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)
int ret;
struct iosys_map map;
#endif
void *kvaddr = NULL;
void *kvaddr_origin = NULL;
@@ -850,8 +856,12 @@ static int rga_dump_image_to_file(struct rga_internal_buffer *dump_buffer,
return -EINVAL;
}
#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)
ret = dma_buf_vmap(dump_buffer->dma_buffer->dma_buf, &map);
kvaddr = ret ? NULL : map.vaddr;
#else
kvaddr = dma_buf_vmap(dump_buffer->dma_buffer->dma_buf);
#endif
if (!kvaddr) {
pr_err("can't vmap the dma buffer!\n");
return -EINVAL;
@@ -921,7 +931,11 @@ static int rga_dump_image_to_file(struct rga_internal_buffer *dump_buffer,
switch (dump_buffer->type) {
case RGA_DMA_BUFFER:
case RGA_DMA_BUFFER_PTR:
#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)
dma_buf_vunmap(dump_buffer->dma_buffer->dma_buf, &map);
#else
dma_buf_vunmap(dump_buffer->dma_buffer->dma_buf, kvaddr_origin);
#endif
break;
case RGA_VIRTUAL_ADDRESS:
vunmap(kvaddr_origin);

View File

@@ -394,14 +394,20 @@ int rga_dma_memory_check(struct rga_dma_buffer *rga_dma_buffer, struct rga_img_i
{
int ret = 0;
void *vaddr;
#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)
struct iosys_map map;
#endif
struct dma_buf *dma_buf;
dma_buf = rga_dma_buffer->dma_buf;
if (!IS_ERR_OR_NULL(dma_buf)) {
#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)
ret = dma_buf_vmap(dma_buf, &map);
vaddr = ret ? NULL : map.vaddr;
#else
vaddr = dma_buf_vmap(dma_buf);
#endif
if (vaddr) {
ret = rga_virtual_memory_check(vaddr, img->vir_w,
img->vir_h, img->format, img->yrgb_addr);
@@ -409,8 +415,11 @@ int rga_dma_memory_check(struct rga_dma_buffer *rga_dma_buffer, struct rga_img_i
pr_err("can't vmap the dma buffer!\n");
return -EINVAL;
}
#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)
dma_buf_vunmap(dma_buf, &map);
#else
dma_buf_vunmap(dma_buf, vaddr);
#endif
}
return ret;

View File

@@ -537,7 +537,11 @@ static int rga_request_add_acquire_fence_callback(int acquire_fence_fd,
return -EINVAL;
}
/* close acquire fence fd */
#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)
close_fd(acquire_fence_fd);
#else
ksys_close(acquire_fence_fd);
#endif
ret = rga_dma_fence_get_status(acquire_fence);
if (ret < 0) {