}
 
        dst_buf->v4l2_buf.timestamp = src_buf->v4l2_buf.timestamp;
+       dst_buf->v4l2_buf.flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
+       dst_buf->v4l2_buf.flags |=
+               src_buf->v4l2_buf.flags & V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
        dst_buf->v4l2_buf.timecode = src_buf->v4l2_buf.timecode;
 
        v4l2_m2m_buf_done(src_buf, VB2_BUF_STATE_DONE);
 
        if (src_vb && dst_vb) {
                dst_vb->v4l2_buf.timestamp = src_vb->v4l2_buf.timestamp;
                dst_vb->v4l2_buf.timecode = src_vb->v4l2_buf.timecode;
+               dst_vb->v4l2_buf.flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
+               dst_vb->v4l2_buf.flags |=
+                       src_vb->v4l2_buf.flags
+                       & V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
 
                v4l2_m2m_buf_done(src_vb, vb_state);
                v4l2_m2m_buf_done(dst_vb, vb_state);
 
                goto dma_unlock;
 
        dst_vb->v4l2_buf.timestamp = src_vb->v4l2_buf.timestamp;
+       dst_vb->v4l2_buf.flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
+       dst_vb->v4l2_buf.flags |=
+               src_vb->v4l2_buf.flags & V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
 
        /* Reconfigure hardware if the context has changed. */
        if (fimc->m2m.ctx != ctx) {
 
        dst_vb = v4l2_m2m_dst_buf_remove(curr_ctx->m2m_ctx);
 
        dst_vb->v4l2_buf.timestamp = src_vb->v4l2_buf.timestamp;
+       dst_vb->v4l2_buf.flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
+       dst_vb->v4l2_buf.flags |=
+               src_vb->v4l2_buf.flags & V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
        dst_vb->v4l2_buf.timecode = src_vb->v4l2_buf.timecode;
 
        v4l2_m2m_buf_done(src_vb, VB2_BUF_STATE_DONE);
 
        memcpy(&out_vb->v4l2_buf.timestamp,
                        &in_vb->v4l2_buf.timestamp,
                        sizeof(struct timeval));
+       out_vb->v4l2_buf.flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
+       out_vb->v4l2_buf.flags |=
+               in_vb->v4l2_buf.flags & V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
 
        switch (ctx->mode) {
        case MEM2MEM_HFLIP | MEM2MEM_VFLIP:
 
                        dst_vb = v4l2_m2m_dst_buf_remove(curr_ctx->m2m_ctx);
 
                        dst_vb->v4l2_buf.timestamp = src_vb->v4l2_buf.timestamp;
+                       dst_vb->v4l2_buf.flags &=
+                               ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
+                       dst_vb->v4l2_buf.flags |=
+                               src_vb->v4l2_buf.flags
+                               & V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
                        dst_vb->v4l2_buf.timecode = src_vb->v4l2_buf.timecode;
 
                        spin_lock_irqsave(&pcdev->irqlock, flags);
 
 
        dst->v4l2_buf.timecode = src->v4l2_buf.timecode;
        dst->v4l2_buf.timestamp = src->v4l2_buf.timestamp;
+       dst->v4l2_buf.flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
+       dst->v4l2_buf.flags |=
+               src->v4l2_buf.flags & V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
 
        v4l2_m2m_buf_done(src, VB2_BUF_STATE_DONE);
        v4l2_m2m_buf_done(dst, VB2_BUF_STATE_DONE);
 
 
        dst_buf->v4l2_buf.timecode = src_buf->v4l2_buf.timecode;
        dst_buf->v4l2_buf.timestamp = src_buf->v4l2_buf.timestamp;
+       dst_buf->v4l2_buf.flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
+       dst_buf->v4l2_buf.flags |=
+               src_buf->v4l2_buf.flags & V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
 
        v4l2_m2m_buf_done(src_buf, state);
        if (curr_ctx->mode == S5P_JPEG_ENCODE)
 
                                                src_buf->b->v4l2_buf.timecode;
                        dst_buf->b->v4l2_buf.timestamp =
                                                src_buf->b->v4l2_buf.timestamp;
+                       dst_buf->b->v4l2_buf.flags &=
+                               ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
+                       dst_buf->b->v4l2_buf.flags |=
+                               src_buf->b->v4l2_buf.flags
+                               & V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
                        switch (frame_type) {
                        case S5P_FIMV_DECODE_FRAME_I_FRAME:
                                dst_buf->b->v4l2_buf.flags |=
 
        d_buf = &d_vb->v4l2_buf;
 
        d_buf->timestamp = s_buf->timestamp;
+       d_buf->flags &= ~V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
+       d_buf->flags |= s_buf->flags & V4L2_BUF_FLAG_TSTAMP_SRC_MASK;
        if (s_buf->flags & V4L2_BUF_FLAG_TIMECODE) {
                d_buf->flags |= V4L2_BUF_FLAG_TIMECODE;
                d_buf->timecode = s_buf->timecode;