Any success using Suspend on Framework Laptop?

Hi all,

is there any guide on how to prepare Linux for an accident-free suspend/resume process? As far as I can remember this never worked on any Linux I have tried (Suse, Ubuntu, Mint, Fedora).
So this is still troublesome. Using the “Suspend” option in the pop-up menu switches off the displays for a short period, and about 5 seconds later I am back where i was. I remember from earlier that trying to suspend mostly caused the system to crash and go into a state that could only be recovered from by a hard power-off.
That leaves something to be desired for a notebook. I can never just take it, suspend and go, and continue where I left later. To be safe regarding data integrity etc, I have to shut down completely at all times.
Which gets me a lot of derisive smiles from Windows and Mac users…

dmesg logged the following:

[ 1116.139822] wlp170s0: deauthenticating from 72:a7:41:90:cd:da by local choice (Reason: 3=DEAUTH_LEAVING)
[ 1116.340301] userif-2: sent link down event.
[ 1116.340305] userif-2: sent link up event.
[ 1116.443284] PM: suspend entry (s2idle)
[ 1116.476090] Filesystems sync: 0.032 seconds
[ 1116.509693] Freezing user space processes ... (elapsed 0.016 seconds) done.
[ 1116.526027] OOM killer disabled.
[ 1116.526028] Freezing remaining freezable tasks ... (elapsed 0.001 seconds) done.
[ 1116.527483] printk: Suspending console(s) (use no_console_suspend to debug)
[ 1117.072580] PM: suspend devices took 0.545 seconds
[ 1117.113457] ACPI: EC: interrupt blocked
[ 1117.179217] ACPI: EC: interrupt unblocked
[ 1117.713540] nvme nvme0: Shutdown timeout set to 10 seconds
[ 1117.714472] nvme nvme0: 8/0/0 default/read/poll queues
[ 1117.784985] ------------[ cut here ]------------
[ 1117.784988] i915 0000:00:02.0: drm_WARN_ON(dig_port->tc_mode != TC_PORT_DISCONNECTED)
[ 1117.785037] WARNING: CPU: 2 PID: 1076 at drivers/gpu/drm/i915/display/intel_tc.c:711 intel_tc_port_sanitize+0x299/0x490 [i915]
[ 1117.785117] Modules linked in: cdc_ether usbnet uinput rfcomm uhid snd_seq_dummy snd_hrtimer xt_comment nft_compat nls_utf8 cifs cifs_arc4 cifs_md4 dns_resolver fscache netfs nft_objref nf_conntrack_netbios_ns nf_conntrack_broadcast nft_fib_inet nft_fib_ipv4 nft_fib_ipv6 nft_fib snd_usb_audio nft_reject_inet nf_reject_ipv4 nf_reject_ipv6 nft_reject snd_usbmidi_lib snd_rawmidi nft_ct nft_chain_nat nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 ip_set nf_tables nfnetlink bnep uvcvideo ppdev qrtr vmnet(OE) videobuf2_vmalloc btusb parport_pc videobuf2_memops parport btrtl videobuf2_v4l2 vmw_vsock_vmci_transport btbcm videobuf2_common vsock btintel sunrpc videodev btmtk vmw_vmci mc bluetooth vmmon(OE) binfmt_misc snd_sof_pci_intel_tgl snd_sof_intel_hda_common vfat fat soundwire_intel soundwire_generic_allocation soundwire_cadence snd_sof_intel_hda snd_sof_pci snd_sof_xtensa_dsp snd_sof iwlmvm snd_hda_codec_hdmi snd_sof_utils snd_soc_hdac_hda snd_hda_ext_core snd_soc_acpi_intel_match
[ 1117.785150]  snd_soc_acpi soundwire_bus cros_usbpd_charger cros_usbpd_logger cros_usbpd_notify snd_hda_codec_idt cros_ec_sysfs cros_ec_chardev snd_hda_codec_generic mac80211 snd_soc_core ledtrig_audio cros_ec_dev intel_tcc_cooling mei_pxp x86_pkg_temp_thermal snd_compress mei_hdcp ac97_bus intel_powerclamp snd_pcm_dmaengine coretemp iTCO_wdt intel_pmc_bxt libarc4 kvm_intel snd_hda_intel ee1004 iTCO_vendor_support kvm snd_intel_dspcfg pmt_telemetry snd_intel_sdw_acpi intel_rapl_msr snd_hda_codec pmt_class snd_hda_core irqbypass iwlwifi snd_hwdep squashfs cros_ec_lpcs rapl snd_seq cros_ec snd_seq_device hid_sensor_als hid_sensor_trigger snd_pcm intel_cstate hid_sensor_iio_common industrialio_triggered_buffer cfg80211 intel_uncore pcspkr wmi_bmof kfifo_buf snd_timer processor_thermal_device_pci_legacy mei_me industrialio processor_thermal_device snd rfkill processor_thermal_rfim thunderbolt mei i2c_i801 processor_thermal_mbox processor_thermal_rapl i2c_smbus soundcore idma64
[ 1117.785177]  intel_rapl_common intel_vsec intel_soc_dts_iosf igen6_edac int3403_thermal int340x_thermal_zone int3400_thermal acpi_pad acpi_thermal_rel joydev loop zram dm_crypt hid_cherry hid_sensor_hub intel_ishtp_hid i915 r8152 mii drm_buddy nvme drm_display_helper nvme_core cec hid_multitouch crct10dif_pclmul intel_ish_ipc ucsi_acpi crc32_pclmul crc32c_intel polyval_clmulni polyval_generic typec_ucsi ghash_clmulni_intel serio_raw sha512_ssse3 intel_ishtp typec ttm nvme_common i2c_hid_acpi i2c_hid video wmi pinctrl_tigerlake ip6_tables ip_tables fuse
[ 1117.785197] CPU: 2 PID: 1076 Comm: kworker/u16:17 Tainted: G           OE      6.1.12-200.fc37.x86_64 #1
[ 1117.785199] Hardware name: Framework Laptop/FRANBMCP0A, BIOS 03.17 10/27/2022
[ 1117.785200] Workqueue: events_unbound async_run_entry_fn
[ 1117.785204] RIP: 0010:intel_tc_port_sanitize+0x299/0x490 [i915]
[ 1117.785264] Code: 48 8b 5f 50 48 85 db 75 03 48 8b 1f e8 a0 7e 1e ee 48 c7 c1 58 fb 81 c0 48 89 da 48 c7 c7 4c ca 83 c0 48 89 c6 e8 bd e5 62 ee <0f> 0b 41 8b 97 70 0f 00 00 85 d2 0f 84 ca fd ff ff 48 8b 04 24 48
[ 1117.785265] RSP: 0018:ffffaba500ec7c30 EFLAGS: 00010292
[ 1117.785266] RAX: 0000000000000049 RBX: ffff923c82693990 RCX: 0000000000000000
[ 1117.785267] RDX: 0000000000000001 RSI: ffffffffaf74c4b3 RDI: 00000000ffffffff
[ 1117.785268] RBP: 0000000000000000 R08: ffffffffb0067400 R09: 00000000b0c2271a
[ 1117.785268] R10: ffffffffffffffff R11: 000000000000004a R12: 0000000000000000
[ 1117.785269] R13: ffff923c8ea9af50 R14: ffff923c8eb802d8 R15: ffff923c8ea9a000
[ 1117.785270] FS:  0000000000000000(0000) GS:ffff924befa80000(0000) knlGS:0000000000000000
[ 1117.785271] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 1117.785271] CR2: 000056293d50db66 CR3: 00000006aa010006 CR4: 0000000000770ee0
[ 1117.785272] PKRU: 55555554
[ 1117.785273] Call Trace:
[ 1117.785275]  <TASK>
[ 1117.785277]  intel_ddi_sync_state+0x3f/0x90 [i915]
[ 1117.785337]  intel_modeset_setup_hw_state+0x339/0x1480 [i915]
[ 1117.785396]  ? __intel_display_resume+0x1a/0xe0 [i915]
[ 1117.785455]  __intel_display_resume+0x1a/0xe0 [i915]
[ 1117.785513]  intel_display_resume+0xde/0x130 [i915]
[ 1117.785571]  i915_drm_resume+0xe5/0x150 [i915]
[ 1117.785611]  ? pci_legacy_resume+0x80/0x80
[ 1117.785614]  dpm_run_callback+0x47/0x150
[ 1117.785618]  device_resume+0xa2/0x1f0
[ 1117.785620]  async_resume+0x19/0x30
[ 1117.785621]  async_run_entry_fn+0x2d/0x130
[ 1117.785623]  process_one_work+0x1c4/0x380
[ 1117.785625]  worker_thread+0x4d/0x380
[ 1117.785626]  ? rescuer_thread+0x380/0x380
[ 1117.785627]  kthread+0xe6/0x110
[ 1117.785629]  ? kthread_complete_and_exit+0x20/0x20
[ 1117.785631]  ret_from_fork+0x1f/0x30
[ 1117.785635]  </TASK>
[ 1117.785635] ---[ end trace 0000000000000000 ]---
[ 1117.785636] ------------[ cut here ]------------
[ 1117.785637] i915 0000:00:02.0: drm_WARN_ON(dig_port->tc_lock_wakeref)
[ 1117.785649] WARNING: CPU: 2 PID: 1076 at drivers/gpu/drm/i915/display/intel_tc.c:712 intel_tc_port_sanitize+0x2dc/0x490 [i915]
[ 1117.785710] Modules linked in: cdc_ether usbnet uinput rfcomm uhid snd_seq_dummy snd_hrtimer xt_comment nft_compat nls_utf8 cifs cifs_arc4 cifs_md4 dns_resolver fscache netfs nft_objref nf_conntrack_netbios_ns nf_conntrack_broadcast nft_fib_inet nft_fib_ipv4 nft_fib_ipv6 nft_fib snd_usb_audio nft_reject_inet nf_reject_ipv4 nf_reject_ipv6 nft_reject snd_usbmidi_lib snd_rawmidi nft_ct nft_chain_nat nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 ip_set nf_tables nfnetlink bnep uvcvideo ppdev qrtr vmnet(OE) videobuf2_vmalloc btusb parport_pc videobuf2_memops parport btrtl videobuf2_v4l2 vmw_vsock_vmci_transport btbcm videobuf2_common vsock btintel sunrpc videodev btmtk vmw_vmci mc bluetooth vmmon(OE) binfmt_misc snd_sof_pci_intel_tgl snd_sof_intel_hda_common vfat fat soundwire_intel soundwire_generic_allocation soundwire_cadence snd_sof_intel_hda snd_sof_pci snd_sof_xtensa_dsp snd_sof iwlmvm snd_hda_codec_hdmi snd_sof_utils snd_soc_hdac_hda snd_hda_ext_core snd_soc_acpi_intel_match
[ 1117.785732]  snd_soc_acpi soundwire_bus cros_usbpd_charger cros_usbpd_logger cros_usbpd_notify snd_hda_codec_idt cros_ec_sysfs cros_ec_chardev snd_hda_codec_generic mac80211 snd_soc_core ledtrig_audio cros_ec_dev intel_tcc_cooling mei_pxp x86_pkg_temp_thermal snd_compress mei_hdcp ac97_bus intel_powerclamp snd_pcm_dmaengine coretemp iTCO_wdt intel_pmc_bxt libarc4 kvm_intel snd_hda_intel ee1004 iTCO_vendor_support kvm snd_intel_dspcfg pmt_telemetry snd_intel_sdw_acpi intel_rapl_msr snd_hda_codec pmt_class snd_hda_core irqbypass iwlwifi snd_hwdep squashfs cros_ec_lpcs rapl snd_seq cros_ec snd_seq_device hid_sensor_als hid_sensor_trigger snd_pcm intel_cstate hid_sensor_iio_common industrialio_triggered_buffer cfg80211 intel_uncore pcspkr wmi_bmof kfifo_buf snd_timer processor_thermal_device_pci_legacy mei_me industrialio processor_thermal_device snd rfkill processor_thermal_rfim thunderbolt mei i2c_i801 processor_thermal_mbox processor_thermal_rapl i2c_smbus soundcore idma64
[ 1117.785750]  intel_rapl_common intel_vsec intel_soc_dts_iosf igen6_edac int3403_thermal int340x_thermal_zone int3400_thermal acpi_pad acpi_thermal_rel joydev loop zram dm_crypt hid_cherry hid_sensor_hub intel_ishtp_hid i915 r8152 mii drm_buddy nvme drm_display_helper nvme_core cec hid_multitouch crct10dif_pclmul intel_ish_ipc ucsi_acpi crc32_pclmul crc32c_intel polyval_clmulni polyval_generic typec_ucsi ghash_clmulni_intel serio_raw sha512_ssse3 intel_ishtp typec ttm nvme_common i2c_hid_acpi i2c_hid video wmi pinctrl_tigerlake ip6_tables ip_tables fuse
[ 1117.785762] CPU: 2 PID: 1076 Comm: kworker/u16:17 Tainted: G        W  OE      6.1.12-200.fc37.x86_64 #1
[ 1117.785763] Hardware name: Framework Laptop/FRANBMCP0A, BIOS 03.17 10/27/2022
[ 1117.785764] Workqueue: events_unbound async_run_entry_fn
[ 1117.785766] RIP: 0010:intel_tc_port_sanitize+0x2dc/0x490 [i915]
[ 1117.785826] Code: 48 8b 5f 50 48 85 db 75 03 48 8b 1f e8 5d 7e 1e ee 48 c7 c1 90 fb 81 c0 48 89 da 48 c7 c7 4c ca 83 c0 48 89 c6 e8 7a e5 62 ee <0f> 0b e9 91 fd ff ff 41 89 87 e0 0f 00 00 45 85 e4 0f 85 cd fe ff
[ 1117.785826] RSP: 0018:ffffaba500ec7c30 EFLAGS: 00010292
[ 1117.785827] RAX: 0000000000000039 RBX: ffff923c82693990 RCX: 0000000000000000
[ 1117.785828] RDX: 0000000000000001 RSI: ffffffffaf74c4b3 RDI: 00000000ffffffff
[ 1117.785829] RBP: 0000000000000000 R08: ffffffffb0067400 R09: 00000000b0c23a62
[ 1117.785829] R10: ffffffffffffffff R11: 000000000000003a R12: 0000000000000000
[ 1117.785830] R13: ffff923c8ea9af50 R14: ffff923c8eb802d8 R15: ffff923c8ea9a000
[ 1117.785830] FS:  0000000000000000(0000) GS:ffff924befa80000(0000) knlGS:0000000000000000
[ 1117.785831] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 1117.785832] CR2: 000056293d50db66 CR3: 00000006aa010006 CR4: 0000000000770ee0
[ 1117.785832] PKRU: 55555554
[ 1117.785833] Call Trace:
[ 1117.785833]  <TASK>
[ 1117.785834]  intel_ddi_sync_state+0x3f/0x90 [i915]
[ 1117.785892]  intel_modeset_setup_hw_state+0x339/0x1480 [i915]
[ 1117.785949]  ? __intel_display_resume+0x1a/0xe0 [i915]
[ 1117.786006]  __intel_display_resume+0x1a/0xe0 [i915]
[ 1117.786063]  intel_display_resume+0xde/0x130 [i915]
[ 1117.786121]  i915_drm_resume+0xe5/0x150 [i915]
[ 1117.786162]  ? pci_legacy_resume+0x80/0x80
[ 1117.786164]  dpm_run_callback+0x47/0x150
[ 1117.786165]  device_resume+0xa2/0x1f0
[ 1117.786167]  async_resume+0x19/0x30
[ 1117.786168]  async_run_entry_fn+0x2d/0x130
[ 1117.786170]  process_one_work+0x1c4/0x380
[ 1117.786171]  worker_thread+0x4d/0x380
[ 1117.786172]  ? rescuer_thread+0x380/0x380
[ 1117.786173]  kthread+0xe6/0x110
[ 1117.786175]  ? kthread_complete_and_exit+0x20/0x20
[ 1117.786177]  ret_from_fork+0x1f/0x30
[ 1117.786179]  </TASK>
[ 1117.786179] ---[ end trace 0000000000000000 ]---
[ 1117.797253] r8152 2-4.1:1.0 enp0s13f0u4u1: carrier on
[ 1118.423335] usb 3-6.3.3.4: reset low-speed USB device number 12 using xhci_hcd
[ 1118.739234] PM: resume devices took 1.030 seconds
[ 1118.739689] mei_hdcp 0000:00:16.0-b638ab7e-94e2-4ea2-a552-d1c54b627f04: bound 0000:00:02.0 (ops i915_hdcp_component_ops [i915])
[ 1118.739845] OOM killer enabled.
[ 1118.739847] Restarting tasks ... done.
[ 1118.748467] random: crng reseeded on system resumption
[ 1118.750634] mei_pxp 0000:00:16.0-fbf6fcf1-96cf-4e2e-a6a6-1bab8cbe36b1: bound 0000:00:02.0 (ops i915_pxp_tee_component_ops [i915])
[ 1118.785042] PM: suspend exit
[ 1119.573109] IPv6: ADDRCONF(NETDEV_CHANGE): enp0s13f0u4u1: link becomes ready
[ 1119.573314] r8152 2-4.1:1.0 enp0s13f0u4u1: carrier on
[ 1119.729733] userif-2: sent link down event.
[ 1119.729738] userif-2: sent link up event.
[ 1120.095879] userif-2: sent link down event.
[ 1120.095883] userif-2: sent link up event.
[ 1123.067030] wlp170s0: authenticate with 72:a7:41:90:cd:da
[ 1123.083363] wlp170s0: send auth to 72:a7:41:90:cd:da (try 1/3)
[ 1123.181896] wlp170s0: authenticated
[ 1123.182773] wlp170s0: associate with 72:a7:41:90:cd:da (try 1/3)
[ 1123.185699] wlp170s0: RX AssocResp from 72:a7:41:90:cd:da (capab=0x1111 status=0 aid=9)
[ 1123.215095] wlp170s0: associated
[ 1123.254561] IPv6: ADDRCONF(NETDEV_CHANGE): wlp170s0: link becomes ready
[ 1123.454690] userif-2: sent link down event.
[ 1123.454695] userif-2: sent link up event.
[ 1123.898329] userif-2: sent link down event.
[ 1123.898332] userif-2: sent link up event.

So there’s something preventing the system from going into suspend mode. I am not expert enough to make any sense of this but it seems that some driver is crashing on the suspend command.

uname -ra gives me this:

Linux framework 6.1.12-200.fc37.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Feb 15 04:35:34 UTC 2023 x86_64 GNU/Linux

I’m a bit hesitant about updating the kernel because it interferes heavily with my vmware installation. Newer kernels need to have some vmware-related modules recompiled, and this used to give me some headaches already, up to the point where reverting to an older kernel was the only working solution. I would like to avoid newer kernels unless they can guarantee that the suspend/resume behavior definitely improves.

Any comments welcome. Thank you so much!

Cheers,
Joe

I don’t know if it helps you, but in my case, I had to disable USB during suspend, otherwise my laptop would also wake up almost instantly.

USB (XHC) is probably enabled during suspend in your case:

$ cat /proc/acpi/wakeup | grep XHC
XHC	  S3	*enabled   pci:0000:00:14.0

You can disable it like this:

$ echo XHC | sudo tee /proc/acpi/wakeup
XHC

And check that it’s disabled now:

$ cat /proc/acpi/wakeup | grep XHC
XHC	  S3	*disabled  pci:0000:00:14.0

Now try to suspend. If this helps, I can tell you how to make the setting permanent (currently it resets on reboot).

Also, you can boot Fedora 38 Workstation Live image and try suspending and resuming from that Live environment. If it works, then some of your local changes might have broke it - like the VMware kernel modules which you mentioned. (Libvirt is great, and if it satisfies your use cases, it’s definitely preferred to VMware).

Hi Kamil,

thank you for replying so quickly. Well, the first command returns two lines here:

XHCI	  S4	*enabled   pci:0000:00:14.0
TXHC	  S4	*enabled   pci:0000:00:0d.0

I’m not sure whether disabling USB is a good idea. It’s a Framework Laptop which connects as good as all peripherals via USB. And thanks to the few connectors to the outside world, practically everything on my desk connects to it via USB-C.
I’ll try to disable both anyway and see wheter that gets me anywhere. Is the disablement a permanent action, or would a reboot bring me back to the default state where USB is enabled?

Cheers,
Joe

It doesn’t disable USB during runtime :slight_smile: It only disables it during suspend. Meaning you won’t be able to wake up the laptop using a USB keyboard/mouse. But in my case, it solved the issue and was a small price to pay. A power button and the display lid still wakes it up just fine.

I’d first try XHCI, that sounds like it could be the same as XHC in my case. If that doesn’t work, try TXHC. Meaning:

$ echo XHCI | sudo tee /proc/acpi/wakeup
$ echo TXHC | sudo tee /proc/acpi/wakeup

A reboot will reset everything to default values. (You can also run the command again, and it will toggle back to the previous value instantly).

Sorry, didn’t work. The dmesg log shows the same whatever I do. XHCI and TXHC are both disabled now and still no luck getting the system to standby. In the attempt to revert to my previous settings, is my assumption correct that repeating the echo / tee command will toggle the respective item in /proc/acpi/wakeup enabled and disabled respectively?

I think the key log entries might be these:

[11609.094644] ------------[ cut here ]------------ [11609.094646] i915 0000:00:02.0: drm_WARN_ON(dig_port->tc_mode != TC_PORT_DISCONNECTED) [11609.094686] WARNING: CPU: 3 PID: **39452** at drivers/gpu/drm/i915/display/intel_tc.c:711 intel_tc_port_sanitize+0x299/0x490 [i915]

And a few lines below:

[11609.094833] CPU: 3 PID: **39452** Comm: kworker/u16:15 Tainted: G W OE 6.1.12-200.fc37.x86_64 #1

PID 39452 is mentioned in two places. The process having this PID is different every time, same for the CPU core ID, and no longer exists when dmesg lists this log entry but I think it might have been a kworker thread as there are a lot of kworker threads in the same range of PIDs. Just guessing though.
The exception logged after these lines is related to drivers/gpu/drm/i915/display/intel_tc.c and the call stack suggests that a call inside the GPU driver fails. Still no clue if that is correct, when it happens (maybe it is in a recovery phase at that point already), and what to do about it.

Yes. Simply verify with cat. Or reboot.

Yes, that’s a crash in the Linux kernel. You can report a bug in the kernel, but it’s really not user friendly. I think the best approach for you is to contact Framework support. They should be aware of this bug already, hopefully, and might be able to tell you a workaround. They should also be involved with the kernel to make sure it’s fixed.

I’d strongly suggest to try the latest stable kernel first, though. If it doesn’t fix it, you can reboot back to the older kernel (press F8 after startup to see GRUB boot menu) and uninstall the newer one, due to your issues with VMWare. I’d also advise you to try the Live image approach, as written above, to figure out if you problem is not actually VMWare-based.

Okay, thanks Kamil. I’ll let you know if the live image can handle it better, and research in the Framework forums as well.
But I’m really begin to think this is just personal bad luck. Standby has always been impossible for me in the Linux realm, no matter what OS. I know this is one of the most complex topics to implement, and besides this complexity the hardware is also a moving target. So I’ll live on if this is not possible but of course I could not be happier if one day it works.

Cheers,
Joe