Jump to content

Patch for using NVMe under macOS Sierra is ready.


1,382 posts in this topic

Recommended Posts

The class-code spoof details are linked from the patch-nvme github README.

There is no need for me to repeat what is already written.

 

Fair enough! I'm going through the guide.

I ran into a hitch though: my drive is on a PCIe adapter and I'm missing some ACPI addresses. I'm looking through your guide for that, but I'm not sure how to process my specific case, considering I have a PCI(0000).PCI(0080).PCI(0000). I'm assuming I have to create an additional device for the first PCI(0000), which then the PCI(0800) can be assigned under, which in turn can get the last PCI(0000) (which we'll call SSD0) under itself. Would the following make sense?

// Inject bogus class-code for NVMe SSD to prevent IONVMeFamily.kext from loading
DefinitionBlock("", "SSDT", 2, "hack", "NVMe-Pcc", 0)
{
    External(_SB.PCI0.NPE3, DeviceObj)
    // create identities for the bridges @0, @8 and SSD0 @0
    Device(_SB.PCI0.NPE3.PBR0)
    {
        Name(_ADR, 0x00000000)  // corresponds to #PCI(0000), MSW byte reversed
        Device(PBR8) { Name(_ADR, 0) } // corresponds to #PCI(0800)
    }
    Device(_SB.PCI0.NPE3.PBR0.PBR8)
    {
        Name(_ADR, 0x00080000) // corresponds to #PCI(0800), MSW byte reversed
        Device(SSD0) { Name(_ADR, 0) } // corresponds to #PCI(0000)
    }
    // now we can inject the _DSM at the newly created ACPI path
    Method(_SB.PCI0.NPE3.PBR0.PBR8.SSD0._DSM, 4)
    {
        If (!Arg2) { Return (Buffer() { 0x03 } ) }
        Return(Package()
        {
            "class-code", Buffer() { 0xff, 0x08, 0x01, 0x00 },
            "built-in", Buffer() { 0 },
        })
    }
}
//EOF
Link to comment
Share on other sites

Which means these devices use a 4k block size instead of the 512 byte block size used by the Samsung drives...

No, 4k->512 byte cannot be excluded in my case. I double check block size from both Ubuntu 16.04 and Windows 10.

 

From what I can gather, this should work with the patch-nvme script because the ID of this drive is already there ("pci1987,5007", same as "Zotac Sonix PCIe 480gb)… I'm confused why it's not working… :(

 

UPDATE:

 

Rebooted again back with a freshly patched HackrNVMeFamily kext. Seems like I get some additional error info:

 

and then, similar as before:

 

Seems like a block size error, doesn't?

 

Hope this helps! :)

Try also 0x02, 0x04, 0x08. Use Piker's patch directly, with the additional patch I mention above.

 

Log out the NVMe information, you first need a beta version of IONVMeFamily.kext, boot with debug=0x12a, nvme=0x101, then use my maclog to log out all the information related to NVMe.

 

But it's very likely you don't try 0x02, 0x04, 0x08 as well. Because error line 182 occurs once when I nop the jne instruction at(0x0F 0x85 0x1C 0x01 0x00 0x00)

jne     0x41d1 

Good luck,

syscl

Link to comment
Share on other sites

Fair enough! I'm going through the guide.

I ran into a hitch though: my drive is on a PCIe adapter and I'm missing some ACPI addresses. I'm looking through your guide for that, but I'm not sure how to process my specific case, considering I have a PCI(0000).PCI(0080).PCI(0000). I'm assuming I have to create an additional device for the first PCI(0000), which then the PCI(0800) can be assigned under, which in turn can get the last PCI(0000) (which we'll call SSD0) under itself. Would the following make sense?

// Inject bogus class-code for NVMe SSD to prevent IONVMeFamily.kext from loading
DefinitionBlock("", "SSDT", 2, "hack", "NVMe-Pcc", 0)
{
    External(_SB.PCI0.NPE3, DeviceObj)
    // create identities for the bridges @0, @8 and SSD0 @0
    Device(_SB.PCI0.NPE3.PBR0)
    {
        Name(_ADR, 0x00000000)  // corresponds to #PCI(0000), MSW byte reversed
        Device(PBR8) { Name(_ADR, 0) } // corresponds to #PCI(0800)
    }
    Device(_SB.PCI0.NPE3.PBR0.PBR8)
    {
        Name(_ADR, 0x00080000) // corresponds to #PCI(0800), MSW byte reversed
        Device(SSD0) { Name(_ADR, 0) } // corresponds to #PCI(0000)
    }
    // now we can inject the _DSM at the newly created ACPI path
    Method(_SB.PCI0.NPE3.PBR0.PBR8.SSD0._DSM, 4)
    {
        If (!Arg2) { Return (Buffer() { 0x03 } ) }
        Return(Package()
        {
            "class-code", Buffer() { 0xff, 0x08, 0x01, 0x00 },
            "built-in", Buffer() { 0 },
        })
    }
}
//EOF

 

Yes... I think so... (except you defined the PBR8 device twice, which is an error)) the fact that it is behind two layers of PCI bridges is confirmed by your ioreg image in #844.

 

Note: Name(_ADR, 0x00000000) is the same as Name(_ADR, 0).

 

More like:

DefinitionBlock("", "SSDT", 2, "hack", "NVMe-Pcc", 0)
{
    External(_SB.PCI0.NPE3, DeviceObj)
    // create identities for the bridges @0, @8 and SSD0 @0
    Device(_SB.PCI0.NPE3.PBR0)
    {
        Name(_ADR, 0)  // corresponds to #PCI(0000)
        Device(PBR8) 
        { 
            Name(_ADR, 0x00080000)  // corresponds to second #PCI(0800), MSW byte reversed
            Device(SSD0) { Name(_ADR, 0) } // corresponds to #PCI(0000)
        } 
    }
    // now we can inject the _DSM at the newly created ACPI path
    Method(_SB.PCI0.NPE3.PBR0.PBR8.SSD0._DSM, 4)
    {
        If (!Arg2) { Return (Buffer() { 0x03 } ) }
        Return(Package()
        {
            "class-code", Buffer() { 0xff, 0x08, 0x01, 0x00 },
            "built-in", Buffer() { 0 },
        })
    }
}
//EOF
  • Like 1
Link to comment
Share on other sites

Yes... I think so... (except you defined the PBR8 device twice, which is an error)) the fact that it is behind two layers of PCI bridges is confirmed by your ioreg image in #844.

 

Note: Name(_ADR, 0x00000000) is the same as Name(_ADR, 0).

 

More like:

DefinitionBlock("", "SSDT", 2, "hack", "NVMe-Pcc", 0)
{
    External(_SB.PCI0.NPE3, DeviceObj)
    // create identities for the bridges @0, @8 and SSD0 @0
    Device(_SB.PCI0.NPE3.PBR0)
    {
        Name(_ADR, 0)  // corresponds to #PCI(0000)
        Device(PBR8) 
        { 
            Name(_ADR, 0x00080000)  // corresponds to second #PCI(0800), MSW byte reversed
            Device(SSD0) { Name(_ADR, 0) } // corresponds to #PCI(0000)
        } 
    }
    // now we can inject the _DSM at the newly created ACPI path
    Method(_SB.PCI0.NPE3.PBR0.PBR8.SSD0._DSM, 4)
    {
        If (!Arg2) { Return (Buffer() { 0x03 } ) }
        Return(Package()
        {
            "class-code", Buffer() { 0xff, 0x08, 0x01, 0x00 },
            "built-in", Buffer() { 0 },
        })
    }
}
//EOF

 

Ahhh! That makes more sense!! :D Fantastic!! Thank you so much for your help, sir! <3

Link to comment
Share on other sites

It worked! Thank you! Thank you! Thank you!

 

post-971287-0-85713400-1485445379_thumb.png post-971287-0-27822000-1485445357_thumb.png

 

 

try this one

Comment: IONVMeFamily Preferred Block Size 0x10 -> 0x01 (c) Pike R. Alpha 
Name:    IONVMeFamily
find:    <f6c1100f 851c0100 00>
replace: <f6c1010f 851c0100 00>

Works on my LiteOn who produce Plextor NVMe SSD..

 

I didn't touch any kexts, just added patches to Clover. Here is entire exact KextsToPatch content (I've stripped everything irrelevant from there before test) for anyone else who is still struggling with Plextor.

		<key>KextsToPatch</key>
		<array>
			<dict>
				<key>Comment</key>
				<string>IONVMeFamily Preferred Block Size 0x10 -> 0x01 (c) Pike R. Alpha</string>
				<key>Disabled</key>
				<false/>
				<key>Find</key>
				<data>
				9sEQD4UcAQAA
				</data>
				<key>Name</key>
				<string>IONVMeFamily</string>
				<key>Replace</key>
				<data>
				9sEBD4UcAQAA
				</data>
			</dict>
			<dict>
				<key>Comment</key>
				<string>IONVMeFamily Pike R. Alpha Patch#1</string>
				<key>Disabled</key>
				<false/>
				<key>Name</key>
				<string>IONVMeFamily</string>
				<key>Find</key>
				<data>ibP4AgAAweAMBQAQAACJgw==</data>
				<key>Replace</key>
				<data>ibP4AgAAweAJBQAQAACJgw==</data>
			</dict>
			<dict>
				<key>Comment</key>
				<string>IONVMeFamily Pike R. Alpha Patch#2</string>
				<key>Disabled</key>
				<false/>
				<key>Name</key>
				<string>IONVMeFamily</string>
				<key>Find</key>
				<data>D7aMiIIAAACD+QwPhTIBAA==</data>
				<key>Replace</key>
				<data>D7aMiIIAAACD+QkPhTIBAA==</data>
			</dict>
			<dict>
				<key>Comment</key>
				<string>IONVMeFamily Pike R. Alpha Patch#3</string>
				<key>Disabled</key>
				<false/>
				<key>Name</key>
				<string>IONVMeFamily</string>
				<key>Find</key>
				<data>AMeDpAAAAAAQAABIi0gISA==</data>
				<key>Replace</key>
				<data>AMeDpAAAAAACAABIi0gISA==</data>
			</dict>
			<dict>
				<key>Comment</key>
				<string>IONVMeFamily Pike R. Alpha Patch#4</string>
				<key>Disabled</key>
				<false/>
				<key>Name</key>
				<string>IONVMeFamily</string>
				<key>Find</key>
				<data>SYnGTYX2dGFBwecMSWP/vg==</data>
				<key>Replace</key>
				<data>SYnGTYX2dGFBwecJSWP/vg==</data>
			</dict>
			<dict>
				<key>Comment</key>
				<string>IONVMeFamily Pike R. Alpha Patch#5</string>
				<key>Disabled</key>
				<false/>
				<key>Name</key>
				<string>IONVMeFamily</string>
				<key>Find</key>
				<data>hv8PAABIwegMD7cPgeH/Dw==</data>
				<key>Replace</key>
				<data>hv8PAABIwegJD7cPgeH/Dw==</data>
			</dict>
			<dict>
				<key>Comment</key>
				<string>IONVMeFamily Pike R. Alpha Patch#6_7</string>
				<key>Disabled</key>
				<false/>
				<key>Name</key>
				<string>IONVMeFamily</string>
				<key>Find</key>
				<data>icGB4f8PAABIAdFIgfn/DwAAdzs=</data>
				<key>Replace</key>
				<data>icGB4f8BAABIAdFIgfn/AQAAdzs=</data>
			</dict>
			<dict>
				<key>Comment</key>
				<string>IONVMeFamily Pike R. Alpha Patch#8</string>
				<key>Disabled</key>
				<false/>
				<key>Name</key>
				<string>IONVMeFamily</string>
				<key>Find</key>
				<data>SYHF/w8AAEnB7QxJiwQkSA==</data>
				<key>Replace</key>
				<data>SYHF/w8AAEnB7QlJiwQkSA==</data>
			</dict>
			<dict>
				<key>Comment</key>
				<string>IONVMeFamily Pike R. Alpha Patch#9_10</string>
				<key>Disabled</key>
				<false/>
				<key>Name</key>
				<string>IONVMeFamily</string>
				<key>Find</key>
				<data>BgIAAEyNuAAQAABMiflIgeEA8P//SYmGGgEAAEmJjiIBAABBvAAQAABJKfQ=</data>
				<key>Replace</key>
				<data>BgIAAEyNuAACAABMiflIgeEA8P//SYmGGgEAAEmJjiIBAABBvAACAABJKfQ=</data>
			</dict>
			<dict>
				<key>Comment</key>
				<string>IONVMeFamily Pike R. Alpha Patch#11</string>
				<key>Disabled</key>
				<false/>
				<key>Name</key>
				<string>IONVMeFamily</string>
				<key>Find</key>
				<data>AABJiY4iAQAAugAQAABIKQ==</data>
				<key>Replace</key>
				<data>AABJiY4iAQAAugACAABIKQ==</data>
			</dict>
			<dict>
				<key>Comment</key>
				<string>IONVMeFamily Pike R. Alpha Patch#12</string>
				<key>Disabled</key>
				<false/>
				<key>Name</key>
				<string>IONVMeFamily</string>
				<key>Find</key>
				<data>yAAAAEkp17gAEAAATYskJA==</data>
				<key>Replace</key>
				<data>yAAAAEkp17gAAgAATYskJA==</data>
			</dict>
			<dict>
				<key>Comment</key>
				<string>IONVMeFamily Pike R. Alpha Patch#13</string>
				<key>Disabled</key>
				<false/>
				<key>Name</key>
				<string>IONVMeFamily</string>
				<key>Find</key>
				<data>4b+AQBUGTYnWugAQAABFMQ==</data>
				<key>Replace</key>
				<data>4b+AQBUGTYnWugACAABFMQ==</data>
			</dict>
			<dict>
				<key>Comment</key>
				<string>IONVMeFamily Pike R. Alpha Patch#14</string>
				<key>Disabled</key>
				<false/>
				<key>Name</key>
				<string>IONVMeFamily</string>
				<key>Find</key>
				<data>iWTY+EmBxAAQAABJgccA8A==</data>
				<key>Replace</key>
				<data>iWTY+EmBxAACAABJgccA8A==</data>
			</dict>
			<dict>
				<key>Comment</key>
				<string>IONVMeFamily Pike R. Alpha Patch#15</string>
				<key>Disabled</key>
				<false/>
				<key>Name</key>
				<string>IONVMeFamily</string>
				<key>Find</key>
				<data>Bf8PAABIwegMZvfB/w8PlQ==</data>
				<key>Replace</key>
				<data>Bf8PAABIwegJZvfB/w8PlQ==</data>
			</dict>
			<dict>
				<key>Comment</key>
				<string>IONVMeFamily Pike R. Alpha Patch#16</string>
				<key>Disabled</key>
				<false/>
				<key>Name</key>
				<string>IONVMeFamily</string>
				<key>Find</key>
				<data>weIIQQ+2wcHgDEQJ0EQJwA==</data>
				<key>Replace</key>
				<data>weIIQQ+2wcHgCUQJ0EQJwA==</data>
			</dict>
			<dict>
				<key>Comment</key>
				<string>IONVMeFamily Pike R. Alpha Patch#17</string>
				<key>Disabled</key>
				<false/>
				<key>Name</key>
				<string>IONVMeFamily</string>
				<key>Find</key>
				<data>RYTJD5XAD7bAweAMRAnYRA==</data>
				<key>Replace</key>
				<data>RYTJD5XAD7bAweAJRAnYRA==</data>
			</dict>
		</array>
  • Like 1
Link to comment
Share on other sites

It worked! Thank you! Thank you! Thank you!

 

attachicon.gifСнимок экрана 2017-01-26 в 18.46.05.png attachicon.gifСнимок экрана 2017-01-26 в 18.48.01.png

 

 

 

I didn't touch any kexts, just added patches to Clover. Here is entire exact KextsToPatch content (I've stripped everything irrelevant from there before test) for anyone else who is still struggling with Plextor.

		<key>KextsToPatch</key>
		<array>
			<dict>
				<key>Comment</key>
				<string>IONVMeFamily Preferred Block Size 0x10 -> 0x01 (c) Pike R. Alpha</string>
				<key>Disabled</key>
				<false/>
				<key>Find</key>
				<data>
				9sEQD4UcAQAA
				</data>
				<key>Name</key>
				<string>IONVMeFamily</string>
				<key>Replace</key>
				<data>
				9sEBD4UcAQAA
				</data>
			</dict>
			<dict>
				<key>Comment</key>
				<string>IONVMeFamily Pike R. Alpha Patch#1</string>
				<key>Disabled</key>
				<false/>
				<key>Name</key>
				<string>IONVMeFamily</string>
				<key>Find</key>
				<data>ibP4AgAAweAMBQAQAACJgw==</data>
				<key>Replace</key>
				<data>ibP4AgAAweAJBQAQAACJgw==</data>
			</dict>
			<dict>
				<key>Comment</key>
				<string>IONVMeFamily Pike R. Alpha Patch#2</string>
				<key>Disabled</key>
				<false/>
				<key>Name</key>
				<string>IONVMeFamily</string>
				<key>Find</key>
				<data>D7aMiIIAAACD+QwPhTIBAA==</data>
				<key>Replace</key>
				<data>D7aMiIIAAACD+QkPhTIBAA==</data>
			</dict>
			<dict>
				<key>Comment</key>
				<string>IONVMeFamily Pike R. Alpha Patch#3</string>
				<key>Disabled</key>
				<false/>
				<key>Name</key>
				<string>IONVMeFamily</string>
				<key>Find</key>
				<data>AMeDpAAAAAAQAABIi0gISA==</data>
				<key>Replace</key>
				<data>AMeDpAAAAAACAABIi0gISA==</data>
			</dict>
			<dict>
				<key>Comment</key>
				<string>IONVMeFamily Pike R. Alpha Patch#4</string>
				<key>Disabled</key>
				<false/>
				<key>Name</key>
				<string>IONVMeFamily</string>
				<key>Find</key>
				<data>SYnGTYX2dGFBwecMSWP/vg==</data>
				<key>Replace</key>
				<data>SYnGTYX2dGFBwecJSWP/vg==</data>
			</dict>
			<dict>
				<key>Comment</key>
				<string>IONVMeFamily Pike R. Alpha Patch#5</string>
				<key>Disabled</key>
				<false/>
				<key>Name</key>
				<string>IONVMeFamily</string>
				<key>Find</key>
				<data>hv8PAABIwegMD7cPgeH/Dw==</data>
				<key>Replace</key>
				<data>hv8PAABIwegJD7cPgeH/Dw==</data>
			</dict>
			<dict>
				<key>Comment</key>
				<string>IONVMeFamily Pike R. Alpha Patch#6_7</string>
				<key>Disabled</key>
				<false/>
				<key>Name</key>
				<string>IONVMeFamily</string>
				<key>Find</key>
				<data>icGB4f8PAABIAdFIgfn/DwAAdzs=</data>
				<key>Replace</key>
				<data>icGB4f8BAABIAdFIgfn/AQAAdzs=</data>
			</dict>
			<dict>
				<key>Comment</key>
				<string>IONVMeFamily Pike R. Alpha Patch#8</string>
				<key>Disabled</key>
				<false/>
				<key>Name</key>
				<string>IONVMeFamily</string>
				<key>Find</key>
				<data>SYHF/w8AAEnB7QxJiwQkSA==</data>
				<key>Replace</key>
				<data>SYHF/w8AAEnB7QlJiwQkSA==</data>
			</dict>
			<dict>
				<key>Comment</key>
				<string>IONVMeFamily Pike R. Alpha Patch#9_10</string>
				<key>Disabled</key>
				<false/>
				<key>Name</key>
				<string>IONVMeFamily</string>
				<key>Find</key>
				<data>BgIAAEyNuAAQAABMiflIgeEA8P//SYmGGgEAAEmJjiIBAABBvAAQAABJKfQ=</data>
				<key>Replace</key>
				<data>BgIAAEyNuAACAABMiflIgeEA8P//SYmGGgEAAEmJjiIBAABBvAACAABJKfQ=</data>
			</dict>
			<dict>
				<key>Comment</key>
				<string>IONVMeFamily Pike R. Alpha Patch#11</string>
				<key>Disabled</key>
				<false/>
				<key>Name</key>
				<string>IONVMeFamily</string>
				<key>Find</key>
				<data>AABJiY4iAQAAugAQAABIKQ==</data>
				<key>Replace</key>
				<data>AABJiY4iAQAAugACAABIKQ==</data>
			</dict>
			<dict>
				<key>Comment</key>
				<string>IONVMeFamily Pike R. Alpha Patch#12</string>
				<key>Disabled</key>
				<false/>
				<key>Name</key>
				<string>IONVMeFamily</string>
				<key>Find</key>
				<data>yAAAAEkp17gAEAAATYskJA==</data>
				<key>Replace</key>
				<data>yAAAAEkp17gAAgAATYskJA==</data>
			</dict>
			<dict>
				<key>Comment</key>
				<string>IONVMeFamily Pike R. Alpha Patch#13</string>
				<key>Disabled</key>
				<false/>
				<key>Name</key>
				<string>IONVMeFamily</string>
				<key>Find</key>
				<data>4b+AQBUGTYnWugAQAABFMQ==</data>
				<key>Replace</key>
				<data>4b+AQBUGTYnWugACAABFMQ==</data>
			</dict>
			<dict>
				<key>Comment</key>
				<string>IONVMeFamily Pike R. Alpha Patch#14</string>
				<key>Disabled</key>
				<false/>
				<key>Name</key>
				<string>IONVMeFamily</string>
				<key>Find</key>
				<data>iWTY+EmBxAAQAABJgccA8A==</data>
				<key>Replace</key>
				<data>iWTY+EmBxAACAABJgccA8A==</data>
			</dict>
			<dict>
				<key>Comment</key>
				<string>IONVMeFamily Pike R. Alpha Patch#15</string>
				<key>Disabled</key>
				<false/>
				<key>Name</key>
				<string>IONVMeFamily</string>
				<key>Find</key>
				<data>Bf8PAABIwegMZvfB/w8PlQ==</data>
				<key>Replace</key>
				<data>Bf8PAABIwegJZvfB/w8PlQ==</data>
			</dict>
			<dict>
				<key>Comment</key>
				<string>IONVMeFamily Pike R. Alpha Patch#16</string>
				<key>Disabled</key>
				<false/>
				<key>Name</key>
				<string>IONVMeFamily</string>
				<key>Find</key>
				<data>weIIQQ+2wcHgDEQJ0EQJwA==</data>
				<key>Replace</key>
				<data>weIIQQ+2wcHgCUQJ0EQJwA==</data>
			</dict>
			<dict>
				<key>Comment</key>
				<string>IONVMeFamily Pike R. Alpha Patch#17</string>
				<key>Disabled</key>
				<false/>
				<key>Name</key>
				<string>IONVMeFamily</string>
				<key>Find</key>
				<data>RYTJD5XAD7bAweAMRAnYRA==</data>
				<key>Replace</key>
				<data>RYTJD5XAD7bAweAJRAnYRA==</data>
			</dict>
		</array>

 

So, in this case you needed both the set of 4k->512byte block size patches *and* the preferred blocksize 0x10->0x01 patch.

Best way to deal with this scenario is HackrNVMeFamily with class-code spoof + the additional 0x10->0x01 patch.

 

Why? Because the possibility of a partial patch (due to the 15-patch set) during an update is likely.

  • Like 1
Link to comment
Share on other sites

So, in this case you needed both the set of 4k->512byte block size patches *and* the preferred blocksize 0x10->0x01 patch.

Best way to deal with this scenario is HackrNVMeFamily with class-code spoof + the additional 0x10->0x01 patch.

 

Why? Because the possibility of a partial patch (due to the 15-patch set) during an update is likely.

I wanna try in my new notebook

 

sent from my iPhone 7 Plus

Link to comment
Share on other sites

 

change the value 0x10 into 0x01 or 0x02, 0x04 and 0x08 to see which one works for your drive.

 

 

For example, here's the patch I found for LiteOn CX2-1024(0x10 -> 0x01)

Comment: IONVMeFamily Preferred Block Size 0x10 -> 0x01 (c) Pike R. Alpha 
Name:    IONVMeFamily
find:    <f6c1100f 851c0100 00>
replace: <f6c1010f 851c0100 00>

Notice, I just use 10.12.3 with Piker's patch directly. I do not use any other NVMe script patches from any other.

 

syscl

 

Thank You. Working great (PLEXTOR PX-128M8PeG)

post-916820-0-26607200-1485452171_thumb.png

  • Like 1
Link to comment
Share on other sites

Thank You. Working great (PLEXTOR PX-128M8PeG)

attachicon.gifZrzut ekranu 2017-01-26 o 18.41.11.png

Hi, Matthew82 & DMMA:

Thanks for your config-nvme.plist which is also working for Plextor 256M8PeG M.2 SSD in my Asus Z87 Deluxe/Dual hackintosh at 10.12.2(16C68) & 10.12.3(16D32) now !

But it did not work at 10.11.6(15G31).

The only pity is it's shown as an external SSD instead of internal one.

post-70188-0-63914000-1485519184_thumb.png

post-70188-0-18424600-1485519338_thumb.png

Link to comment
Share on other sites

Hi, Matthew82 & DMMA:

Thanks for your config-nvme.plist which is also working for Plextor 256M8PeG M.2 SSD in my Asus Z87 Deluxe/Dual hackintosh at 10.12.2(16C68) & 10.12.3(16D32) now !

But it did not work at 10.11.6(15G31).

The only pity is it's shown as an external SSD instead of internal one.

The patch would need to be different for 10.11.x.

Adding an ACPI identity (with an SSDT) for the NVMe device and injecting "built-in" should fix the internal vs. external problem.

  • Like 1
Link to comment
Share on other sites

Hi, Matthew82 & DMMA:

Thanks for your config-nvme.plist which is also working for Plextor 256M8PeG M.2 SSD in my Asus Z87 Deluxe/Dual hackintosh at 10.12.2(16C68) & 10.12.3(16D32) now !

But it did not work at 10.11.6(15G31).

The only pity is it's shown as an external SSD instead of internal one.

 

10.11.x, try this one

Comment: Preferred Block Size 0x10 -> 0x01 (c) Pike R. Alpha implement by syscl for 10.11.x
Name:    IONVMeFamily
MatchOS: 10.11.x
find:    <f6c11075 6b>
replace: <f6c10175 6b>

Through Clover config.plist the raw format will be

<dict>
				<key>Comment</key>
				<string>Preferred Block Size 0x10 -> 0x01 (c) Pike R. Alpha implement by syscl for 10.11.x</string>
				<key>Disabled</key>
				<true/>
				<key>Find</key>
				<data>
				9sEQdWs=
				</data>
				<key>MatchOS</key>
				<string>10.11.x</string>
				<key>Name</key>
				<string>IONVMeFamily</string>
				<key>Replace</key>
				<data>
				9sEBdWs=
				</data>
			</dict>

syscl

  • Like 1
Link to comment
Share on other sites

Hi. I found that the external icon patch had been changed under 10.12.4 16E144f.

This is for 10.12.4. FYI.

48 85 C0 74 07 80 8B 18 01 00 00 10 ==> 90 90 90 90 90 80 8B 18 01 00 00 10      # 10.12.4+

Previous the $8 was 0x08 and now it’s 0x18.

 

PMheart

 

==========

 

Update:

@jsl for 10.11 you may need this one to fix the external icons issue:

48 85 C0 74 07 80 8B 00 01 00 ==> 90 90 90 90 90 80 8B 00 01 00              # 10.11.x

 

Note: The patches are for IONVMeFamily.

 

Edit: Pike has provided the external patch already! Deprecated.

 

PMheart

Edited by PMheart
  • Like 1
Link to comment
Share on other sites

10.11.x, try this one

Comment: Preferred Block Size 0x10 -> 0x01 (c) Pike R. Alpha implement by syscl for 10.11.x
Name:    IONVMeFamily
MatchOS: 10.11.x
find:    <f6c11075 6b>
replace: <f6c10175 6b>

Through Clover config.plist the raw format will be

<dict>
				<key>Comment</key>
				<string>Preferred Block Size 0x10 -> 0x01 (c) Pike R. Alpha implement by syscl for 10.11.x</string>
				<key>Disabled</key>
				<true/>
				<key>Find</key>
				<data>
				9sEQdWs=
				</data>
				<key>MatchOS</key>
				<string>10.11.x</string>
				<key>Name</key>
				<string>IONVMeFamily</string>
				<key>Replace</key>
				<data>
				9sEBdWs=
				</data>
			</dict>

syscl

Thanks for your advice and help.

Is this patch in config.plist to replace previous one in Post# 858 ?

Or it is an extra one for 10.11.x ?

Because I have tried both methods and still not working yet at 10.11.6

Link to comment
Share on other sites

Hi. I found that the external icon patch had been changed under 10.12.4 16E144f.

This is for 10.12.4. FYI.

48 85 C0 74 07 80 8B 18 01 00 00 10 ==> 90 90 90 90 90 80 8B 18 01 00 00 10      # 10.12.4+

Previous the $8 was 0x08 and now it’s 0x18.

 

PMheart

 

==========

 

Update:

@jsl for 10.11 you may need this one to fix the external icons issue:

48 85 C0 74 07 80 8B 00 01 00 ==> 90 90 90 90 90 80 8B 00 01 00              # 10.11.x

 

Note: The patches are for IONVMeFamily.

 

PMheart

Thanks for your advice and help.

The following patch in config.plist solved my previous yellowish external HD icon issue now.

            <dict>

                <key>Comment</key>

                <string>IONVMeFamily Pike R. Alpha Patch#External</string>

                <key>Disabled</key>

                <false/>

                <key>Find</key>

                <data>

                SIXAdAeAiwgBAAAQ

                </data>

                <key>Name</key>

                <string>IONVMeFamily</string>

                <key>Replace</key>

                <data>

                kJCQkJCAiwgBAAAQ

                </data>

            </dict>

 

Link to comment
Share on other sites

Thanks for your advice and help.

The following patch in config.plist solved my previous yellowish external HD icon issue now.

            <dict>

                <key>Comment</key>

                <string>IONVMeFamily Pike R. Alpha Patch#External</string>

                <key>Disabled</key>

                <false/>

                <key>Find</key>

                <data>

                SIXAdAeAiwgBAAAQ

                </data>

                <key>Name</key>

                <string>IONVMeFamily</string>

                <key>Replace</key>

                <data>

                kJCQkJCAiwgBAAAQ

                </data>

            </dict>

 

Glad to hear that. Congratulations!

Oops. Pike has already provided that!

Link to comment
Share on other sites

Thanks for your advice and help.

Is this patch in config.plist to replace previous one in Post# 858 ?

Or it is an extra one for 10.11.x ?

Because I have tried both methods and still not working yet at 10.11.6

Seems you do not implement NVMe patches completely. 

 

10.11.x use different NVMe patches, first you need to apply patches 10.11.x then add my patch to Clover. Notice my patch MatchOS=10.11.x, thus you don't need to worry about it will be applied to 10.12.x

 

syscl

Link to comment
Share on other sites

Hi. I found that the external icon patch had been changed under 10.12.4 16E144f.

This is for 10.12.4. FYI.

48 85 C0 74 07 80 8B 18 01 00 00 10 ==> 90 90 90 90 90 80 8B 18 01 00 00 10      # 10.12.4+[/size]

Previous the $8 was 0x08 and now it’s 0x18.[/size]

 

PMheart[/size]

 

==========

 

Update:

@jsl for 10.11 you may need this one to fix the external icons issue:

48 85 C0 74 07 80 8B 00 01 00 ==> 90 90 90 90 90 80 8B 00 01 00              # 10.11.x

 

Note: The patches are for IONVMeFamily.

 

Edit: Pike has provided the external patch already! Deprecated.

 

PMheart

Less trouble and won't break in future versions if you just inject "built-in"...

  • Like 1
Link to comment
Share on other sites

Yup. I think so.

But sometimes bin-patch could be an easier way... And not everything can be done via properties injection.

I never claimed "everything" could be done with property injection.

But this specific problem, definitely yes.

  • Like 1
Link to comment
Share on other sites

I prefer doing some hacks to editing ACPI. Too many ACPI tables will slow down the startup speed.

I have no issue with ACPI tables slowing the boot process.

Such add-on SSDTs tend to be extremely small. My SSDT-NVMe-Pcc.aml is 157 bytes. I don't, for one second, believe it will have material impact on boot speed.

  • Like 1
Link to comment
Share on other sites

I have no issue with ACPI tables slowing the boot process.

Such add-on SSDTs tend to be extremely small. My SSDT-NVMe-Pcc.aml is 157 bytes. I don't, for one second, believe it will have material impact on boot speed.

Revogirl [RIP] mentioned it a long time ago... http://www.insanelymac.com/forum/topic/253642-dsdt-for-asus-p8p67-m-pro/page-1

Adding too many SSDTs besides DSDT is not good enough. The original DSDT is somewhat complicated and you even add more to AppleACPIPlatform...

I think we have divergences here...

Link to comment
Share on other sites

Revogirl [RIP] mentioned it a long time ago... http://www.insanelymac.com/forum/topic/253642-dsdt-for-asus-p8p67-m-pro/page-1

Adding too many SSDTs besides DSDT is not good enough. The original DSDT is somewhat complicated and you even add more to AppleACPIPlatform...

I think we have divergences here...

I'll let you know when I see some material difference with my 157 byte SSDT.

Link to comment
Share on other sites

I'll let you know when I see some material difference with my 157 byte SSDT.

Why not do this by editing DSDT? If all you want is avoiding patching DSDT and then you may do this by patching ACPI dynamically instead of tiny SSDT IMHO.

Anyway. Both are good and there's no absolute right or wrong, is there? :D  Just keep your preference.

  • Like 1
Link to comment
Share on other sites

Why not do this by editing DSDT? If all you want is avoiding patching DSDT and then you may do this by patching ACPI dynamically instead of tiny SSDT IMHO.

I use ACPI hotpatch... no DSDT.aml in my ACPI/patched.

 

Anyway. Both are good and there's no absolute right or wrong, is there? :D  Just keep your preference.

Correct. I prefer to not have to create new patches when the binary changes in system updates, unless that is the only way to accomplish the fix.

  • Like 1
Link to comment
Share on other sites

 Share

×
×
  • Create New...