Due to an influx of spam, we have had to impose restrictions on new accounts. Please see this wiki page for instructions on how to get full permissions. Sorry for the inconvenience.
Admin message
The migration is almost done, at least the rest should happen in the background. There are still a few technical difference between the old cluster and the new ones, and they are summarized in this issue. Please pay attention to the TL:DR at the end of the comment.
Trying to suspend the system, it immediately wakes up again. This happens all the time, no exceptions, always same behavior.
Did already try to block GPIO 8 with kernel parameters, disabled the EC wakeup, disabled all devices in /proc/acpi/wakeup, disabled /sys/bus/i2c/devices/i2c-IDEA5002:00/power/wakeup and /sys/bus/i2c/devices/i2c-SYNA2BA6:00/power/wakeup. Nothing helped so far.
Hi Mario,
Thank you, but that didn't help. Is there anything else what I can do?
The weird thing is that I also have a Lenovo Yoga Slim 6 Gen8 (also 14APU8) with a Ryzen 7840U processor and that laptop does sleep with Arch Linux. Just guessing the Yoga Slim 7 also have these i2c "smart" amps. I already compiled a patch from Texas Instruments for these amps. Is it possible that these prevents suspend? Sound doesn't really bother me but I really want the laptop to suspend so that I don't have to shutdown all apps every time.
Can you get me a new report with that patch in place? In your logs it showed as the source for wakeups, so I need to see if the patch worked properly. I'd suggest moving to 6.5 final, it has the patch contained.
I first unbind the ITE8350 with echo "i2c-ITE8350:00" >unbind in /sys/bus/i2c/drivers/i2c_hid_acpi, suspend still doesn't work. I unbinded all i2c hid devices (also the trackpad) and the suspend still doesn't work, here is the s2idle report with all unbinded i2c devices.
Edit: I put the wrong command here in the message, it was incorrectly noted that I unbinded the i2c-ITE8350:00 device, but it was echo "i2c-ITE8350:00" >unbind
My mistake, the previous s2idle report was also with unbinded trackpad. Here is the s2idle report with only unbinded ITE8350, according the DSDT that is connected to GPIO 8.
2023-08-29 09:19:18,306 DEBUG: 2023-08-29T09:19:15,412255+02:00 ACPI: \_SB_.PCI0.GP19.XHC2: LPI: required min power state:D3hot current power state:D02023-08-29 09:19:18,306 DEBUG: 2023-08-29T09:19:15,412258+02:00 ACPI: \_SB_.PCI0.GP19.XHC2: LPI: Constraint not met; min power state:D3hot current power state:D0
With that last log, Do you have anything plugged in over USB? Or anything related to USB disabled in BIOS?
No all tests are done without any peripherals or devices connected. I looked in BIOS and Always On USB is disabled, USB ports are disabled during low power states. There is no other configuration option for USB in the BIOS.
Don't know if does matter with s2idle, but XHC2 is already disabled on /proc/acpi/wakeup.
No all tests are done without any peripherals or devices connected. I looked in BIOS and Always On USB is disabled, USB ports are disabled during low power states. There is no other configuration option for USB in the BIOS.
If possible; can you reset everything to BIOS default settings and see if it helps? This would reset any hidden options too if something changed them.
Don't know if does matter with s2idle, but XHC2 is already disabled on /proc/acpi/wakeup.
Have reset all values in BIOS/UEFI settings to defaults. And tried with pcie_port_pm=off as kernel parameter, still no luck. Here is the s2idle report (with unbinded GPIO 8) s2idle_report-2023-08-29-pcie-port-pm-off.txt I saw that GPIO 9 was active, so I unbinded the trackpad also and tested again, still not working, here is the reports2idle-2023-08-29-unbinded-gpio9.txt
I think it's a red herring. I just double checked a reference platform and have that same PCI endpoint and nothing binds to it. It's also got power/control as on.
Do you have Windows available as a dual boot or another NVME? I would like to see if Windows reproduces this problem as well. If you can please do a sleep cycle in Windows that is at least 30 minutes and then a sleep study.
Also in Windows - what is binding to that I2C device? Is there a separate driver? I wonder if we're missing somethign in Linux for this.
@mpearson any ideas on this one? Is this something you guys cover?
If it really is an issue with ITE8350 (as it seems) I hope we can figure it out before that device eventually shows up in a device that is in the Linux program.
f there's a specific question I can try and track down an answer - but I don't know the FW or HW team for this platform unfortunately so no promises.
@mpearson I think the specific question is whether there is any other software that communicates with the ITE8350 device in Windows. If there is; what commands does it send, particularly at suspend time.
My current suspicion is that there is some model/vendor specific command that tells it to start/stop reporting data that should be called at appropriate times.
@mpearson can you please ping again about any vendor commands to this stop it/start it? It seems to be at least one cause of this issue. We could just blacklist it from kernel side, but I don't know if it actually has a functional purpose that might ruin.
@mpearson with the things have transpired over the last few days let me summarize.
There are 3 problems. 2 of them are with I2C-HID devices. 1 is with modern standby entry ASL.
We have a kernel series that will avoid the two HID problems. I would still prefer that we have a way to talk to this device though and put it into the low power mode properly. Otherwise we're going to see the same thing again when there is an IDEA5003 device a few years from now that works similarly.
There is still no solution to the NVME issue from the kernel side, and I don't think this is actually feasible.
Let me try to explain it to you so you can talk to your BIOS team about this.
Notify (\_SB.PCI0.GPP8.NVME, 0x02) sends a wake event to the NVME device
The SSDT patches that have been created in this thread remove the NVME wakeup notification and that fixes the 3rd issue. Without this every single entry into s2idle will send a wakeup event to the NVME and wake the system.
Thanks Mario,
Appreciate the summary - I haven't been following the whole thread.
I'll forward this on and see if we can find someone to look at it. Didn't have a lot of joy previously.
Mark
Can we sync up offline next week when I'm back home - but short answer is I've not had any success getting BIOS changes implemented for this I'm afraid and got pushback.
Mark
I have also installed Windows on this machine, I had to check if the hardware is working correctly
On Windows actually everything works as expected.
I will do the sleep study and post the report here. On the I2C devices. The amplifiers for the speakers is also on the I2C bus, but that is not the ITE8350. I'm not really a Windows guy, so where do I check for the I2C devices? Is that also Device Manager?
About the speakers amplifiers. These are amplifiers that are connected to the I2C bus and HDA. They are not controlled through the HDA codec on I2S bus. For this laptop (and others) this patch is pending. The firmware loading and initialization of the amplifiers happens on the I2C bus.
On my previous laptop (Lenovo Legion 7 16ACHg6) as one of the first Lenovo laptops that had this construction (with Cirrus Logic amps). The devs at Cirrus Logic split their ASoC driver so that the drivers could be reused on I2C/HDA. I don't think that this will prevent the laptop to suspend because on my previous laptop I had no issues with suspend without loading the amp drivers, but as said before. This Yoga Slim is the first laptop that I own that only supports s2idle suspend and not S3 so it might be different.
Has nothing to do with this issue and offtopic, but check this thread on Lenovo Community https://forums.lenovo.com/t5/Ubuntu/Ubuntu-and-legion-pro-7-16IRX8H-audio-issues/m-p/5210709 . It's another laptop but they link to the firmwares and linux patches. I tried some patches and loaded the firmware. Very loud buzz on boot and the speakers was kind of hit and miss. For now I just wait the patches and firmwares land in mainline. I do have some sound (only top tweeters) that is enough for notifications :-)
The ACPI\ITE8350\1 device in Windows (ACPI\ITE8350, BIOS device name: _SB.I2CC.SHUB) has a Microsoft driver from 21-4-2009 with the INF-name SensorsHidClassDriver.inf, looks like a generic driver.
The other I2C device (the speaker amps) has ACPI\TIAS2781\0 as path. (ACPI\TIAS2781, BIOS device name: _SB.I2CD.AMP0) has drivers from Texas Instruments with the name TI Smart Amplifier Driver for Speakers.
Screenshot of devices:
Is it possible to use a patched DSDT to do some try-and-error to exclude these devices, or wouldn't work that because the hardware will trigger a wakeup?
edit: mentioned wrong driver of the HID sensors.
edit2: updated screenshot
May be useless information but I took my Yoga Slim 6 gen 8 (with AMD Phoenix 7840U APU), that laptop has an ITE8353 sensor hub device on _SB.I2CD.SHUB. That laptop did suspend on regular kernel. I did some Linux testing and it did what it should do so was actually surprised that this Slim 7 didn't work.
The ACPI\ITE8350\1 device in Windows (ACPI\ITE8350, BIOS device name: _SB.I2CC.SHUB) has a Microsoft driver from 21-4-2009 with the INF-name SensorsHidClassDriver.inf, looks like a generic driver.
Yeah this shows up in your other sleep study too:
| Instance Path | | ACPI\ITE8350\1 ||---------------|--|----------------|| Service Name | | hidi2c || Unique ID | | \_SB.I2CC.SHUB |
Is it possible to use a patched DSDT to do some try-and-error to exclude these devices, or wouldn't work that because the hardware will trigger a wakeup?
What we're trying to rule out here is anything that triggers an interrupt that's "unserviced". Unserviced interrupts before suspend prevent getting into the deepest state, and interrupts while in suspend will cause the system to wake. I don't think ruling it out will help as it would behave like an unserviced interrupt.
You're not going to do any harm with this experiment, worst that happens is it doesn't help.
May be useless information but I took my Yoga Slim 6 gen 8 (with AMD Phoenix 7840U APU), that laptop has an ITE8353 sensor hub device on _SB.I2CD.SHUB. That laptop did suspend on regular kernel. I did some Linux testing and it did what it should do so was actually surprised that this Slim 7 didn't work.
On the presumption that this issue is caused by that I2C device and Linux not handling it properly, I think the next debugging step is likely a little bit out of your reach. It would be connecting a logic analyzer to the I2C bus and capturing a trace from Windows and Linux while attempting to enter suspend. Then we could see if there is a sequence of events that the Windows HID-I2C driver is responding differently than the linux hid-i2c driver does.
As it's production hardware, there probably isn't a header to connect the logic analyzer to, so it would also mean soldering some jumper cables to the correct probe points.
If I'm right this is out of reach for you is it set to wakeup in sysfs (power/wakeup)? If so, can you leave it bound and turn that off? This will let the hid core call i2c_hid_core_power_down. Maybe this helps. The i2c-hid core does try to put it to sleep via i2c_hid_core_suspend already.
Maybe @bentiss has some other ideas from the software side what could be missing from hid-i2c that at suspend this device is triggering the GPIO ATTN pin.
But if the same exact I2C hub is in your other Phoenix laptop and working properly we might be barking up the wrong tree. Do you know what's different between these two models?
What we're trying to rule out here is anything that triggers an interrupt that's "unserviced". Unserviced interrupts before suspend prevent getting into the deepest state, and interrupts while in suspend will cause the system to wake. I don't think ruling it out will help as it would behave like an unserviced interrupt. You're not going to do any harm with this experiment, worst that happens is it doesn't help.
Check, I got the point.
On the presumption that this issue is caused by that I2C device and Linux not handling it properly, I think the next debugging step is likely a little bit out of your reach. It would be connecting a logic analyzer to the I2C bus and capturing a trace from Windows and Linux while attempting to enter suspend. Then we could see if there is a sequence of events that the Windows HID-I2C driver is responding differently than the linux hid-i2c driver does.
As it's production hardware, there probably isn't a header to connect the logic analyzer to, so it would also mean soldering some jumper cables to the correct probe points.
Indeed out of reach sadly.
If I'm right this is out of reach for you is it set to wakeup in sysfs (power/wakeup)? If so, can you leave it bound and turn that off? This will let the hid core call i2c_hid_core_power_down. Maybe this helps. The i2c-hid core does try to put it to sleep via i2c_hid_core_suspend already.
I'm in /sys/devices/LNXSYSTM:00/LNXSYBUS:00/AMDI0010:02/ITE8350:00/wakeup/wakeup50 and have these options
and the power in /sys/devices/LNXSYSTM:00/LNXSYBUS:00/AMDI0010:02/ITE8350:00/power has
autosuspend_delay_ms control runtime_active_time runtime_status runtime_suspended_time
don't really know what to control at this moment. Do you have an idea if you see this?
But if the same exact I2C hub is in your other Phoenix laptop and working properly we might be barking up the wrong tree. Do you know what's different between these two models?
I found out that this (Slim 7 with 7840S) is using ITE8350 and the other one (Slim 6 with 7840U) is using ITE8353, it is an another chip, also other dimensions but according the ITE site they have similar functionality, but also looks that the information is not complete. I have to look at the (chinese) datasheet to figure it out how they are connected etc...
I found out that this (Slim 7 with 7840S) is using ITE8350 and the other one (Slim 6 with 7840U) is using ITE8353, it is an another chip, also other dimensions but according the ITE site they have similar functionality, but also looks that the information is not complete. I have to look at the (chinese) datasheet to figure it out how they are connected etc...
Got it; so they might actually be working slightly differently and have different driver expectations then too.
I finally got access to AMD CBS and PBS settings, I tried different S0ix settings. There is also an option S0i3 with workaround but that doesn't seems to work either. There are also I2C settings. Is there maybe a settings what I can change to possibly to make it work?
I tried S3 suspend, but Linux doesn't see the 'deep' option in /sys/power/mem_sleep, I guess this is due missing DSDT entries....
There is no wakeup control node in this sysfs path.
Could we monkey patch the driver module from the kernel sources? Was just trying rmmod i2c_hid_acpi but that didn't work either.
In that case it sounds like the device doesn't support wakeup, and is instead being powered down. Which makes me wonder if the powering down is where the issue is. If that GPIO polarity is triggering by the pull up/pull down when the device goes into reset? We could try to make a quirk to skip the power down and see if it helps.
I finally got access to AMD CBS and PBS settings
How?
I tried different S0ix settings. There is also an option S0i3 with workaround but that doesn't seems to work either. There are also I2C settings. Is there maybe a settings what I can change to possibly to make it work?
If you have access to the I2C settings, you can try to turn off that I2C controller. I suppose it's I2C3.
I tried S3 suspend, but Linux doesn't see the 'deep' option in /sys/power/mem_sleep, I guess this is due missing DSDT entries....
Phoenix mobile platforms don't support S3. It's just some crufty menu items. I wouldn't expect this to work.
If you have access to the I2C settings, you can try to turn off that I2C controller. I suppose it's I2C3.
I don't see any way to disable I2C controller sadly.
Here are the configuration options, I already disabled the I2C mux. And in MP2 settings disabled all the sensors (Acceleration, Magnet, SRA, Light and Proximity), tried to enable Sensor Fusion User Mode Driver
Still no luck.
Phoenix mobile platforms don't support S3. It's just some crufty menu items. I wouldn't expect this to work.
Oh ok, the system had indeed some issues with S3 setting.
Here are the configuration options, I already disabled the I2C mux. And in MP2 settings disabled all the sensors (Acceleration, Magnet, SRA, Light and Proximity), tried to enable Sensor Fusion User Mode Driver
You don't want to be touching any of those. Make sure you return anything you changed back to defaults so you don't cause futher problems.
What you're looking for is this sub menu.
AMD CBS -> FCH Common Options -> I3C/I2C Configuration Options -> I3C/I2C 3 Enable
Yeah; but you can see in the logs that GPIO8 is now an unserviced interrupt (🔥) because it shows up masked (😷). I think that means with it physically there we do need the driver to be using it.
So unfortunately this isn't going to work to disable it in CBS :/
Error (bug) like [ 0.240285] ACPI BIOS Error (bug): Failure creating named object [\_SB.MHSP], AE_ALREADY_EXISTS (20230331/dswload2-326)
This one I'm not worried about.
[ 5.940489] ACPI Error: No handler for Region [ECSI] (000000005108f85d) [EmbeddedControl] (20230331/evregion-130)[ 5.942195] ACPI Error: Region EmbeddedControl (ID=3) has no handler (20230331/exfldio-261)[ 5.943134] ACPI Error: Aborting method \_SB.UBTC.ECRD due to previous error (AE_NOT_EXIST) (20230331/psparse-529)[ 5.944389] ACPI Error: Aborting method \_SB.UBTC._DSM due to previous error (AE_NOT_EXIST) (20230331/psparse-529)[ 5.945267] ACPI: \_SB_.UBTC: failed to evaluate _DSM c298836f-a47c-e411-ad36-631042b5008f (0x6)
These however are concerning. That may mean that the PD controller notifications aren't working and maybe the EC is what is triggering this issue. Have you already tried acpi.ec_no_wakeup=1?
Yeah; but you can see in the logs that GPIO8 is now an unserviced interrupt (🔥) because it shows up masked (😷). I think that means with it physically there we do need the driver to be using it.
So unfortunately this isn't going to work to disable it in CBS :/
Bummer, best option is to wait for I2C HID developers (Benjamin?) to get this sorted I guess?
As I understand correctly, this device is connected to the I2C bus and GPIO of the APU? And the GPIO pin is connected/configured as interrupt?
These however are concerning. That may mean that the PD controller notifications aren't working and maybe the EC is what is triggering this issue. Have you already tried acpi.ec_no_wakeup=1?
I was running with kernel parameter acpi.ec_no_wakeup=1 before I opened this issue. Still running with this parameter.
Bummer, best option is to wait for I2C HID developers (Benjamin?) to get this sorted I guess? As I understand correctly, this device is connected to the I2C bus and GPIO of the APU? And the GPIO pin is connected/configured as interrupt?
It's connected to the I2C bus, but inherently I2C doesn't have a way to trigger an interrupt "in-band". So the way interrupts are triggered is through a GPIO (Sometimes called the "attention pin").
Unfortunately right now I don't really understand what is wrong with the i2c-hid kernel driver and your device. That's why I'm hoping @bentiss has more ideas. It shouldn't be triggering the GPIO; especially when it's supposed to be asleep. The only other hack I can think is to skip the power off step with a quirk. Not sure how safe that is though.
I was running with kernel parameter acpi.ec_no_wakeup=1 before I opened this issue. Still running with this parameter.
Oh you've been using that already? What exactly happens without it? Everything look very similar?
It's connected to the I2C bus, but inherently I2C doesn't have a way to trigger an interrupt "in-band". So the way interrupts are triggered is through a GPIO (Sometimes called the "attention pin").
Check, I now understand better what happens.
Unfortunately right now I don't really understand what is wrong with the i2c-hid kernel driver and your device. That's why I'm hoping @bentiss has more ideas. It shouldn't be triggering the GPIO; especially when it's supposed to be asleep. The only other hack I can think is to skip the power off step with a quirk. Not sure how safe that is though.
As long it doesn't break things physically I don't mind to experiment.
Oh you've been using that already? What exactly happens without it? Everything look very similar?
Most of the time I try with and without. No difference on behavior. Now booted without the parameter (and disabled I2C 2 controller). GPIO 8 is still masked and unserviced interrupts
2023-08-30 23:19:13,859 DEBUG: #8 🔥 😷| ↓| level| | | | | | |input ↓| |0x10040b00
About the GPIO pins and the ITE8530 Sensor Hub. I booted to Windows with the disabled I2C controller. The Sensor Hub was not listed in device manager. But the laptop does suspend. I guess that this Sensor Hub is not the cause, but I might be wrong.
Ah, but notice; Windows fails to get to HW sleep now too. This strengthens the resolve of my statement that this is something wrong with the handling for this I2C device that is causing it to trigger the GPIO.
And I do have some gpio initialization errors on Linux, it might be interesting.
Those are red herrings and just loud, the fix for them is coming in 6.6-rc1 to make them quiet. It's CC to stable, so future stable kernels will quiet down too.
Unfortunately right now I don't really understand what is wrong with the i2c-hid kernel driver and your device. That's why I'm hoping @bentiss has more ideas. It shouldn't be triggering the GPIO; especially when it's supposed to be asleep. The only other hack I can think is to skip the power off step with a quirk. Not sure how safe that is though.
FWIW I really don't have the time to work on that right now. And IIRC, now, i2c-hid delegates all of the handling of ACPI/GPIO and IRQs to I2C and ACPI, which means I don't have the slightest idea of what is going on.
Maybe @jwrdegoede will know a little bit more why that GPIO is not served as an IRQ?
FWIW I really don't have the time to work on that right now. And IIRC, now, i2c-hid delegates all of the handling of ACPI/GPIO and IRQs to I2C and ACPI, which means I don't have the slightest idea of what is going on.
Maybe @jwrdegoede will know a little bit more why that GPIO is not served as an IRQ?
To me it doesn't seem to be an IRQ handling problem; the kernel is doing exactly what it should when the GPIO is triggered. It wakes up the system immediately. If we try to ignore that wakeup in the variety of ways tried (disabling in BIOS, ignoring in kernel, etc) then the GPIO is unserviced and you can't get to the deepest state.
I think the problem is the I2C device misbehaving (or depending on your perspective behaving exactly as it is intended for the sequence of commands sent).
What if the fact that it's not usable as a wakeup source means that turning it off causes a problem? If that theory is right, then this patch might help.
diff --git a/drivers/hid/i2c-hid/i2c-hid-core.c b/drivers/hid/i2c-hid/i2c-hid-core.cindex efbba0465eef..438aa3af7a50 100644--- a/drivers/hid/i2c-hid/i2c-hid-core.c+++ b/drivers/hid/i2c-hid/i2c-hid-core.c@@ -1102,7 +1102,7 @@ static int i2c_hid_core_suspend(struct device *dev) disable_irq(client->irq);- if (!device_may_wakeup(&client->dev))+ if (dev->power.can_wakeup && !device_may_wakeup(&client->dev)) i2c_hid_core_power_down(ihid); return 0;
Still no luck with the patch. I really hoped that it will do something, bummer.
That's too bad.
Here are some s2idle reports
Nothing new stands out in these
I don't really know how to go any further with this issue. In Windows given it's using the "generic" driver, I am wondering if maybe there is a service or another "filter driver" that is communicating with this device and sending a device specific command to tell it to stop reporting data or something.
I found that Windows does have a built-in trace report that it can create for HID I2C transactions. I have ZERO experience with this, but maybe you can experiment with it running across a suspend cycle and see if you can identify the traffic with the Windows Performance Analyzer.
I don't really know how to go any further with this issue. In Windows given it's using the "generic" driver, I am wondering if maybe there is a service or another "filter driver" that is communicating with this device and sending a device specific command to tell it to stop reporting data or something.
I found that Windows does have a built-in trace report that it can create for HID I2C transactions. I have ZERO experience with this, but maybe you can experiment with it running across a suspend cycle and see if you can identify the traffic with the Windows Performance Analyzer.
I also don't have any experience with it, my Windows knowledge is very basic. But it's worth the try. I'll read the docs and try to get a trace.
I saw a few Yoga quirks in the i2c-hid-core.c file, also with I2C HID device quirks on ITE devices, may that be worth experimenting?
I saw a few Yoga quirks in the i2c-hid-core.c file, also with I2C HID device quirks on ITE devices, may that be worth experimenting?
More likely this is something special for drivers/hid/hid-ite.c. But right now we don't know what about it is special. That's what a logic analyzer or software trace will hopefully pull out.
I got a trace (i think), but still looking how to read them. Installed Windows Driver Kit (WDK) that contains traceview, but I think I'm missing some definition files (like a PDB file??) to match the events.
I went on the DSDT patching trying to get GPIO 8 silenced. I think I succeeded. I changed the Pull direction of the pin so it won't work if the devices is unbind. But I might be wrong.
Suspend behavior is still the same, fans do spin down (that happened all the other times too) but wakes immediately.
Did some more testing with another laptop mentioned before. Yoga Slim 6 with 7840U (also Phoenix).
Here is the s2idle report from that laptop (10 min run), we see GPIO pin 84 active, that GPIO is connected to the ITE8353 controller. What I also found out is that the device ID's are the same for the ITE controller/sensor hub for the both laptops. Only different name in DSDT.
But this laptop reaches hardware sleep with an active GPIO.
Is it possible it could be something else what is blocking the sleep on the Yoga Slim 7.
@superm1 Is the above information something interesting for you or am I on a path with dead end?
I think it's quite an interesting result. The GPIO may be a red herring then.
Something I'll point out to you is that the slim 6 has a newer SMC firmware.
I don't have insight into what is changed between those firmware versions, I can just point out the difference.
This result tells me that this is very likely a platform firmware bug, but without some specialized equipment unfortunately I don't think I'll be able to debug any further. I'd suggest keeping up with the F/W upgrades that Lenovo posts until you have something that works.
Something I'll point out to you is that the slim 6 has a newer SMC firmware. I don't have insight into what is changed between those firmware versions, I can just point out the difference.
Ah check, I also saw that difference. For now still no BIOS update on the support site. I will try contact Lenovo again and hope that an update will be released soon. If it fixes the issue I will report it back here.
Thank you very much for all your efforts. Very pleased (and somewhat surprised ) by the good support .
I've been seeing a very similar issue on a Lenovo Ideapad 5 14ALC05 Ryzen 5 5500U running Void Linux.
This issue did not occur at the start of August but began happening at the start of September and has been happening since. I do roughly weekly updates and am currently on Linux 6.5.5_1 (this is the mainline kernel)
The weird quirk that the first sleep always works without fail, then every subsequent sleep wakes immediately.
I've taken similar troubleshooting steps to you with no avail. I am however looking to achieve s3 rather than s2idle.
Booting into my LTS (6.3.13_1) kernel that I keep around for these special occasions restores sleep functionality as expected.
If it's useful I can collect some logs although I'll need some instructions to gather useful data.