Jump to content

NVMeFix - patches for the Apple NVMe storage

Recommended Posts

  • Administrators

NVMeFix is a set of patches for the Apple NVMe storage driver, IONVMeFamily. Its goal is to improve compatibility with non-Apple SSDs. It may be used both on Apple and non-Apple computers.


The following features are implemented:

Autonomous Power State Transition to reduce idle power consumption of the controller.

Host-driver active power state management.

Workaround for timeout panics on certain controllers (VMware, Samsung PM981).

Other incompatibilities with third-party SSDs may be addressed provided enough information is submitted to our bugtracker.

Unfortunately, some issues cannot be fixed purely by a kernel-side driver. For example, MacBookPro 11,1 EFI includes an old version of NVMHCI DXE driver that causes a hang when resuming from hibernaton with full disk encryption on.


NVMeFix requires at least Lilu 1.4.1 and at least 10.14 system version. It may be compatible with older systems, but has not been tested.

It may be installed to /Library/Extensions on 10.15 and earlier, or injected by the bootloader on all versions.


-nvmefdbg enables detailed logging for DEBUG build.

-nvmefoff disables the kext.

-nvmefaspm forces ASPM L1 on all the devices. This argument is recommended exclusively for testing purposes, as for daily usage one could inject pci-aspm-default device property with <02 00 00 00> value into the SSD devices and bridge devices they are connected to onboard. Updated values will be visible as pci-aspm-custom in the affected devices.

Some SSDs misbehave when APST is on. NVMeFix attempts to detect broken motherboard and SSD combinations and work around them. Motherboard is detected via IORegistry keys injected by Clover, or NVRAM variables provided by OpenCore.

APST table entries specify minimum idle latency for the transition to occur. Maximum acceptable latency is 100000 microseconds, and may be overriden via little-endian 8-byte property ps-max-latency-us of parent PCI device (e.g. IOService:/AppleACPIPlatformExpert/PCI0@0/AppleACPIPCI/RP06@1C,5/IOPP/SSD0@0). If set to 0, APST will be disabled completely.


RELEASE build will only log high-level information about failures.

DEBUG build will additionally log used power states, detailed error messages, and attempt to fetch APST status and table from the controller.

APST enable status is posted to the IONVMeController IORegistry entry apst key.

If active power management initialisation is successful, an NVMePMProxy entry will be created in the IOPower IORegistry plane with IOPowerManagement dictionary.

Information about power states supported by the controller may be obtained e.g. using smartmontools. For example, in the following output the controller reports 5 states, where the former three high-power states will be used by NVMeFix for active power management, and the latter two may be used for APST depending on ps-max-latency-us.

Supported Power States St Op Max Active Idle RL RT WL WT Ent_Lat Ex_Lat 0 + 9.00W - - 0 0 0 0 0 0 1 + 4.60W - - 1 1 1 1 0 0 2 + 3.80W - - 2 2 2 2 0 0 3 - 0.0450W - - 3 3 3 3 2000 2000 4 - 0.0040W - - 4 4 4 4 6000 8000

IONVMeFamily supports the following debug flag bitfield, which are passed either via nvme bootarg or debug.NVMe sysctl:

1: Log some events via kprintf 2: Detailed event trace via kernel_debug with 0x61500xx debugid 4: PRP-related event trace via kernel_debug with 0x61540xx debugid 8: Force disable LPSR for Apple controllers 16: Perform only PCI initialisation of NVMe controller 32: Ignore initialisation errors 128: Disable LPSR for Apple controllers 512: Disable Unmap feature for IONVMeBlockStorageDevice

IONVMeFamily supports the following additional bootargs:

nand-io-timeoutms: Timeout for NVMe requests in ms, 35 s by default enable-IO-log: Issue CORE_DEBUG_ENABLE_IOLOG ASP command (for Apple controllers)



PayPal HERE - Stripe HERE - Ko-Fi HERE - BuyMeaCoffee HERE - Mercado Livre HERE

Skrill¬†[email protected]


ETH BSC BEP20 0xb57cfdfa371fad1981910f0e8332409ab99f74d9

BNB 0x10D1d656eCa00bD521f9b4A43B83098B8142e115

USDT BSC BEP20 0xb57cfdfa371fad1981910f0e8332409ab99f74d9


PicPay @danielnmaldonado

PiX¬†@[email protected]

Problems with Paypal HERE


Sign up for a Bybit account and claim exclusive rewards HERE

New ways to earn money with Linkvertise HERE

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Create New...