On Tue, Jun 21, 2022 at 05:42:18PM +0200, Ondřej Jirman wrote: > On Wed, Feb 16, 2022 at 09:40:27AM +0800, Jon Lin wrote: > > From: shengfei Xu <xsf@xxxxxxxxxxxxxx> > > > > the wakeup interrupt handler which is guaranteed not to run while > > @resume noirq() is being executed. the patch can help to avoid the > > wakeup source try to access spi when the spi is in suspend mode. > > This patch causes oops on suspend every single time, because it tries to disable > already disabled clocks (one disable in runtime PM suspend, and other one in > system suspend). It also fails to properly handle errors from clk_prepare_enable > in rockchip_spi_resume, potentially causing even more clock enable/disable > imballance issues. > > Please send a revert and figure out a better fix for the original issue. Did anyone ever resolve this? I still see this issue on 6.10.6. IIUC, we can actually do a partial revert -- we *should* be using pm_runtime_force_{suspend,resume}() (so that we coordinate clk-disable, etc. with the runtime PM state), but we also want to run in the noirq phase. If I don't see anyone else's solution or input, I'll plan on submitting a partial revert, which seems to test out OK for me. Brian P.S. One can work around this problem by disabling runtime PM for the controllers: for i in /sys/bus/platform/drivers/rockchip-spi/*/power/control; do echo on >$i done But obviously that's not ideal.