mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 19:30:30 +09:00
video: rockchip: mpp: common: Add hardware register dump
1. Add hardware register dump function. 2. Dump irq_status on error when debug flag is set. Signed-off-by: Herman Chen <herman.chen@rock-chips.com> Change-Id: Iad4f4af98756e02438d82b231b53b4eefb0bd632
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user