[PATCH 2/2] drm/exynos: fix the initialization order in FIMD
Dear Joonyoung Shim, On Tue, 31 Mar 2015 17:05:47 +0900 Joonyoung Shim wrote: > Hi, > > Sorry for late comments. > > On 03/13/2015 07:32 PM, Inki Dae wrote: > > On 2015ë 03ì 12ì¼ 13:36, Hyungwon Hwang wrote: > >> Since commit 0f04cf8df0b20a97369cb634663fef0578cbf273 ("drm/exynos: > >> fix wrong pipe calculation for crtc"), fimd_clear_channel() can be > >> called when is_drm_iommu_supported() returns true. In this case, > >> the kernel is going to be panicked because crtc is not set yet. > > > > Nice catch!!! > > > >> > >> [1.211156] [drm] Initialized drm 1.1.0 20060810 > >> [1.216785] Unable to handle kernel NULL pointer dereference at > >> virtual address 0350 [1.223415] pgd = c0004000 > >> [1.226086] [0350] *pgd= > >> [1.229649] Internal error: Oops: 5 [#1] PREEMPT SMP ARM > >> [1.234940] Modules linked in: > >> [1.237982] CPU: 2 PID: 1 Comm: swapper/0 Not tainted > >> 4.0.0-rc1-00062-g7a7cc79-dirty #123 [1.246136] Hardware name: > >> SAMSUNG EXYNOS (Flattened Device Tree) [1.252214] task: > >> ee8c8000 ti: ee8d task.ti: ee8d [1.257606] PC is at > >> fimd_wait_for_vblank+0x8/0xc8 [1.262370] LR is at > >> fimd_bind+0x138/0x1a8 [1.266450] pc : []lr : > >> []psr: 2113 [1.266450] sp : ee8d1d28 ip : > >> fp : [1.277906] r10: 0001 r9 : > >> c09d693c r8 : c0a2d6a8 [1.283114] r7 : 0034 r6 : > >> 0001 r5 : ee0bb400 r4 : ee244c10 [1.289624] r3 : > >> r2 : r1 : 0001 r0 : > >> [1.296135] Flags: nzCv IRQs on FIQs on Mode SVC_32 ISA > >> ARM Segment kernel [1.303426] Control: 10c5387d Table: > >> 4000404a DAC: 0015 [1.309154] Process swapper/0 (pid: 1, > >> stack limit = 0xee8d0210) [1.315143] Stack: (0xee8d1d28 to > >> 0xee8d2000) [1.319486] 1d20: > >> c0113d18 ee0bb400 ee0bb400 ee245c30 eebbe210 [1.327645] 1d40: > >> ee008a40 ee244c10 ee0bb400 0001 0034 c02fb834 > >> c030a858 [1.335804] 1d60: ee244a10 eeb60780 ee008a40 eeb60740 > >> ee0bb400 c03030d0 [1.343963] 1d80: ee244a10 > >> ee0bb400 eeb60740 eeb60810 c02f6ba4 > >> [1.352123] 1da0: ee0bb400 c02e0500 ee244a00 > >> c0a04a14 ee0bb400 c02e1de4 [1.360282] 1dc0: c030a858 > >> 0002 eeb60820 eeb60820 0002 eeb60780 c03033d4 > >> [1.368441] 1de0: c06e9cec ee244a10 eeb60780 c0a056f8 > >> c03035fc c0a04b24 c0a04b24 [1.376600] 1e00: ee244a10 0001 > >> c0a049d0 c02f6d34 c0ad462c eeba0790 ee244a10 > >> [1.384759] 1e20: ffed c0a049d0 c03090b0 ee244a10 > >> c0ad462c c0a2d840 c03077a0 [1.392919] 1e40: eeb5e880 c024b738 > >> 08db ee244a10 c0a049d0 ee244a44 c09e71d8 > >> [1.401078] 1e60: 00c6 c0307a6c c0a049d0 c03079e0 > >> c0305ea8 ee826e5c ee1dc7b4 [1.409237] 1e80: c0a049d0 eeb5e880 > >> c0a058a8 c0306e2c c0896204 c0a049d0 c06e9d10 c0a049d0 > >> [1.417396] 1ea0: c06e9d10 c0ad4600 c0308360 > >> 0003 c06e9d10 c02f6e14 [1.42] 1ec0: c0896204 > >> > >> [1.433714] 1ee0: c02f6d5c c02f6d5c > >> eeb5d740 c09e71d8 c0008a30 [1.441874] 1f00: ef7fca5e > >> 0066 ee8d1f28 c003ff1c c02514e8 > >> [1.450033] 1f20: 6113 c093906c ef7fca5e 00c6 > >> c004018c c093906c [1.458192] 1f40: c08a9690 c093840c > >> 0006 0006 c09eb2ac c09c0d74 0006 c09c0d54 > >> [1.466351] 1f60: c0a3d680 c09745a0 c09d693c 00c6 > >> c0974db4 0006 0006 [1.474510] 1f80: c09745a0 > >> c0692e00 > >> [1.482669] 1fa0: c0692e08 c000f040 > >> [1.490828] 1fc0: > >> > >> [1.498988] 1fe0: 0013 > >> [1.507159] [] > >> (fimd_wait_for_vblank) from [] (fimd_bind+0x138/0x1a8) > >> [1.515313] [] (fimd_bind) from [] > >> (component_bind_all+0xc4/0x20c) [1.523209] [] > >> (component_bind_all) from [] > >> (exynos_drm_load+0xa0/0x140) [1.531632] [] > >> (exynos_drm_load) from [] (drm_dev_register+0xa0/0xf4) > >> [1.539788] [] (drm_dev_register) from [] > >> (drm_platform_init+0x44/0xcc) [1.548121] [] > >> (drm_platform_init) from [] > >> (try_to_bring_up_master.part.1+0xc8/0x104) [1.557668] > >> [] (try_to_bring_up_master.part.1) from [] > >> (component_master_add_with_match+0xd0/0x118) [1.568431] > >> [] (component_master_add_with_match) from [] > >> (exynos_drm_platform_probe+0xf0/0x118) [1.578847] [] > >> (exynos_drm_platform_probe) from [] > >> (platform_drv_probe+0x48/0x98) [
[PATCH 2/2] drm/exynos: fix the initialization order in FIMD
Hi, Sorry for late comments. On 03/13/2015 07:32 PM, Inki Dae wrote: > On 2015ë 03ì 12ì¼ 13:36, Hyungwon Hwang wrote: >> Since commit 0f04cf8df0b20a97369cb634663fef0578cbf273 ("drm/exynos: >> fix wrong pipe calculation for crtc"), fimd_clear_channel() can be >> called when is_drm_iommu_supported() returns true. In this case, >> the kernel is going to be panicked because crtc is not set yet. > > Nice catch!!! > >> >> [1.211156] [drm] Initialized drm 1.1.0 20060810 >> [1.216785] Unable to handle kernel NULL pointer dereference at virtual >> address 0350 >> [1.223415] pgd = c0004000 >> [1.226086] [0350] *pgd= >> [1.229649] Internal error: Oops: 5 [#1] PREEMPT SMP ARM >> [1.234940] Modules linked in: >> [1.237982] CPU: 2 PID: 1 Comm: swapper/0 Not tainted >> 4.0.0-rc1-00062-g7a7cc79-dirty #123 >> [1.246136] Hardware name: SAMSUNG EXYNOS (Flattened Device Tree) >> [1.252214] task: ee8c8000 ti: ee8d task.ti: ee8d >> [1.257606] PC is at fimd_wait_for_vblank+0x8/0xc8 >> [1.262370] LR is at fimd_bind+0x138/0x1a8 >> [1.266450] pc : []lr : []psr: 2113 >> [1.266450] sp : ee8d1d28 ip : fp : >> [1.277906] r10: 0001 r9 : c09d693c r8 : c0a2d6a8 >> [1.283114] r7 : 0034 r6 : 0001 r5 : ee0bb400 r4 : ee244c10 >> [1.289624] r3 : r2 : r1 : 0001 r0 : >> [1.296135] Flags: nzCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment >> kernel >> [1.303426] Control: 10c5387d Table: 4000404a DAC: 0015 >> [1.309154] Process swapper/0 (pid: 1, stack limit = 0xee8d0210) >> [1.315143] Stack: (0xee8d1d28 to 0xee8d2000) >> [1.319486] 1d20: c0113d18 ee0bb400 ee0bb400 >> ee245c30 eebbe210 >> [1.327645] 1d40: ee008a40 ee244c10 ee0bb400 0001 0034 c02fb834 >> c030a858 >> [1.335804] 1d60: ee244a10 eeb60780 ee008a40 eeb60740 ee0bb400 c03030d0 >> >> [1.343963] 1d80: ee244a10 ee0bb400 eeb60740 eeb60810 >> c02f6ba4 >> [1.352123] 1da0: ee0bb400 c02e0500 ee244a00 c0a04a14 >> ee0bb400 c02e1de4 >> [1.360282] 1dc0: c030a858 0002 eeb60820 eeb60820 0002 >> eeb60780 c03033d4 >> [1.368441] 1de0: c06e9cec ee244a10 eeb60780 c0a056f8 c03035fc >> c0a04b24 c0a04b24 >> [1.376600] 1e00: ee244a10 0001 c0a049d0 c02f6d34 c0ad462c eeba0790 >> ee244a10 >> [1.384759] 1e20: ffed c0a049d0 c03090b0 ee244a10 c0ad462c >> c0a2d840 c03077a0 >> [1.392919] 1e40: eeb5e880 c024b738 08db ee244a10 c0a049d0 ee244a44 >> c09e71d8 >> [1.401078] 1e60: 00c6 c0307a6c c0a049d0 c03079e0 c0305ea8 >> ee826e5c ee1dc7b4 >> [1.409237] 1e80: c0a049d0 eeb5e880 c0a058a8 c0306e2c c0896204 c0a049d0 >> c06e9d10 c0a049d0 >> [1.417396] 1ea0: c06e9d10 c0ad4600 c0308360 0003 >> c06e9d10 c02f6e14 >> [1.42] 1ec0: c0896204 >> >> [1.433714] 1ee0: c02f6d5c c02f6d5c eeb5d740 >> c09e71d8 c0008a30 >> [1.441874] 1f00: ef7fca5e 0066 ee8d1f28 >> c003ff1c c02514e8 >> [1.450033] 1f20: 6113 c093906c ef7fca5e 00c6 c004018c >> c093906c >> [1.458192] 1f40: c08a9690 c093840c 0006 0006 c09eb2ac c09c0d74 >> 0006 c09c0d54 >> [1.466351] 1f60: c0a3d680 c09745a0 c09d693c 00c6 c0974db4 >> 0006 0006 >> [1.474510] 1f80: c09745a0 c0692e00 >> >> [1.482669] 1fa0: c0692e08 c000f040 >> >> [1.490828] 1fc0: >> >> [1.498988] 1fe0: 0013 >> >> [1.507159] [] (fimd_wait_for_vblank) from [] >> (fimd_bind+0x138/0x1a8) >> [1.515313] [] (fimd_bind) from [] >> (component_bind_all+0xc4/0x20c) >> [1.523209] [] (component_bind_all) from [] >> (exynos_drm_load+0xa0/0x140) >> [1.531632] [] (exynos_drm_load) from [] >> (drm_dev_register+0xa0/0xf4) >> [1.539788] [] (drm_dev_register) from [] >> (drm_platform_init+0x44/0xcc) >> [1.548121] [] (drm_platform_init) from [] >> (try_to_bring_up_master.part.1+0xc8/0x104) >> [1.557668] [] (try_to_bring_up_master.part.1) from >> [] (component_master_add_with_match+0xd0/0x118) >> [1.568431] [] (component_master_add_with_match) from >> [] (exynos_drm_platform_probe+0xf0/0x118) >> [1.578847] [] (exynos_drm_platform_probe) from [] >> (platform_drv_probe+0x48/0x98) >> [1.588052] [] (platform_drv_probe) from [] >> (driver_probe_device+0x140/0x380) >> [1.596902] [] (driver_probe_device) from [] >> (__driver_attach+0x8c/0x90) >> [
[PATCH 2/2] drm/exynos: fix the initialization order in FIMD
On 2015ë 03ì 12ì¼ 13:36, Hyungwon Hwang wrote: > Since commit 0f04cf8df0b20a97369cb634663fef0578cbf273 ("drm/exynos: > fix wrong pipe calculation for crtc"), fimd_clear_channel() can be > called when is_drm_iommu_supported() returns true. In this case, > the kernel is going to be panicked because crtc is not set yet. Nice catch!!! > > [1.211156] [drm] Initialized drm 1.1.0 20060810 > [1.216785] Unable to handle kernel NULL pointer dereference at virtual > address 0350 > [1.223415] pgd = c0004000 > [1.226086] [0350] *pgd= > [1.229649] Internal error: Oops: 5 [#1] PREEMPT SMP ARM > [1.234940] Modules linked in: > [1.237982] CPU: 2 PID: 1 Comm: swapper/0 Not tainted > 4.0.0-rc1-00062-g7a7cc79-dirty #123 > [1.246136] Hardware name: SAMSUNG EXYNOS (Flattened Device Tree) > [1.252214] task: ee8c8000 ti: ee8d task.ti: ee8d > [1.257606] PC is at fimd_wait_for_vblank+0x8/0xc8 > [1.262370] LR is at fimd_bind+0x138/0x1a8 > [1.266450] pc : []lr : []psr: 2113 > [1.266450] sp : ee8d1d28 ip : fp : > [1.277906] r10: 0001 r9 : c09d693c r8 : c0a2d6a8 > [1.283114] r7 : 0034 r6 : 0001 r5 : ee0bb400 r4 : ee244c10 > [1.289624] r3 : r2 : r1 : 0001 r0 : > [1.296135] Flags: nzCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment > kernel > [1.303426] Control: 10c5387d Table: 4000404a DAC: 0015 > [1.309154] Process swapper/0 (pid: 1, stack limit = 0xee8d0210) > [1.315143] Stack: (0xee8d1d28 to 0xee8d2000) > [1.319486] 1d20: c0113d18 ee0bb400 ee0bb400 > ee245c30 eebbe210 > [1.327645] 1d40: ee008a40 ee244c10 ee0bb400 0001 0034 c02fb834 > c030a858 > [1.335804] 1d60: ee244a10 eeb60780 ee008a40 eeb60740 ee0bb400 c03030d0 > > [1.343963] 1d80: ee244a10 ee0bb400 eeb60740 eeb60810 > c02f6ba4 > [1.352123] 1da0: ee0bb400 c02e0500 ee244a00 c0a04a14 > ee0bb400 c02e1de4 > [1.360282] 1dc0: c030a858 0002 eeb60820 eeb60820 0002 > eeb60780 c03033d4 > [1.368441] 1de0: c06e9cec ee244a10 eeb60780 c0a056f8 c03035fc > c0a04b24 c0a04b24 > [1.376600] 1e00: ee244a10 0001 c0a049d0 c02f6d34 c0ad462c eeba0790 > ee244a10 > [1.384759] 1e20: ffed c0a049d0 c03090b0 ee244a10 c0ad462c > c0a2d840 c03077a0 > [1.392919] 1e40: eeb5e880 c024b738 08db ee244a10 c0a049d0 ee244a44 > c09e71d8 > [1.401078] 1e60: 00c6 c0307a6c c0a049d0 c03079e0 c0305ea8 > ee826e5c ee1dc7b4 > [1.409237] 1e80: c0a049d0 eeb5e880 c0a058a8 c0306e2c c0896204 c0a049d0 > c06e9d10 c0a049d0 > [1.417396] 1ea0: c06e9d10 c0ad4600 c0308360 0003 > c06e9d10 c02f6e14 > [1.42] 1ec0: c0896204 > > [1.433714] 1ee0: c02f6d5c c02f6d5c eeb5d740 > c09e71d8 c0008a30 > [1.441874] 1f00: ef7fca5e 0066 ee8d1f28 > c003ff1c c02514e8 > [1.450033] 1f20: 6113 c093906c ef7fca5e 00c6 c004018c > c093906c > [1.458192] 1f40: c08a9690 c093840c 0006 0006 c09eb2ac c09c0d74 > 0006 c09c0d54 > [1.466351] 1f60: c0a3d680 c09745a0 c09d693c 00c6 c0974db4 > 0006 0006 > [1.474510] 1f80: c09745a0 c0692e00 > > [1.482669] 1fa0: c0692e08 c000f040 > > [1.490828] 1fc0: > > [1.498988] 1fe0: 0013 > > [1.507159] [] (fimd_wait_for_vblank) from [] > (fimd_bind+0x138/0x1a8) > [1.515313] [] (fimd_bind) from [] > (component_bind_all+0xc4/0x20c) > [1.523209] [] (component_bind_all) from [] > (exynos_drm_load+0xa0/0x140) > [1.531632] [] (exynos_drm_load) from [] > (drm_dev_register+0xa0/0xf4) > [1.539788] [] (drm_dev_register) from [] > (drm_platform_init+0x44/0xcc) > [1.548121] [] (drm_platform_init) from [] > (try_to_bring_up_master.part.1+0xc8/0x104) > [1.557668] [] (try_to_bring_up_master.part.1) from [] > (component_master_add_with_match+0xd0/0x118) > [1.568431] [] (component_master_add_with_match) from > [] (exynos_drm_platform_probe+0xf0/0x118) > [1.578847] [] (exynos_drm_platform_probe) from [] > (platform_drv_probe+0x48/0x98) > [1.588052] [] (platform_drv_probe) from [] > (driver_probe_device+0x140/0x380) > [1.596902] [] (driver_probe_device) from [] > (__driver_attach+0x8c/0x90) > [1.605321] [] (__driver_attach) from [] > (bus_for_each_dev+0x54/0x88) > [1.613480] [] (bus_for_each_dev) from [] > (bus_add_driver+0xec/0x200) > [1.621640] []
[PATCH 2/2] drm/exynos: fix the initialization order in FIMD
Since commit 0f04cf8df0b20a97369cb634663fef0578cbf273 ("drm/exynos: fix wrong pipe calculation for crtc"), fimd_clear_channel() can be called when is_drm_iommu_supported() returns true. In this case, the kernel is going to be panicked because crtc is not set yet. [1.211156] [drm] Initialized drm 1.1.0 20060810 [1.216785] Unable to handle kernel NULL pointer dereference at virtual address 0350 [1.223415] pgd = c0004000 [1.226086] [0350] *pgd= [1.229649] Internal error: Oops: 5 [#1] PREEMPT SMP ARM [1.234940] Modules linked in: [1.237982] CPU: 2 PID: 1 Comm: swapper/0 Not tainted 4.0.0-rc1-00062-g7a7cc79-dirty #123 [1.246136] Hardware name: SAMSUNG EXYNOS (Flattened Device Tree) [1.252214] task: ee8c8000 ti: ee8d task.ti: ee8d [1.257606] PC is at fimd_wait_for_vblank+0x8/0xc8 [1.262370] LR is at fimd_bind+0x138/0x1a8 [1.266450] pc : []lr : []psr: 2113 [1.266450] sp : ee8d1d28 ip : fp : [1.277906] r10: 0001 r9 : c09d693c r8 : c0a2d6a8 [1.283114] r7 : 0034 r6 : 0001 r5 : ee0bb400 r4 : ee244c10 [1.289624] r3 : r2 : r1 : 0001 r0 : [1.296135] Flags: nzCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment kernel [1.303426] Control: 10c5387d Table: 4000404a DAC: 0015 [1.309154] Process swapper/0 (pid: 1, stack limit = 0xee8d0210) [1.315143] Stack: (0xee8d1d28 to 0xee8d2000) [1.319486] 1d20: c0113d18 ee0bb400 ee0bb400 ee245c30 eebbe210 [1.327645] 1d40: ee008a40 ee244c10 ee0bb400 0001 0034 c02fb834 c030a858 [1.335804] 1d60: ee244a10 eeb60780 ee008a40 eeb60740 ee0bb400 c03030d0 [1.343963] 1d80: ee244a10 ee0bb400 eeb60740 eeb60810 c02f6ba4 [1.352123] 1da0: ee0bb400 c02e0500 ee244a00 c0a04a14 ee0bb400 c02e1de4 [1.360282] 1dc0: c030a858 0002 eeb60820 eeb60820 0002 eeb60780 c03033d4 [1.368441] 1de0: c06e9cec ee244a10 eeb60780 c0a056f8 c03035fc c0a04b24 c0a04b24 [1.376600] 1e00: ee244a10 0001 c0a049d0 c02f6d34 c0ad462c eeba0790 ee244a10 [1.384759] 1e20: ffed c0a049d0 c03090b0 ee244a10 c0ad462c c0a2d840 c03077a0 [1.392919] 1e40: eeb5e880 c024b738 08db ee244a10 c0a049d0 ee244a44 c09e71d8 [1.401078] 1e60: 00c6 c0307a6c c0a049d0 c03079e0 c0305ea8 ee826e5c ee1dc7b4 [1.409237] 1e80: c0a049d0 eeb5e880 c0a058a8 c0306e2c c0896204 c0a049d0 c06e9d10 c0a049d0 [1.417396] 1ea0: c06e9d10 c0ad4600 c0308360 0003 c06e9d10 c02f6e14 [1.42] 1ec0: c0896204 [1.433714] 1ee0: c02f6d5c c02f6d5c eeb5d740 c09e71d8 c0008a30 [1.441874] 1f00: ef7fca5e 0066 ee8d1f28 c003ff1c c02514e8 [1.450033] 1f20: 6113 c093906c ef7fca5e 00c6 c004018c c093906c [1.458192] 1f40: c08a9690 c093840c 0006 0006 c09eb2ac c09c0d74 0006 c09c0d54 [1.466351] 1f60: c0a3d680 c09745a0 c09d693c 00c6 c0974db4 0006 0006 [1.474510] 1f80: c09745a0 c0692e00 [1.482669] 1fa0: c0692e08 c000f040 [1.490828] 1fc0: [1.498988] 1fe0: 0013 [1.507159] [] (fimd_wait_for_vblank) from [] (fimd_bind+0x138/0x1a8) [1.515313] [] (fimd_bind) from [] (component_bind_all+0xc4/0x20c) [1.523209] [] (component_bind_all) from [] (exynos_drm_load+0xa0/0x140) [1.531632] [] (exynos_drm_load) from [] (drm_dev_register+0xa0/0xf4) [1.539788] [] (drm_dev_register) from [] (drm_platform_init+0x44/0xcc) [1.548121] [] (drm_platform_init) from [] (try_to_bring_up_master.part.1+0xc8/0x104) [1.557668] [] (try_to_bring_up_master.part.1) from [] (component_master_add_with_match+0xd0/0x118) [1.568431] [] (component_master_add_with_match) from [] (exynos_drm_platform_probe+0xf0/0x118) [1.578847] [] (exynos_drm_platform_probe) from [] (platform_drv_probe+0x48/0x98) [1.588052] [] (platform_drv_probe) from [] (driver_probe_device+0x140/0x380) [1.596902] [] (driver_probe_device) from [] (__driver_attach+0x8c/0x90) [1.605321] [] (__driver_attach) from [] (bus_for_each_dev+0x54/0x88) [1.613480] [] (bus_for_each_dev) from [] (bus_add_driver+0xec/0x200) [1.621640] [] (bus_add_driver) from [] (driver_register+0x78/0xf4) [1.629625] [] (driver_register) from [] (exynos_drm_init+0xb8/0x11c) [1.637785] [] (exynos_drm_init) from [] (do_one_initcall+0xac/0x1ec) [1.645950] [] (do_one_initcall) from []