media: chips-media: wave5: Fix panic on decoding DECODED_IDX_FLAG_SKIP
The display frame region information received from the vpu also
contains the frame display index: info->index_frame_display.
This index, being a s32, can be negative when a skip option is passed.
In that case, its value is DECODED_IDX_FLAG_SKIP (-2).
When disp_idx == -2, the following exception occurs:
[ 1530.782246][ T1900] Hardware name: Texas Instruments AM62P5 SK (DT)
[ 1530.788501][ T1900] pstate:
a0400005 (NzCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
[ 1530.796144][ T1900] pc : wave5_vpu_dec_get_output_info+0x300/0x308 [wave5]
[ 1530.803060][ T1900] lr : wave5_vpu_dec_get_output_info+0x80/0x308 [wave5]
[ 1530.809873][ T1900] sp :
ffffffc00b85bc00
[ 1530.813872][ T1900] x29:
ffffffc00b85bc00 x28:
0000000000000000 x27:
0000000000000001
[ 1530.821695][ T1900] x26:
00000000fffffffd x25:
00000000ffffffff x24:
ffffff8812820000
[ 1530.829516][ T1900] x23:
ffffff88199f7840 x22:
ffffff8873f5e000 x21:
ffffffc00b85bc58
[ 1530.837336][ T1900] x20:
0000000000000000 x19:
ffffff88199f7920 x18:
ffffffc00a899030
[ 1530.845156][ T1900] x17:
00000000529c6ef0 x16:
00000000529c6ef0 x15:
0000000000198487
[ 1530.852975][ T1900] x14:
ffffffc009f2b650 x13:
0000000000058016 x12:
0000000005000000
[ 1530.860795][ T1900] x11:
0000000000000000 x10:
0000000000000000 x9 :
0000000000000000
[ 1530.868615][ T1900] x8 :
0000000000000000 x7 :
0000000000000000 x6 :
0000000000004086
[ 1530.876434][ T1900] x5 :
0000000000000001 x4 :
ffffffc001454b94 x3 :
ffffffc001454d94
[ 1530.884256][ T1900] x2 :
ffffffc00b8201d0 x1 :
0000000000000020 x0 :
0000000000000000
[ 1530.892087][ T1900] Call trace:
[ 1530.895225][ T1900] wave5_vpu_dec_get_output_info+0x300/0x308 [wave5]
[ 1530.901788][ T1900] wave5_vpu_dec_finish_decode+0x6c/0x3dc [wave5]
[ 1530.908081][ T1900] wave5_vpu_irq_thread+0x140/0x168 [wave5]
[ 1530.913856][ T1900] irq_thread_fn+0x44/0xa4
[ 1530.918154][ T1900] irq_thread+0x15c/0x288
[ 1530.922330][ T1900] kthread+0x104/0x1d4
[ 1530.926247][ T1900] ret_from_fork+0x10/0x20
[ 1530.930520][ T1900] Code:
2a1f03ea 2a1f03eb 35ffef2c 17ffff74 (
d42aa240)
[ 1530.937296][ T1900] ---[ end trace
0000000000000000 ]---
[ 1530.942596][ T1900] Kernel panic - not syncing: BRK handler: Fatal exception
[ 1530.949629][ T1900] SMP: stopping secondary CPUs
[ 1530.954244][ T1900] Kernel Offset: disabled
[ 1530.958415][ T1900] CPU features: 0x00,
00000000,
00800184,
0000421b
[ 1530.964496][ T1900] Memory Limit: none
Move the disp_info assignment after testing that the index is positive
to avoid the exception.
Fixes: 45d1a2b93277 ("media: chips-media: wave5: Add vpuapi layer")
Signed-off-by: Mattijs Korpershoek <mkorpershoek@baylibre.com>
Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Signed-off-by: Sebastian Fricke <sebastian.fricke@collabora.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>