media: coda: avoid hardware lockups with more than 13 capture buffers
When decoding using the CODA internal rotator (for example NV12 capture), currently the value vb2_buf.index + CODA_MAX_FRAMEBUFFERS (19) is written into the DEC_PIC_ROT_INDEX register. At least with firmware version 3.1.1 this causes CODA hangups as soon as the register value reaches 32. Instead, always write CODA_MAX_FRAMEBUFFERS. Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
This commit is contained in:
parent
afddf553ea
commit
02d76a4719
|
@ -2168,16 +2168,21 @@ static int coda_prepare_decode(struct coda_ctx *ctx)
|
||||||
} else {
|
} else {
|
||||||
if (dev->devtype->product == CODA_960) {
|
if (dev->devtype->product == CODA_960) {
|
||||||
/*
|
/*
|
||||||
* The CODA960 seems to have an internal list of
|
* It was previously assumed that the CODA960 has an
|
||||||
* buffers with 64 entries that includes the
|
* internal list of 64 buffer entries that contains
|
||||||
* registered frame buffers as well as the rotator
|
* both the registered internal frame buffers as well
|
||||||
* buffer output.
|
* as the rotator buffer output, and that the ROT_INDEX
|
||||||
*
|
* register must be set to a value between the last
|
||||||
* ROT_INDEX needs to be < 0x40, but >
|
* internal frame buffers' index and 64.
|
||||||
* ctx->num_internal_frames.
|
* At least on firmware version 3.1.1 it turns out that
|
||||||
|
* setting ROT_INDEX to any value >= 32 causes CODA
|
||||||
|
* hangups that it can not recover from with the SRC VPU
|
||||||
|
* reset.
|
||||||
|
* It does appear to work however, to just set it to a
|
||||||
|
* fixed value in the [ctx->num_internal_frames, 31]
|
||||||
|
* range, for example CODA_MAX_FRAMEBUFFERS.
|
||||||
*/
|
*/
|
||||||
coda_write(dev,
|
coda_write(dev, CODA_MAX_FRAMEBUFFERS,
|
||||||
CODA_MAX_FRAMEBUFFERS + dst_buf->vb2_buf.index,
|
|
||||||
CODA9_CMD_DEC_PIC_ROT_INDEX);
|
CODA9_CMD_DEC_PIC_ROT_INDEX);
|
||||||
|
|
||||||
reg_addr = CODA9_CMD_DEC_PIC_ROT_ADDR_Y;
|
reg_addr = CODA9_CMD_DEC_PIC_ROT_ADDR_Y;
|
||||||
|
|
Loading…
Reference in New Issue