macOS on the Core m3-8100Y Microsoft Surface Go 2 thanks to Acidanthera's OpenCore bootloader.
Apart from the front and rear cameras, the IR camera (Windows Hello) the LTE modem, everything on the Core m3-8100Y version of the Surface Go 2 is working perfectly like on a real Mac. ACPI S3 Sleep is broken, but ACPI S4 Hibernate works great, though, and resuming from Hibernation takes around ten seconds. The advantage Hibernate has over Sleep is that the device doesn't consume any power while in a hibernated state.
The Surface Go 2 works great as a handy little macOS tablet. It won't entirely replace an iPad or even an Android tablet, but once set up properly, macOS is actually quite a nice tablet OS and almost on par with the Windows tablet experience. All the fancy Trackpad gestures available on macOS work on the Touchscreen as well and are very smooth and reliable. Folding the Type Cover behind the tablet disables the Keyboard and Trackpad and folding the Type Cover to the laptop position again re-enables both of them.
The battery runtime is around five hours.
This repository is neither a howto nor an installation manual. Using these files requires at least basic knowledge of Acidanthera's OpenCore bootloader, ACPI, UEFI and the art of hackintoshing in general. I recommend reading the excellent Dortania's OpenCore Install Guide, as well as all its linked resources. For those who wish to improve their hackintoshing knowledge, 5T33Z0's OC-Little-Translated repository is the most comprehensive resource I've found on the subject.
Although this repository is a fork of kingo132's Surface Go 2 hackintosh repository, my OpenCore EFI folder was built from scratch by following Dortania's OpenCore Install Guide with the latest releases of Acidanthera's OpenCore bootloader and every required kexts. Nevertheless, kingo132's repository provided an extremely valuable and helpful resource for building my OpenCore EFI folder and hacking the tablet's UEFI Firmware.
I recommend completely erasing the device's SSD by creating a new GPT partition table before attempting to install macOS, as it makes the installation process much easier. You may use any Linux live ISO with a partitioning tool such as GParted
or KPartition
to erase the SSD.
For macOS to be able to boot on the Surface Go 2, the Secure Boot
option must be disabled in the UEFI. The boot screen will then display a large red bar with a lock icon at the top of the display when Secure Boot is disabled. This is normal.
Please be aware that all PlatformInfo
and SMBIOS
information was removed from the OpenCore config.plist
files. Users will therefore need to generate their own PlatformInfo
with CorpNewt's GenSMBIOS tool before attempting to boot a Surface Go 2 with this repository's EFI folder.
The kexts
required to enable the trackpad and the touchscreen are special versions of VoodooI2C.kext
and VoodooI2CHID.kext
patched and improved by lazd. Updating those kexts
with the official ones from the VoodooI2C repo will most certainly break trackpad and touchscreen functionality! They were renamed to VoodooI2C-SurfaceTouch.kext
and VoodooI2CHID-SurfaceTouch.kext
so as not to be auto-updated by tools such as OCAT.
AirportItlwm-Ventura.kext
, AirportItlwm-Sonoma140.kext
and AirportItlwm-Sonoma144.kext
from the OpenIntelWireless repo are required to enable the Wifi chip and were renamed for the same reason. This EFI will dynamically load the appropriate kext for macOS Ventura or Sonoma depending on the running kernel. No need to manually replace the kext file when updating your version of macOS.
Windows and Linux should be detected automagically by the OpenCore boot loader even when installed after macOS.
This repository uses the unofficial OpenCore_NO_ACPI_Build fork of OpenCore by btwise, wich is not endorsed by Acidanthera (the dev team behind OpenCore). The main (and only) difference between this fork and the official OpenCore version is that it allows to prevent ACPI injection (e.g. patches, tables, boot parameters) into other OSes besides macOS.
Software Specifications
Software | Version |
---|---|
Target OS | Apple macOS 13.6.7 Ventura and 14.5 Sonoma |
OpenCore | MOD-OC v1.0.1 |
SMBIOS | MacBookAir8,1 |
SSD format | APFS file system, GPT partition table |
Computer Specifications
Device | Hardware |
---|---|
CPU | Intel Core m3-8100Y (1.1 - 3.4 GHz, Amber Lake-Y) |
iGPU | Intel UHD Graphics 615 |
Audio | Realtek ALC298 |
RAM | 2x4 GB LPDDR3 1867 MHz |
Wifi + Bluetooth | Wifi6 AX200, Bluetooth 5.0 |
Storage | Kioxia/Toshiba 128GB SSD |
USB Type-C 3.1 Gen 1 | Supports Power Delivery and DisplayPort |
MicroSD Card reader | Realtek PCI-E Card Reader |
Front & Rear camera | Intel(R) AVStream Camera 2500, ISP Interface, 8 MPix/5 MPix |
IR camera | Intel(R) AVStream Camera 2500, ISP Interface |
Keyboard / Trackpad | Microsoft Type Cover |
Display | 10.50 inch 3:2, 1920 x 1280 pixel 220 PPI, 10-Point Capacitive |
Touchscreen | ELAN9038 , \_SB.PCI0.I2C1.TPL1 |
Screen | BOE CQ NV105WAM-N31, BOE088B |
NFC | NXP NFC Client Device, NXP3001 |
Battery | 26.81Wh 7.66v 3500mAh |
LTE (if available) | Surface Mobile Broadband, USB device, Qualcomm Snapdragon X16 LTE |
GPS (if available) | |
Accelerometers, gyroscopes, ambient light sensors |
What works
- CPU power management
- CPU SpeedStep
- iGPU with full acceleration
- SSD drive
- USB-C port
- WLAN
- Bluetooth
- Internal speakers, microphone and Combojack
- Power, volume up and volume down buttons
- Surface Type Cover keyboard with working brightness, volume and mute keys, working caps lock light
- Surface Type Cover trackpad with native multi-touch gestures
- Touchscreen
- Surface Pen
- MicroSD Card reader
- Battery percentage and cycle count
- Hibernation (hibernatemode 25) - the device successfully wakes up from hibernation mode
- USB Type-C to HDMI
- USB Type-C to USB3 & USB2
- USB Type-C Power Delivery
What needs some more work
- Sleep (hibernatemode 3) - the device wakes up from sleep displaying the Surface logo on the internal display
- Accelerometers, gyroscope
- Ambient light sensor
What will probably never work
- Front & rear cameras
- IR camera (Windows Hello)
- NFC
- LTE
UEFI Settings
To enter the UEFI Settings, power on your Surface Go 2 and hold the Volume Up Button
(the left volume button) on the tablet as soon as the Surface Logo is displayed on the screen.
Apart from the Secure Boot
setting, which must be disabled to boot macOS, the following settings are not mandatory for macOS to work, but keep in mind that every disabled device saves power and increases the battery runtime. As the front, rear and IR cameras, as well as the LTE modem won't work in macOS, disabling them is recommended unless you use another operating system on the device. I also recommend moving USB Storage
to the top of the boot configuration list, which makes booting from an USB stick much easier.
Security | |
---|---|
Secure Boot | Disabled |
Trusted Platform Module (TPM) | Disabled |
Simultaneous Multithreading | Enabled |
Devices | |
---|---|
Front Camera | Disabled |
Rear Camera | Disabled |
IR Camera | Disabled |
LTE | Disabled |
Boot configuration | |
---|---|
USB Storage | Move the item to the top of the list |
Disabling Sleep and enabling Hibernate
As we still haven't found a solution for the Sleep/Wake issues on the Surface Go 2, disable Sleep altogether and use Hibernate for now. Open the Terminal
and enter the following commands, then reboot for the changes to take effect:
sudo pmset restoredefaults
sudo pmset -a hibernatemode 25
If for whatever reason Hibernate is not working on your system, you should reset the Power Management
settings and rebuild the sleepimage
file. To do so, open the Terminal
and enter the following commands, then reboot for the changes to take effect:
sudo rm /Library/Preferences/com.apple.PowerManagement*
sudo rm /var/vm/sleepimage
sudo pmset hibernatefile /var/vm/sleepimage
Once you are back in macOS, disable Sleep and enable Hibernate again, then reboot:
sudo pmset restoredefaults
sudo pmset -a hibernatemode 25
Turning off BD PROCHOT
On this device, BD PROCHOT will activate at temperatures as low as 60°C ~ 70°C. When it kicks in, the CPU will throttle down to 0.4Ghz, making the device more or less unusable. That's why BD PROCHOT needs to be disabled in order to increase the performance of the machine.
You may use arter97's DisablePROCHOT UEFI extension which is already included in the EFI/OC/Drivers folder to disable BD PROCHOT. However, if the CPU continues to be fully loaded with BD PROCHOT disabled, the temperature may increase up to 90°C. Beyond 90°C, the device will become unstable and either crash or power off. To avoid this, the temperature needs to be kept under control.
The DisablePROCHOT.efi driver is included but disabled in both config.plist files, as enabling it leads to the CPU overheating and the computer shutting down during install. You may enable the driver once macOS is installed on the device.
Undervolting to reduce heat and improve performance
The VoltageShift.kext
undervolting tool is already included and enabled in this repository's Kexts
folder. To be able to launch the voltageshift
command line tool from anywhere, copy VoltageShift from the Tools folder to your /usr/local/bin
folder by entering sudo cp voltageshift /usr/local/bin/
in the macOS terminal after navigating to the folder where you downloaded and unzipped the voltageshift
executable file.
Please refer to the instructions found in the VoltageShift repository, as well as to the excellent howto found in zearp's repository.
Once you have found an undervolting configuration that works well on your device, make it permanent by entering the following command in the terminal after navigating to the folder where you downloaded and unzipped the VoltageShift-EFI.zip
file:
sudo ./voltageshift buildlaunchd -120 -50 -80 0 0 0 1 28 18 0.002 60
The above settings are quite conservative and seem to work well on pretty much every Surface Go 2.
Disabling CFG Lock to improve Power Management
- Boot into OpenCore
- Press Space to see the list of tools
- Select
Disable CFG Lock
- Press enter
- Restart
To verify this worked, press Space and select the Check CFG Lock State
tool -- if it was successful, you'll see:
This firmware has UNLOCKED MSR 0xE2 register!
Finally, edit config.plist
and set Kernel -> Quirks -> AppleCpuPmCfgLock
and Kernel -> Quirks -> AppleXcpmCfgLock
to false
and reboot.
Increasing DVMT Gfx Memory to improve iGPU performance
- Boot into OpenCore
- Press Space to see the list of tools
- Select
Set DVMT Pre-Allocated to 64M
- Press enter
- Then select
Set DVMT Total Gfx Mem to MAX
- Press enter
- Restart
Finally, edit config.plist
and delete or comment out framebuffer-fbmem
, framebuffer-stolenmem
and framebuffer-patch-enable
in Device Properties -> Add -> PciRoot(0x0)/Pci(0x2,0x0)
and restart.
More information on the modified UEFI Firmware variables
VarName | VarOffset | VarStore | From | To |
---|---|---|---|---|
CFG Lock | 0x3C | 0x3 (CpuSetup) | 0x1 (Enabled) | 0x0 (Disabled) |
VT-d | 0xE3 | 0x2 (SaSetup) | 0x1 (Enabled) | 0x0 (Disabled) |
DVMT Pre-Allocated | 0xDF | 0x2 (SaSetup) | 0x1 (32M) | 0x2 (64M) |
DVMT Total Gfx Mem | 0xE0 | 0x2 (SaSetup) | 0x2 (256M) | 0x3 (MAX) |
To revert all changes made to the UEFI Firmware variables to their default values, enable the corresponding entries in the config.plist
file under Misc
-> Tools
, restart to the OpenCore menu, press space to see the list of tools and revert the changes by launching the option you wish to revert to its default value:
Enable CFG Lock
Enable VT-d
Set DVMT Pre-Allocated to 32M
Set DVMT Total Gfx Mem to 256M
Repeat for every UEFI variable you wish to revert to its default value.
Please be aware that you need to revert any changes made to your config.plist
file before reverting the UEFI variables to their default values, or macOS won't boot anymore!
Enabling native HiDPI display settings in macOS
On the installed macOS system, the default display resolution is too small for a small device such as the Surface Go 2. To enable the native HiDPI settings in the Display Preferences of macOS, download and run the one-key-hidpi script and select the option (4) 1920x1280 Display
. This fork of xzhih's one-key-hidpi tool was modified to add the 1920x1280 resolution needed for the Surface Go 2.
Rotating the display
Display Rotation Menu by Mage Software is a free app designed to quickly rotate the display between Landscape, Portrait, Landscape Flipped or Portrait Flipped right from a menu bar widget. There's also a handy keyboard shortcut to rotate the display back to Landscape: CTRL-OPTION-COMMAND-0
(as in "zero").
The first time you rotate the display to a portrait orientation, the resolution is set to 1280x1920, which is way too small for the SGO2's display. You'll need to head over to the Displays
tab in the System Settings
and set the only other available resolution, 640x960, which is quite perfect on our Surface Go 2 in portrait orientation.
However, once the display is in portrait orientation, it is very likely that the menu bar will not be able to show the Display Rotation Menu widget anymore because there's not enough space to display every widget in the narrow portrait-mode menu bar. To fix this, hold down the Command
key while dragging the Display Rotation Menu widget next to the macOS Control Center
widget. If there is still not enough space to show the widget, you could also change the size of the clock by disabling the Show date
and/or Show the day of the week
items or even change the style of the clock to Analog
in the Clock Options
of macOS.
Download Mage Software's Display Rotation Menu v1.5
BetterTouchTool by folivora.ai is a great, feature packed app that allows you to customize various input devices on your Mac.
With BetterTouchTool, you could define customised Trackpad/Touchscreen gestures to rotate your Surface Go 2's display.
You could for instance assign a Four-Finger Double-Tap gesture to the Display Rotation Menu widget's keyboard shortcut CTRL-OPTION-COMMAND-0
(as in "zero") to switch back to landscape orientation.
Or you could use BetterTouchTool together with jakehilborn's displayplacer command line tool to define Rotate Left and Rotate Right gestures which would execute Async, non blocking Terminal Commands such as /usr/local/bin/displayplacer degree:0
for landscape orientation and /usr/local/bin/displayplacer degree:90
for portrait orientation.
Download BetterTouchTool by folivora.ai
Download displayplacer by jakehilborn
Enabling the On-Screen Keyboard
macOS has a very nice On-Screen Keyboard readily available in the Accessibility Settings. To enable it, navigate to System Settings -> Accessibility -> Accessibility Keyboard -> Enable
. When you minimize the keyboard, it shrinks down to a small button that can be dragged to a convenient location in a corner of the screen. There are plenty of options to configure the keyboard to your liking.
Navigate to System Settings -> Lock Screen -> Accessibility Options -> Accessibility Keyboard -> Enable
to enable the On-Screen Keyboard on the Lock Screen.
The most convenient way to show/hide the On-Screen Keyboard when using the Surface Go 2 as a tablet is with a touchscreen gesture. Here's how to set this up: navigate to System Settings -> Accessibility -> Shortcuts
and uncheck every option but Accessibility Keyboard
. This enables the keyboard shortcut OPTION-COMMAND-F5
to show/hide the On-Screen Keyboard. Now use BetterTouchTool to assign this keyboard shortcut to a Trackpad/Touchscreen gesture.
Fixing broken Apple Messages and FaceTime
To fix issues with Apple Messages and FaceTime related to the Intel Wireless driver on macOS Sonoma, disable all AirportItlwm-***.kext
entries under Kernel -> Add
in your config.plist
file and use the itlwm_v2.3.0_stable.kext.zip and its companion app HeliPort instead.
The latest version 2.3.0 of itlwm.kext is already included in the Kext folder and config.plist
file.