[media] coda: disable BWB for all codecs on CODA 960
authorPhilipp Zabel <p.zabel@pengutronix.de>
Thu, 2 Mar 2017 10:19:52 +0000 (07:19 -0300)
committerMauro Carvalho Chehab <mchehab@s-opensource.com>
Wed, 22 Mar 2017 13:06:23 +0000 (10:06 -0300)
I don't know what the BWB unit is, I guess W is for write and one of the
Bs is for burst. All I know is that there repeatedly have been issues
with it hanging on certain streams (ENGR00223231, ENGR00293425), with
various firmware versions, sometimes blocking something related to the
GDI bus or the GDI AXI adapter. There are some error cases that we don't
know how to recover from without a reboot. Apparently this unit can be
disabled by setting bit 12 in the FRAME_MEM_CTRL mailbox register to
zero, so do that to avoid crashes.

Side effects are reduced burst lengths when writing out decoded frames
to memory, so there is an "enable_bwb" module parameter to turn it back
on.

Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
drivers/media/platform/coda/coda-common.c
drivers/media/platform/coda/coda_regs.h

index 340011f1a08e223c247e6f95d71d0464e3180692..85a8add36214abbe2d8017a81ecdbc6876352e22 100644 (file)
@@ -71,6 +71,10 @@ static int disable_vdoa;
 module_param(disable_vdoa, int, 0644);
 MODULE_PARM_DESC(disable_vdoa, "Disable Video Data Order Adapter tiled to raster-scan conversion");
 
+static int enable_bwb = 0;
+module_param(enable_bwb, int, 0644);
+MODULE_PARM_DESC(enable_bwb, "Enable BWB unit, may crash on certain streams");
+
 void coda_write(struct coda_dev *dev, u32 data, u32 reg)
 {
        v4l2_dbg(2, coda_debug, &dev->v4l2_dev,
@@ -1879,7 +1883,8 @@ static int coda_open(struct file *file)
        ctx->idx = idx;
        switch (dev->devtype->product) {
        case CODA_960:
-               ctx->frame_mem_ctrl = 1 << 12;
+               if (enable_bwb)
+                       ctx->frame_mem_ctrl = CODA9_FRAME_ENABLE_BWB;
                /* fallthrough */
        case CODA_7541:
                ctx->reg_idx = 0;
index 3490602fa6e1e8f16da2104e540c1dad0ef2c124..77ee46a934272d8503a1d292d857249603712017 100644 (file)
@@ -51,6 +51,7 @@
 #define                CODA7_STREAM_SEL_64BITS_ENDIAN  (1 << 1)
 #define                CODA_STREAM_ENDIAN_SELECT       (1 << 0)
 #define CODA_REG_BIT_FRAME_MEM_CTRL            0x110
+#define                CODA9_FRAME_ENABLE_BWB          (1 << 12)
 #define                CODA9_FRAME_TILED2LINEAR        (1 << 11)
 #define                CODA_FRAME_CHROMA_INTERLEAVE    (1 << 2)
 #define                CODA_IMAGE_ENDIAN_SELECT        (1 << 0)