From: Sylwester Nawrocki Date: Tue, 3 Apr 2018 13:34:36 +0000 (+0200) Subject: fimc-is: Set all buffer queues as bidirectional X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ba4067057ba74fed10cd285562f5a2e40b819e91;p=platform%2Fkernel%2Flinux-exynos.git fimc-is: Set all buffer queues as bidirectional This prevent SYSMMU fault from FIMC-IS CPU access: [ 42.220252] exynos-sysmmu 142d0000.sysmmu: 14180000.fimc_is: AW ACCESS PROTECTION FAULT occurred at 0x7ff98af0 [ 42.220634] ------------[ cut here ]------------ [ 42.222578] kernel BUG at drivers/iommu/exynos-iommu.c:449! [ 42.228136] Internal error: Oops - BUG: 0 [#1] PREEMPT SMP [ 42.233602] Modules linked in: [ 42.236641] CPU: 0 PID: 0 Comm: swapper/0 Tainted: G W 4.14.24+ #154 [ 42.244105] Hardware name: Samsung TM2 board (DT) [ 42.248790] task: ffffff800905eb80 task.stack: ffffff8009040000 [ 42.254699] PC is at exynos_sysmmu_irq+0x17c/0x188 [ 42.259468] LR is at exynos_sysmmu_irq+0x108/0x188 [ 42.264241] pc : [] lr : [] pstate: 600001c5 [ 42.271620] sp : ffffff8008003e00 [ 42.274915] x29: ffffff8008003e00 x28: ffffff8009031010 [ 42.280211] x27: ffffff8009043db0 x26: ffffff8009031000 [ 42.285506] x25: ffffff800913c000 x24: 000000007ff98af0 [ 42.290800] x23: ffffffc0c9c4a918 x22: 0000000000000064 [ 42.296095] x21: ffffffc0c9c4a958 x20: 0000000000000013 [ 42.301390] x19: ffffff8008ad87c8 x18: 0000000000000010 [ 42.306685] x17: 0000000000000000 x16: fffffffffffffffe [ 42.311980] x15: ffffff8089180f9f x14: 0720072007200720 [ 42.317275] x13: 0720072007200720 x12: 0720072007200720 [ 42.322569] x11: 0720072007200720 x10: 0720072007200720 [ 42.327864] x9 : 0720072007200720 x8 : 0720072007200720 [ 42.333159] x7 : 0720072007200720 x6 : 00000000000003cb [ 42.338454] x5 : 0000000000000000 x4 : 0000000000000000 [ 42.343748] x3 : 0000000000000001 x2 : 000000007ff98af0 [ 42.349044] x1 : ffffff8009140c80 x0 : 00000000ffffffda [ 42.354340] Process swapper/0 (pid: 0, stack limit = 0xffffff8009040000) [ 42.361024] Call trace: [ 42.363451] Exception stack(0xffffff8008003cc0 to 0xffffff8008003e00) [ 42.369879] 3cc0: 00000000ffffffda ffffff8009140c80 000000007ff98af0 0000000000000001 [ 42.377692] 3ce0: 0000000000000000 0000000000000000 00000000000003cb 0720072007200720 [ 42.385504] 3d00: 0720072007200720 0720072007200720 0720072007200720 0720072007200720 [ 42.393317] 3d20: 0720072007200720 0720072007200720 0720072007200720 ffffff8089180f9f [ 42.401128] 3d40: fffffffffffffffe 0000000000000000 0000000000000010 ffffff8008ad87c8 [ 42.408940] 3d60: 0000000000000013 ffffffc0c9c4a958 0000000000000064 ffffffc0c9c4a918 [ 42.416753] 3d80: 000000007ff98af0 ffffff800913c000 ffffff8009031000 ffffff8009043db0 [ 42.424564] 3da0: ffffff8009031010 ffffff8008003e00 ffffff80084d6840 ffffff8008003e00 [ 42.432376] 3dc0: ffffff80084d68b4 00000000600001c5 ffffff8008ad87c8 0000000000000013 [ 42.440189] 3de0: 0000007fffffffff 0000000000000064 ffffff8008003e00 ffffff80084d68b4 [ 42.448001] [] exynos_sysmmu_irq+0x17c/0x188 [ 42.453817] [] __handle_irq_event_percpu+0x64/0x280 [ 42.460238] [] handle_irq_event_percpu+0x1c/0x58 [ 42.466400] [] handle_irq_event+0x48/0x78 [ 42.471956] [] handle_fasteoi_irq+0xbc/0x1b0 [ 42.477772] [] generic_handle_irq+0x24/0x38 [ 42.483499] [] __handle_domain_irq+0x84/0xf8 [ 42.489315] [] gic_handle_irq+0x68/0xc8 [ 42.494695] Exception stack(0xffffff8009043db0 to 0xffffff8009043ef0) [ 42.501119] 3da0: 0000000000000000 ffffff8008e3c628 [ 42.508934] 3dc0: ffffff8009031010 0000000000000001 00000040d657b000 0000000000005dc0 [ 42.516746] 3de0: 0000000000000008 0000000000000000 0000000000000002 ffffff8009043e70 [ 42.524558] 3e00: 0000000000000980 000000000011fa88 0000000000000000 0000000000000001 [ 42.532370] 3e20: 0000000000000000 ffffff8089180f9f fffffffffffffffe 0000000000000000 [ 42.540183] 3e40: 0000000000000010 ffffff800913c000 ffffff800913ce78 0000000000000000 [ 42.547993] 3e60: ffffff8008e1ee50 0000000000000000 0000000000000000 ffffff800905eb80 [ 42.555806] 3e80: 00000000df6e4808 0000000000000000 0000000020f80018 ffffff8009043ef0 [ 42.563618] 3ea0: ffffff8008085de0 ffffff8009043ef0 ffffff8008085de4 0000000060000145 [ 42.571430] 3ec0: ffffff800903b048 ffffff8008e1ee50 ffffffffffffffff ffffff8009052000 [ 42.579241] 3ee0: ffffff8009043ef0 ffffff8008085de4 [ 42.584100] [] el1_irq+0xb0/0x124 [ 42.588962] [] arch_cpu_idle+0x34/0x1c8 [ 42.594344] [] do_idle+0x114/0x1e0 [ 42.599289] [] cpu_startup_entry+0x24/0x28 [ 42.604935] [] rest_init+0xc8/0xd8 [ 42.609883] [] start_kernel+0x39c/0x3b0 [ 42.615264] Code: 2a1803e4 9401e0bc f94032e0 b5fffbe0 (d4210000) [ 42.621339] ---[ end trace f42ebbac31eb0484 ]--- Change-Id: I2467a1646a6c6cdcb6898fd4911cb64f9f0d658e Signed-off-by: Sylwester Nawrocki --- diff --git a/drivers/media/platform/exynos/fimc-is/fimc-is-video.c b/drivers/media/platform/exynos/fimc-is/fimc-is-video.c index 8b5c790fc142..885841bc7cc9 100644 --- a/drivers/media/platform/exynos/fimc-is/fimc-is-video.c +++ b/drivers/media/platform/exynos/fimc-is/fimc-is-video.c @@ -303,6 +303,7 @@ static int queue_init(void *priv, struct vb2_queue *vbq_src, vbq_src->dev = vctx->video->alloc_dev; vbq_src->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_COPY; vbq_src->allow_zero_bytesused = 1; + vbq_src->bidirectional = 1; ret = vb2_queue_init(vbq_src); if (ret) { @@ -320,6 +321,7 @@ static int queue_init(void *priv, struct vb2_queue *vbq_src, vbq_dst->mem_ops = vctx->mem_ops; vbq_dst->dev = vctx->video->alloc_dev; vbq_dst->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_COPY; + vbq_dst->bidirectional = 1; ret = vb2_queue_init(vbq_dst); if (ret) { @@ -338,6 +340,7 @@ static int queue_init(void *priv, struct vb2_queue *vbq_src, vbq_src->mem_ops = vctx->mem_ops; vbq_src->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_COPY; vbq_src->allow_zero_bytesused = 1; + vbq_src->bidirectional = 1; ret = vb2_queue_init(vbq_src); if (ret) { @@ -352,6 +355,7 @@ static int queue_init(void *priv, struct vb2_queue *vbq_src, vbq_dst->ops = vctx->vb2_ops; vbq_dst->mem_ops = vctx->mem_ops; vbq_dst->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_COPY; + vbq_dst->bidirectional = 1; ret = vb2_queue_init(vbq_dst); if (ret) {