diff --git a/drivers/video/rockchip/rga3/include/rga.h b/drivers/video/rockchip/rga3/include/rga.h index 34a9245d9fd5..2a60a1ae72db 100644 --- a/drivers/video/rockchip/rga3/include/rga.h +++ b/drivers/video/rockchip/rga3/include/rga.h @@ -86,6 +86,12 @@ enum rga_scale_down_mode { RGA_SCALE_DOWN_AVG = 0x1, }; +enum RGA_SCHEDULER_CORE { + RGA_SCHEDULER_RGA3_CORE0 = 1 << 0, + RGA_SCHEDULER_RGA3_CORE1 = 1 << 1, + RGA_SCHEDULER_RGA2_CORE0 = 1 << 2, +}; + /* RGA process mode enum */ enum { BITBLT_MODE = 0x0, diff --git a/drivers/video/rockchip/rga3/include/rga_common.h b/drivers/video/rockchip/rga3/include/rga_common.h index 67aad7b48202..32e83cc9c9f9 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_core_name(enum RGA_SCHEDULER_CORE core); void rga_convert_addr(struct rga_img_info_t *img, bool before_vir_get_channel); void rga_swap_pd_mode(struct rga_req *req_rga); diff --git a/drivers/video/rockchip/rga3/rga2_reg_info.c b/drivers/video/rockchip/rga3/rga2_reg_info.c index 309159df6b0a..8792e8d64dfc 100644 --- a/drivers/video/rockchip/rga3/rga2_reg_info.c +++ b/drivers/video/rockchip/rga3/rga2_reg_info.c @@ -2323,6 +2323,7 @@ static int rga2_init_reg(struct rga_job *job) struct rga2_req req; int ret = 0; struct rga_scheduler_t *scheduler = NULL; + ktime_t timestamp = ktime_get(); scheduler = job->scheduler; if (unlikely(scheduler == NULL)) { @@ -2396,6 +2397,10 @@ static int rga2_init_reg(struct rga_job *job) return -EINVAL; } + if (DEBUGGER_EN(TIME)) + pr_info("request[%d], generate register cost time %lld us\n", + job->request_id, ktime_us_delta(ktime_get(), timestamp)); + return ret; } @@ -2599,8 +2604,8 @@ static int rga2_set_reg(struct rga_job *job, struct rga_scheduler_t *scheduler) rga_read(RGA2_INT, scheduler)); if (DEBUGGER_EN(TIME)) - pr_info("set cmd use time = %lld\n", - ktime_us_delta(now, job->timestamp)); + pr_info("request[%d], set register cost time %lld us\n", + job->request_id, ktime_us_delta(now, job->timestamp)); job->hw_running_time = now; job->hw_recoder_time = now; diff --git a/drivers/video/rockchip/rga3/rga3_reg_info.c b/drivers/video/rockchip/rga3/rga3_reg_info.c index 5c1945b98325..2b61833aa4a3 100644 --- a/drivers/video/rockchip/rga3/rga3_reg_info.c +++ b/drivers/video/rockchip/rga3/rga3_reg_info.c @@ -1955,6 +1955,7 @@ static int rga3_init_reg(struct rga_job *job) struct rga3_req req; int ret = 0; struct rga_scheduler_t *scheduler = NULL; + ktime_t timestamp = ktime_get(); scheduler = job->scheduler; if (unlikely(scheduler == NULL)) { @@ -1984,6 +1985,10 @@ static int rga3_init_reg(struct rga_job *job) return -EINVAL; } + if (DEBUGGER_EN(TIME)) + pr_info("request[%d], generate register cost time %lld us\n", + job->request_id, ktime_us_delta(ktime_get(), timestamp)); + return ret; } @@ -2070,7 +2075,8 @@ static int rga3_set_reg(struct rga_job *job, struct rga_scheduler_t *scheduler) } if (DEBUGGER_EN(TIME)) - pr_info("set cmd use time = %lld\n", ktime_us_delta(now, job->timestamp)); + pr_info("request[%d], set register cost time %lld us\n", + job->request_id, ktime_us_delta(now, job->timestamp)); 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 6f8b57921506..80d4821fb321 100644 --- a/drivers/video/rockchip/rga3/rga_common.c +++ b/drivers/video/rockchip/rga3/rga_common.c @@ -604,6 +604,20 @@ const char *rga_get_mmu_type_str(enum rga_mmu mmu_type) } } +const char *rga_get_core_name(enum RGA_SCHEDULER_CORE core) +{ + switch (core) { + case RGA_SCHEDULER_RGA3_CORE0: + return "RGA3_core0"; + case RGA_SCHEDULER_RGA3_CORE1: + return "RGA3_core1"; + case RGA_SCHEDULER_RGA2_CORE0: + return "RGA2_core0"; + default: + return "unknown_core"; + } +} + void rga_convert_addr(struct rga_img_info_t *img, bool before_vir_get_channel) { /* diff --git a/drivers/video/rockchip/rga3/rga_job.c b/drivers/video/rockchip/rga3/rga_job.c index fbe4535a081b..f7d9ccc3866f 100644 --- a/drivers/video/rockchip/rga3/rga_job.c +++ b/drivers/video/rockchip/rga3/rga_job.c @@ -13,6 +13,7 @@ #include "rga_mm.h" #include "rga_iommu.h" #include "rga_debugger.h" +#include "rga_common.h" static void rga_job_free(struct rga_job *job) { @@ -40,12 +41,13 @@ static void rga_job_get(struct rga_job *job) static int rga_job_cleanup(struct rga_job *job) { - if (DEBUGGER_EN(TIME)) - pr_err("(pid:%d) job clean use time = %lld\n", job->pid, - ktime_us_delta(ktime_get(), job->timestamp)); - rga_job_put(job); + if (DEBUGGER_EN(TIME)) + pr_info("request[%d], job cleanup total cost time %lld us\n", + job->request_id, + ktime_us_delta(ktime_get(), job->timestamp)); + return 0; } @@ -272,11 +274,11 @@ struct rga_job *rga_job_done(struct rga_scheduler_t *scheduler) if (DEBUGGER_EN(DUMP_IMAGE)) rga_dump_job_image(job); - if (DEBUGGER_EN(TIME)) { - pr_info("hw use time = %lld\n", ktime_us_delta(now, job->hw_running_time)); - pr_info("(pid:%d) job done use time = %lld\n", job->pid, - ktime_us_delta(now, job->timestamp)); - } + if (DEBUGGER_EN(TIME)) + pr_info("request[%d], hardware[%s] cost time %lld us\n", + job->request_id, + rga_get_core_name(scheduler->core), + ktime_us_delta(now, job->hw_running_time)); rga_mm_unmap_job_info(job); @@ -918,8 +920,6 @@ int rga_request_release_signal(struct rga_scheduler_t *scheduler, struct rga_job spin_unlock_irqrestore(&request->lock, flags); - rga_job_cleanup(job); - if ((failed_count + finished_count) >= request->task_count) { spin_lock_irqsave(&request->lock, flags); @@ -953,6 +953,13 @@ int rga_request_release_signal(struct rga_scheduler_t *scheduler, struct rga_job mutex_unlock(&request_manager->lock); + if (DEBUGGER_EN(TIME)) + pr_info("request[%d], job done total cost time %lld us\n", + job->request_id, + ktime_us_delta(ktime_get(), job->timestamp)); + + rga_job_cleanup(job); + return 0; } diff --git a/drivers/video/rockchip/rga3/rga_mm.c b/drivers/video/rockchip/rga3/rga_mm.c index fb10f161c053..140952459f11 100644 --- a/drivers/video/rockchip/rga3/rga_mm.c +++ b/drivers/video/rockchip/rga3/rga_mm.c @@ -1996,6 +1996,7 @@ error_unmap_buffer: int rga_mm_map_job_info(struct rga_job *job) { int ret; + ktime_t timestamp = ktime_get(); if (job->flags & RGA_JOB_USE_HANDLE) { ret = rga_mm_get_handle_info(job); @@ -2003,12 +2004,20 @@ int rga_mm_map_job_info(struct rga_job *job) pr_err("failed to get buffer from handle\n"); return ret; } + + if (DEBUGGER_EN(TIME)) + pr_info("request[%d], get buffer_handle info cost %lld us\n", + job->request_id, ktime_us_delta(ktime_get(), timestamp)); } else { ret = rga_mm_map_buffer_info(job); if (ret < 0) { pr_err("failed to map buffer\n"); return ret; } + + if (DEBUGGER_EN(TIME)) + pr_info("request[%d], map buffer cost %lld us\n", + job->request_id, ktime_us_delta(ktime_get(), timestamp)); } return 0; @@ -2016,10 +2025,21 @@ int rga_mm_map_job_info(struct rga_job *job) void rga_mm_unmap_job_info(struct rga_job *job) { - if (job->flags & RGA_JOB_USE_HANDLE) + ktime_t timestamp = ktime_get(); + + if (job->flags & RGA_JOB_USE_HANDLE) { rga_mm_put_handle_info(job); - else + + if (DEBUGGER_EN(TIME)) + pr_info("request[%d], put buffer_handle info cost %lld us\n", + job->request_id, ktime_us_delta(ktime_get(), timestamp)); + } else { rga_mm_unmap_buffer_info(job); + + if (DEBUGGER_EN(TIME)) + pr_info("request[%d], unmap buffer cost %lld us\n", + job->request_id, ktime_us_delta(ktime_get(), timestamp)); + } } uint32_t rga_mm_import_buffer(struct rga_external_buffer *external_buffer,