vdin: fix rdma overflow issue [1/1]

PD#SWPL-162066

Problem:
1 No rdma interrupts comes after rdma reset,
vdin donot configure rdma anymore cause overflow

Solution:
vdin trigger rdma if no rdma interrupts

Verify:
t963d4 kernel5.15

Change-Id: I90dded564ae50754f4396cadaacd7a4b444b3145
Signed-off-by: mingxiu.sun <mingxiu.sun@amlogic.com>
This commit is contained in:
mingxiu.sun
2024-04-19 20:05:35 +08:00
committed by gerrit autosubmit
parent ab38de3e8d
commit 1829df28bd
3 changed files with 12 additions and 1 deletions
+2
View File
@@ -2129,6 +2129,8 @@ static void vdin_dump_count(struct vdin_dev_s *devp)
pr_info("frame_drop_num:%d\n", devp->frame_drop_num);
pr_info("vdin_drop_cnt: %d\n", devp->vdin_drop_cnt);
pr_info("vdin_drop_num:%d\n", devp->vdin_drop_num);
pr_info("rdma_manual_cnt: %d,rdma_undone_cnt: %d\n",
devp->stats.rdma_manual_cnt, devp->rdma_undone_cnt);
pr_info("dbg_fr_ctl:%d,drop_ctl_cnt:%d\n", devp->dbg_fr_ctl, devp->vdin_drop_ctl_cnt);
vdin_dump_vs_info(devp);
+6 -1
View File
@@ -1057,6 +1057,7 @@ __maybe_unused static void vdin_rdma_irq(void *arg)
devp->flags_isr &= ~VDIN_FLAG_RDMA_DONE;
devp->rdma_irq_cnt++;
devp->rdma_undone_cnt = 0;
return;
}
__maybe_unused static struct rdma_op_s vdin_rdma_op[VDIN_MAX_DEVS];
@@ -1550,6 +1551,7 @@ int vdin_start_dec(struct vdin_dev_s *devp)
devp->vframe_wr_en = 1;
devp->vframe_wr_en_pre = 1;
devp->keystone_vframe_ready = 0;
devp->rdma_undone_cnt = 0;
memset(&devp->stats, 0, sizeof(devp->stats));
if (vdin_time_en)
pr_info("vdin.%d start time: %ums, run time:%ums.\n",
@@ -3752,7 +3754,8 @@ irq_handled:
spin_unlock_irqrestore(&devp->isr_lock, flags);
#ifdef CONFIG_AMLOGIC_MEDIA_RDMA
if ((devp->flags & VDIN_FLAG_RDMA_ENABLE) &&
(devp->flags_isr & VDIN_FLAG_RDMA_DONE)) {
((devp->flags_isr & VDIN_FLAG_RDMA_DONE) ||
devp->rdma_undone_cnt++ > VDIN_RDMA_UNDONE_MAX_CNT)) {
ret = rdma_config(devp->rdma_handle,
(devp->rdma_enable & 1) ?
devp->rdma_irq : RDMA_TRIGGER_MANUAL);
@@ -3760,6 +3763,8 @@ irq_handled:
devp->flags_isr |= VDIN_FLAG_RDMA_DONE;
else
devp->flags_isr &= ~VDIN_FLAG_RDMA_DONE;
devp->rdma_undone_cnt = 0;
devp->stats.rdma_manual_cnt++;
}
#endif
+4
View File
@@ -362,6 +362,7 @@ struct match_data_s {
#define FPS_23_97_SET_TO_23 23
#define VDIN_SET_MODE_MAX_FRAME 60
#define VDIN_VRR_MIN_FRAME_RATE 25
#define VDIN_RDMA_UNDONE_MAX_CNT 10
#define IS_HDMI_SRC(src) \
({typeof(src) src_ = src; \
@@ -441,6 +442,7 @@ enum vdin_vf_put_md {
#define DBG_RX_UPDATE_VDIN_PROP BIT(20)
#define VDIN_ISR_MONITOR_INPUT BIT(21)
#define VDIN_ISR_MONITOR_RDMA BIT(22)
#define VDIN_ISR_MONITOR_CFMT BIT(23)
@@ -736,6 +738,7 @@ struct vdin_frame_stat_s {
unsigned int meta_wr_done_irq_cnt;
/* Continuous cycle error counting */
unsigned int cycle_err_cnt_con;
unsigned int rdma_manual_cnt;
};
struct vdin_v4l2_s {
@@ -1168,6 +1171,7 @@ struct vdin_dev_s {
unsigned int vdin_isr_drop;
unsigned int vdin_isr_drop_num;
unsigned int fs_open_cnt;
unsigned int rdma_undone_cnt;
struct vdin_dv_hw5_s dv_hw5;
};