Hello,
during the commissioning of Kernel 5.10 to our boards, based on AM4376,
I've noticed following issues:
1. SD-card CD signal debouncing returned error (at mmc probe)
drivers/mmc/core/host.c, function mmc_of_parse:
if (device_property_read_u32(dev, "cd-debounce-delay-ms",
&cd_debounce_delay_ms))
cd_debounce_delay_ms = 200;
...
ret = mmc_gpiod_request_cd(host, "cd", 0, false,
cd_debounce_delay_ms * 1000);
if (!ret)
dev_info(host->parent, "Got CD GPIO\n");
else if (ret != -ENOENT && ret != -ENOSYS)
return ret;
So we can see, if no DTS property "cd-debounce-delay-ms" was set,
200000 us are used.
The problem is, gpio-omap.c doesn't accept this high value and returns -EINVAL:
drivers/gpio/gpio-omap.c, function omap2_set_gpio_debounce:
if (enable) {
debounce = DIV_ROUND_UP(debounce, 31) - 1;
if ((debounce & OMAP4_GPIO_DEBOUNCINGTIME_MASK) != debounce)
return -EINVAL;
}
So we decided to change it to:
if (enable) {
debounce = DIV_ROUND_UP(debounce, 31) - 1;
if ((debounce & OMAP4_GPIO_DEBOUNCINGTIME_MASK) != debounce)
- return -EINVAL;
+ debounce = OMAP4_GPIO_DEBOUNCINGTIME_MASK;
}
We limit the debouncing value to 7936 us.
2. Sporadically crash at recall of omap2_set_gpio_debounce
Following scenario: SD card is inserted. We boot. Card was recognized.
At one init script we call following:
echo 481d8000.mmc > /sys/bus/platform/drivers/omap_hsmmc/unbind
echo 481d8000.mmc > /sys/bus/platform/drivers/omap_hsmmc/bind
In this case mmc probe is called at bind. So omap2_set_gpio_debounce is called again.
Sometimes we got crash:
mmc1: card 545d removed
l4ls-clkctrl:0068:0: failed to disable
<--- cut here ---
Unhandled fault: imprecise external abort (0x1406) at 0xb6e99700
pgd = d31c346e
[b6e99700] *pgd=81766831, *pte=87e8834f, *ppte=87e8883f
Internal error: : 1406 [#1] PREEMPT_RT ARM
Modules linked in:
CPU: 0 PID: 112 Comm: S04hotplug-inst Not tainted 5.10.47-rt45-5.10.47 #1
Hardware name: Generic AM43 (Flattened Device Tree)
PC is at clk_disable+0x4/0x30
LR is at omap_gpio_set_config+0x118/0x218
pc : [<c038bfc0>] lr : [<c0385520>] psr: 200e0093
sp : c176dcd0 ip : c176dcd0 fp : c176dd04
r10: 00008000 r9 : 600e0013 r8 : 0000000f
r7 : c153c694 r6 : 00030d40 r5 : 000000ff r4 : c153c640
r3 : fa1ae150 r2 : 00000000 r1 : c0645e60 r0 : c1548f40
Flags: nzCv IRQs off FIQs on Mode SVC_32 ISA ARM Segment none
Control: 10c53c7d Table: 81754059 DAC: 00000051
Process S04hotplug-inst (pid: 112, stack limit = 0xdc6acc83)
Stack: (0xc176dcd0 to 0xc176e000)
dcc0: c05ea150 c009178c c15579d0 0000004b
dce0: 030d400b 00030d40 c161f0c0 00000000 c154ea80 00000042 c176dd1c c176dd08
dd00: c03789b4 c0385414 c17a0800 c1556d2c c176dd2c c176dd20 c03789e8 c0378960
dd20: c176dd54 c176dd30 c0468104 c03789d4 c17a0800 c1557810 c1679ec0 c1557810
dd40: c065943c c154ea80 c176dd8c c176dd58 c045c624 c04680a4 00030d40 c176dd68
dd60: c045cac8 00000004 00000000 000000c8 c176dd8c c17a0800 c1557800 c1679ec0
dd80: c176ddd4 c176dd90 c04718e8 c045c09c 00000000 00000000 c176ddcc c1557810
dda0: c176ddc4 fa1d8000 c03fbc0c c1557810 00000000 c0958f54 00000000 c0958f54
ddc0: 0000000f 00000000 c176ddf4 c176ddd8 c03ec0f4 c047175c c1557810 c09a6b50
dde0: c09a6b68 00000000 c176de24 c176ddf8 c03e9f70 c03ec0a8 000036f4 c1557810
de00: c0958f54 c0958f54 0000000d c1692a00 c176df18 c1692a10 c176de3c c176de28
de20: c03ea464 c03e9e7c c1557810 00000000 c176de5c c176de40 c03ea670 c03ea3c0
de40: c094ef70 c1557810 c0958f54 0000000d c176de7c c176de60 c03e86f8 c03ea614
de60: c03e865c c1715b00 00000000 00000000 c176de94 c176de80 c03e7cd4 c03e8668
de80: c03e7ca4 c1715b00 c176deac c176de98 c02230b8 c03e7cb0 0000000d c1715b00
dea0: c176dee4 c176deb0 c0222980 c022307c 00000000 00000000 0000000a c172dc00
dec0: 0000000d 00000000 00000000 c176df68 00000000 00000004 c176df64 c176dee8
dee0: c0195e68 c022285c 0000000d c176def8 c0197ba8 c0197abc 00105790 0000000d
df00: 00000005 00000000 00000000 c176df00 00000000 00000200 c172dc00 00000000
df20: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
df40: c172dc00 c172dc00 00000000 00000000 00105790 0000000d c176df94 c176df68
df60: c01960ac c0195b08 00000000 00000000 0000000d 00105790 b6e98d98 00000004
df80: c0008488 c176c000 c176dfa4 c176df98 c01960f0 c0196024 00000000 c176dfa8
dfa0: c0008260 c01960e4 0000000d 00105790 00000001 00105790 0000000d 00000000
dfc0: 0000000d 00105790 b6e98d98 00000004 00105790 0000000d 00000000 00000000
dfe0: 00000064 beb50658 b6dc1da8 b6e1acb4 600e0010 00000001 00000000 00000000
Backtrace:
[<c0385408>] (omap_gpio_set_config) from [<c03789b4>] (gpiod_set_config+0x60/0x74)
r10:00000042 r9:c154ea80 r8:00000000 r7:c161f0c0 r6:00030d40 r5:030d400b
r4:0000004b
[<c0378954>] (gpiod_set_config) from [<c03789e8>] (gpiod_set_debounce+0x20/0x24)
r5:c1556d2c r4:c17a0800
[<c03789c8>] (gpiod_set_debounce) from [<c0468104>] (mmc_gpiod_request_cd+0x6c/0xb4)
[<c0468098>] (mmc_gpiod_request_cd) from [<c045c624>] (mmc_of_parse+0x594/0x63c)
r9:c154ea80 r8:c065943c r7:c1557810 r6:c1679ec0 r5:c1557810 r4:c17a0800
[<c045c090>] (mmc_of_parse) from [<c04718e8>] (omap_hsmmc_probe+0x198/0x9ac)
r6:c1679ec0 r5:c1557800 r4:c17a0800
[<c0471750>] (omap_hsmmc_probe) from [<c03ec0f4>] (platform_drv_probe+0x58/0xa8)
r10:00000000 r9:0000000f r8:c0958f54 r7:00000000 r6:c0958f54 r5:00000000
r4:c1557810
[<c03ec09c>] (platform_drv_probe) from [<c03e9f70>] (really_probe+0x100/0x3c4)
r7:00000000 r6:c09a6b68 r5:c09a6b50 r4:c1557810
[<c03e9e70>] (really_probe) from [<c03ea464>] (driver_probe_device+0xb0/0xc4)
r10:c1692a10 r9:c176df18 r8:c1692a00 r7:0000000d r6:c0958f54 r5:c0958f54
r4:c1557810 r3:000036f4
[<c03ea3b4>] (driver_probe_device) from [<c03ea670>] (device_driver_attach+0x68/0x70)
r5:00000000 r4:c1557810
[<c03ea608>] (device_driver_attach) from [<c03e86f8>] (bind_store+0x9c/0x110)
r7:0000000d r6:c0958f54 r5:c1557810 r4:c094ef70
[<c03e865c>] (bind_store) from [<c03e7cd4>] (drv_attr_store+0x30/0x3c)
r7:00000000 r6:00000000 r5:c1715b00 r4:c03e865c
[<c03e7ca4>] (drv_attr_store) from [<c02230b8>] (sysfs_kf_write+0x48/0x54)
r5:c1715b00 r4:c03e7ca4
[<c0223070>] (sysfs_kf_write) from [<c0222980>] (kernfs_fop_write_iter+0x130/0x1cc)
r5:c1715b00 r4:0000000d
[<c0222850>] (kernfs_fop_write_iter) from [<c0195e68>] (vfs_write+0x36c/0x440)
r10:00000004 r9:00000000 r8:c176df68 r7:00000000 r6:00000000 r5:0000000d
r4:c172dc00
[<c0195afc>] (vfs_write) from [<c01960ac>] (ksys_write+0x94/0xc0)
r9:0000000d r8:00105790 r7:00000000 r6:00000000 r5:c172dc00 r4:c172dc00
[<c0196018>] (ksys_write) from [<c01960f0>] (sys_write+0x18/0x1c)
r9:c176c000 r8:c0008488 r7:00000004 r6:b6e98d98 r5:00105790 r4:0000000d
[<c01960d8>] (sys_write) from [<c0008260>] (ret_fast_syscall+0x0/0x5c)
Exception stack(0xc176dfa8 to 0xc176dff0)
dfa0: 0000000d 00105790 00000001 00105790 0000000d 00000000
dfc0: 0000000d 00105790 b6e98d98 00000004 00105790 0000000d 00000000 00000000
dfe0: 00000064 beb50658 b6dc1da8 b6e1acb4
Code: ebfffd6a ebffffa6 e89da830 e1a0c00d (e92dd800)
---[ end trace 0000000000000002 ]---
note: S04hotplug-inst[112] exited with preempt_count 1
------------[ cut here ]------------
WARNING: CPU: 0 PID: 112 at /usr/src/kernel/drivers/bus/omap_l3_noc.c:147 l3_interrupt_handler+0x254/0x35c
44000000.ocp:L3 Custom Error: MASTER M2 (64-bit) TARGET L4_PER_0 (Idle): Data Access in Supervisor mode during Functional access
Modules linked in:
CPU: 0 PID: 112 Comm: S04hotplug-inst Tainted: G D 5.10.47-rt45-5.10.47 #1
Hardware name: Generic AM43 (Flattened Device Tree)
Backtrace:
[<c0014878>] (dump_backtrace) from [<c0014ba8>] (show_stack+0x20/0x24)
r7:00000009 r6:00000000 r5:c07c2294 r4:c07b769c
[<c0014b88>] (show_stack) from [<c05e0cd0>] (dump_stack+0x2c/0x30)
[<c05e0ca4>] (dump_stack) from [<c003559c>] (__warn+0x110/0x114)
r5:c07c2294 r4:c176d950
[<c003548c>] (__warn) from [<c0035614>] (warn_slowpath_fmt+0x74/0xa0)
r9:c1386640 r8:00000009 r7:c0368c74 r6:00000093 r5:c07c2294 r4:c07c2264
[<c00355a4>] (warn_slowpath_fmt) from [<c0368c74>] (l3_interrupt_handler+0x254/0x35c)
r8:00000014 r7:c07c237c r6:00000000 r5:c07c21c0 r4:80080003
[<c0368a20>] (l3_interrupt_handler) from [<c007e4c8>] (__handle_irq_event_percpu+0xa0/0x278)
r10:00000014 r9:c176da8c r8:c09697e0 r7:c0969800 r6:00000000 r5:00000000
r4:c137bfc0
[<c007e428>] (__handle_irq_event_percpu) from [<c007e6ec>] (handle_irq_event_percpu+0x4c/0x84)
r10:c1771c80 r9:c0944cc0 r8:c1019000 r7:00000001 r6:c121aa00 r5:00000000
r4:c00b11c0
[<c007e6a0>] (handle_irq_event_percpu) from [<c007e790>] (handle_irq_event+0x6c/0xac)
r7:00000001 r6:00000000 r5:c088c9d0 r4:c121aa00
[<c007e724>] (handle_irq_event) from [<c0082c08>] (handle_fasteoi_irq+0xac/0x1c8)
r5:c088c9d0 r4:c121aa00
[<c0082b5c>] (handle_fasteoi_irq) from [<c007d3a4>] (generic_handle_irq+0x44/0x54)
r5:00000000 r4:c0944bd8
[<c007d360>] (generic_handle_irq) from [<c007dca4>] (__handle_domain_irq+0x64/0xb8)
[<c007dc40>] (__handle_domain_irq) from [<c0009dc4>] (gic_handle_irq+0x84/0x98)
r9:c0944cc0 r8:c176db40 r7:fa24010c r6:fa240100 r5:c0944cbc r4:c08871e4
[<c0009d40>] (gic_handle_irq) from [<c000948c>] (__irq_svc+0x6c/0xbc)
Exception stack(0xc176db40 to 0xc176db88)
db40: 00000000 00000002 00000001 c176c000 c1771c80 c1450a00 0000000b c176c000
db60: ffffe000 00000000 c1771c80 c176dba4 c1771c80 c176db90 00000000 c00b11c0
db80: 600e0113 ffffffff
r9:c176c000 r8:ffffe000 r7:c176db74 r6:ffffffff r5:600e0113 r4:c00b11c0
[<c00b1178>] (futex_cleanup_begin) from [<c00b476c>] (futex_exit_release+0x1c/0x38)
r5:c1450a00 r4:c1771c80
[<c00b4750>] (futex_exit_release) from [<c0032824>] (exit_mm_release+0x20/0x30)
r5:c1450a00 r4:c1771c80
[<c0032804>] (exit_mm_release) from [<c003880c>] (do_exit+0x1ac/0xae8)
r5:c1450a00 r4:c1771c80
[<c0038660>] (do_exit) from [<c0014d40>] (die+0x194/0x2b0)
r7:bf000000
[<c0014bac>] (die) from [<c0014e84>] (arm_notify_die+0x28/0x64)
r10:00008000 r9:c176c000 r8:c176dc80 r7:b6e99700 r6:c001b694 r5:00001406
r4:c088c2f0
[<c0014e5c>] (arm_notify_die) from [<c001bd10>] (do_DataAbort+0xcc/0xd0)
[<c001bc44>] (do_DataAbort) from [<c00093f8>] (__dabt_svc+0x58/0x80)
Exception stack(0xc176dc80 to 0xc176dcc8)
dc80: c1548f40 c0645e60 00000000 fa1ae150 c153c640 000000ff 00030d40 c153c694
dca0: 0000000f 600e0013 00008000 c176dd04 c176dcd0 c176dcd0 c0385520 c038bfc0
dcc0: 200e0093 ffffffff
r8:0000000f r7:c176dcb4 r6:ffffffff r5:200e0093 r4:c038bfc0
[<c0385408>] (omap_gpio_set_config) from [<c03789b4>] (gpiod_set_config+0x60/0x74)
r10:00000042 r9:c154ea80 r8:00000000 r7:c161f0c0 r6:00030d40 r5:030d400b
r4:0000004b
[<c0378954>] (gpiod_set_config) from [<c03789e8>] (gpiod_set_debounce+0x20/0x24)
r5:c1556d2c r4:c17a0800
[<c03789c8>] (gpiod_set_debounce) from [<c0468104>] (mmc_gpiod_request_cd+0x6c/0xb4)
[<c0468098>] (mmc_gpiod_request_cd) from [<c045c624>] (mmc_of_parse+0x594/0x63c)
r9:c154ea80 r8:c065943c r7:c1557810 r6:c1679ec0 r5:c1557810 r4:c17a0800
[<c045c090>] (mmc_of_parse) from [<c04718e8>] (omap_hsmmc_probe+0x198/0x9ac)
r6:c1679ec0 r5:c1557800 r4:c17a0800
[<c0471750>] (omap_hsmmc_probe) from [<c03ec0f4>] (platform_drv_probe+0x58/0xa8)
r10:00000000 r9:0000000f r8:c0958f54 r7:00000000 r6:c0958f54 r5:00000000
r4:c1557810
[<c03ec09c>] (platform_drv_probe) from [<c03e9f70>] (really_probe+0x100/0x3c4)
r7:00000000 r6:c09a6b68 r5:c09a6b50 r4:c1557810
[<c03e9e70>] (really_probe) from [<c03ea464>] (driver_probe_device+0xb0/0xc4)
r10:c1692a10 r9:c176df18 r8:c1692a00 r7:0000000d r6:c0958f54 r5:c0958f54
r4:c1557810 r3:000036f4
[<c03ea3b4>] (driver_probe_device) from [<c03ea670>] (device_driver_attach+0x68/0x70)
r5:00000000 r4:c1557810
[<c03ea608>] (device_driver_attach) from [<c03e86f8>] (bind_store+0x9c/0x110)
r7:0000000d r6:c0958f54 r5:c1557810 r4:c094ef70
[<c03e865c>] (bind_store) from [<c03e7cd4>] (drv_attr_store+0x30/0x3c)
r7:00000000 r6:00000000 r5:c1715b00 r4:c03e865c
[<c03e7ca4>] (drv_attr_store) from [<c02230b8>] (sysfs_kf_write+0x48/0x54)
r5:c1715b00 r4:c03e7ca4
[<c0223070>] (sysfs_kf_write) from [<c0222980>] (kernfs_fop_write_iter+0x130/0x1cc)
r5:c1715b00 r4:0000000d
[<c0222850>] (kernfs_fop_write_iter) from [<c0195e68>] (vfs_write+0x36c/0x440)
r10:00000004 r9:00000000 r8:c176df68 r7:00000000 r6:00000000 r5:0000000d
r4:c172dc00
[<c0195afc>] (vfs_write) from [<c01960ac>] (ksys_write+0x94/0xc0)
r9:0000000d r8:00105790 r7:00000000 r6:00000000 r5:c172dc00 r4:c172dc00
[<c0196018>] (ksys_write) from [<c01960f0>] (sys_write+0x18/0x1c)
r9:c176c000 r8:c0008488 r7:00000004 r6:b6e98d98 r5:00105790 r4:0000000d
[<c01960d8>] (sys_write) from [<c0008260>] (ret_fast_syscall+0x0/0x5c)
Exception stack(0xc176dfa8 to 0xc176dff0)
dfa0: 0000000d 00105790 00000001 00105790 0000000d 00000000
dfc0: 0000000d 00105790 b6e98d98 00000004 00105790 0000000d 00000000 00000000
dfe0: 00000064 beb50658 b6dc1da8 b6e1acb4
---[ end trace 0000000000000003 ]---
We cannot explain the reason for this crash.
As a workaround we changed gpio-omap.c, so we call debouncing only once.
I hope our experience with Kernel 5.10 will let improve the Linux appropriately.
Best regards
Walter.