av1: CB2 fix playback crash problems in specail cases. [1/1]

PD#SWPL-191799

Problem:
Because isr fun cannot run in time, timeout triggers a decoding exception.

Solution:
Turn off the timer function in isr to prevent both timeout and isr fun
from being triggered.

Verify:
S5.

Change-Id: I84ee7a7fa7be83523611c4cf1bbdfaae11dccb6d
Signed-off-by: gan.zhang <gan.zhang@amlogic.com>
diff --git a/drivers/frame_provider/decoder/vav1_fb/vav1_fb.c b/drivers/frame_provider/decoder/vav1_fb/vav1_fb.c
index c18988e..340a820 100644
--- a/drivers/frame_provider/decoder/vav1_fb/vav1_fb.c
+++ b/drivers/frame_provider/decoder/vav1_fb/vav1_fb.c
@@ -1205,6 +1205,7 @@
 		return;
 	}
 
+	reset_process_time_back(hw);
 	hw->timeout_num_back++;
 	av1_print(hw, 0, "%s decoder timeout, lcu 0x%x \n", __func__, READ_VREG(HEVC_PARSER_LCU_START));
 	if (hw->front_back_mode == 1) {
@@ -1225,7 +1226,6 @@
 	hevc->decoding_pic = NULL;
 	hevc->dec_result = DEC_RESULT_DONE;
 #endif
-	reset_process_time_back(hw);
 
 	if (work_pending(&hw->work_back))
 		return;
@@ -9635,7 +9635,6 @@
 		) {
 		hw->front_irq_time = local_clock();
 		if (hw->m_ins_flag) {
-			reset_process_time(hw);
 			if (!vdec_frame_based(hw_to_vdec(hw)))
 				dec_again_process(hw);
 			else {
@@ -9705,7 +9704,7 @@
 				//config_next_ref_info_hw(hw);
 			}
 #endif
-			reset_process_time(hw);
+
 #ifdef NEW_FB_CODE
 			if ((hw->front_back_mode != 1) && (hw->front_back_mode != 3)) {
 #endif
@@ -9867,8 +9866,6 @@
 
 	if (dec_status == AOM_EOS) {
 		DEBUG_PRINT_FUNC_LINE("eos status in");
-		if (hw->m_ins_flag)
-			reset_process_time(hw);
 
 		av1_print(hw, AOM_DEBUG_HW_MORE, "AV1_EOS, flush buffer\r\n");
 
@@ -9892,8 +9889,6 @@
 		av1_print(hw, AOM_DEBUG_HW_MORE, "av1 decode oversize !!\n");
 		hw->fatal_error |= DECODER_FATAL_ERROR_SIZE_OVERFLOW;
 		hw->process_busy = 0;
-		if (hw->m_ins_flag)
-			reset_process_time(hw);
 		return IRQ_HANDLED;
 	}
 
@@ -10033,9 +10028,6 @@
 	if (hw->frame_decoded)
 		hw->one_compressed_data_done = 1;
 
-	if (hw->m_ins_flag)
-		reset_process_time(hw);
-
 	if (hw->process_state != PROC_STATE_SENDAGAIN
 		) {
 		if (hw->one_compressed_data_done) {
@@ -10360,6 +10352,8 @@
 	}
 	ATRACE_COUNTER(hw->trace.decode_time_name, DECODER_ISR_END);
 	DEBUG_PRINT_FUNC_LINE("vav1_isr_end");
+	if (hw->m_ins_flag)
+		reset_process_time(hw);
 	return IRQ_WAKE_THREAD;
 }
 
@@ -12573,7 +12567,8 @@
 
 		return IRQ_HANDLED;
 	}
-	/**/
+
+	reset_process_time_back(hw);
 	return IRQ_WAKE_THREAD;
 }
 #if 1
@@ -12779,7 +12774,6 @@
 			"fg_data0 0x%x fg_data1 0x%x fg_valid %d\n",
 			fg_reg0, fg_reg1, hw->fgs_valid);
 
-		reset_process_time_back(hw);
 		if (hw->front_back_mode == 1) {
 			if (front_back_debug & 2) {
 				printk("BackEnd data done %d, fb_rd_pos %d pic %px, crc (%x, %x), y_crc (%x, %x), c_crc (%x, %x)\n",
diff --git a/drivers/frame_provider/decoder_v4l/vav1_fb/vav1_fb_v4l.c b/drivers/frame_provider/decoder_v4l/vav1_fb/vav1_fb_v4l.c
index 5349307..ef24b23 100644
--- a/drivers/frame_provider/decoder_v4l/vav1_fb/vav1_fb_v4l.c
+++ b/drivers/frame_provider/decoder_v4l/vav1_fb/vav1_fb_v4l.c
@@ -1187,6 +1187,8 @@
 
 static void timeout_process_back(struct AV1HW_s *hw)
 {
+	reset_process_time_back(hw);
+
 	hw->timeout_num_back++;
 	av1_print(hw, 0, "%s decoder timeout\n", __func__);
 	if (hw->front_back_mode == 1) {
@@ -1207,7 +1209,6 @@
 	hevc->decoding_pic = NULL;
 	hevc->dec_result = DEC_RESULT_DONE;
 #endif
-	reset_process_time_back(hw);
 
 	if (work_pending(&hw->work_back))
 		return;
@@ -9224,7 +9225,6 @@
 		) {
 		hw->front_irq_time = local_clock();
 		if (hw->m_ins_flag) {
-			reset_process_time(hw);
 			if (!vdec_frame_based(hw_to_vdec(hw))) {
 				av1_buf_ref_process_for_exception(hw);
 				dec_again_process(hw);
@@ -9291,7 +9291,6 @@
 				hw->config_next_ref_info_flag = 1; /*to do: low_latency_flag  case*/
 			}
 #endif
-			reset_process_time(hw);
 
 #ifdef NEW_FB_CODE
 			if ((hw->front_back_mode != 1) && (hw->front_back_mode != 3)) {
@@ -9460,9 +9459,6 @@
 	}
 
 	if (dec_status == AOM_EOS) {
-		if (hw->m_ins_flag)
-			reset_process_time(hw);
-
 		av1_print(hw, AOM_DEBUG_HW_MORE, "AV1_EOS, flush buffer\r\n");
 
 		av1_postproc(hw);
@@ -9486,8 +9482,6 @@
 
 		hw->fatal_error |= DECODER_FATAL_ERROR_SIZE_OVERFLOW;
 		hw->process_busy = 0;
-		if (hw->m_ins_flag)
-			reset_process_time(hw);
 		return IRQ_HANDLED;
 	}
 
@@ -9713,9 +9707,6 @@
 	if (hw->frame_decoded)
 		hw->one_compressed_data_done = 1;
 
-	if (hw->m_ins_flag)
-		reset_process_time(hw);
-
 	if (hw->process_state != PROC_STATE_SENDAGAIN) {
 	    if (hw->one_compressed_data_done) {
 	        av1_postproc(hw);
@@ -9922,6 +9913,9 @@
 			return IRQ_HANDLED;
 		}
 	}
+
+	if (hw->m_ins_flag)
+		reset_process_time(hw);
 	ATRACE_COUNTER(hw->trace.decode_time_name, DECODER_ISR_END);
 	return IRQ_WAKE_THREAD;
 }
@@ -12045,6 +12039,7 @@
 
 		return IRQ_HANDLED;
 	}
+	reset_process_time_back(hw);
 	return IRQ_WAKE_THREAD;
 }
 #if 1
@@ -12258,7 +12253,6 @@
 			"fg_data0 0x%x fg_data1 0x%x fg_valid %d\n",
 			fg_reg0, fg_reg1, hw->fgs_valid);
 
-		reset_process_time_back(hw);
 		if (hw->front_back_mode == 1) {
 			if (front_back_debug & 2) {
 				printk("BackEnd data done %d, fb_rd_pos %d pic %px, crc (%x, %x), y_crc (%x, %x), c_crc (%x, %x)\n",