This repository contains a sample configuration to run macOS Mojave (10.14) on a Dell XPS 9570.
This guide is currently a work in progress, since the XPS 9570 isn’t perfectly supported yet. I will update this guide as I test new fixes or updates. If you find any errors or problems, please let me know. I’m hoping this will become the definitive guide for running macOS on the XPS 9570.
This repo and many pieces are based on the-darkvoid’s XPS9360-macOS repo, which is also a good guide for other kexts/patches/solutions/etc.
- Dell XPS 9570
- Intel i9-8950HK
- 32GB RAM
- 4K display
- Toshiba SSD
- Realtek ALC298 (ALC3266 according to Dell)
- Goodix fingerprint reader
- Wacom touchscreen
- TODO: Touchpad manufacturer?
- Software environment
- BIOS: 1.8.1
- Dual-booting Windows 10
- macOS: 10.14.0, 10.14.1, 10.14.2, 10.14.3 and supp. update (18D109), 10.14.4
- BIOS: 1.5.0, 1.7.0, 1.8.1 (BIOS update recommended: “fixes BIOS recovery function” according to Dell)
Intel graphics is supported by setting the maximum link rate in DPCD buffer. This likely causes problems with HDMI output, which does not work. This fix also allows the display to go to sleep without causing graphics to become choppy on wake-up.
To determine if Intel GPU acceleration is working, check: About This Mac -> Intel UHD Graphics 630
1536 MB
. A value less than 1536MB indicates a problem (e.g. 7MB or 31MB are common).
Side note: Some threads discuss setting DVMT pre-alloc in the BIOS, which is not possible on most laptops, including the XPS 9570. However, the default of 64MB DVMT is sufficient, so nothing needs to be done.
- config.plist
- Graphics/Inject/Intel=yes
- Graphics/ig-platform-id=0x3e9b0000
- Set max link rate if connected display reports 0x00 to prevent kernel panic (choose one):
- 4K display: KernelAndKextPatches/KextsToPatch/Item n
- Key=Find, Type=Data, Value=<4883c304 4883fb08 72b3>
- Key=Replace, Type=Data, Value=<807dc100 7504c645 c114>
- 1080p display: KernelAndKextPatches/KextsToPatch/Item n
- Key=Find, Type=Data, Value=<4883c304 4883fb08 72b3>
- Key=Replace, Type=Data, Value=<807dc100 7504c645 c10a>
- Note alternate values in config.plist for 10.14.3 and below.
- 4K display: KernelAndKextPatches/KextsToPatch/Item n
- Install Lilu kext
- Install WhateverGreen kext
Patched via kext and SSDT patch (discussion). Can use pre-built kext and SSDT-PNLF.aml, but is identical to SSDT-PNLF.aml compiled from SSDT-PNLF.dsl in OS-X-Clover-Laptop-Config.
- Include AppleBacklightFixup kext
Include SSDT-PNLF.aml (SSDT-PNLF.dsl)- Include SSDT-PNLFCFL.aml (SSDT-PNLFCFL.dsl); possibly temporary until fix is included in SSDT-PNLF.
This was a complex issue with a long thread to find a solution. This fix is possibly not perfect yet; if you do run into this problem despite the fix, open an issue in this repo and/or reply to the thread with the discussion.
- SSDT-PNLFCFL.aml is already included in step above
- Use Lilu 1.2.9 or higher
- Use WhateverGreen 1.2.5 or higher
- Remember to update kext cache whenever a kext is added or updated (note to self: stop forgetting that ugh)
If brightness controls still don’t work on boot, or the screen goes black periodically, try booting
with WhateverGreen boot argument igfxcflbklt=1
. This force-enables the Coffee Lake backlight fix.
- HDMI output does not work; inserting cable causes kernel panic
The internal keyboard is a PS/2 device, but macOS does not support PS/2. This can be implemented with VoodooPS2Controller.
- Include VoodooPS2Controller kext
- Enabling brightness keys
- Include SSDT-BRT6.aml (SSDT-BRT6.dsl)
- config.plist changes to rename BRT6 to BRTX in DSDT so we can replace it with our function
- ACPI/DSDT/Patches/Item n
- Key=Find, Type=Data, Value=<14204252 543602>
- Key=Replace, Type=Data, Value=<14204252 545802>
- ACPI/DSDT/Patches/Item n
- Include SSDT-PS2-Keymap.aml (SSDT-PS2-Keymap.dsl) to remap keys (optional)
- See list of PS/2 scan codes (scan code set 1) for codes generated by keyboard, and ADB key codes for codes recognized by macOS.
- Install debug version of VoodooPS2Controller
- Log key codes captured
log stream | sed -n 's/.*\(ApplePS2Keyboard: sending key\)/\1/p'
- Can cause reboot on startup (intermittent)
- Keyboard options like modifier key settings cause an erratic/disabled keyboard For key remapping, see SSDT-PS2-Keymap.dsl above. Key repeat speed and delay are ok to change.
- Can’t wake up from sleep with internal keyboard
- Enables poor quality touchpad by default
Based on Broadcom Wi-Fi Bluetooth Guide, and see threads one and two.
One possible replacement card is the Dell DW1830, based on the Broadcom BCM943602BAED. I’ve used this card here (purchased on EBay), although it’s currently a bit expensive at around $50. Dell no longer offers this card directly.
This card has three antennas, while the XPS 9570 has only two antennas in the display. To get full Wi-Fi speed, a third antenna with a U.FL connector must be added. This antenna can be placed in a small gap next to the battery. It’s OK to leave J2 unconnected, however - modern network cards should recognize this and disable the 3rd port. Without the 3rd antenna, I’m able to get speeds up to about 800Mbps.
Connectors J0, J1, J2 should be connected as follows (see installation example):
- J0: white antenna cable to display (primary)
- J1: black antenna cable to display (Bluetooth/secondary)
- J2: extra retrofitted antenna next to battery
The DW1830 Wi-Fi card is based on the Broadcom BCM943602BAED, using BCM43602 for Wi-Fi and BCM20703 for Bluetooth. While Wi-Fi works by default, it shows up as a “Third-Party Wireless Card” in System Information unless AirportBrcmFixup is installed, and Bluetooth requires kexts from OS-X-BrcmPatchRAM.
- Include AirportBrcmFixup AirportBrcmFixup.kext for Wi-Fi
- Include OS-X-BrcmPatchRAM BrcmPatchRAM2.kext and BrcmFirmwareRepo.kext for Bluetooth (for installation to /Library/Extensions)
- After swapping out Wi-Fi card, reset Bluetooth info (e.g. to fix AirDrop)
- Turn off Bluetooth
sudo rm -f /Library/Preferences/com.apple.Bluetooth.plist*
- Reboot and turn on Bluetooth
- Ensure that Wi-Fi adapter’s BSD name is
en0
- SysPrefs -> Click on Network dropdown -> BSD Device Name for Wi-Fi not
en0
? Continue below, otherwise skip. sudo rm -f /Library/Preferences/SystemConfiguration/NetworkInterfaces.plist
sudo rm -f /Library/Preferences/SystemConfiguration/preferences.plist
- Reboot
- SysPrefs -> Click on Network dropdown -> BSD Device Name for Wi-Fi not
By default, AirportBrcmFixup seems to limit Wi-Fi channel width for 802.11ac to 40MHz instead of
80MHz, even though the country code defaults to US. The workaround is to disable the country code
setting with the boot flag brcmfx-country=#a
(config.plist).
If you have an 802.11ac capable access point, place the XPS 9570 next to it and option-click on the
Wi-Fi icon. After a few minutes, you should see a line like Channel: 165 (5 GHz, 80 MHz)
with Tx
Rate
below it of 800 Mbps or higher. A congested Wi-Fi environment in an apartment building could
reduce this rate.
The above installation steps prepare the way for Messages and FaceTime to work as well, but there are more in-depth guides to Messages here and here if needed.
If there are issues with continuity (switching calls between macOS and iPhone for example), BT4LEContiunityFixup.kext may help fix those, but seems to not be needed for the DW1830.
Remove stale Messages and FaceTime data:
rm -rf ~/Library/Caches/com.apple.Messages
rm -rf ~/Library/Caches/com.apple.imfoundation.IMRemoteURLConnectionAgent
rm -rf ~/Library/Caches/com.apple.iCloudHelper
rm -rf ~/Library/Preferences/com.apple.iChat*
rm -rf ~/Library/Preferences/com.apple.icloud*
rm -rf ~/Library/Preferences/com.apple.ids.service*
rm -rf ~/Library/Preferences/com.apple.imagent.plist
rm -rf ~/Library/Preferences/com.apple.imessage*
rm -rf ~/Library/Preferences/com.apple.imservice*
- Unlock with Apple Watch only works once after actviation, or only sporadically
- Install ACPIBatteryManager kext
Only the ACPIBatteryManager kext is required on the XPS 9570, but the kext companion guide includes a good step-by-step tutorial on how to make DSDT edits with MaciASL if needed.
Audio on the XPS 9570 is based on the Realtek ALC298 audio codec, referred to by Dell as “ALC3266-CG
with Waves MaxxAudio Pro”. The ALC298 is not supported on macOS by default, so we use AppleALC to
enable it. Audio pipelines on laptops appear to have unique amplifier and gain setups, so we need to
pass a layout-id
to AppleALC compatible with the XPS 9570. The only ID that works well is
layout-id=30
.
HDMI audio output probably requires SSDT-HDEF and FakePCIID_Intel_HDMI_Audio.kext, but is not implemented yet since it depends on a graphics fix.
- config.plist
- ACPI/DSDT/Patches/Item n
- Comment: Change HDAS to HDEF for audio device
- Key=Find, Type=Data, Value=<48444153>
- Key=Replace, Type=Data, Value=<48444546>
- Devices/Properties/PciRoot(0)/Pci(0x1f,3)
- Comment: AppleALC layout-id for ALC298 on XPS 9570
- layout=id=30
- ACPI/DSDT/Patches/Item n
- Install AppleALC kext
- A bad
layout-id
causes constant CPU activity in akernel_task
process (30 should be ok) - Lack of an audio output device causes video playback problems, i.e. stalling when seeking
- HDMI audio out not implemented since HDMI out causes kernel panic (dependent on graphics fix)
The XPS 9570 DSDT table has a few incorrect USB properties, for example the right side type A port is marked as being internal, so an attached disk can’t be easily ejected. The correct properties are injected via USBInjectAll and in SSDT-UIAC.dsl.
Based on USB guide and companion guide.
Hardware config of the XPS 9570:
Port | Type | User Visible* | Description |
---|---|---|---|
HS01/SS01 | Type A | Yes | Right side |
HS02/SS02 | Type A | Yes | Left side |
HS04 | Proprietary | No | Bluetooth |
HS05 | Type C | Yes | Left side |
HS07 | Proprietary | No | Goodix fingerprint reader |
HS09 | Proprietary | No | No longer used; touchscreen on prior model |
HS12 | Proprietary | No | Webcam |
(*) “Set if the device connection point can be seen by the user without disassembly” according to ACPI 6.2 A, 6.1.8, _PLD (Physical Location of Device)
- Include USBInjectAll kext
- Include SSDT-UIAC.aml (SSDT-UIAC.dsl) - based on SSDT-UIAC-ALL.dsl and customized for XPS 9570
Will likely work when USB type C and/or Thunderbolt fixes are added.
To-Do: Add USB power property injection
It’s not possible to use fingerprint sensor for Touch ID according to RehabMan. Perhaps the integrated Goodix fingerprint sensor can be used, and enabled with PAM (TBD).
Since we’re using the MacBookPro15,1
SMBIOS, macOS is expecting Touch ID to be available, causing
lag on password prompts. This can be disabled for now with the NoTouchID kext.
Note: There is some information in power management guides that only applies pre-Coffee Lake. See section below to avoid unnecessary changes.
Based on the laptop power management guide by RehabMan, as well as macOS native power management by toleda.
- Disable hibernation (suspend to disk or S4 sleep)
macOS combines sleep and hibernation into one feature, where closing the lid initially sleeps the
laptop, and eventually hibernates it. In any event, hibernation is not supported on hackintosh,
and should be disabled/checked after updates.
sudo pmset -a hibernatemode 0 sudo rm -f /var/vm/sleepimage sudo mkdir /var/vm/sleepimage # try to prevent update from re-enabling sudo pmset -a standby 0 sudo pmset -a autopoweroff 0
- config.plist/ACPI/SSDT/Generate/PluginType=YES
- Verify that X86PlatformPlugin is loaded (see testing section)
- config.plist/KernelAndKextPatches/KernelPm=YES
- Enable xcpm_idle patch to prevent reboot with HWP (hardare P-state coordination)
- config.plist/KernelAndKextPatches/KernelToPatch/Item n
- Key=Find, Type=Data, Value=<20b9e200 00000f30>
- Key=Replace, Type=Data, Value=<20b9e200 00009090>
- config.plist/KernelAndKextPatches/KernelToPatch/Item n
- config.plist/KernelAndKextPatches/AppleIntelCPUPM=YES
ssdtPRgen.sh
HWPEnabler
- Use Intel Power Gadget to graph CPU power/frequency/temp over time
- Verify X86PlatformPlugin is loading under PR00 in IORegistryExplorer
- Root -> MacBookPro15,1 -> AppleACPIPlatformExpert -> PR00@0 -> AppleACPICPU -> X86PlatformPlugin
- Testing Power Management
Load AppleIntelInfo.kext (but don’t install it):
sudo chown -R root:wheel AppleIntelInfo.kext sudo kextload AppleIntelInfo.kext
Then use the system for a few minutes, perform some work, let it idle, etc. Finally, copy results file to where you want to save it:
sudo kextunload AppleIntelInfo.kext sudo cp /tmp/AppleIntelInfo.dat ~/AppleIntelInfo.txt sudo chmod g+rw ~/AppleIntelInfo.txt
AppleIntelInfo.txt should contain the line:
IA32_PM_ENABLE...................(0x770) : 0x1 (HWP Supported and Enabled)
However, there is little information on what everything in this report means. This could be improved.
One of these is required to boot macOS.
VirtualSMC and FakeSMC
macOS sets BIOS clock to UTC, but Windows sets clock to local time. The solution is to set Windows
to use UTC as well, with regedit
:
- regedit ->
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation
- create new DWORD (32-bit)
RealTimeIsUniversal
with value ‘1’
- Drive encryption is disabled (haven’t tried)
- Thunderbolt, USB3 on type-C port not working (haven’t tried; should be possible)
- Suspend and resume not implemented properly - power button should wake however
- Internal keyboard behaves strangely when Keyboard SysPrefs are changed - must use SSDT to configure VoodooPS2Controller
- VoodooPS2Controller provides poor touchpad support (should be implemented with VoodooI2C probably, TODO)
- Wi-Fi and Bluetooth require card swap, since there are no macOS drivers for OEM Killer Qualcomm card
- Fingerprint reader does not work (see Touch ID / fingerprint reader section)
- SD card reader not present
Black/dark screen 3 minutes after bootingTemporary hang whenever Touch ID is requestedRight-side USB port appears as an internal port, so devices attached to it can’t be ejectedHang on boot with Apple logo intermittentlyGraphics acceleration becomes poor after display goes to sleepConstant CPU activity in kernel_task processMessages does not work by default
Most of the ACPI patching info is based on the laptop DSDT/SSDT guide and hotpatching guide.
Many ACPI patches depend on starting out with a working set of ACPI tables (accomplished via patching if needed), so it’s useful to test if this is the case and fix any errors before attempting further changes.
To do this, we can look through the macOS boot logs for ACPI errors, dump the unmodified ACPI tables, and dump the ACPI tables as modified by Clover. Making changes as needed, rebooting, and re-inspecting system logs, we can iterate until there are no more ACPI problems as seen by macOS.
Note: this process wasn’t clear to me from reading the patching guides initially, but it may not be the best way to do it - caveat emptor.
- Inspect system logs for errors
Immediately after bootup, dump system log for the last 10 minutes (adjust as needed):
log show --predicate 'process =
“kernel”’ –style syslog –source –debug –last 10m > sys_log.txt= Then searchsys_log.txt
for “ACPI Error” or “ACPI Exception”. - Dump unmodified ACPI tables
Press F4 on Clover boot screen (no output will show), then mount EFI partition and look for
ACPI tables in
CLOVER/ACPI/origin
. - Check unmodified tables for errors with iasl
Disassembling all tables from a single namespace with the
-da
option should yield no errors:iasl -da -dl DSDT.aml SSDT-*.aml
Although, some duplicate definitions with the error AE_ALREADY_EXISTS may not be a problem (TBD). If an error occurs, check the fileDSDT.dsl
for possible error output. - Check modified tables as injected by Clover with patchmatic and iasl
patchmatic -extract iasl -da -dl DSDT.aml SSDT-*.aml
Again, this should yield no errors. If a duplicate definition is found with AE_ALREADY_EXISTS, try disassembling the tables without the
-da
option:iasl -dl DSDT.aml SSDT-*.aml
If this still fails, there is likely a problem that needs to be fixed via Clover patching first.
This setup dual-boots Windows 10, which is nice to have for games, since we can actually use the NVIDIA GTX 1050, unlike in macOS.
Begin with the default Windows 10 installation (or install Windows 10 if using a new drive).
- Update BIOS and other firmware using Dell SupportAssist in Windows
- Toshiba SSD only
- Update Toshiba SSD firmware (search for “toshiba”) Needed to fix 4k sector bug. Dell SupportAssist does not do this automatically!
- Set SSD to use 4k sectors - this will WIPE the drive!
- Enable Intel SpeedShift in BIOS
- TODO: add more steps from original notes.org
Creating USB installation media (see guide for more details)
- Download macOS install from App Store
- Format USB drive and write installer to drive (assuming drive is
/dev/disk100
)diskutil partitionDisk /dev/disk100 1 GPT HFS+J "install_osx" R sudo "/Applications/Install macOS Mojave.app/Contents/Resources/createinstallmedia" --volume /Volumes/install_osx --nointeraction diskutil rename "Install macOS Mojave" install_osx
- Install Clover on USB drive
- TODO: This isn’t enough to boot the installer - will need to provide config.plist. Re-visit when documenting full installation process. Installing updates is possible when injecting Intel graphics, with invalid platform id, e.g. 0x12345678, and disabling kext patches. Perhaps it makes sense to have a special macOS install CLOVER folder, that disables any brightness ‘fixes’ that cause the display to be dimmed. TBD.
- Clover: v2.4k r4701 RM-4963
Kexts should be installed in /Library/Extensions
.
Installation:
sudo cp -r <mydriver.kext> /Library/Extensions
sudo chown -R root:wheel /Library/Extensions/<mydriver.kext>
sudo kextcache -i / # update kext cache
Be sure to check output for errors!
Every custom kext should be listed with the line Kext with invalid signatured (-67062) allowed
Kexts can be patched on boot by Clover (see KernelAndKextPatches/KextsToPatch
section in
config.plist), but Clover has some limitations, e.g. it can only patch kexts that are in the kext
cache. More complex cases can be handled by Lilu, used for “arbitrary kext and process patching”,
which is itself installed as a kext. Excellent guide to using Lilu and commonly used plugins.
See also guide to installing 3rd party kexts.
https://www.tonymacx86.com/threads/release-intel-fb-patcher-v1-6-8.254559/ Seems to be becoming a full-featured utility to fix various issues, not just Intel graphics related.
The OS-X-ACPI-Debug repo allows for “debug tracing from ACPI code (DSDT) to system.log”. Not currently installed and not tested, but should be useful if ACPI problems come up.
Long, thorough guide. Good to refer back to for specific issues.
https://github.com/darkhandz/XPS15-9550-High-Sierra
KNNSpeed’s Dell XPS 15 9560 guide is a useful reference for a similar system
bozma88’s Dell XPS 15 9360 guide
This update takes quite some time on initial install, so it may be necessary to wait more than 20 minutes before seeing a progress bar.
AppleIntelCFLGraphicsFramebuffer changed again, and this time the DPCD link rate patch needs to be updated. See changes in the Intel UHD 630 “enabling acceleration section”.