void gsc_op_timer_handler(unsigned long arg) { struct gsc_dev *gsc = (struct gsc_dev *)arg; struct gsc_ctx *ctx = v4l2_m2m_get_curr_priv(gsc->m2m.m2m_dev); struct vb2_buffer *src_vb, *dst_vb; if (!test_bit(ST_M2M_RUN, &gsc->state)) { gsc_warn("gsc state is 0x%lx", gsc->state); return; } gsc_dump_registers(gsc); clear_bit(ST_M2M_RUN, &gsc->state); pm_runtime_put(&gsc->pdev->dev); src_vb = v4l2_m2m_src_buf_remove(ctx->m2m_ctx); dst_vb = v4l2_m2m_dst_buf_remove(ctx->m2m_ctx); if (src_vb && dst_vb) { v4l2_m2m_buf_done(src_vb, VB2_BUF_STATE_ERROR); v4l2_m2m_buf_done(dst_vb, VB2_BUF_STATE_ERROR); } gsc_err("GSCALER[%d] interrupt hasn't been triggered", gsc->id); gsc_err("erro ctx: %p, ctx->state: 0x%x", ctx, ctx->state); }
void gsc_op_timer_handler(unsigned long arg) { struct gsc_dev *gsc = (struct gsc_dev *)arg; struct gsc_ctx *ctx = v4l2_m2m_get_curr_priv(gsc->m2m.m2m_dev); struct vb2_buffer *src_vb, *dst_vb; #ifdef GSC_PERF gsc->end_time = sched_clock(); gsc_err("expire time: %llu\n", gsc->end_time - gsc->start_time); #endif gsc_dump_registers(gsc); exynos_iommu_dump_status(&gsc->pdev->dev); clear_bit(ST_M2M_RUN, &gsc->state); pm_runtime_put(&gsc->pdev->dev); gsc->runtime_put_cnt++; src_vb = v4l2_m2m_src_buf_remove(ctx->m2m_ctx); dst_vb = v4l2_m2m_dst_buf_remove(ctx->m2m_ctx); if (src_vb && dst_vb) { v4l2_m2m_buf_done(src_vb, VB2_BUF_STATE_ERROR); v4l2_m2m_buf_done(dst_vb, VB2_BUF_STATE_ERROR); } gsc_err("GSCALER[%d] interrupt hasn't been triggered", gsc->id); gsc_err("erro ctx: %p, ctx->state: 0x%x", ctx, ctx->state); }