[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <Z9yR6pyg1mtqKynh@makrotopia.org>
Date: Thu, 20 Mar 2025 22:08:42 +0000
From: Daniel Golle <daniel@...rotopia.org>
To: Andi Shyti <andi.shyti@...nel.org>
Cc: Zoie Lin <zoie.lin@...iatek.com>, Qii Wang <qii.wang@...iatek.com>,
Matthias Brugger <matthias.bgg@...il.com>,
AngeloGioacchino Del Regno <angelogioacchino.delregno@...labora.com>,
Project_Global_Chrome_Upstream_Group@...iatek.com,
linux-i2c@...r.kernel.org, linux-kernel@...r.kernel.org,
linux-arm-kernel@...ts.infradead.org,
linux-mediatek@...ts.infradead.org, teddy.chen@...iatek.com,
joseph-cc.chang@...iatek.com, leilk.liu@...iatek.com,
John Crispin <john@...ozen.org>
Subject: Re: [PATCH v5 1/1] i2c: mediatek: add runtime PM operations and bus
regulator control
Hi Andi,
Hi Zoie,
On Wed, Mar 19, 2025 at 12:34:53AM +0100, Andi Shyti wrote:
> Hi Zoie,
>
> On Fri, Mar 14, 2025 at 10:53:43PM +0800, Zoie Lin wrote:
> > Introduce support for runtime PM operations in
> > the I2C driver, enabling runtime suspend and resume functionality.
> >
> > Although in most platforms, the bus power of i2c is always
> > on, some platforms disable the i2c bus power in order to meet
> > low power request.
> >
> > This implementation includes bus regulator control to facilitate
> > proper handling of the bus power based on platform requirements.
> >
> > Signed-off-by: Zoie Lin <zoie.lin@...iatek.com>
>
> merged to i2c/i2c-host.
the change causes a crash during boot on MT7988 which typically uses
one of its I2C busses to connect a Richtek RT5190A PMIC.
[ 1.465158] SError Interrupt on CPU3, code 0x00000000bf000002 -- SError
[ 1.465170] CPU: 3 UID: 0 PID: 40 Comm: kworker/u16:1 Not tainted 6.14.0-rc7-next-20250320+ #0 NONE
[ 1.465178] Hardware name: SmartRG SDG-9000 (DT)
[ 1.465180] Workqueue: async async_run_entry_fn
[ 1.465194] pstate: 60400005 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
[ 1.465199] pc : mtk_i2c_transfer+0x27c/0x1108
[ 1.465208] lr : mtk_i2c_transfer+0x224/0x1108
[ 1.465212] sp : ffffffc0821538e0
[ 1.465213] x29: ffffffc0821538e0 x28: 0000000000000000 x27: ffffffc082153a00
[ 1.465220] x26: 00000000ffff8b62 x25: ffffffc080f3b000 x24: 0000000000000000
[ 1.465225] x23: 0000000000000001 x22: ffffff80c0ba7810 x21: 000000000000000f
[ 1.465230] x20: ffffffc082153a10 x19: ffffff80c9620080 x18: 0000000000000014
[ 1.465236] x17: 000000005f52c058 x16: 00000000c071d659 x15: 0000000013b9e9aa
[ 1.465241] x14: 00000000305bde35 x13: ffffff80c5f222e8 x12: ffffff80c5f222b0
[ 1.465246] x11: 0000000000001e20 x10: ffffffc0811097d8 x9 : 0000000000000001
[ 1.465251] x8 : ffffffc082153830 x7 : ffffffc0821538a0 x6 : ffffffc082153840
[ 1.465256] x5 : 000000000000ffed x4 : 0000000000000003 x3 : ffffffc080b798b0
[ 1.465260] x2 : 0000000000000000 x1 : ffffffc080b797d8 x0 : 0000000000000064
[ 1.465267] Kernel panic - not syncing: Asynchronous SError Interrupt
[ 1.465269] SMP: stopping secondary CPUs
[ 1.465281] Kernel Offset: disabled
[ 1.465282] CPU features: 0x0000,00000040,00000000,8200400b
[ 1.465286] Memory Limit: none
[ 1.466353]
[ 1.466355] ================================
[ 1.466356] WARNING: inconsistent lock state
[ 1.466357] 6.14.0-rc7-next-20250320+ #0 Not tainted
[ 1.466360] --------------------------------
[ 1.466361] inconsistent {INITIAL USE} -> {IN-NMI} usage.
[ 1.466364] kworker/u16:1/40 [HC1[1]:SC0[0]:HE0:SE1] takes:
[ 1.466369] ffffff80c0357940 (&prz->buffer_lock){....}-{2:2}, at: buffer_size_add+0x68/0x84
[ 1.466384] {INITIAL USE} state was registered at:
[ 1.466386] lock_acquire+0xf4/0x2d8
[ 1.466391] _raw_spin_lock_irqsave+0x5c/0x80
[ 1.466399] buffer_size_add+0x68/0x84
[ 1.466404] persistent_ram_write+0x44/0x11c
[ 1.466410] ramoops_pstore_write+0x150/0x1c4
[ 1.466415] pstore_console_write+0x4c/0x5c
[ 1.466420] console_flush_all+0x2ac/0x490
[ 1.466425] console_unlock+0x68/0x144
[ 1.466430] vprintk_emit+0x168/0x3ac
[ 1.466434] vprintk_default+0x34/0x3c
[ 1.466439] vprintk+0x24/0x2c
[ 1.466444] _printk+0x48/0x50
[ 1.466448] register_console+0x370/0x4c4
[ 1.466453] pstore_register+0x18c/0x37c
[ 1.466457] ramoops_probe+0x2e8/0x5c4
[ 1.466461] platform_probe+0x64/0xbc
[ 1.466467] really_probe+0xbc/0x388
[ 1.466470] __driver_probe_device+0x78/0x154
[ 1.466474] driver_probe_device+0x3c/0xd4
[ 1.466477] __device_attach_driver+0xb0/0x144
[ 1.466480] bus_for_each_drv+0x6c/0xb0
[ 1.466486] __device_attach+0x9c/0x19c
[ 1.466489] device_initial_probe+0x10/0x18
[ 1.466493] bus_probe_device+0xa8/0xac
[ 1.466495] device_add+0x58c/0x790
[ 1.466500] of_device_add+0x4c/0x58
[ 1.466507] of_platform_device_create_pdata+0x9c/0x118
[ 1.466512] of_platform_default_populate_init+0x4c/0xf0
[ 1.466519] do_one_initcall+0x64/0x324
[ 1.466524] kernel_init_freeable+0x298/0x4f0
[ 1.466530] kernel_init+0x1c/0x1c8
[ 1.466534] ret_from_fork+0x10/0x20
[ 1.466538] irq event stamp: 3498
[ 1.466539] hardirqs last enabled at (3497): [<ffffffc080ac0b78>] _raw_spin_unlock_irqrestore+0x54/0x74
[ 1.466546] hardirqs last disabled at (3498): [<ffffffc080ab43c4>] el1h_64_error_handler+0x20/0x48
[ 1.466551] softirqs last enabled at (3392): [<ffffffc08004af28>] handle_softirqs+0x46c/0x484
[ 1.466558] softirqs last disabled at (3381): [<ffffffc080010170>] __do_softirq+0x10/0x18
[ 1.466562]
[ 1.466562] other info that might help us debug this:
[ 1.466564] Possible unsafe locking scenario:
[ 1.466564]
[ 1.466565] CPU0
[ 1.466566] ----
[ 1.466567] lock(&prz->buffer_lock);
[ 1.466570] <Interrupt>
[ 1.466571] lock(&prz->buffer_lock);
[ 1.466573]
[ 1.466573] *** DEADLOCK ***
[ 1.466573]
[ 1.466575] 5 locks held by kworker/u16:1/40:
[ 1.466578] #0: ffffff80c01b2148 ((wq_completion)async){+.+.}-{0:0}, at: process_one_work+0x1a8/0x610
[ 1.466588] #1: ffffffc082153dd8 ((work_completion)(&entry->work)){+.+.}-{0:0}, at: process_one_work+0x1d0/0x610
[ 1.466598] #2: ffffff80c7b3f908 (&dev->mutex){....}-{4:4}, at: __device_attach_async_helper+0x28/0xec
[ 1.466606] #3: ffffff80c5f22068 (rt5190a_regulator:443:(&rt5190a_regmap_config)->lock){+.+.}-{4:4}, at: regmap_lock_mutex+0x10/0x18
[ 1.466617] #4: ffffff80c9620100 (i2c_register_adapter){+.+.}-{4:4}, at: i2c_adapter_lock_bus+0x20/0x2c
[ 1.466629]
[ 1.466629] stack backtrace:
[ 1.466630] CPU: 3 UID: 0 PID: 40 Comm: kworker/u16:1 Not tainted 6.14.0-rc7-next-20250320+ #0 NONE
[ 1.466635] Hardware name: SmartRG SDG-9000 (DT)
[ 1.466637] Workqueue: async async_run_entry_fn
[ 1.466643] Call trace:
[ 1.466645] show_stack+0x14/0x1c (C)
[ 1.466653] dump_stack_lvl+0x30/0xc0
[ 1.466657] dump_stack+0x14/0x1c
[ 1.466661] print_usage_bug.part.0+0x26c/0x318
[ 1.466665] lock_acquire+0x280/0x2d8
[ 1.466669] _raw_spin_lock_irqsave+0x5c/0x80
[ 1.466676] buffer_size_add+0x68/0x84
[ 1.466681] persistent_ram_write+0x44/0x11c
[ 1.466687] ramoops_pstore_write+0xc8/0x1c4
[ 1.466692] pstore_dump+0x16c/0x300
[ 1.466697] kmsg_dump_desc+0xc0/0x194
[ 1.466703] panic+0x170/0x38c
[ 1.466708] nmi_panic+0x50/0x64
[ 1.466712] arm64_serror_panic+0x60/0x70
[ 1.466715] do_serror+0x38/0x68
[ 1.466719] el1h_64_error_handler+0x34/0x48
[ 1.466723] el1h_64_error+0x70/0x74
[ 1.466727] mtk_i2c_transfer+0x27c/0x1108 (P)
[ 1.466732] __i2c_transfer+0x1f8/0x948
[ 1.466736] i2c_transfer+0x90/0xe8
[ 1.466739] regmap_i2c_read+0x48/0x70
[ 1.466744] _regmap_raw_read+0x110/0x328
[ 1.466750] regmap_raw_read+0x130/0x240
[ 1.466755] rt5190a_probe+0x88/0x53c
[ 1.466761] i2c_device_probe+0x154/0x2ec
[ 1.466764] really_probe+0xbc/0x388
[ 1.466768] __driver_probe_device+0x78/0x154
[ 1.466772] driver_probe_device+0x3c/0xd4
[ 1.466776] __device_attach_driver+0xb0/0x144
[ 1.466780] bus_for_each_drv+0x6c/0xb0
[ 1.466785] __device_attach_async_helper+0x80/0xec
[ 1.466790] async_run_entry_fn+0x34/0x17c
[ 1.466794] process_one_work+0x224/0x610
[ 1.466799] worker_thread+0x1b4/0x348
[ 1.466804] kthread+0x108/0x1d4
[ 1.466808] ret_from_fork+0x10/0x20
Reverting commit 4b60b1b58696 (i2c: mediatek: add runtime PM operations
and bus regulator control") fixes the issue.
Powered by blists - more mailing lists