deinterlace: add retry for pre timeout [1/1]

PD#SWPL-13664

Problem:
when open some special UI app, DI will have a lot of timeout,
this cause display  abnormal.

Solution:
add retry after timeout;

Verify:
tl1

Change-Id: I3316252577bad218256651ebbc6d4fd8b25acb12
Signed-off-by: Jihong Sui <jihong.sui@amlogic.com>
This commit is contained in:
Jihong Sui
2019-09-03 15:21:04 +08:00
committed by Tao Zeng
parent 0326f6feb7
commit 4a0dc752bd
2 changed files with 33 additions and 3 deletions

View File

@@ -6673,6 +6673,8 @@ static void di_unreg_process_irq(void)
up(&di_sema);
}
#endif
/*dbg*/
pr_info("di:retry cnt=%d\n", di_pre_stru.retry_cnt);
}
static void di_reg_process(void)
@@ -6986,6 +6988,11 @@ static void di_reg_process_irq(void)
cue_int(vframe);
if (de_devp->flags & DI_LOAD_REG_FLAG)
up(&di_sema);
di_pre_stru.retry_en = false;
di_pre_stru.retry_cnt = 0;
di_pre_stru.retry_index = 0;
init_flag = 1;
di_pre_stru.reg_req_flag_irq = 1;
}
@@ -7029,10 +7036,13 @@ static void di_process(void)
(di_pre_stru.pre_de_clear_flag == 2)) {
RDMA_WR(DI_INTR_CTRL, data32);
#endif
pre_process_time =
if (di_pre_stru.pre_de_clear_flag == 2) {
di_pre_stru.retry_en = true;
} else {
pre_process_time =
di_pre_stru.pre_de_busy_timer_count;
pre_de_done_buf_config();
pre_de_done_buf_config();
}
di_pre_stru.pre_de_process_done = 0;
di_pre_stru.pre_de_clear_flag = 0;
#ifdef CHECK_DI_DONE
@@ -7060,6 +7070,22 @@ static void di_process(void)
}
}
di_unlock_irqfiq_restore(irq_flag2);
/************/
if (di_pre_stru.retry_en &&
(di_pre_stru.pre_de_busy == 0) &&
(di_pre_stru.pre_de_process_done == 0) &&
!atomic_read(&di_flag_unreg) &&
(di_pre_stru.pre_de_process_flag == 0)) {
di_pre_stru.retry_index =
di_pre_stru.field_count_for_cont;
di_pre_stru.field_count_for_cont--;
di_print("di:retry set%d\n", di_pre_stru.retry_index);
pre_de_process();
di_pre_stru.retry_en = false;
di_pre_stru.retry_cnt++;
}
if ((di_pre_stru.pre_de_busy == 0) &&
(di_pre_stru.pre_de_process_done == 0)) {
if ((pre_run_flag == DI_RUN_FLAG_RUN) ||

View File

@@ -372,6 +372,10 @@ struct di_pre_stru_s {
struct combing_status_s *mtn_status;
u64 afbc_rls_time;
bool wait_afbc;
/*****************/
bool retry_en;
unsigned int retry_index;
unsigned int retry_cnt;
};
struct di_post_stru_s {