From ad9aebd65b8c8c959b32dabed8808d30dbdfee95 Mon Sep 17 00:00:00 2001 From: Yu Qiaowei Date: Fri, 9 Aug 2024 11:06:28 +0800 Subject: [PATCH] video: rockchip: rga3: optimize 'time' debug log 1. Add flush cache cost time 2. Fix wrong time-consuming statistics of set_reg Signed-off-by: Yu Qiaowei Change-Id: I35254e49cd18e49d3ac691fc06ff67d2e36d3149 --- .../video/rockchip/rga3/include/rga_common.h | 1 + drivers/video/rockchip/rga3/rga2_reg_info.c | 2 +- drivers/video/rockchip/rga3/rga_common.c | 16 +++++++++++++ drivers/video/rockchip/rga3/rga_mm.c | 24 +++++++++++++++++++ 4 files changed, 42 insertions(+), 1 deletion(-) diff --git a/drivers/video/rockchip/rga3/include/rga_common.h b/drivers/video/rockchip/rga3/include/rga_common.h index 32e83cc9c9f9..1afdb6ef59f7 100644 --- a/drivers/video/rockchip/rga3/include/rga_common.h +++ b/drivers/video/rockchip/rga3/include/rga_common.h @@ -37,6 +37,7 @@ const char *rga_get_rotate_mode_str(uint8_t mode); const char *rga_get_blend_mode_str(enum rga_alpha_blend_mode mode); const char *rga_get_memory_type_str(uint8_t type); const char *rga_get_mmu_type_str(enum rga_mmu mmu_type); +const char *rga_get_dma_data_direction_str(enum dma_data_direction dir); const char *rga_get_core_name(enum RGA_SCHEDULER_CORE core); void rga_convert_addr(struct rga_img_info_t *img, bool before_vir_get_channel); diff --git a/drivers/video/rockchip/rga3/rga2_reg_info.c b/drivers/video/rockchip/rga3/rga2_reg_info.c index 668132bd4cfe..9a16eb14faca 100644 --- a/drivers/video/rockchip/rga3/rga2_reg_info.c +++ b/drivers/video/rockchip/rga3/rga2_reg_info.c @@ -3053,7 +3053,7 @@ static int rga2_set_reg(struct rga_job *job, struct rga_scheduler_t *scheduler) if (DEBUGGER_EN(TIME)) pr_info("request[%d], set register cost time %lld us\n", - job->request_id, ktime_us_delta(now, job->timestamp)); + job->request_id, ktime_us_delta(ktime_get(), now)); job->hw_running_time = now; job->hw_recoder_time = now; diff --git a/drivers/video/rockchip/rga3/rga_common.c b/drivers/video/rockchip/rga3/rga_common.c index 2a376e8b2406..77ad30bd5857 100644 --- a/drivers/video/rockchip/rga3/rga_common.c +++ b/drivers/video/rockchip/rga3/rga_common.c @@ -633,6 +633,22 @@ const char *rga_get_mmu_type_str(enum rga_mmu mmu_type) } } +const char *rga_get_dma_data_direction_str(enum dma_data_direction dir) +{ + switch (dir) { + case DMA_BIDIRECTIONAL: + return "bidirectional"; + case DMA_TO_DEVICE: + return "to_device"; + case DMA_FROM_DEVICE: + return "from_device"; + case DMA_NONE: + return "none"; + default: + return "unknown"; + } +} + const char *rga_get_core_name(enum RGA_SCHEDULER_CORE core) { switch (core) { diff --git a/drivers/video/rockchip/rga3/rga_mm.c b/drivers/video/rockchip/rga3/rga_mm.c index 01122568b65b..5fec5ea93efd 100644 --- a/drivers/video/rockchip/rga3/rga_mm.c +++ b/drivers/video/rockchip/rga3/rga_mm.c @@ -1325,6 +1325,7 @@ static int rga_mm_sync_dma_sg_for_device(struct rga_internal_buffer *buffer, { struct sg_table *sgt; struct rga_scheduler_t *scheduler; + ktime_t timestamp = ktime_get(); scheduler = buffer->dma_buffer->scheduler; if (scheduler == NULL) { @@ -1347,6 +1348,11 @@ static int rga_mm_sync_dma_sg_for_device(struct rga_internal_buffer *buffer, dma_sync_sg_for_device(scheduler->dev, sgt->sgl, sgt->orig_nents, dir); } + if (DEBUGGER_EN(TIME)) + pr_info("handle[%d], %s, flush CPU cache for device cost %lld us\n", + buffer->handle, rga_get_dma_data_direction_str(dir), + ktime_us_delta(ktime_get(), timestamp)); + return 0; } @@ -1356,6 +1362,7 @@ static int rga_mm_sync_dma_sg_for_cpu(struct rga_internal_buffer *buffer, { struct sg_table *sgt; struct rga_scheduler_t *scheduler; + ktime_t timestamp = ktime_get(); scheduler = buffer->dma_buffer->scheduler; if (scheduler == NULL) { @@ -1378,6 +1385,11 @@ static int rga_mm_sync_dma_sg_for_cpu(struct rga_internal_buffer *buffer, dma_sync_sg_for_cpu(scheduler->dev, sgt->sgl, sgt->orig_nents, dir); } + if (DEBUGGER_EN(TIME)) + pr_info("handle[%d], %s, flush CPU cache for CPU cost %lld us\n", + buffer->handle, rga_get_dma_data_direction_str(dir), + ktime_us_delta(ktime_get(), timestamp)); + return 0; } @@ -2287,6 +2299,7 @@ int rga_mm_import_buffer(struct rga_external_buffer *external_buffer, int ret = 0, new_id; struct rga_mm *mm; struct rga_internal_buffer *internal_buffer; + ktime_t timestamp = ktime_get(); mm = rga_drvdata->mm; if (mm == NULL) { @@ -2348,7 +2361,12 @@ int rga_mm_import_buffer(struct rga_external_buffer *external_buffer, rga_mm_dump_buffer(internal_buffer); } + if (DEBUGGER_EN(TIME)) + pr_info("handle[%d], import buffer cost %lld us\n", + internal_buffer->handle, ktime_us_delta(ktime_get(), timestamp)); + mutex_unlock(&mm->lock); + return internal_buffer->handle; FREE_INTERNAL_BUFFER: @@ -2362,6 +2380,7 @@ int rga_mm_release_buffer(uint32_t handle) { struct rga_mm *mm; struct rga_internal_buffer *internal_buffer; + ktime_t timestamp = ktime_get(); mm = rga_drvdata->mm; if (mm == NULL) { @@ -2387,7 +2406,12 @@ int rga_mm_release_buffer(uint32_t handle) kref_put(&internal_buffer->refcount, rga_mm_kref_release_buffer); + if (DEBUGGER_EN(TIME)) + pr_info("handle[%d], release buffer cost %lld us\n", + handle, ktime_us_delta(ktime_get(), timestamp)); + mutex_unlock(&mm->lock); + return 0; }