From 0e7abd67ecee19952915ddbf39d4d85ada1966b5 Mon Sep 17 00:00:00 2001 From: Yu Qiaowei Date: Thu, 29 May 2025 10:47:49 +0800 Subject: [PATCH] video: rockchip: rga3: "reg" debug log add iommu readback register printing Update driver version to 1.3.10 Signed-off-by: Yu Qiaowei Change-Id: I79b641e8b41d43c451988f278596f229e9e0fd2c --- .../rockchip/rga3/include/rga2_reg_info.h | 1 + .../rockchip/rga3/include/rga3_reg_info.h | 1 + drivers/video/rockchip/rga3/include/rga_drv.h | 2 +- drivers/video/rockchip/rga3/rga2_reg_info.c | 23 ++++++++++++++++++ drivers/video/rockchip/rga3/rga3_reg_info.c | 24 +++++++++++++++++++ 5 files changed, 50 insertions(+), 1 deletion(-) diff --git a/drivers/video/rockchip/rga3/include/rga2_reg_info.h b/drivers/video/rockchip/rga3/include/rga2_reg_info.h index 2aadfa65c9a6..187460833cf5 100644 --- a/drivers/video/rockchip/rga3/include/rga2_reg_info.h +++ b/drivers/video/rockchip/rga3/include/rga2_reg_info.h @@ -8,6 +8,7 @@ #define RGA2_CSC_REG_BASE 0x060 #define RGA2_OTHER_REG_BASE 0x090 #define RGA2_CMD_REG_BASE 0x100 +#define RGA2_IOMMU_REG_BASE 0xf00 /* sys reg */ #define RGA2_SYS_CTRL 0x000 diff --git a/drivers/video/rockchip/rga3/include/rga3_reg_info.h b/drivers/video/rockchip/rga3/include/rga3_reg_info.h index 1f9d66a5050e..50629a3fd994 100644 --- a/drivers/video/rockchip/rga3/include/rga3_reg_info.h +++ b/drivers/video/rockchip/rga3/include/rga3_reg_info.h @@ -6,6 +6,7 @@ #define RGA3_SYS_REG_BASE 0x000 #define RGA3_CMD_REG_BASE 0x100 +#define RGA3_IOMMU_REG_BASE 0xf00 /* sys reg */ #define RGA3_SYS_CTRL 0x000 diff --git a/drivers/video/rockchip/rga3/include/rga_drv.h b/drivers/video/rockchip/rga3/include/rga_drv.h index 0d41d4be2e8a..45b13b221292 100644 --- a/drivers/video/rockchip/rga3/include/rga_drv.h +++ b/drivers/video/rockchip/rga3/include/rga_drv.h @@ -88,7 +88,7 @@ #define DRIVER_MAJOR_VERISON 1 #define DRIVER_MINOR_VERSION 3 -#define DRIVER_REVISION_VERSION 9 +#define DRIVER_REVISION_VERSION 10 #define DRIVER_PATCH_VERSION #define DRIVER_VERSION (STR(DRIVER_MAJOR_VERISON) "." STR(DRIVER_MINOR_VERSION) \ diff --git a/drivers/video/rockchip/rga3/rga2_reg_info.c b/drivers/video/rockchip/rga3/rga2_reg_info.c index 98688ae20e05..35b4d4e11e2b 100644 --- a/drivers/video/rockchip/rga3/rga2_reg_info.c +++ b/drivers/video/rockchip/rga3/rga2_reg_info.c @@ -3035,6 +3035,27 @@ static void rga2_dump_read_back_cmd_reg(struct rga_job *job, struct rga_schedule cmd_reg[2 + i * 4], cmd_reg[3 + i * 4]); } +static void rga2_dump_read_back_iommu_reg(struct rga_job *job, struct rga_scheduler_t *scheduler) +{ + int i; + unsigned long flags; + uint32_t cmd_reg[12] = {0}; + + spin_lock_irqsave(&scheduler->irq_lock, flags); + + for (i = 0; i < 12; i++) + cmd_reg[i] = rga_read(RGA2_IOMMU_REG_BASE + i * 4, scheduler); + + spin_unlock_irqrestore(&scheduler->irq_lock, flags); + + rga_job_log(job, "IOMMU_READ_BACK_REG\n"); + for (i = 0; i < 3; i++) + rga_job_log(job, "0x%04x : %.8x %.8x %.8x %.8x\n", + RGA2_IOMMU_REG_BASE + i * 0x10, + cmd_reg[0 + i * 4], cmd_reg[1 + i * 4], + cmd_reg[2 + i * 4], cmd_reg[3 + i * 4]); +} + static void rga2_dump_read_back_reg(struct rga_job *job, struct rga_scheduler_t *scheduler) { rga2_dump_read_back_sys_reg(job, scheduler); @@ -3042,6 +3063,7 @@ static void rga2_dump_read_back_reg(struct rga_job *job, struct rga_scheduler_t if (scheduler->data->version > 0) rga2_dump_read_back_other_reg(job, scheduler); rga2_dump_read_back_cmd_reg(job, scheduler); + rga2_dump_read_back_iommu_reg(job, scheduler); } static void rga2_set_pre_intr_reg(struct rga_job *job, struct rga_scheduler_t *scheduler) @@ -3132,6 +3154,7 @@ static int rga2_set_reg(struct rga_job *job, struct rga_scheduler_t *scheduler) RGA2_CMD_REG_BASE + i * 0x10, cmd[0 + i * 4], cmd[1 + i * 4], cmd[2 + i * 4], cmd[3 + i * 4]); + rga2_dump_read_back_iommu_reg(scheduler->running_job, scheduler); } spin_lock_irqsave(&scheduler->irq_lock, flags); diff --git a/drivers/video/rockchip/rga3/rga3_reg_info.c b/drivers/video/rockchip/rga3/rga3_reg_info.c index d23ad4a8b971..535b61982c51 100644 --- a/drivers/video/rockchip/rga3/rga3_reg_info.c +++ b/drivers/video/rockchip/rga3/rga3_reg_info.c @@ -2089,6 +2089,27 @@ static void rga3_dump_read_back_reg(struct rga_job *job, struct rga_scheduler_t cmd_reg[2 + i * 4], cmd_reg[3 + i * 4]); } +static void rga3_dump_read_back_iommu_reg(struct rga_job *job, struct rga_scheduler_t *scheduler) +{ + int i; + unsigned long flags; + uint32_t cmd_reg[12] = {0}; + + spin_lock_irqsave(&scheduler->irq_lock, flags); + + for (i = 0; i < 12; i++) + cmd_reg[i] = rga_read(RGA3_IOMMU_REG_BASE + i * 4, scheduler); + + spin_unlock_irqrestore(&scheduler->irq_lock, flags); + + rga_job_log(job, "IOMMU_READ_BACK_REG\n"); + for (i = 0; i < 3; i++) + rga_job_log(job, "0x%04x : %.8x %.8x %.8x %.8x\n", + RGA3_IOMMU_REG_BASE + i * 0x10, + cmd_reg[0 + i * 4], cmd_reg[1 + i * 4], + cmd_reg[2 + i * 4], cmd_reg[3 + i * 4]); +} + static int rga3_set_reg(struct rga_job *job, struct rga_scheduler_t *scheduler) { int i; @@ -2117,6 +2138,8 @@ static int rga3_set_reg(struct rga_job *job, struct rga_scheduler_t *scheduler) RGA3_CMD_REG_BASE + i * 0x10, cmd[0 + i * 4], cmd[1 + i * 4], cmd[2 + i * 4], cmd[3 + i * 4]); + + rga3_dump_read_back_iommu_reg(job, scheduler); } /* All CMD finish int */ @@ -2151,6 +2174,7 @@ static int rga3_set_reg(struct rga_job *job, struct rga_scheduler_t *scheduler) if (DEBUGGER_EN(REG)) { rga3_dump_read_back_sys_reg(job, scheduler); rga3_dump_read_back_reg(job, scheduler); + rga3_dump_read_back_iommu_reg(job, scheduler); } return 0;