Camera出问题后如何强制dump出ispregister的数据
时间:10-02
整理:3721RD
点击:
[DESCRIPTION]
CAMERA出问题后如何强制dump出register的数据
[SOLUTION]
在L版本后,经常会遇到在main log看到isp发生了timeout但是在kernel log却没有dump出
register.为了方便分析,把register dump的方法流程如下:
1. 若已经是eng 版本, 那先从kernel里面先看发生timeout的user number.
<3>[ 1743.785585] (1)[8027:EisoThreadLoop][ISP] [ISP_WaitIrq, line5842] ERROR:
WaitIrq Timeout User(5), Clear(0), Type(0), IrqStatus(0x00011001)
, WaitStatus(0x00000400), Timeout(501)
通过代码以看出,发生timeout的类型是user number是5对应的代码里面没有加上这个判断

通过上面的if判断可以得知,目前代码里面只有2种user number的时候才会打印出isp register,那
目前user number有5个如下:

那对应上面的log,把这个if条件修改即可以打印出来需要的isp register.
if ((WaitIrq->bDumpReg) ||(WaitIrq->UserNumber==ISP_IRQ_USER_3A)||(WaitIrq-
>UserNumber==ISP_IRQ_USER_MW) ||(WaitIrq->UserNumber==ISP_IRQ_USER_EIS))
2. 那如果发现目前是user 版本, 就需要让客户改成eng 版本就可以dump出相关isp rigster.
3. 若是要在user 版本也强制打印出isp register,需要将以下地方的LOG_DBG改成LOG_ERR.
camera_isp.c
1).
#define RegDump(start, end) {\
MUINT32 i;\
for (i = start; i <= end; i += 0x10) {\
LOG_DBG("[0x%08X %08X],[0x%08X %08X],[0x%08X %08X],[0x%08X %08X]", (unsigned
int)(ISP_TPIPE_ADDR + i), (unsigned int)ISP_RD32(ISP_ADDR + i),\
(unsigned int)(ISP_TPIPE_ADDR + i+0x4), (unsigned int)ISP_RD32(ISP_ADDR + i+0x4),\
(unsigned int)(ISP_TPIPE_ADDR + i+0x8), (unsigned int)ISP_RD32(ISP_ADDR + i+0x8),\
(unsigned int)(ISP_TPIPE_ADDR + i+0xc), (unsigned int)ISP_RD32(ISP_ADDR + i+0xc));\
} \
}
2).
static MINT32 ISP_DumpReg(void)
{
..........
..........
LOG_DBG(......)
CAMERA出问题后如何强制dump出register的数据
[SOLUTION]
在L版本后,经常会遇到在main log看到isp发生了timeout但是在kernel log却没有dump出
register.为了方便分析,把register dump的方法流程如下:
1. 若已经是eng 版本, 那先从kernel里面先看发生timeout的user number.
<3>[ 1743.785585] (1)[8027:EisoThreadLoop][ISP] [ISP_WaitIrq, line5842] ERROR:
WaitIrq Timeout User(5), Clear(0), Type(0), IrqStatus(0x00011001)
, WaitStatus(0x00000400), Timeout(501)
通过代码以看出,发生timeout的类型是user number是5对应的代码里面没有加上这个判断

通过上面的if判断可以得知,目前代码里面只有2种user number的时候才会打印出isp register,那
目前user number有5个如下:

那对应上面的log,把这个if条件修改即可以打印出来需要的isp register.
if ((WaitIrq->bDumpReg) ||(WaitIrq->UserNumber==ISP_IRQ_USER_3A)||(WaitIrq-
>UserNumber==ISP_IRQ_USER_MW) ||(WaitIrq->UserNumber==ISP_IRQ_USER_EIS))
2. 那如果发现目前是user 版本, 就需要让客户改成eng 版本就可以dump出相关isp rigster.
3. 若是要在user 版本也强制打印出isp register,需要将以下地方的LOG_DBG改成LOG_ERR.
camera_isp.c
1).
#define RegDump(start, end) {\
MUINT32 i;\
for (i = start; i <= end; i += 0x10) {\
LOG_DBG("[0x%08X %08X],[0x%08X %08X],[0x%08X %08X],[0x%08X %08X]", (unsigned
int)(ISP_TPIPE_ADDR + i), (unsigned int)ISP_RD32(ISP_ADDR + i),\
(unsigned int)(ISP_TPIPE_ADDR + i+0x4), (unsigned int)ISP_RD32(ISP_ADDR + i+0x4),\
(unsigned int)(ISP_TPIPE_ADDR + i+0x8), (unsigned int)ISP_RD32(ISP_ADDR + i+0x8),\
(unsigned int)(ISP_TPIPE_ADDR + i+0xc), (unsigned int)ISP_RD32(ISP_ADDR + i+0xc));\
} \
}
2).
static MINT32 ISP_DumpReg(void)
{
..........
..........
LOG_DBG(......)
