New IONVMeFamily.kext

Well hello. I checked the latest pre-release package of Yosemite 10.10.3 (build 14D98g) and this is a pleasant surprise. Look here.

IONVMeFamily

This kext is for internal Apple PCI-Express SSD Controllers, with NVM Express support. That may be (in part) why the Samsung flash storage in the new Apple MacBook Pro (13-inch) is so much faster. There are also drivers available for all kind of operating systems, except OS X of course. Expect a port some time soon. My plan however is to attack and patch the non NVM Express compliant Apple supplied driver first i.e. to work around the (broken) PCI class value that Apple is using.

Correction iFixit found a Samsung S4LN058A01-8030 controller on the SSD during their teardown of the new MacBook Pro (13-inch). That is the same controller that can be found on the Samsung SM951. The ACPI only version, and thus the SSD is not the one with NVMe support. It would have been nice if Apple had used the Samsung S4LN058X01-8030 (used for the Samsung SM953) but that is not the case. Apparently. This makes me think that the kext is there for a future update. Anyway.

More good news. I also located the model/board-id’s of the new MacBook, MacBook Air and MacBook Pro:

Mac-9F18E312C5C2BF0B.plist / MacBookAir7,1 (Early 2015)
Mac-937CB26E2E02BB01.plist / MacBookAir7,2 (Early 2015)
Mac-BE0E8AC46FE800CC.plist / MacBook8,n (Early 2015)
Mac-E43C1C25D4880AD6.plist / MacBookPro12,1 (Early 2015)
Mac-F305150B0C7DEEEF.plist / MacBook8,n (Early 2015)

I also see that the new – yet to be released – MacBook with Broadwell processor will use an even better, more efficient power management. There are also a couple of new Broadwell specific files, like for graphics support:

AppleIntelBDWGraphics.kext
AppleIntelBDWGraphicsFramebuffer.kext
AppleIntelBDWGraphicsGLDriver.kext
AppleIntelBDWGraphicsVADriver.kext
AppleIntelBDWGraphicsVAME.bundle

Still using property AAPL,ig-platform-id and a local update of AppleIntelFramebufferAzul.sh – which I will rename/release one day soon – gives me this list of frame buffers for supported devices:

[ 1] : 0x16060000 – Broadwell GT1
[ 2] : 0x160e0000 – Broadwell GT1
[ 3] : 0x16160000 – Broadwell GT2
[ 4] : 0x161e0000 – Broadwell GT2 (MacBook)
[ 5] : 0x16260000 – Broadwell GT3 (MacBook Air)
[ 6] : 0x162b0000 – Broadwell GT3 (MacBook Pro)
[ 7] : 0x16220000 – Broadwell GT3
[ 8] : 0x160e0001 – Broadwell GT1
[ 9] : 0x161e0001 – Broadwell GT2 (MacBook)
[10] : 0x16060002 – Broadwell GT1
[11] : 0x16160002 – Broadwell GT2
[12] : 0x16260002 – Broadwell GT3 (MacBook Air)
[13] : 0x16220002 – Broadwell GT3
[14] : 0x162b0002 – Broadwell GT3 (MacBook Pro)
[15] : 0x16120003 – Broadwell GT2
[16] : 0x162b0004 – Broadwell GT3 (MacBook Pro)
[17] : 0x16260004 – Broadwell GT3 (MacBook Air)
[18] : 0x16260005 – Broadwell GT3 (MacBook Air)
[19] : 0x16260006 – Broadwell GT3 (MacBook Air)

The layout of the frame buffer data itself has also changed. This sucks, because it means more work for me. Stuff for another blog post. Need to fix something in our kitchen now. Later folks…

Edit There is also a new entry in System Profiler for NVMExpress devices, but on the Early 2015 MacBook Pro (13-inch) it shows this text:

This computer doesn’t contain any NVMExpress devices. If you installed NVMExpress devices, make sure they are connected properly and powered on.

Ok. This confirms it. The SSD is not NVMe compatible.

21 thoughts on “New IONVMeFamily.kext

  1. Great find. Nice to see NVMe support in OS X.
    It’s too bad the OEM-only Samsung SM951 doesn’t have NVMe support. Don’t know why Samsung changed their plans on that. It would have really made a difference in small file transfer speeds.
    MAJ

  2. Hi Pike,

    Ive tried all the ig-platform-id’s on clover

    but all 19 of them result in panic. i have a Lenovo Yoga 3 Pro with Core M HD 5300

    Using the latest developer build,

    Any input would be appreciated. Thanks

  3. Pingback: Qu'est-ce que le NVMe ? Et pourquoi ça comptera... - Photoetmac.com

  4. Many thanks for these investigations! Well, you mentioned the entry for System Profiler for NVMExpress devices for an Early 2015 (r)MacBook Pro (13-inch). Does this “doesn’t contain any NVMExpress devices” show up on the Early 2015 MacBookAir13, too? If so, then while getting a MacBookAir7,2(13″,early2015) right now it may be wise to go with the 128GB variant only and wait for M.2 SSDs with NVMe comming this year.
    Tnx Uwe

    • It didn’t work for me.
      I have the Intel 750 400 GB. I bought it for my Linux PC, and it’s working fine in that machine.
      But out of curiosity I put it in my MacPro 3,1 (early 2008). The system profiler shows the “This computer doesn’t contain any NVMExpress devices” message, and kextstat shows that the com.apple.iokit.IONVMeFamily driver has not been loaded.
      The System Profiler does show the adapter though (see below). I manually loaded the driver using kextload, but this (unsurprisingly) did not make the drive available. System Profile also still reported “Driver Installed: No”.
      So it looks like getting the 750 to work on a MacPro will require a bit of tinkering. It might be that the Apple’s driver specifically looks for the vendor and device ID of the NVMe drive in the new MacBook.
      Note that as far as I know, all MacPro models have PCIe 2.0 slots at best, while the 750 is a 4 lane PCIe 3.0 device, so even if you get it to work it would be suboptimal. In my machine it’s even reported as using PCIe 1 link speed.

      System Profiler output:
      pci8086,953:

      Type: NVM Express Controller
      Driver Installed: No
      MSI: No
      Bus: PCI
      Slot: Slot-2
      Vendor ID: 0x8086
      Device ID: 0x0953
      Subsystem Vendor ID: 0x8086
      Subsystem ID: 0x370d
      Revision ID: 0x0001
      Link Width: x4
      Link Speed: 2.5 GT/s

  5. Piker, i bought a Intel SSD 750 and am living near antarctica so i can neither travel or easily give it back. Any chance to get it to run in a mackintosh with an x79 mainboard? Thank you!

  6. Anyone get the Intel 750 400gb card to work? I can install windows just fine on an older Z68 board and boot from it thanks to a modified clover nvme-express driver i modified as an ffs bios module, but using Clover to boot an el capitan partition on the 750 suddenly stops loading half way through. I think its because the vendor ids not matching some plist file on some kext. Wonder what Pikers thoughts are on this?

    thanks

    • Hi David,

      First. Just to make sure that we are talking about one and the same driver; Is that the compiled/converted Intel UEFI Driver that you have added to your Z68 BIOS?

      Now. Are you trying to use the Apple IONVMeFamily.kext or the kext that Jim released? Note that Jim already confirmed that power management is not supported by his driver, but I also would also like to find out if S.M.A.R.T is supported or not, because on at least one screenshots that I have seen it did not support it. Which is pretty important for people with a Samsung 950 Pro and/or 951 NVMe.

      One other thing. Using (M2) SSD’s makes thing fly and boot fast, but please don’t forget to make backups, otherwise you may regret it that you did not – there is no way of recovering data from flash drives once it is broken.

      • I converted the nvme express driver that came with the Clover installer package into my bios using edk2 genffs tools. That allows me to boot from the drive. I also tried adding the macvidcards nvme driver kext into the clover efi kext folder. That allows me to see the nvme drives from another installation. I’ve got two three clones of my El Capitan install plus an emergency USB key if anything goes wrong. Problem is the clone partition on the nvme Intel 750 drive just stops loading half way through right about after the pxhcd kext is done loading. On my other system I can tell that next comes mounting the drives which must be the problem. Thanks.

      • Ok so you are indeed using Jim’s driver. Which is cool, but I never used his driver and I am also not going to use it. Next to that. I don’t even own an Intel 750 SSD so I don’t think that it would be fair of me to comment on it. Isn’t there anyone else that can help you?

  7. I am using the kext Jim, it’s working just fine on Yosemite, but on el capitain, no good, Jim seems to have left the development, Pike why would you not use it ??

  8. Hello there,
    So I downloaded the shell script from GitHub to create a Hackerblahblah.kext. I recursively changed the owner to root and group to wheel and copied the driver to S/L/E. Rebooted the machine: but the 950 Pro does not show up. I do not use Clover as I don’t care about starting up from the 950 Pro. I only want to use it as a recording drive for my audio production work station. Clearly I am doing something wrong. Can you perhaps shed some light on my stupidity dear @pikeralpha? THanks man.

      • Hi,
        I got it to work. I forgot to disable SIP. (I have 2 disks: 1 SSD and one other where I always experiment on before applying stuff to the real system disk so I booted from SSD and copied the Hacker.kext to /S/L/E without disabling SIP).

        Thanks for the help. I really wonder how much effort you guys put in all this to figure out what Apple did to fuck us. I just do not get it why they do not support standard NVMe. ANyway, thanks again. Happy now 🙂

Leave a comment