Hi ReHabMan,
I'm try to get the NVMe spoof method to work on my Desktop system but for some reason i cant get the spoof _DSM method to attach to one of my NVME SSD's ( i have two NVMe's installed)
Windows is installed on Samsung 850 EVO Nvme which has a ACPI path of _SB.PCI0.RP01.PXSX so that was easy .. and straight forward and the spoof method worked fine giving it a class code of FF,08,00,01
However OSX is installed on a Samsung PM961 which has a ACPI Path of _SB.PCI0.PEG2.PEGP .. it also has a PID/VID of 144d,a804 and thus requires the extra spoof parameters ..
View attachment 312014 View attachment 312013
I followed your guide but at the moment the spoofing for the PM961 SSD's is not working ?
Is it necessary to create a PXSX device name for it or can i use the ACPI/BIOS name path as is ?
This is my SSDT spoof code :-
Code:
/*
* Intel ACPI Component Architecture
* AML/ASL+ Disassembler version 20161117-64(RM)
* Copyright (c) 2000 - 2016 Intel Corporation
*
* Disassembling to non-symbolic legacy ASL operators
*
* Disassembly of iASL7fX4BI.aml, Wed Jan 24 18:26:53 2018
*
* Original Table Header:
* Signature "SSDT"
* Length 0x00000130 (304)
* Revision 0x02
* Checksum 0x4A
* OEM ID "hack"
* OEM Table ID "NVMe-Pcc"
* OEM Revision 0x00000000 (0)
* Compiler ID "INTL"
* Compiler Version 0x20161117 (538317079)
*/
DefinitionBlock ("", "SSDT", 2, "hack", "NVMe-Pcc", 0x00000000)
{
External (_SB_.PCI0.PEG2.PEGP, DeviceObj) // (from opcode)
External (_SB_.PCI0.RP01.PXSX, DeviceObj) // (from opcode)
Method (_SB.PCI0.RP01.PXSX._DSM, 4, NotSerialized) // _DSM: Device-Specific Method
{
If (LNot (Arg2))
{
Return (Buffer (One)
{
0x03
})
}
Return (Package (0x04)
{
"class-code",
Buffer (0x04)
{
0xFF, 0x08, 0x01, 0x00
},
"built-in",
Buffer (One)
{
0x00
}
})
}
Method (_SB.PCI0.PEG2.PEGP._DSM, 4, NotSerialized) // _DSM: Device-Specific Method
{
If (LNot (Arg2))
{
Return (Buffer (One)
{
0x03
})
}
Return (Package (0x0A)
{
"class-code",
Buffer (0x04)
{
0xFF, 0x08, 0x01, 0x00
},
"built-in",
Buffer (One)
{
0x00
},
"compatible",
Buffer (0x0D)
{
"pci144d,a801"
},
"IOName",
"pci144d,a801",
"name",
Buffer (0x0D)
{
"pci144d,a801"
}
})
}
}
I've added it to Clovers patched ACPI folder and to the sorted SSDT load order ...
Clover's boot log shows that its been inserted ok :-
Code:
68:090 0:000 === [ ACPIPatchedAML ] ====================================
68:090 0:000 Sorted
68:090 0:000 Inserting table[0]:SSDT.aml from EFI\CLOVER\ACPI\patched ... Success
68:092 0:001 Inserting table[1]:SSDT-0.aml from EFI\CLOVER\ACPI\patched ... Success
68:093 0:001 Inserting table[2]:SSDT_NVMe-Pcc.aml from EFI\CLOVER\ACPI\patched ... Success
68:094 0:001 CPUBase=0 and ApicCPUBase=1 ApicCPUNum=8
Here is an IOreg dump of the device after the above ssdt has been loaded
View attachment 308209
As you can see it still has the old PID/VID ACPI Name and Class-Code ? so it looks like the ssdt DSM method has not taken ?
Do i need to create a PXSX device or have i missed something from the ACPI path ?
There is no _DSM method defined for _SB.PCI0.PEG2.PEGP in the systems DSDT, however there is a _DSM method defined for it in a SSDT called SSDT-4-SaSsdt ..... but i have the Clover option "Drop OEM" checked so this should not be being loaded which is indicated as being the case in the Clover boot log :-
Code:
=== [ DropSSDT ] ==========================================
10:594 0:000 Drop tables from Xsdt, SIGN=SSDT TableID= Length=0
10:594 0:000 Xsdt has tables count=13
10:594 0:000 Table: SSDT CpuSsdt 2932 dropped
10:594 0:000 Table: SSDT LakeTiny 455 dropped
10:594 0:000 Table: SSDT SataTabl 877 dropped
10:594 0:000 Table: SSDT SaSsdt 23094 dropped
10:594 0:000 Table: SSDT IsctTabl 1401 dropped
If you could confirm that my SSDT code is correct and should work then that's one less thing to work on but right now i am at a loss as to why the new _DSM method defined in my spoof ssdt is not working for the Samsung PM961 while it works perfect for the EVO 850 ... as such i can only assume it is something to do with the non standard ACPI path ?
For now I've renamed IONVMeFamily.kext to stop it from being included in the kext cache ... and thus working around the problem but would like to get the spoof method working as updates are a real pain if the update re-installs IONVMeFamily.kext
Can supply further debug files if required but i think the above should cover my question ?
Cheers
Jay