On 2/28/26 10:45 PM, David Lechner wrote:
> On 2/24/26 9:24 AM, Thomas Zimmermann wrote:
>> Replace simple-display helpers with regular atomic helpers. Store the
>> pipeline elements in struct st7586_device and initialize them as part
>> of probing the device. Use mipi-dbi's existing helpers and initializer
>> macros where possible.
>>
>> Effectively open-codes the modesetting code in the initializer helpers
>> of mipi-dbi and simple-display. St7586 requires custom helpers for
>> various pipeline elements, and non-freeing cleanup of the pipeline.
>>
>> Signed-off-by: Thomas Zimmermann <[email protected]>
>> ---
>
> This results in a couple of unused variable warnings, but otherwise seems
> to still work.
>
> Tested-by: David Lechner <[email protected]>
>
>
> /home/david/work/bl/linux/drivers/gpu/drm/sitronix/st7586.c: In function
> ‘st7586_pipe_enable’:
> /home/david/work/bl/linux/drivers/gpu/drm/sitronix/st7586.c:180:25: warning:
> unused variable ‘rect’ [-Wunused-variable]
> 180 | struct drm_rect rect = {
> | ^~~~
> /home/david/work/bl/linux/drivers/gpu/drm/sitronix/st7586.c:177:40: warning:
> unused variable ‘shadow_plane_state’ [-Wunused-variable]
> 177 | struct drm_shadow_plane_state *shadow_plane_state =
> to_drm_shadow_plane_state(plane_state);
> | ^~~~~~~~~~~~~~~~~~
>
Actually, I messed up and didn't notice a merge conflict with [1] when
applying the patches. So I only tested all of the patches before this
one. This means the unused variables are caused by [PATCH 01/16]
("drm/mipi-dbi: Only modify planes on enabled CRTCs").
When I actually tested the full series including this patch, it crashed with:
8<--- cut here ---
Unable to handle kernel NULL pointer dereference at virtual address 00000004
when read
[00000004] *pgd=00000000
Internal error: Oops: 5 [#1] ARM
CPU: 0 UID: 0 PID: 23 Comm: kworker/u4:1 Not tainted
7.0.0-rc1-next-20260227ad7944-mainline-00016-gb3e6bd63e5a4 #48 PREEMPT
Hardware name: Generic DA850/OMAP-L138/AM18x
Workqueue: events_unbound deferred_probe_work_func
PC is at detect_connector_status+0x8/0x44
LR is at 0x0
pc : [<c0498114>] lr : [<00000000>] psr: 60000013
sp : c488d93c ip : 00000001 fp : 00000000
r10: 00000080 r9 : 000000b2 r8 : 00000003
r7 : c1462000 r6 : 00000000 r5 : c14633d4 r4 : c1463378
r3 : 00000000 r2 : 00000001 r1 : c488d98c r0 : c1463378
Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment none
Control: 0005317f Table: c0004000 DAC: 00000053
Register r0 information: slab kmalloc-8k start c1462000 pointer offset 4984
size 8192
Register r1 information: 2-page vmalloc region starting at 0xc488c000 allocated
at kernel_clone+0xa8/0x3a4
Register r2 information: non-paged memory
Register r3 information: NULL pointer
Register r4 information: slab kmalloc-8k start c1462000 pointer offset 4984
size 8192
Register r5 information: slab kmalloc-8k start c1462000 pointer offset 5076
size 8192
Register r6 information: NULL pointer
Register r7 information: slab kmalloc-8k start c1462000 pointer offset 0 size
8192
Register r8 information: non-paged memory
Register r9 information: non-paged memory
Register r10 information: non-paged memory
Register r11 information: NULL pointer
Register r12 information: non-paged memory
Process kworker/u4:1 (pid: 23, stack limit = 0x(ptrval))
Stack: (0xc488d93c to 0xc488e000)
d920: c0499674
d940: 00000026 c1570760 00000000 c0076e00 00000800 c488d9cc 00000820 00000000
d960: fffffdff 00000001 00000001 380d677e 00000000 c488da88 c488d9cc 000000b2
d980: 00000001 c14620c4 c488d9d8 c0d77100 00000001 00000001 00000000 00000000
d9a0: c0a50460 00000000 00000000 00000000 c14620dc c14620dc 00000000 380d677e
d9c0: c04849d4 00000001 00000000 00000000 c1570620 000000b2 00000080 c1462000
d9e0: 00000000 c0484a54 ffffffff c0059b58 c173eb28 00000000 c488daa0 c09b7a1c
da00: c0d77100 00000001 c1462000 c1570620 c1570580 c15705c0 c155fd00 00000000
da20: 000000b2 00000080 c157061c c15705a0 c15705e0 c488dae0 c488da60 00000000
da40: 69a3cc58 c14620b4 00000004 c155fd18 69a3cc58 00000008 2f167180 00000000
da60: c157061c c488daa8 c11168a0 c488db08 c488da98 c488daa8 c11168a0 c488db08
da80: c488da98 00000000 00000000 00000000 c11168a0 c0160210 69a3cc58 00000000
daa0: 2f167180 00000000 69a3cc58 00000000 2f167180 00000000 69a3cc58 380d677e
dac0: 2f167180 c155fd00 00000000 c1462000 c146207c 00000001 c1463328 c1462000
dae0: 00000000 c049b560 c111b990 c11168a0 c111b990 c111b990 c098b4e8 c0170710
db00: c11168a0 c027b0e0 69a3cc58 00000000 2f167180 00000000 c1462000 380d677e
db20: c488db30 c155fc00 c1570620 380d677e c155fc00 c155fd00 00000000 c1462000
db40: c146207c 00000001 c1463328 ffffffea 00000000 c049fbb4 c155fd00 c155fd08
db60: c1462000 c0482fe4 c1462000 c155fd00 00000020 c1462000 c155fd00 00000000
db80: c1463378 c049fcb4 00000000 c1462000 c1462000 00000000 c1548800 c049eedc
dba0: c1462000 c04a1efc 00000000 00000000 c08659f8 00000001 00000000 c0a506cc
dbc0: 00000000 380d677e c1548800 c1548800 00000000 c0a506dc 00000000 c0c3693c
dbe0: c0a50974 c04ab444 c1548800 c0a506dc c1548800 00000040 c0c3693c c04ab6d0
dc00: 60000013 c0a50974 c0a7d3d4 c0a506dc c1548800 00000040 c0c3693c c04ab8b0
dc20: c0a7d3d4 c0a506dc c488dc7c c1548800 c0c3693c c04aba48 00000000 c0c36900
dc40: c488dc7c c04ab98c c0c3693c c04a9774 c0c36900 c0c36960 c0c1df34 380d677e
dc60: c3fec7d4 c1548800 00000001 c1548844 c0c36900 c04abddc 00000000 c1548800
dc80: 00000001 380d677e c0c36900 c1548800 c0c36900 c04ac024 c1548800 c1548800
dca0: c0c36900 c04aa600 c1548800 00000000 c3fec7d4 c1549400 00000000 c04a7ea4
dcc0: c1548800 00000000 c0cdf610 c0cdf610 c0a5308c 380d677e c1548800 c1548800
dce0: c1549400 00000000 c0cdf610 c0a5308c 00000000 c05254e0 00000000 c1548800
dd00: 00000000 380d677e c488dd18 00000000 c1548800 c3fec7c8 c15495e0 c0525e18
dd20: 00000000 00000002 000000e8 c1549400 00000000 00989680 00000000 00000000
dd40: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
dd60: 00000000 00000000 00000000 380d677e c3fec7c8 c1549400 c3fec7c8 00000000
dd80: c15495a8 c0a5308c c15652a0 00000001 00000000 c05265b4 00000000 c1549400
dda0: c0cdf610 00000000 c1549400 c0cdf610 c0cdf610 c0529020 00000028 0000fffe
ddc0: 00000001 c0528a5c c1549700 c1549400 c0cdf610 c0529430 00000000 c0d07360
dde0: c1549700 c0cdf610 c0d07380 00000004 00000001 380d677e c0a50c7c c0cdf610
de00: c0a53550 c0a53550 00000000 c0c32e3c c0a50c7c c0c0ca1c 00000402 c04ada80
de20: c0cdf610 00000000 c0a53550 c04ab444 c0cdf610 c0a53550 c0cdf610 00000040
de40: c0c32e3c c04ab6d0 60000013 c0a50c7c c0a7d3d4 c0a53550 c0cdf610 00000040
de60: c0c32e3c c04ab8b0 c0a7d3d4 c0a53550 c488dec4 c0cdf610 c0c32e3c c04aba48
de80: 00000000 c0c32e00 c488dec4 c04ab98c c0c32e3c c04a9774 c0c32e00 c0c32e60
dea0: c0c1dcf4 380d677e c0c1f10d c0cdf610 00000001 c0cdf654 c0c32e00 c04abddc
dec0: c0a50c58 c0cdf610 00000001 380d677e c0c32e00 c0cdf610 c0c32e00 c04ac024
dee0: c0cdf610 c0cdf610 c0c32e00 c04aa600 c0cdf610 c0a50c48 c0a50c58 00000000
df00: c0c1f10d c04aaa9c c0d2f980 c0d77100 c0c1f100 00000000 c0c1f10d c003efa8
df20: 00000002 c0d77100 c0d77100 c0c0ca00 c0a400e0 c0d77100 c0d77100 c0d2f980
df40: c0d2f9ac c0c0ca00 c0a400e0 c0d77100 c0d77100 c003fb10 c003f928 c0d2f980
df60: c4831ec0 00000000 c488df7c c0d34200 c0d77100 c0c05360 c003f928 c0d2f980
df80: c4831ec0 00000000 00000000 c0048ddc c0d34200 c0048cac 00000000 00000000
dfa0: 00000000 00000000 00000000 c000850c 00000000 00000000 00000000 00000000
dfc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
dfe0: 00000000 00000000 00000000 00000000 00000013 00000000 00000000 00000000
Call trace:
detect_connector_status from
drm_helper_probe_single_connector_modes+0x4fc/0x634
drm_helper_probe_single_connector_modes from
drm_client_modeset_probe+0x1bc/0x173c
drm_client_modeset_probe from
__drm_fb_helper_initial_config_and_unlock+0x2c/0x5d8
__drm_fb_helper_initial_config_and_unlock from
drm_fbdev_client_hotplug+0x6c/0xb0
drm_fbdev_client_hotplug from drm_client_register+0x58/0x94
drm_client_register from drm_fbdev_client_setup+0x98/0x1bc
drm_fbdev_client_setup from drm_client_setup+0x9c/0xe4
drm_client_setup from st7586_probe+0x264/0x2d0
st7586_probe from really_probe+0xc4/0x2cc
really_probe from __driver_probe_device+0x84/0x19c
__driver_probe_device from driver_probe_device+0x30/0x10c
driver_probe_device from __device_attach_driver+0xbc/0x138
__device_attach_driver from bus_for_each_drv+0x90/0xe8
bus_for_each_drv from __device_attach+0xa4/0x1b0
__device_attach from device_initial_probe+0x3c/0x48
device_initial_probe from bus_probe_device+0x28/0x7c
bus_probe_device from device_add+0x560/0x778
device_add from __spi_add_device+0x178/0x26c
__spi_add_device from of_register_spi_device+0x5b4/0x9ec
of_register_spi_device from spi_register_controller+0x364/0x624
spi_register_controller from spi_bitbang_start+0x3c/0x70
spi_bitbang_start from davinci_spi_probe+0x298/0x434
davinci_spi_probe from platform_probe+0x58/0x90
platform_probe from really_probe+0xc4/0x2cc
really_probe from __driver_probe_device+0x84/0x19c
__driver_probe_device from driver_probe_device+0x30/0x10c
driver_probe_device from __device_attach_driver+0xbc/0x138
__device_attach_driver from bus_for_each_drv+0x90/0xe8
bus_for_each_drv from __device_attach+0xa4/0x1b0
__device_attach from device_initial_probe+0x3c/0x48
device_initial_probe from bus_probe_device+0x28/0x7c
bus_probe_device from deferred_probe_work_func+0x74/0xa0
deferred_probe_work_func from process_one_work+0x170/0x348
process_one_work from worker_thread+0x1e8/0x424
worker_thread from kthread+0x130/0x158
kthread from ret_from_fork+0x14/0x28
Exception stack(0xc488dfb0 to 0xc488dff8)
dfa0: 00000000 00000000 00000000 00000000
dfc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
dfe0: 00000000 00000000 00000000 00000000 00000013 00000000
Code: e3a00003 e12fff1e e52de004 e590e47c (e59ee004)
---[ end trace 0000000000000000 ]---