mirror of
https://github.com/hardkernel/linux.git
synced 2026-03-24 19:40:21 +09:00
driver: rknpu: Update rknpu driver, version: 0.9.0
* Fix power reference counting error * Fix issue with IOMMU mode limited to 32-bit * Reduce the time consumed by dma mapping Signed-off-by: Felix Zeng <felix.zeng@rock-chips.com> Change-Id: I93ea77fee4904455a80dfe6303ff049f3338742b
This commit is contained in:
@@ -30,10 +30,10 @@
|
||||
|
||||
#define DRIVER_NAME "rknpu"
|
||||
#define DRIVER_DESC "RKNPU driver"
|
||||
#define DRIVER_DATE "20230625"
|
||||
#define DRIVER_DATE "20230629"
|
||||
#define DRIVER_MAJOR 0
|
||||
#define DRIVER_MINOR 8
|
||||
#define DRIVER_PATCHLEVEL 9
|
||||
#define DRIVER_MINOR 9
|
||||
#define DRIVER_PATCHLEVEL 0
|
||||
|
||||
#define LOG_TAG "RKNPU"
|
||||
|
||||
|
||||
@@ -73,8 +73,8 @@ enum e_rknpu_mem_type {
|
||||
RKNPU_MEM_ZEROING = 1 << 5,
|
||||
/* allocate secure buffer */
|
||||
RKNPU_MEM_SECURE = 1 << 6,
|
||||
/* allocate from non-dma32 zone */
|
||||
RKNPU_MEM_NON_DMA32 = 1 << 7,
|
||||
/* allocate from dma32 zone */
|
||||
RKNPU_MEM_DMA32 = 1 << 7,
|
||||
/* request SRAM */
|
||||
RKNPU_MEM_TRY_ALLOC_SRAM = 1 << 8,
|
||||
/* request NBUF */
|
||||
@@ -82,7 +82,7 @@ enum e_rknpu_mem_type {
|
||||
RKNPU_MEM_MASK = RKNPU_MEM_NON_CONTIGUOUS | RKNPU_MEM_CACHEABLE |
|
||||
RKNPU_MEM_WRITE_COMBINE | RKNPU_MEM_KERNEL_MAPPING |
|
||||
RKNPU_MEM_IOMMU | RKNPU_MEM_ZEROING |
|
||||
RKNPU_MEM_SECURE | RKNPU_MEM_NON_DMA32 |
|
||||
RKNPU_MEM_SECURE | RKNPU_MEM_DMA32 |
|
||||
RKNPU_MEM_TRY_ALLOC_SRAM | RKNPU_MEM_TRY_ALLOC_NBUF
|
||||
};
|
||||
|
||||
|
||||
@@ -224,7 +224,6 @@ int rknpu_power_get(struct rknpu_device *rknpu_dev)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
cancel_delayed_work(&rknpu_dev->power_off_work);
|
||||
mutex_lock(&rknpu_dev->power_lock);
|
||||
if (atomic_inc_return(&rknpu_dev->power_refcount) == 1)
|
||||
ret = rknpu_power_on(rknpu_dev);
|
||||
@@ -247,6 +246,9 @@ int rknpu_power_put(struct rknpu_device *rknpu_dev)
|
||||
|
||||
static int rknpu_power_put_delay(struct rknpu_device *rknpu_dev)
|
||||
{
|
||||
if (rknpu_dev->power_put_delay == 0)
|
||||
return rknpu_power_put(rknpu_dev);
|
||||
|
||||
mutex_lock(&rknpu_dev->power_lock);
|
||||
if (atomic_read(&rknpu_dev->power_refcount) == 1)
|
||||
queue_delayed_work(
|
||||
@@ -255,6 +257,7 @@ static int rknpu_power_put_delay(struct rknpu_device *rknpu_dev)
|
||||
else
|
||||
atomic_dec_if_positive(&rknpu_dev->power_refcount);
|
||||
mutex_unlock(&rknpu_dev->power_lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -67,6 +67,7 @@ static int rknpu_gem_get_pages(struct rknpu_gem_object *rknpu_obj)
|
||||
rknpu_obj->size);
|
||||
goto free_sgt;
|
||||
}
|
||||
iommu_flush_iotlb_all(iommu_get_domain_for_dev(drm->dev));
|
||||
|
||||
if (rknpu_obj->flags & RKNPU_MEM_KERNEL_MAPPING) {
|
||||
rknpu_obj->cookie = vmap(rknpu_obj->pages, rknpu_obj->num_pages,
|
||||
@@ -181,7 +182,9 @@ static int rknpu_gem_alloc_buf(struct rknpu_gem_object *rknpu_obj)
|
||||
if (rknpu_obj->flags & RKNPU_MEM_ZEROING)
|
||||
gfp_mask |= __GFP_ZERO;
|
||||
|
||||
if (!(rknpu_obj->flags & RKNPU_MEM_NON_DMA32)) {
|
||||
if (!rknpu_dev->iommu_en ||
|
||||
rknpu_dev->config->dma_mask <= DMA_BIT_MASK(32) ||
|
||||
(rknpu_obj->flags & RKNPU_MEM_DMA32)) {
|
||||
gfp_mask &= ~__GFP_HIGHMEM;
|
||||
gfp_mask |= __GFP_DMA32;
|
||||
}
|
||||
@@ -360,6 +363,7 @@ static const struct drm_gem_object_funcs rknpu_gem_object_funcs = {
|
||||
static struct rknpu_gem_object *rknpu_gem_init(struct drm_device *drm,
|
||||
unsigned long size)
|
||||
{
|
||||
struct rknpu_device *rknpu_dev = drm->dev_private;
|
||||
struct rknpu_gem_object *rknpu_obj = NULL;
|
||||
struct drm_gem_object *obj = NULL;
|
||||
gfp_t gfp_mask;
|
||||
@@ -388,7 +392,9 @@ static struct rknpu_gem_object *rknpu_gem_init(struct drm_device *drm,
|
||||
if (rknpu_obj->flags & RKNPU_MEM_ZEROING)
|
||||
gfp_mask |= __GFP_ZERO;
|
||||
|
||||
if (!(rknpu_obj->flags & RKNPU_MEM_NON_DMA32)) {
|
||||
if (!rknpu_dev->iommu_en ||
|
||||
rknpu_dev->config->dma_mask <= DMA_BIT_MASK(32) ||
|
||||
(rknpu_obj->flags & RKNPU_MEM_DMA32)) {
|
||||
gfp_mask &= ~__GFP_HIGHMEM;
|
||||
gfp_mask |= __GFP_DMA32;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user