media: rockchip: isp: more isp state for debug

Change-Id: I3b47effb53080bfb751fc293567abd666917934e
Signed-off-by: Cai YiWei <cyw@rock-chips.com>
This commit is contained in:
Cai YiWei
2020-07-20 14:54:20 +08:00
committed by Tao Huang
parent ddd2bba26f
commit df47abdafa
5 changed files with 27 additions and 12 deletions

View File

@@ -1533,8 +1533,9 @@ static int mi_frame_end(struct rkisp_stream *stream)
stream->id == RKISP_STREAM_DMATX1 ||
stream->id == RKISP_STREAM_DMATX2))
v4l2_info(&isp_dev->v4l2_dev,
"no available stream(%d) buffer, use dummy\n",
stream->id);
"tx stream:%d lose frame:%d, isp state:0x%x frame:%d\n",
stream->id, atomic_read(&stream->sequence) - 1,
isp_dev->isp_state, isp_dev->dmarx_dev.cur_frame.id);
if (stream->curr_buf &&
(!interlaced ||
@@ -1906,7 +1907,7 @@ static void rkisp_stream_stop(struct rkisp_stream *stream)
stream->stopping = true;
stream->ops->stop_mi(stream);
if (dev->isp_state == ISP_START &&
if ((dev->isp_state & ISP_START) &&
dev->isp_inp != INP_DMARX_ISP) {
ret = wait_event_timeout(stream->done,
!stream->streaming,

View File

@@ -477,7 +477,7 @@ int rkisp_csi_trigger_event(struct rkisp_csi_device *csi, void *arg)
csi->is_isp_end = true;
/* isp doesn't ready to read back */
if (dev->isp_state != ISP_START) {
if (!(dev->isp_state & ISP_START)) {
if (trigger)
kfifo_in(fifo, trigger, sizeof(*trigger));
csi->is_isp_end = true;

View File

@@ -87,9 +87,13 @@ enum rkisp_isp_ver {
};
enum rkisp_isp_state {
ISP_STOP = 0,
ISP_START,
ISP_ERROR
ISP_FRAME_END = BIT(0),
ISP_FRAME_IN = BIT(1),
ISP_FRAME_VS = BIT(2),
ISP_STOP = BIT(8),
ISP_START = BIT(9),
ISP_ERROR = BIT(10),
};
enum rkisp_isp_inp {

View File

@@ -405,8 +405,7 @@ static void dmarx_stop(struct rkisp_stream *stream)
int ret = 0;
stream->stopping = true;
if (dev->isp_state == ISP_START &&
!stream->frame_end) {
if ((dev->isp_state & ISP_START) && !stream->frame_end) {
ret = wait_event_timeout(stream->done,
!stream->streaming,
msecs_to_jiffies(100));

View File

@@ -434,7 +434,15 @@ u32 rkisp_mbus_pixelcode_to_v4l2(u32 pixelcode)
return pixelformat;
}
/**************** register operations ****************/
static void rkisp_set_state(struct rkisp_device *dev, u32 state)
{
u32 mask = 0xff;
if (state < ISP_STOP)
mask = 0xff00;
dev->isp_state &= mask;
dev->isp_state |= state;
}
static void rkisp_config_clk(struct rkisp_device *dev, int on)
{
@@ -965,7 +973,7 @@ static int rkisp_isp_stop(struct rkisp_device *dev)
#endif
}
}
dev->isp_state = ISP_STOP;
rkisp_set_state(dev, ISP_STOP);
if (dev->isp_ver == ISP_V20)
kfifo_reset(&dev->csi_dev.rdbk_kfifo);
@@ -2214,6 +2222,7 @@ void rkisp_isp_isr(unsigned int isp_mis,
/* start edge of v_sync */
if (isp_mis & CIF_ISP_V_START) {
rkisp_set_state(dev, ISP_FRAME_VS);
dev->csi_dev.is_isp_end = false;
/* filt v_sync when frame read back mode */
if (dev->csi_dev.filt_state[CSI_F_VS]) {
@@ -2270,7 +2279,7 @@ vs_skip:
if (dev->isp_err_cnt++ > RKISP_CONTI_ERR_MAX) {
rkisp_isp_stop(dev);
dev->isp_state = ISP_ERROR;
rkisp_set_state(dev, ISP_ERROR);
v4l2_err(&dev->v4l2_dev,
"Too many isp error, stop isp!\n");
}
@@ -2287,6 +2296,7 @@ vs_skip:
/* sampled input frame is complete */
if (isp_mis & CIF_ISP_FRAME_IN) {
rkisp_set_state(dev, ISP_FRAME_IN);
writel(CIF_ISP_FRAME_IN, base + CIF_ISP_ICR);
isp_mis_tmp = readl(base + CIF_ISP_MIS);
if (isp_mis_tmp & CIF_ISP_FRAME_IN)
@@ -2299,6 +2309,7 @@ vs_skip:
/* frame was completely put out */
if (isp_mis & CIF_ISP_FRAME) {
/* Clear Frame In (ISP) */
rkisp_set_state(dev, ISP_FRAME_END);
writel(CIF_ISP_FRAME, base + CIF_ISP_ICR);
isp_mis_tmp = readl(base + CIF_ISP_MIS);
if (isp_mis_tmp & CIF_ISP_FRAME)