diff --git a/drivers/video/rockchip/mpp/mpp_common.c b/drivers/video/rockchip/mpp/mpp_common.c index 4a0779b51edd..319b07d83b15 100644 --- a/drivers/video/rockchip/mpp/mpp_common.c +++ b/drivers/video/rockchip/mpp/mpp_common.c @@ -1557,16 +1557,16 @@ int mpp_task_dump_mem_region(struct mpp_dev *mpp, int mpp_task_dump_reg(struct mpp_dev *mpp, struct mpp_task *task) { - u32 i, s, e; - if (!task) return -EIO; - mpp_err("--- dump register ---\n"); if (mpp_debug_unlikely(DEBUG_DUMP_ERR_REG)) { + mpp_err("--- dump task register ---\n"); if (task->reg) { - s = task->hw_info->reg_start; - e = task->hw_info->reg_end; + u32 i; + u32 s = task->hw_info->reg_start; + u32 e = task->hw_info->reg_end; + for (i = s; i <= e; i++) { u32 reg = i * sizeof(u32); @@ -1579,6 +1579,28 @@ int mpp_task_dump_reg(struct mpp_dev *mpp, return 0; } +int mpp_task_dump_hw_reg(struct mpp_dev *mpp, struct mpp_task *task) +{ + if (!task) + return -EIO; + + if (mpp_debug_unlikely(DEBUG_DUMP_ERR_REG)) { + u32 i; + u32 s = task->hw_info->reg_start; + u32 e = task->hw_info->reg_end; + + mpp_err("--- dump hardware register ---\n"); + for (i = s; i <= e; i++) { + u32 reg = i * sizeof(u32); + + mpp_err("reg[%03d]: %04x: 0x%08x\n", + i, reg, readl_relaxed(mpp->reg_base + reg)); + } + } + + return 0; +} + static int mpp_iommu_handle(struct iommu_domain *iommu, struct device *iommu_dev, unsigned long iova, @@ -1593,20 +1615,7 @@ static int mpp_iommu_handle(struct iommu_domain *iommu, return -EIO; mpp_task_dump_mem_region(mpp, task); - - if (mpp_debug_unlikely(DEBUG_DUMP_ERR_REG)) { - u32 i; - u32 s = task->hw_info->reg_start; - u32 e = task->hw_info->reg_end; - - mpp_err("--- dump register ---\n"); - for (i = s; i <= e; i++) { - u32 reg = i * sizeof(u32); - - mpp_err("reg[%03d]: %04x: 0x%08x\n", - i, reg, readl_relaxed(mpp->reg_base + reg)); - } - } + mpp_task_dump_hw_reg(mpp, task); if (mpp->iommu_info->hdl) mpp->iommu_info->hdl(iommu, iommu_dev, iova, status, arg); diff --git a/drivers/video/rockchip/mpp/mpp_common.h b/drivers/video/rockchip/mpp/mpp_common.h index a0a1b91fd81b..0fbea44164f0 100644 --- a/drivers/video/rockchip/mpp/mpp_common.h +++ b/drivers/video/rockchip/mpp/mpp_common.h @@ -500,6 +500,8 @@ int mpp_task_dump_mem_region(struct mpp_dev *mpp, struct mpp_task *task); int mpp_task_dump_reg(struct mpp_dev *mpp, struct mpp_task *task); +int mpp_task_dump_hw_reg(struct mpp_dev *mpp, + struct mpp_task *task); int mpp_dev_probe(struct mpp_dev *mpp, struct platform_device *pdev); diff --git a/drivers/video/rockchip/mpp/mpp_rkvdec2.c b/drivers/video/rockchip/mpp/mpp_rkvdec2.c index 3ca47f2ad548..e21cd3388e8e 100644 --- a/drivers/video/rockchip/mpp/mpp_rkvdec2.c +++ b/drivers/video/rockchip/mpp/mpp_rkvdec2.c @@ -371,8 +371,12 @@ static int rkvdec_isr(struct mpp_dev *mpp) mpp_debug(DEBUG_IRQ_STATUS, "irq_status: %08x\n", task->irq_status); err_mask = RKVDEC_COLMV_REF_ERR_STA | RKVDEC_BUF_EMPTY_STA | RKVDEC_TIMEOUT_STA | RKVDEC_ERROR_STA; - if (err_mask & task->irq_status) + if (err_mask & task->irq_status) { atomic_inc(&mpp->reset_request); + mpp_debug(DEBUG_DUMP_ERR_REG, "irq_status: %08x\n", + task->irq_status); + mpp_task_dump_hw_reg(mpp, mpp_task); + } mpp_task_finish(mpp_task->session, mpp_task); diff --git a/drivers/video/rockchip/mpp/mpp_rkvenc.c b/drivers/video/rockchip/mpp/mpp_rkvenc.c index e7c6b7177c1f..f8b292abcfdc 100644 --- a/drivers/video/rockchip/mpp/mpp_rkvenc.c +++ b/drivers/video/rockchip/mpp/mpp_rkvenc.c @@ -525,8 +525,11 @@ static int rkvenc_isr(struct mpp_dev *mpp) if (task->irq_status & RKVENC_INT_ERROR_BITS) { atomic_inc(&mpp->reset_request); /* dump register */ - if (mpp_debug_unlikely(DEBUG_DUMP_ERR_REG)) - mpp_task_dump_reg(mpp, mpp_task); + if (mpp_debug_unlikely(DEBUG_DUMP_ERR_REG)) { + mpp_debug(DEBUG_DUMP_ERR_REG, "irq_status: %08x\n", + task->irq_status); + mpp_task_dump_hw_reg(mpp, mpp_task); + } } /* unmap reserve buffer */