summarylogtreecommitdiffstats
path: root/general-meson-vdec-check-if-parser-has-really-parser.patch
diff options
context:
space:
mode:
Diffstat (limited to 'general-meson-vdec-check-if-parser-has-really-parser.patch')
-rw-r--r--general-meson-vdec-check-if-parser-has-really-parser.patch51
1 files changed, 51 insertions, 0 deletions
diff --git a/general-meson-vdec-check-if-parser-has-really-parser.patch b/general-meson-vdec-check-if-parser-has-really-parser.patch
new file mode 100644
index 000000000000..7b92ede85890
--- /dev/null
+++ b/general-meson-vdec-check-if-parser-has-really-parser.patch
@@ -0,0 +1,51 @@
+From cb0c20e84a934c66961ace27f340cd7c98188dbe Mon Sep 17 00:00:00 2001
+From: Neil Armstrong <narmstrong@baylibre.com>
+Date: Mon, 22 Nov 2021 09:15:21 +0000
+Subject: [PATCH 67/90] WIP: drivers: meson: vdec: check if parser has really
+ parser before marking input buffer as error
+
+Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
+---
+ drivers/staging/media/meson/vdec/esparser.c | 14 ++++++++++----
+ 1 file changed, 10 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/staging/media/meson/vdec/esparser.c b/drivers/staging/media/meson/vdec/esparser.c
+index 9b6034936d32..bb9480f0a70c 100644
+--- a/drivers/staging/media/meson/vdec/esparser.c
++++ b/drivers/staging/media/meson/vdec/esparser.c
+@@ -300,6 +300,7 @@ esparser_queue(struct amvdec_session *sess, struct vb2_v4l2_buffer *vbuf)
+ u32 num_dst_bufs = 0;
+ u32 offset;
+ u32 pad_size;
++ u32 wp, wp2;
+
+ /*
+ * When max ref frame is held by VP9, this should be -= 3 to prevent a
+@@ -349,15 +350,20 @@ esparser_queue(struct amvdec_session *sess, struct vb2_v4l2_buffer *vbuf)
+ }
+
+ pad_size = esparser_pad_start_code(core, vb, payload_size);
++ wp = amvdec_read_parser(core, PARSER_VIDEO_WP);
+ ret = esparser_write_data(core, phy, payload_size + pad_size);
++ wp2 = amvdec_read_parser(core, PARSER_VIDEO_WP);
+
+ if (ret <= 0) {
+- dev_warn(core->dev, "esparser: input parsing error\n");
+- amvdec_remove_ts(sess, vb->timestamp);
+- v4l2_m2m_buf_done(vbuf, VB2_BUF_STATE_ERROR);
+ amvdec_write_parser(core, PARSER_FETCH_CMD, 0);
+
+- return 0;
++ if (ret < 0 || wp2 == wp) {
++ dev_err(core->dev, "esparser: input parsing error ret %d (%x <=> %x)\n", ret, wp, wp2);
++ amvdec_remove_ts(sess, vb->timestamp);
++ v4l2_m2m_buf_done(vbuf, VB2_BUF_STATE_ERROR);
++
++ return 0;
++ }
+ }
+
+ atomic_inc(&sess->esparser_queued_bufs);
+--
+2.35.1
+