From 7dbb2695f08dc0e339e435fced8eb43bcc86fd10 Mon Sep 17 00:00:00 2001 From: Yu Qiaowei Date: Mon, 26 Aug 2024 11:33:17 +0800 Subject: [PATCH] video: rockchip: rga3: modify 'msg' debug log Signed-off-by: Yu Qiaowei Change-Id: I457297760e3ee725f31b957e5ff8df4bfad75a7e --- .../video/rockchip/rga3/include/rga_common.h | 2 + drivers/video/rockchip/rga3/rga2_reg_info.c | 7 +- drivers/video/rockchip/rga3/rga3_reg_info.c | 8 +- drivers/video/rockchip/rga3/rga_common.c | 133 ++++++++++++------ drivers/video/rockchip/rga3/rga_job.c | 34 +---- drivers/video/rockchip/rga3/rga_policy.c | 71 ++++++---- 6 files changed, 152 insertions(+), 103 deletions(-) diff --git a/drivers/video/rockchip/rga3/include/rga_common.h b/drivers/video/rockchip/rga3/include/rga_common.h index d6b88561bf29..6c64f74019c9 100644 --- a/drivers/video/rockchip/rga3/include/rga_common.h +++ b/drivers/video/rockchip/rga3/include/rga_common.h @@ -66,6 +66,8 @@ int rga_get_pixel_stride_from_format(uint32_t format); const char *rga_get_format_name(uint32_t format); const char *rga_get_render_mode_str(uint8_t mode); +const char *rga_get_store_mode_str(uint32_t mode); +const char *rga_get_interp_str(uint8_t interp); 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); diff --git a/drivers/video/rockchip/rga3/rga2_reg_info.c b/drivers/video/rockchip/rga3/rga2_reg_info.c index 1dd31ebf0cf5..a95b93173378 100644 --- a/drivers/video/rockchip/rga3/rga2_reg_info.c +++ b/drivers/video/rockchip/rga3/rga2_reg_info.c @@ -2621,10 +2621,11 @@ static void rga2_soft_reset(struct rga_scheduler_t *scheduler) } if (i == RGA_RESET_TIMEOUT) - rga_err("RAG2 core[%d] soft reset timeout.\n", scheduler->core); + rga_err("%s[%#x] soft reset timeout.\n", + rga_get_core_name(scheduler->core), scheduler->core); else - rga_log("RGA2 core[%d] soft reset complete.\n", scheduler->core); - + rga_log("%s[%#x] soft reset complete.\n", + rga_get_core_name(scheduler->core), scheduler->core); } static int rga2_check_param(struct rga_job *job, diff --git a/drivers/video/rockchip/rga3/rga3_reg_info.c b/drivers/video/rockchip/rga3/rga3_reg_info.c index f70f5a404f62..0bec4250e7fb 100644 --- a/drivers/video/rockchip/rga3/rga3_reg_info.c +++ b/drivers/video/rockchip/rga3/rga3_reg_info.c @@ -1741,11 +1741,13 @@ static void rga3_soft_reset(struct rga_scheduler_t *scheduler) } if (i == RGA_RESET_TIMEOUT) - rga_err("RGA3 core[%d] soft reset timeout. SYS_CTRL[0x%x], RO_SRST[0x%x]\n", - scheduler->core, rga_read(RGA3_SYS_CTRL, scheduler), + rga_err("%s[%#x] soft reset timeout. SYS_CTRL[0x%x], RO_SRST[0x%x]\n", + rga_get_core_name(scheduler->core), scheduler->core, + rga_read(RGA3_SYS_CTRL, scheduler), rga_read(RGA3_RO_SRST, scheduler)); else - rga_log("RGA3 core[%d] soft reset complete.\n", scheduler->core); + rga_log("%s[%#x] soft reset complete.\n", + rga_get_core_name(scheduler->core), scheduler->core); } static int rga3_scale_check(struct rga_job *job, const struct rga3_req *req) diff --git a/drivers/video/rockchip/rga3/rga_common.c b/drivers/video/rockchip/rga3/rga_common.c index b73daba36c13..a8af72430303 100644 --- a/drivers/video/rockchip/rga3/rga_common.c +++ b/drivers/video/rockchip/rga3/rga_common.c @@ -534,6 +534,42 @@ const char *rga_get_render_mode_str(uint8_t mode) } } +const char *rga_get_store_mode_str(uint32_t mode) +{ + switch (mode) { + case RGA_RASTER_MODE: + return "raster"; + case RGA_FBC_MODE: + return "afbc16x16"; + case RGA_TILE_MODE: + return "tile8x8"; + case RGA_TILE4x4_MODE: + return "tile4x4"; + case RGA_RKFBC_MODE: + return "rkfbc64x4"; + case RGA_AFBC32x8_MODE: + return "afbc32x8"; + default: + return "unknown"; + } +} + +const char *rga_get_interp_str(uint8_t interp) +{ + switch (interp) { + case RGA_INTERP_DEFAULT: + return "default"; + case RGA_INTERP_LINEAR: + return "bi-linear"; + case RGA_INTERP_BICUBIC: + return "bi-cubic"; + case RGA_INTERP_AVERAGE: + return "average_filter"; + default: + return "unknown"; + } +} + const char *rga_get_rotate_mode_str(uint8_t mode) { switch (mode) { @@ -824,51 +860,68 @@ void rga_dump_external_buffer(struct rga_external_buffer *buffer) rga_dump_memory_parm(&buffer->memory_parm); } +static void rga_dump_image_info(struct rga_request *request, const char *name, + struct rga_img_info_t *img, uint8_t handle_flag, int need_mmu) +{ + if (handle_flag) { + if (img->uv_addr && img->v_addr) + rga_req_log(request, "%s: handle[y,uv,v] = [%ld(%#lx), %ld(%#lx), %ld(%#lx)], mode = %s\n", + name, + (unsigned long)img->yrgb_addr, (unsigned long)img->yrgb_addr, + (unsigned long)img->uv_addr, (unsigned long)img->uv_addr, + (unsigned long)img->v_addr, (unsigned long)img->v_addr, + rga_get_store_mode_str(img->rd_mode)); + else if (img->uv_addr) + rga_req_log(request, "%s: handle[y,uv] = [%ld(%#lx), %ld(%#lx)], mode = %s\n", + name, + (unsigned long)img->yrgb_addr, (unsigned long)img->yrgb_addr, + (unsigned long)img->uv_addr, (unsigned long)img->uv_addr, + rga_get_store_mode_str(img->rd_mode)); + else + rga_req_log(request, "%s: handle = %ld(%#lx), mode = %s\n", + name, + (unsigned long)img->yrgb_addr, (unsigned long)img->yrgb_addr, + rga_get_store_mode_str(img->rd_mode)); + } else { + if (img->yrgb_addr) + rga_req_log(request, "%s: fd = %ld(%#lx), mode = %s\n", + name, + (unsigned long)img->yrgb_addr, (unsigned long)img->yrgb_addr, + rga_get_store_mode_str(img->rd_mode)); + else if (img->uv_addr) + rga_req_log(request, "%s: %s = %#lx, mode = %s\n", + name, + need_mmu ? "virt_addr" : "phys_addr", (unsigned long)img->uv_addr, + rga_get_store_mode_str(img->rd_mode)); + } + + rga_req_log(request, "%s: rect[x,y,w,h] = [%d, %d, %d, %d], stride[w,h] = [%d, %d], format = %s(%#x)\n", + name, + img->x_offset, img->y_offset, img->act_w, img->act_h, img->vir_w, img->vir_h, + rga_get_format_name(img->format), img->format); +} + void rga_dump_req(struct rga_request *request, struct rga_req *req) { - rga_req_log(request, "render_mode = %d, bitblit_mode=%d, rotate_mode = %d\n", + rga_req_log(request, "render_mode = %d, bitblit_mode = %d, rotate_mode = %d\n", req->render_mode, req->bsfilter_flag, req->rotate_mode); - rga_req_log(request, "src: y = %lx uv = %lx v = %lx aw = %d ah = %d vw = %d vh = %d\n", - (unsigned long)req->src.yrgb_addr, - (unsigned long)req->src.uv_addr, - (unsigned long)req->src.v_addr, - req->src.act_w, req->src.act_h, - req->src.vir_w, req->src.vir_h); - rga_req_log(request, "src: xoff = %d, yoff = %d, format = 0x%x, rd_mode = %d\n", - req->src.x_offset, req->src.y_offset, - req->src.format, req->src.rd_mode); + rga_dump_image_info(request, "src", &req->src, req->handle_flag, + (req->mmu_info.mmu_flag >> 8) & 1); + if (req->pat.yrgb_addr != 0 || req->pat.uv_addr != 0 || req->pat.v_addr != 0) + rga_dump_image_info(request, "pat", &req->pat, req->handle_flag, + (req->mmu_info.mmu_flag >> 9) & 1); + rga_dump_image_info(request, "dst", &req->dst, req->handle_flag, + (req->mmu_info.mmu_flag >> 10) & 1); - if (req->pat.yrgb_addr != 0 || req->pat.uv_addr != 0 - || req->pat.v_addr != 0) { - rga_req_log(request, "pat: y=%lx uv=%lx v=%lx aw=%d ah=%d vw=%d vh=%d\n", - (unsigned long)req->pat.yrgb_addr, - (unsigned long)req->pat.uv_addr, - (unsigned long)req->pat.v_addr, - req->pat.act_w, req->pat.act_h, - req->pat.vir_w, req->pat.vir_h); - rga_req_log(request, "pat: xoff = %d yoff = %d, format = 0x%x, rd_mode = %d\n", - req->pat.x_offset, req->pat.y_offset, - req->pat.format, req->pat.rd_mode); - } - - rga_req_log(request, "dst: y=%lx uv=%lx v=%lx aw=%d ah=%d vw=%d vh=%d\n", - (unsigned long)req->dst.yrgb_addr, - (unsigned long)req->dst.uv_addr, - (unsigned long)req->dst.v_addr, - req->dst.act_w, req->dst.act_h, - req->dst.vir_w, req->dst.vir_h); - rga_req_log(request, "dst: xoff = %d, yoff = %d, format = 0x%x, rd_mode = %d\n", - req->dst.x_offset, req->dst.y_offset, - req->dst.format, req->dst.rd_mode); - - rga_req_log(request, "mmu: mmu_flag=%x en=%x\n", + rga_req_log(request, "mmu: mmu_flag = %#x en = %#x\n", req->mmu_info.mmu_flag, req->mmu_info.mmu_en); - rga_req_log(request, "alpha: rop_mode = %x\n", req->alpha_rop_mode); - rga_req_log(request, "yuv2rgb mode is %x\n", req->yuv2rgb_mode); - rga_req_log(request, "imterplotion: horiz = 0x%x, verti = 0x%x\n", - req->interp.horiz, req->interp.verti); - rga_req_log(request, "set core = %d, priority = %d, in_fence_fd = %d\n", - req->core, req->priority, req->in_fence_fd); + rga_req_log(request, "alpha: rop_mode = %#x\n", req->alpha_rop_mode); + rga_req_log(request, "csc = %#x\n", req->yuv2rgb_mode); + rga_req_log(request, "imterplotion: horiz = %s(%#x), verti = %s(%#x)\n", + rga_get_interp_str(req->interp.horiz), req->interp.horiz, + rga_get_interp_str(req->interp.verti), req->interp.verti); + rga_req_log(request, "core_mask = %#x, priority = %d, in_fence = %d(%#x)\n", + req->core, req->priority, req->in_fence_fd, req->in_fence_fd); } diff --git a/drivers/video/rockchip/rga3/rga_job.c b/drivers/video/rockchip/rga3/rga_job.c index e4f00a7e144f..b17568530c93 100644 --- a/drivers/video/rockchip/rga3/rga_job.c +++ b/drivers/video/rockchip/rga3/rga_job.c @@ -151,33 +151,6 @@ static struct rga_job *rga_job_alloc(struct rga_req *rga_command_base) return job; } -static void rga_job_dump_info(struct rga_job *job) -{ - rga_job_log(job, "job: reqeust_id = %d, priority = %d, core = %d\n", - job->request_id, job->priority, job->core); -} - -void rga_job_scheduler_dump_info(struct rga_scheduler_t *scheduler) -{ - struct rga_job *job_pos; - - lockdep_assert_held(&scheduler->irq_lock); - - rga_log("===============================================================\n"); - rga_log("%s core = %d job_count = %d status = %d\n", - dev_driver_string(scheduler->dev), - scheduler->core, scheduler->job_count, scheduler->status); - - if (scheduler->running_job) - rga_job_dump_info(scheduler->running_job); - - list_for_each_entry(job_pos, &scheduler->todo_list, head) { - rga_job_dump_info(job_pos); - } - - rga_log("===============================================================\n"); -} - static int rga_job_run(struct rga_job *job, struct rga_scheduler_t *scheduler) { int ret = 0; @@ -198,10 +171,6 @@ static int rga_job_run(struct rga_job *job, struct rga_scheduler_t *scheduler) set_bit(RGA_JOB_STATE_RUNNING, &job->state); - /* for debug */ - if (DEBUGGER_EN(MSG)) - rga_job_dump_info(job); - return ret; } @@ -901,6 +870,9 @@ int rga_request_commit(struct rga_request *request) int i = 0; struct rga_job *job; + if (DEBUGGER_EN(MSG)) + rga_req_log(request, "commit process: %s\n", request->session->pname); + for (i = 0; i < request->task_count; i++) { struct rga_req *req = &(request->task_list[i]); diff --git a/drivers/video/rockchip/rga3/rga_policy.c b/drivers/video/rockchip/rga3/rga_policy.c index d24a28a7135c..4cb3bff7ee49 100644 --- a/drivers/video/rockchip/rga3/rga_policy.c +++ b/drivers/video/rockchip/rga3/rga_policy.c @@ -287,7 +287,7 @@ int rga_job_assign(struct rga_job *job) if (rga_base->core > RGA_NONE_CORE) { if (rga_base->core > RGA_CORE_MASK) { rga_job_err(job, "invalid setting core by user\n"); - goto finish; + return -1; } else if (rga_base->core & RGA_CORE_MASK) specified_cores = rga_base->core; } @@ -304,7 +304,8 @@ int rga_job_assign(struct rga_job *job) continue; if (DEBUGGER_EN(MSG)) - rga_job_log(job, "start policy on core = %d", scheduler->core); + rga_job_log(job, "start policy on %s(%#x)", + rga_get_core_name(scheduler->core), scheduler->core); if (scheduler->data->mmu == RGA_MMU && job->flags & RGA_JOB_UNSUPPORT_RGA_MMU) { @@ -316,7 +317,8 @@ int rga_job_assign(struct rga_job *job) if (feature > 0) { if (!(feature & data->feature)) { if (DEBUGGER_EN(MSG)) - rga_job_log(job, "core = %d, break on feature\n", + rga_job_log(job, "%s(%#x), break on feature\n", + rga_get_core_name(scheduler->core), scheduler->core); continue; } @@ -327,50 +329,67 @@ int rga_job_assign(struct rga_job *job) if (src1->yrgb_addr > 0) { if (!(src0->rd_mode & data->win[0].rd_mode)) { if (DEBUGGER_EN(MSG)) - rga_job_log(job, "core[%#x], src0 break on rd_mode[%#x]\n", - scheduler->core, src0->rd_mode); + rga_job_log(job, "%s(%#x), src0 break on %s(%#x)\n", + rga_get_core_name(scheduler->core), + scheduler->core, + rga_get_store_mode_str(src0->rd_mode), + src0->rd_mode); continue; } if (!(src1->rd_mode & data->win[1].rd_mode)) { if (DEBUGGER_EN(MSG)) - rga_job_log(job, "core[%#x], src1 break on rd_mode[%#x]\n", - scheduler->core, src1->rd_mode); + rga_job_log(job, "%s(%#x), src1 break on %s(%#x)\n", + rga_get_core_name(scheduler->core), + scheduler->core, + rga_get_store_mode_str(src1->rd_mode), + src1->rd_mode); continue; } if (!(dst->rd_mode & data->win[2].rd_mode)) { if (DEBUGGER_EN(MSG)) - rga_job_log(job, "core[%#x], dst break on rd_mode[%#x]\n", - scheduler->core, dst->rd_mode); + rga_job_log(job, "%s(%#x), dst break on %s(%#x)\n", + rga_get_core_name(scheduler->core), + scheduler->core, + rga_get_store_mode_str(dst->rd_mode), + dst->rd_mode); continue; } } else { if (!(src0->rd_mode & data->win[0].rd_mode)) { if (DEBUGGER_EN(MSG)) - rga_job_log(job, "core[%#x], src break on rd_mode[%#x]\n", - scheduler->core, src0->rd_mode); + rga_job_log(job, "%s(%#x), src break on %s(%#x)\n", + rga_get_core_name(scheduler->core), + scheduler->core, + rga_get_store_mode_str(src0->rd_mode), + src0->rd_mode); continue; } if (!(dst->rd_mode & data->win[2].rd_mode)) { if (DEBUGGER_EN(MSG)) - rga_job_log(job, "core[%#x], dst break on rd_mode[%#x]\n", - scheduler->core, dst->rd_mode); + rga_job_log(job, "%s(%#x), dst break on %s(%#x)\n", + rga_get_core_name(scheduler->core), + scheduler->core, + rga_get_store_mode_str(dst->rd_mode), + dst->rd_mode); continue; } } if (!rga_check_scale(job, data, rga_base)) { if (DEBUGGER_EN(MSG)) - rga_job_log(job, "core = %d, break on rga_check_scale", + rga_job_log(job, "%s(%#x), break on rga_check_scale", + rga_get_core_name(scheduler->core), scheduler->core); continue; } if (!rga_check_channel(job, data, src0, "src0", true, 0)) { if (DEBUGGER_EN(MSG)) - rga_job_log(job, "core = %d, break on src0", + rga_job_log(job, "%s(%#x), break on src0", + rga_get_core_name(scheduler->core), scheduler->core); continue; } @@ -378,7 +397,8 @@ int rga_job_assign(struct rga_job *job) if (src1->yrgb_addr > 0) { if (!rga_check_channel(job, data, src1, "src1", true, 1)) { if (DEBUGGER_EN(MSG)) - rga_job_log(job, "core = %d, break on src1", + rga_job_log(job, "%s(%#x), break on src1", + rga_get_core_name(scheduler->core), scheduler->core); continue; } @@ -387,14 +407,16 @@ int rga_job_assign(struct rga_job *job) if (!rga_check_channel(job, data, dst, "dst", false, 2)) { if (DEBUGGER_EN(MSG)) - rga_job_log(job, "core = %d, break on dst", + rga_job_log(job, "%s(%#x), break on dst", + rga_get_core_name(scheduler->core), scheduler->core); continue; } if (!rga_check_csc(data, rga_base)) { if (DEBUGGER_EN(MSG)) - rga_job_log(job, "core = %d, break on rga_check_csc", + rga_job_log(job, "%s(%#x), break on rga_check_csc", + rga_get_core_name(scheduler->core), scheduler->core); continue; } @@ -402,13 +424,9 @@ int rga_job_assign(struct rga_job *job) optional_cores |= scheduler->core; } - if (DEBUGGER_EN(MSG)) - rga_job_log(job, "optional_cores = %d\n", optional_cores); - if (optional_cores == 0) { - core = -1; - rga_job_err(job, "invalid function policy\n"); - goto finish; + rga_job_err(job, "no core match\n"); + return -1; } for (i = 0; i < rga_drvdata->num_of_scheduler; i++) { @@ -437,9 +455,10 @@ int rga_job_assign(struct rga_job *job) } /* TODO: need consider full load */ -finish: if (DEBUGGER_EN(MSG)) - rga_job_log(job, "assign core: %d\n", core); + rga_job_log(job, "matched cores = %#x, assign core: %s(%#x)\n", + optional_cores, + rga_get_core_name(core), core); return core; }