Hi Tony, Tony Lindgren <tony@xxxxxxxxxxx> writes: > Jarkko Nikula <jarkko.nikula@xxxxxxxxxx> reported that Beagleboard > revision c2 stopped booting. Jarkko bisected the issue down to > commit 6cfcd5563b4f ("clocksource/drivers/timer-ti-dm: Fix suspend > and resume for am3 and am4"). > > Let's fix the issue by tagging system timers as reserved rather than > ignoring them. And let's not probe any interconnect target module child > devices for reserved modules. > > This allows PM runtime to keep track of clocks and clockdomains for > the interconnect target module, and prevent the system timer from idling > as we already have SYSC_QUIRK_NO_IDLE and SYSC_QUIRK_NO_IDLE_ON_INIT > flags set for system timers. > > Fixes: 6cfcd5563b4f ("clocksource/drivers/timer-ti-dm: Fix suspend and resume for am3 and am4") > Reported-by: Jarkko Nikula <jarkko.nikula@xxxxxxxxxx> > Signed-off-by: Tony Lindgren <tony@xxxxxxxxxxx> I'm debugging why suspend/resume on AM3x and AM4x are mostly working, but getting the warning that not all powerdomains are transitioning: pm33xx pm33xx: PM: Could not transition all powerdomains to target state I bisected it down to $SUBJECT patch, and verified that reverting it makes both on am335x-boneblack and am437x-gp-evm fully suspend, and I'm now seeing: pm33xx pm33xx: PM: Successfully put all powerdomains to target state Note that it doesn't revert cleanly due to some other changes, but this one-liner[1] effectively reverts the behavior of $SUBJECT patch, and also makes things work again. I verified the revert (and hack[1]) on both v5.10 stable and mainline v5.16 but TBH, I'm still not 100% sure what's going on so looking for some guidance from you Tony on what the "real" fix should be. Kevin [1] diff --git a/drivers/bus/ti-sysc.c b/drivers/bus/ti-sysc.c index 54c0ee6dda30..82379ff9dce5 100644 --- a/drivers/bus/ti-sysc.c +++ b/drivers/bus/ti-sysc.c @@ -3304,7 +3304,7 @@ static int sysc_probe(struct platform_device *pdev) error = sysc_check_active_timer(ddata); if (error == -ENXIO) - ddata->reserved = true; + return error; else if (error) return error;