mirror of
https://github.com/hardkernel/kernel_common_drivers.git
synced 2026-06-25 12:03:48 +09:00
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:
committed by
gerrit autosubmit
parent
ab38de3e8d
commit
1829df28bd
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user