drm/exynos: Add atomic modesetting support

Tobias Jakobi tjakobi at math.uni-bielefeld.de
Fri May 15 03:16:39 PDT 2015


Hello,

I've just tested 'modetest' with the fix applied, and while the nullptr 
deference goes away, I now get a division by zero.

modetest output:
Encoders:
id	crtc	type	possible crtcs	possible clones
22	0	TMDS	0x00000001	0x00000000
30	29	TMDS	0x00000002	0x00000000
36	0	TMDS	0x00000004	0x00000000

Connectors:
id	encoder	status		type	size (mm)	modes	encoders
23	0	disconnected	Virtual	0x0		0	22
   props:
	2 DPMS:
		flags: enum
		enums: On=0 Standby=1 Suspend=2 Off=3
		value: 0
31	30	connected	VGA	0x0		1	30
   modes:
	name refresh (Hz) hdisp hss hse htot vdisp vss vse vtot)
   1366x768 0 1366 1414 1446 1526 768 771 776 790 flags: phsync, pvsync; 
type: preferred, driver
   props:
	1 EDID:
		flags: immutable blob
		blobs:

		value:
	2 DPMS:
		flags: enum
		enums: On=0 Standby=1 Suspend=2 Off=3
		value: 0
37	0	disconnected	HDMI-A	0x0		0	36
   props:
	1 EDID:
		flags: immutable blob
		blobs:

		value:
	2 DPMS:
		flags: enum
		enums: On=0 Standby=1 Suspend=2 Off=3
		value: 0

CRTCs:
id	fb	pos	size
21	0	(0,0)	(0x0)
    0 0 0 0 0 0 0 0 0 flags: ; type:
   props:
29	40	(0,0)	(1366x768)
   1366x768 0 1366 1414 1446 1526 768 771 776 790 flags: phsync, pvsync; 
type: preferred, driver
   props:
35	0	(0,0)	(0x0)
    0 0 0 0 0 0 0 0 0 flags: ; type:
   props:

Planes:
id	crtc	fb	CRTC x,y	x,y	gamma size	possible crtcs
17	21	0	0,0		0,0	0       	0x00000001
   formats: XR24 AR24 NV12
   props:
	5 type:
		flags: immutable enum
		enums: Overlay=0 Primary=1 Cursor=2
		value: 1
18	0	0	0,0		0,0	0       	0x00000001
   formats: XR24 AR24 NV12
   props:
	5 type:
		flags: immutable enum
		enums: Overlay=0 Primary=1 Cursor=2
		value: 0
	19 zpos:
		flags: immutable range
		values: 0 4
		value: 1
20	0	0	0,0		0,0	0       	0x00000001
   formats: XR24 AR24 NV12
   props:
	5 type:
		flags: immutable enum
		enums: Overlay=0 Primary=1 Cursor=2
		value: 0
	19 zpos:
		flags: immutable range
		values: 0 4
		value: 2
24	29	40	0,0		0,0	0       	0x00000002
   formats: XR24 AR24 NV12
   props:
	5 type:
		flags: immutable enum
		enums: Overlay=0 Primary=1 Cursor=2
		value: 1
25	0	0	0,0		0,0	0       	0x00000002
   formats: XR24 AR24 NV12
   props:
	5 type:
		flags: immutable enum
		enums: Overlay=0 Primary=1 Cursor=2
		value: 0
	19 zpos:
		flags: immutable range
		values: 0 4
		value: 1
26	0	0	0,0		0,0	0       	0x00000002
   formats: XR24 AR24 NV12
   props:
	5 type:
		flags: immutable enum
		enums: Overlay=0 Primary=1 Cursor=2
		value: 0
	19 zpos:
		flags: immutable range
		values: 0 4
		value: 2
27	0	0	0,0		0,0	0       	0x00000002
   formats: XR24 AR24 NV12
   props:
	5 type:
		flags: immutable enum
		enums: Overlay=0 Primary=1 Cursor=2
		value: 0
	19 zpos:
		flags: immutable range
		values: 0 4
		value: 3
28	0	0	0,0		0,0	0       	0x00000002
   formats: XR24 AR24 NV12
   props:
	5 type:
		flags: immutable enum
		enums: Overlay=0 Primary=1 Cursor=2
		value: 0
	19 zpos:
		flags: immutable range
		values: 0 4
		value: 4
32	35	0	0,0		0,0	0       	0x00000004
   formats: XR24 AR24 NV12
   props:
	5 type:
		flags: immutable enum
		enums: Overlay=0 Primary=1 Cursor=2
		value: 1
33	0	0	0,0		0,0	0       	0x00000004
   formats: XR24 AR24 NV12
   props:
	5 type:
		flags: immutable enum
		enums: Overlay=0 Primary=1 Cursor=2
		value: 0
	19 zpos:
		flags: immutable range
		values: 0 4
		value: 1
34	0	0	0,0		0,0	0       	0x00000004
   formats: XR24 AR24 NV12
   props:
	5 type:
		flags: immutable enum
		enums: Overlay=0 Primary=1 Cursor=2
		value: 0
	19 zpos:
		flags: immutable range
		values: 0 4
		value: 2

Frame buffers:
id	size	pitch


kernel output:
[   46.808858] Division by zero in kernel.
[   46.808888] CPU: 2 PID: 2611 Comm: lt-modetest Not tainted 
4.1.0-rc3-debug+ #2
[   46.808902] Hardware name: SAMSUNG EXYNOS (Flattened Device Tree)
[   46.808912] Backtrace:
[   46.808951] [<c00132b0>] (dump_backtrace) from [<c00134c8>] 
(show_stack+0x18/0x1c)
[   46.808963]  r6:c06f9a08 r5:ffffffff r4:00000000 r3:dc8ba300
[   46.809008] [<c00134b0>] (show_stack) from [<c04f2138>] 
(dump_stack+0x88/0xc8)
[   46.809030] [<c04f20b0>] (dump_stack) from [<c0013434>] 
(__div0+0x1c/0x20)
[   46.809040]  r6:00000003 r5:00000000 r4:ed975010 r3:00000000
[   46.809080] [<c0013418>] (__div0) from [<c020dc14>] (Ldiv0+0x8/0x10)
[   46.809106] [<c02b5e08>] (fimd_commit) from [<c02b6200>] 
(fimd_poweron.part.9+0xd4/0x19c)
[   46.809116]  r9:ee14cc00 r8:c06ffcbc r7:c0748f94 r6:ed975a70 
r5:ed975010 r4:00000005
[   46.809159] [<c02b612c>] (fimd_poweron.part.9) from [<c02b6354>] 
(fimd_dpms+0x8c/0xb4)
[   46.809170]  r6:ee14cc00 r5:00000000 r4:c0748f94 r3:00000001
[   46.809206] [<c02b62c8>] (fimd_dpms) from [<c02b1bf4>] 
(exynos_drm_crtc_enable+0x34/0x7c)
[   46.809216]  r6:ed3e5340 r5:ed975020 r4:ee14cc00 r3:c02b62c8
[   46.809260] [<c02b1bc0>] (exynos_drm_crtc_enable) from [<c028c0e8>] 
(drm_atomic_helper_commit_modeset_enables+0x98/0x1c8)
[   46.809271]  r5:ee14cc00 r4:00000001
[   46.809300] [<c028c050>] (drm_atomic_helper_commit_modeset_enables) 
from [<c028e6ac>] (drm_atomic_helper_commit+0x124/0x170)
[   46.809311]  r8:00000000 r7:ee248000 r6:00000000 r5:ed3e5340 
r4:0000000b r3:00000000
[   46.809354] [<c028e588>] (drm_atomic_helper_commit) from [<c02b2794>] 
(exynos_atomic_commit+0x14/0x18)
[   46.809364]  r8:ee14cc00 r7:00000000 r6:ed86f728 r5:ee248000 
r4:ed3e5340 r3:c02b2780
[   46.809405] [<c02b2780>] (exynos_atomic_commit) from [<c02af928>] 
(drm_atomic_commit+0x4c/0x6c)
[   46.809425] [<c02af8dc>] (drm_atomic_commit) from [<c028d250>] 
(drm_atomic_helper_set_config+0x31c/0x428)
[   46.809435]  r5:ed3e5340 r4:00000003
[   46.809469] [<c028cf34>] (drm_atomic_helper_set_config) from 
[<c029f14c>] (drm_mode_set_config_internal+0x60/0xdc)
[   46.809480]  r10:00000000 r9:ee248000 r8:ed86f200 r7:ee14cc00 
r6:00000002 r5:00000050
[   46.809514]  r4:ed832c00
[   46.809540] [<c029f0ec>] (drm_mode_set_config_internal) from 
[<c0290c2c>] (drm_fb_helper_restore_fbdev_mode_unlocked+0xec/0x140)
[   46.809550]  r7:ed86f728 r6:00000002 r5:00000050 r4:00000000
[   46.809588] [<c0290b40>] (drm_fb_helper_restore_fbdev_mode_unlocked) 
from [<c02b2658>] (exynos_drm_fbdev_restore_mode+0x28/0x2c)
[   46.809599]  r10:ee24814c r9:ed190780 r8:ee248034 r7:ee248000 
r6:ee248058 r5:c0748f94
[   46.809632]  r4:ee248000
[   46.809653] [<c02b2630>] (exynos_drm_fbdev_restore_mode) from 
[<c02b1068>] (exynos_drm_lastclose+0x10/0x14)
[   46.809671] [<c02b1058>] (exynos_drm_lastclose) from [<c0294564>] 
(drm_lastclose+0x3c/0x10c)
[   46.809687] [<c0294528>] (drm_lastclose) from [<c0294974>] 
(drm_release+0x340/0x4e0)
[   46.809697]  r6:ee248058 r5:ec6404a8 r4:ec640400 r3:00000000
[   46.809738] [<c0294634>] (drm_release) from [<c0103ca8>] 
(__fput+0xa0/0x1e4)
[   46.809748]  r10:00000000 r9:00000008 r8:ee11a5b0 r7:edc0d720 
r6:eda71410 r5:ee11a5b0
[   46.809781]  r4:ec640d00
[   46.809803] [<c0103c08>] (__fput) from [<c0103e58>] 
(____fput+0x10/0x14)
[   46.809813]  r10:00000000 r9:ec6ea000 r8:c000fc04 r7:ed8fb9c0 
r6:c0718ef8 r5:00000000
[   46.809847]  r4:ed8fbdc4
[   46.809872] [<c0103e48>] (____fput) from [<c00473b0>] 
(task_work_run+0xb8/0xfc)
[   46.809895] [<c00472f8>] (task_work_run) from [<c0012ec8>] 
(do_work_pending+0x88/0xa8)
[   46.809905]  r7:00000006 r6:ec6ebfb0 r5:c000fc04 r4:ec6ea000
[   46.809943] [<c0012e40>] (do_work_pending) from [<c000faa4>] 
(work_pending+0xc/0x20)
[   46.809953]  r6:00000000 r5:00000001 r4:00000003 r3:00000000
[   46.809992] Division by zero in kernel.
[   46.810010] CPU: 2 PID: 2611 Comm: lt-modetest Not tainted 
4.1.0-rc3-debug+ #2
[   46.810021] Hardware name: SAMSUNG EXYNOS (Flattened Device Tree)
[   46.810030] Backtrace:
[   46.810054] [<c00132b0>] (dump_backtrace) from [<c00134c8>] 
(show_stack+0x18/0x1c)
[   46.810065]  r6:c06f9a08 r5:ffffffff r4:00000000 r3:dc8ba300
[   46.810105] [<c00134b0>] (show_stack) from [<c04f2138>] 
(dump_stack+0x88/0xc8)
[   46.810126] [<c04f20b0>] (dump_stack) from [<c0013434>] 
(__div0+0x1c/0x20)
[   46.810136]  r6:00000003 r5:00000000 r4:ed975010 r3:00000000
[   46.810172] [<c0013418>] (__div0) from [<c020dc14>] (Ldiv0+0x8/0x10)
[   46.810193] [<c02b5e08>] (fimd_commit) from [<c02b1c38>] 
(exynos_drm_crtc_enable+0x78/0x7c)
[   46.810203]  r9:ee14cc00 r8:c06ffcbc r7:c0748f94 r6:ed3e5340 
r5:ed975020 r4:ee14cc00
[   46.810248] [<c02b1bc0>] (exynos_drm_crtc_enable) from [<c028c0e8>] 
(drm_atomic_helper_commit_modeset_enables+0x98/0x1c8)
[   46.810258]  r5:ee14cc00 r4:00000001
[   46.810287] [<c028c050>] (drm_atomic_helper_commit_modeset_enables) 
from [<c028e6ac>] (drm_atomic_helper_commit+0x124/0x170)
[   46.810297]  r8:00000000 r7:ee248000 r6:00000000 r5:ed3e5340 
r4:0000000b r3:00000000
[   46.810339] [<c028e588>] (drm_atomic_helper_commit) from [<c02b2794>] 
(exynos_atomic_commit+0x14/0x18)
[   46.810350]  r8:ee14cc00 r7:00000000 r6:ed86f728 r5:ee248000 
r4:ed3e5340 r3:c02b2780
[   46.810390] [<c02b2780>] (exynos_atomic_commit) from [<c02af928>] 
(drm_atomic_commit+0x4c/0x6c)
[   46.810409] [<c02af8dc>] (drm_atomic_commit) from [<c028d250>] 
(drm_atomic_helper_set_config+0x31c/0x428)
[   46.810420]  r5:ed3e5340 r4:00000003
[   46.810452] [<c028cf34>] (drm_atomic_helper_set_config) from 
[<c029f14c>] (drm_mode_set_config_internal+0x60/0xdc)
[   46.810462]  r10:00000000 r9:ee248000 r8:ed86f200 r7:ee14cc00 
r6:00000002 r5:00000050
[   46.810496]  r4:ed832c00
[   46.810521] [<c029f0ec>] (drm_mode_set_config_internal) from 
[<c0290c2c>] (drm_fb_helper_restore_fbdev_mode_unlocked+0xec/0x140)
[   46.810531]  r7:ed86f728 r6:00000002 r5:00000050 r4:00000000
[   46.810569] [<c0290b40>] (drm_fb_helper_restore_fbdev_mode_unlocked) 
from [<c02b2658>] (exynos_drm_fbdev_restore_mode+0x28/0x2c)
[   46.810579]  r10:ee24814c r9:ed190780 r8:ee248034 r7:ee248000 
r6:ee248058 r5:c0748f94
[   46.810612]  r4:ee248000
[   46.810632] [<c02b2630>] (exynos_drm_fbdev_restore_mode) from 
[<c02b1068>] (exynos_drm_lastclose+0x10/0x14)
[   46.810650] [<c02b1058>] (exynos_drm_lastclose) from [<c0294564>] 
(drm_lastclose+0x3c/0x10c)
[   46.810666] [<c0294528>] (drm_lastclose) from [<c0294974>] 
(drm_release+0x340/0x4e0)
[   46.810676]  r6:ee248058 r5:ec6404a8 r4:ec640400 r3:00000000
[   46.810713] [<c0294634>] (drm_release) from [<c0103ca8>] 
(__fput+0xa0/0x1e4)
[   46.810723]  r10:00000000 r9:00000008 r8:ee11a5b0 r7:edc0d720 
r6:eda71410 r5:ee11a5b0
[   46.810757]  r4:ec640d00
[   46.810778] [<c0103c08>] (__fput) from [<c0103e58>] 
(____fput+0x10/0x14)
[   46.810788]  r10:00000000 r9:ec6ea000 r8:c000fc04 r7:ed8fb9c0 
r6:c0718ef8 r5:00000000
[   46.810821]  r4:ed8fbdc4
[   46.810844] [<c0103e48>] (____fput) from [<c00473b0>] 
(task_work_run+0xb8/0xfc)
[   46.810866] [<c00472f8>] (task_work_run) from [<c0012ec8>] 
(do_work_pending+0x88/0xa8)
[   46.810877]  r7:00000006 r6:ec6ebfb0 r5:c000fc04 r4:ec6ea000
[   46.810913] [<c0012e40>] (do_work_pending) from [<c000faa4>] 
(work_pending+0xc/0x20)
[   46.810923]  r6:00000000 r5:00000001 r4:00000003 r3:00000000


I suspect that atomic merely exposed this bug (I suspect it was there 
all the time).

With best wishes,
Tobias



More information about the dri-devel mailing list