Hmmm. I haven't heard you need a SSDT. I just change the disk icon by
Right clicking on the drive icon choosing Get Information;
dragging the new icon on top of the disk icon in the Get Information window; and
closing the Get Information window.
I've used this procedure on my Mac Pros and MacBook Pros for years.
With respect, it not simple as changing the disk icon. That is, it's not cosmetic. MacOS truly believes that the NVMe drive is external and EJECTABLE (like a USB drive). In Finder, the Volume actually has an EJECT button in the sidebar.
In @
tsrattan's IOREG picture, it shows "Physical Interconnect Location" property is set to External - which makes it ejectable. It's something that should not happen if the drive is bootable.
@
tsrattan, there are a couple of solutions:
1. SSDT similar to
@RehabMan's SSDT example (minus the spoofing as it's not needed anymore).
2. There's a Lilu Plugin kext called Innie that injects the appropriate properties in any NMVe device (google it).
I just installed (literally arrived this afternoon) a Sabrent Rocket 1TB NVMe and found this issue (external drive for NVME). This is on my ageing Z77X-UP5 system. I bought a NVMe-to-PCIe adapter and installed it in the right-most PCIe x16 slot (as seen from the rear).
I did not want yet another kext (whose sources I cannot find) so I wrote an SSDT based on
@RehabMan's guide here and it now shows the NVMe as Internal and it no longer appears on the desktop as an ejectable drive.
Here's is the SSDT:
C-like:
DefinitionBlock ("", "SSDT", 2, "hack", "nvme", 0x00000000)
{
External (_SB_.PCI0, DeviceObj)
Scope (\_SB.PCI0)
{
Device (PEG2)
{
Name (_ADR, 0x00010002) // _ADR: Address (of PCI Bridge - 3rd PEG slot)
Device (NVMe)
{
Name (_ADR, Zero) // _ADR: Address (first device on this bus)
Method (\_SB.PCI0.PEG2.NVMe._DSM, 4, NotSerialized) // _DSM: Device-Specific Method
{
If (!Arg2) { Return (Buffer () { 0x03 }) }
Return (Package ()
{
"built-in", Buffer () { 0 }
})
}
}
}
}
}
My IOREG now looks like this:
Your IOREG looks similar to mine (same PCI addresses and names).
Use the above SSDT (attached as source so you'll need to compile it) and try it.
In my case, the PEG2 device does not exist so I defined it in the SSDT at address 0x00010002 but in your case, it is already defined but should be fine.
If not, then your SSDT would be:
C-like:
DefinitionBlock ("", "SSDT", 2, "hack", "nvme", 0x00000000)
{
External (_SB_.PCI0.PEG2, DeviceObj)
Scope (\_SB.PCI0.PEG2)
{
Device (NVMe)
{
Name (_ADR, Zero) // _ADR: Address (first device on this bus)
Method (\_SB.PCI0.PEG2.NVMe._DSM, 4, NotSerialized) // _DSM: Device-Specific Method
{
If (!Arg2) { Return (Buffer () { 0x03 }) }
Return (Package ()
{
"built-in", Buffer () { 0 }
})
}
}
}
}
Try both.