pr_info("vdin_irq_flag: %d, vdin_rest_flag: %d, irq_cnt: %d, rdma_irq_cnt: %d\n",
devp->vdin_irq_flag, devp->vdin_reset_flag,
devp->irq_cnt, devp->rdma_irq_cnt);
+ pr_info("vdin_drop_cnt: %d\n", vdin_drop_cnt);
pr_info("game_mode : %d\n", devp->game_mode);
pr_info("dolby_input : %d\n", devp->dv.dolby_input);
if ((devp->cma_config_en != 1) || !(devp->cma_config_flag & 0x100))
module_param(isr_flag, uint, 0664);
MODULE_PARM_DESC(isr_flag, "flag which affect the skip field");
-static unsigned int vdin_drop_cnt;
+unsigned int vdin_drop_cnt;
module_param(vdin_drop_cnt, uint, 0664);
MODULE_PARM_DESC(vdin_drop_cnt, "vdin_drop_cnt");
* this code about system time must be outside of spinlock.
* because the spinlock may affect the system time.
*/
-
spin_lock_irqsave(&devp->isr_lock, flags);
-
if (devp->afbce_mode == 1) {
/* no need reset mif under afbc mode */
devp->vdin_reset_flag = 0;
curr_wr_vfe = devp->curr_wr_vfe;
curr_wr_vf = &curr_wr_vfe->vf;
+ next_wr_vfe = provider_vf_peek(devp->vfp);
+
/* change afbce mode */
- if (devp->afbce_mode_pre != devp->afbce_mode)
+ if (next_wr_vfe && (devp->afbce_mode_pre != devp->afbce_mode))
vdin_afbce_mode_update(devp);
/* change color matrix */
goto irq_handled;
}
- next_wr_vfe = provider_vf_peek(devp->vfp);
if (!next_wr_vfe) {
/*add for force vdin buffer recycle*/
if (devp->flags & VDIN_FLAG_FORCE_RECYCLE) {
/* Ref.2019/04/25: tl1 vdin0 afbce dynamically switch support,
* vpp also should support this function
*/
-#define VDIN_VER "Ref.2019/05/14"
+#define VDIN_VER "Ref.2019/05/31"
/*the counter of vdin*/
#define VDIN_MAX_DEVS 2
extern unsigned int max_recycle_frame_cnt;
extern unsigned int max_ignore_frame_cnt;
extern unsigned int skip_frame_debug;
-
+extern unsigned int vdin_drop_cnt;
extern unsigned int vdin0_afbce_debug_force;
extern struct vframe_provider_s *vf_get_provider_by_name(
--- /dev/null
+/*
+ * drivers/amlogic/media/vin/tvin/vdin/vdin_trace.h
+ *
+ * Copyright (C) 2017 Amlogic, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ */
+
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM vdin
+
+#if !defined(_VDIN_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _VDIN_TRACE_H
+
+#include <linux/tracepoint.h>
+
+/* single lifecycle events */
+DECLARE_EVENT_CLASS(vdin_event_class,
+ TP_PROTO(const char *name, int field_cnt, unsigned long time),
+ TP_ARGS(name, field_cnt, time),
+ TP_STRUCT__entry(
+ __string(name, name)
+ __field(int, field_cnt)
+ __field(unsigned long, time)
+ ),
+ TP_fast_assign(
+ __assign_str(name, name);
+ __entry->field_cnt = field_cnt;
+ __entry->time = time;
+ ),
+ TP_printk("[%s-%dth-%lums]", __get_str(name),
+ __entry->field_cnt, __entry->time)
+);
+
+#define DEFINE_VDIN_EVENT(name) \
+DEFINE_EVENT(vdin_event_class, name, \
+ TP_PROTO(const char *name, int field_cnt, unsigned long time), \
+ TP_ARGS(name, field_cnt, time))
+
+DEFINE_VDIN_EVENT(vdin_afbc);
+#endif /* _VDEC_TRACE_H */
+
+#if 0
+#define CREATE_TRACE_POINTS
+#include "vdin_trace.h"
+#undef TRACE_INCLUDE_PATH
+#undef TRACE_INCLUDE_FILE
+#define TRACE_INCLUDE_PATH .
+#define TRACE_INCLUDE_FILE vdin_trace
+#include <trace/define_trace.h>
+
+#define VDIN_TRACE
+#ifdef VDIN_TRACE
+trace_vdin_afbc("vdin-afbc", devp->afbce_mode, devp->frame_cnt);
+#endif
+
+#endif
+
+/*
+ * a. clear pipe
+ * cat /sys/kernel/debug/tracing/trace_pipe
+ * b. enable trace di:
+ * echo 1 >/sys/kernel/debug/tracing/events/vdin/vdin_afbc/enable
+ * echo 1 >/sys/kernel/debug/tracing/tracing_on
+ * c. disable trace
+ * echo 0 >/sys/kernel/debug/tracing/tracing_on
+ * cat /sys/kernel/debug/tracing/trace_pipe
+ */
+