-
Notifications
You must be signed in to change notification settings - Fork 85
adds suspend.md, updates state, removes some contradictions #732
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,107 @@ | ||
| # Suspend | ||
|
|
||
| Suspend is working on all T2 Macs since early 2026, but not on all of them out of the box. | ||
| On some hardware we need workarounds because of upstream driver/ACPI or Apple firmware issues. | ||
|
|
||
| ## Thunderbolt / slow resume times | ||
|
|
||
| We can either have fast resume from suspend, or we can have Thunderbolt support. Not both. | ||
| Linux by default masquerades as macOS to make certain features accessible. | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I just find this paragraph way too informative and can imagine people saying "Yo I can't understand shit here, fix my suspend!" on the discord. Also, you need to link the guide to the yml to make it accessible.
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Disagreed |
||
| Thunderbolt is one of those. | ||
| On the other hand, masquerading as macOS makes resume from suspend extremely slow. | ||
| Depending on the number of cores your CPU has, it can take up to three minutes on a I9, | ||
| while it takes around 20 seconds on a I5 because `smpboot`-times rise exponentially per core. | ||
|
|
||
| To stop masquerading as macOS and to make the CPU cores wake within milliseconds, | ||
| you need to add the kernel arguments | ||
|
|
||
| ```bash | ||
| acpi_osi=!Darwin acpi_osi='Windows 2012' | ||
| ``` | ||
|
|
||
| How to add kernel parameter is described in [postinstall](postinstall.md/#add-necessary-kernel-parameters). | ||
| But note this will break Thunderbolt support. This needs to be fixed in the Linux | ||
| mainline ACPI driver and is a trade-off we have to make for now. | ||
|
|
||
| ## iGPU black screen on resume | ||
|
|
||
| If using the iGPU causes the screen to be black after waking up from suspend, then try one of these workarounds: | ||
|
|
||
| - Add `i915.enable_guc=3` to [your kernel parameters](postinstall.md/#add-necessary-kernel-parameters). If that has a problem, try setting the value to 2 instead of 3. | ||
| - Turn the screen off and on after the backlight turns on. For GNOME: type your password then press enter, press Command + L to lock (this should turn off the backlight), then press any key. | ||
|
|
||
| ## MacBook Pro 15,1 black screen on resume | ||
|
|
||
| The MacBook Pro 15,1 suffers the issue to come up with a black screen on resume | ||
| because the SMU dies when the driver suspends the hardware. The cause for this is | ||
| known and being worked on. As a temporary workaround you can make the iGPU primary | ||
| as described in the [hybrid graphics guide](hybrid-graphics.md) and unload/reload the dGPU driver on | ||
| suspend using systemd. | ||
| Paste and run the following code block to create and enable this service: | ||
|
|
||
| ```bash | ||
| sudo tee /etc/systemd/system/amdgpu-suspend.service >/dev/null <<'EOF' | ||
| [Unit] | ||
| Description=Unload and Reload amdgpu for Suspend and Resume | ||
| Before=sleep.target | ||
| StopWhenUnneeded=yes | ||
|
|
||
| [Service] | ||
| User=root | ||
| Type=oneshot | ||
| RemainAfterExit=yes | ||
|
|
||
| ExecStart=-/usr/bin/modprobe -r amdgpu | ||
|
|
||
| ExecStop=-/usr/bin/modprobe amdgpu | ||
|
|
||
| [Install] | ||
| WantedBy=sleep.target | ||
| EOF | ||
|
|
||
| sudo systemctl daemon-reload | ||
| sudo systemctl enable amdgpu-suspend.service | ||
| ``` | ||
|
|
||
| ## Broadcom 4377 | ||
|
|
||
| Opposite to the Broadcom 4364 and 4365, which use dedicated chips and firmwares | ||
| for Bluetooth and Wifi, the 4377 uses a single chip and a single unified firmware. | ||
| The bluetooth part of the firmware is holding back the 4377 chip from transitioning | ||
| from `D0` to `D3cold`. While the 4364 and 4365 don't even need or use the Bluetooth firmware | ||
| on Linux, a 4377 user can't choose to not use the BT firmware. What you can do though, | ||
| is unloading the Linux drivers on suspend and reloading them on resume using a systemd service. | ||
|
|
||
| You will know that you are on affected hardware, when `journalctl -b --grep=4377` returns | ||
| something `brcmfmac` related. | ||
|
|
||
| If so, simply run the following terminal command: | ||
|
|
||
| ```bash | ||
| sudo tee /etc/systemd/system/brcmfmac-suspend.service >/dev/null <<'EOF' | ||
| [Unit] | ||
| Description=Unload and Reload brcmfmac for Suspend and Resume | ||
| Before=sleep.target | ||
| StopWhenUnneeded=yes | ||
|
|
||
| [Service] | ||
| User=root | ||
| Type=oneshot | ||
| RemainAfterExit=yes | ||
|
|
||
| ExecStart=-/usr/bin/modprobe -r brcmfmac_wcc | ||
| ExecStart=-/usr/bin/modprobe -r brcmfmac | ||
| ExecStart=-/usr/bin/modprobe -r hci_bcm4377 | ||
|
|
||
|
|
||
| ExecStop=-/usr/bin/modprobe hci_bcm4377 | ||
| ExecStop=-/usr/bin/modprobe brcmfmac | ||
| ExecStop=-/usr/bin/modprobe brcmfmac_wcc | ||
|
|
||
| [Install] | ||
| WantedBy=sleep.target | ||
| EOF | ||
|
|
||
| sudo systemctl daemon-reload | ||
| sudo systemctl enable brcmfmac-suspend.service | ||
| ``` | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -133,14 +133,25 @@ Once you have run the script on macOS, depending on the method you chose, the st | |
|
|
||
| Replace `/path/to/firmware.tar` with the actual path of the tarball. For example, if `firmware.tar` is copied to the Downloads folder in Linux, command to be run would be `sudo tar -v -xC /lib/firmware/brcm -f $HOME/Downloads/firmware.tar` | ||
|
|
||
| Then reload the Wi-Fi and Bluetooth drivers by running: | ||
| Then reload the Wi-Fi and Bluetooth drivers. For the Broadcom 4377 chip: | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This addition is an unnecessary complication for people who hate reading guides. Let it remain as it is.
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Disagreed |
||
|
|
||
| ```bash | ||
| sudo modprobe -r brcmfmac_wcc | ||
| sudo modprobe -r brcmfmac | ||
| sudo modprobe brcmfmac | ||
| sudo modprobe -r hci_bcm4377 | ||
| sudo modprobe hci_bcm4377 | ||
| sudo modprobe brcmfmac | ||
| sudo modprobe brcmfmac_wcc | ||
| ``` | ||
| For Broadcomn 4364 and 4365 chips: | ||
|
|
||
| ```bash | ||
| sudo modprobe -r brcmfmac_wcc | ||
| sudo modprobe -r brcmfmac | ||
| sudo modprobe -r hci_uart | ||
| sudo modprobe hci_uart | ||
| sudo modprobe brcmfmac | ||
| sudo modprobe brcmfmac_wcc | ||
| ``` | ||
|
|
||
| === ":fontawesome-brands-linux: Method 3" | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -7,15 +7,15 @@ While Linux is usable on all T2 models, some features are limited due to the lac | |
| |Internal Drive / SSD|🟢 Working|🟢 Kernel 5.4||[Filesystem notes](#filesystem-notes)| | ||
| |Screen, iGPU|🟢 Working|🟡 Partial||| | ||
| |USB|🟢 Working|🟢 Yes||| | ||
| |Keyboard|🟢 Working|🔴 No||[apple-bce](https://github.com/t2linux/apple-bce-drv)| | ||
| |Trackpad|🟢 Working|🔴 No|Works, but isn't as great as on macOS (no force touch or palm rejection).|[apple-bce](https://github.com/t2linux/apple-bce-drv), [Trackpad tuning](https://wiki.t2linux.org/#trackpad-tuning)| | ||
| |Keyboard|🟢 Working|🔴 No||| | ||
| |Trackpad|🟢 Working|🔴 No||[Trackpad tuning](https://wiki.t2linux.org/#trackpad-tuning)| | ||
| |Wi-Fi|🟢 Working|🟢 Yes|Requires macOS firmware|[Setup guide](https://wiki.t2linux.org/guides/wifi-bluetooth/)| | ||
| |Bluetooth|🟡 Partially working|🟢 Yes|Requires macOS firmware only for devices with BCM4377 chip. Also, Bluetooth glitches on devices with BCM4377 Chip if connected to a 2.4 GHz Wi-Fi connection. Thus, in order to use Bluetooth either turn off your Wi-Fi or use a 5 GHz Wi-Fi connection.|[Setup guide](https://wiki.t2linux.org/guides/wifi-bluetooth/)| | ||
| |Camera|🟢 Working|🔴 No||[apple-bce](https://github.com/t2linux/apple-bce-drv)| | ||
| |Thunderbolt|🟢 Working|🟢 Yes|If it doesn't work, try adding `pcie_ports=native` in the kernel parameters via GRUB.|| | ||
| |Touch Bar|🟢 Working|🟡 Partial|"Touch Bar Keyboard" mode works OOTB, where only the Function Keys or the Media/Brightness Control Keys are shown. Touch Bar drivers were upstreamed in kernel 6.15, but we still need apple-bce to make it work.|[apple-bce](https://github.com/t2linux/apple-bce-drv), [tiny-dfr](https://github.com/AsahiLinux/tiny-dfr)| | ||
| |Suspend|🟡 Partially working|🟢 Yes|A firmware upgrade attached to macOS Sonoma broke suspend. Some users were having difficulty with it even before Sonoma. The issue has something to do with the apple-bce driver, because suspend works when it's disabled.|[#53](https://github.com/t2linux/T2-Ubuntu-Kernel/issues/53)| | ||
| |Audio|🟡 Partially working|🔴 No|With proper configuration audio can work, however it is not stable in some older kernels and switching between speakers and when using the microphone. Microphone volume is low in some Macs.|[apple-bce](https://github.com/t2linux/apple-bce-drv)| | ||
| |Bluetooth|🟡 Partially working|🟢 Yes| 5 GHz Wi-Fi connection is recommended to prevent Bluetooth interferences.|[Setup guide](https://wiki.t2linux.org/guides/wifi-bluetooth/)| | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Only on BCM4377 devices
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Not correct.
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Do we have any proof of that? |
||
| |Camera|🟢 Working|🔴 No||| | ||
| |Thunderbolt|🟢 Working|🟢 Yes|Needs`pcie_ports=native` in kernel parameters|| | ||
| |Touch Bar|🟢 Working|🟢 Yes|Touchbar works in native mode and can be customized using tiny-dfr or react-drm|| | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. There are tonnes of tiny dfr like daemons now. Let's just endorse tiny-dfr since that's what we maintain.
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I see no reason to support a daemon that does not survive suspend. I find your critique here very biased and close minded. I cooperated on react-drm to make the touchbar convenient AND survive suspend. |
||
| |Suspend|🟢 Working|🟡 Prepared|Generally working but requires hardware-specific adjustments until further notice.|[guide](guides/suspend.md)| | ||
| |Audio|🟢 Working|🟡 Prepared| Microphone volume is low, what is factory intended state. Gain needs to be turned up in userland|| | ||
| |Hybrid Graphics|🟡 Partially working|🟡 Partial|Toggling dGPU power doesn't work.|[Hybrid Graphics](https://wiki.t2linux.org/guides/hybrid-graphics/)| | ||
| |AMD GPUs|🟡 Partially working||Changing resolution, using DRI_PRIME and doing various other things can cause crashes, but `echo high \| sudo tee /sys/bus/pci/drivers/amdgpu/0000:??:??.?/power_dpm_force_performance_level` or adding `amdgpu.dpm=0` to the kernel commandline stops these crashes.|| | ||
| |MacPro7,1|🟡 Partially working||Users have encountered PCIe Address Space issues, with auto remap breaking. A temporary solution may be possible by removing the Infinity Fabric Link (Bridge or Jumper) from the GPU(s).|| | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Some models need Bluetooth from macOS as well. Let's just avoid this change.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Disagreed