Jump to content

Samsung XP941 DSDT Apple SSD Controller DSDT Patch


barren
 Share

2 posts in this topic

Recommended Posts

I recently got my XP941 to UEFI boot on my Gigabyte GA-Z87X-UD5 TH however the device was showing up in System Information as Generic AHCI device. As the XP941 is nearly identical to the flash SSD used in the new Apple iMacs and MacPros I decided to spoof it in DSDT I inserted this code into PCI0 in my DSDT (Bear in mind I have my XP941 on a Lycom adapter in PCI slot 1)  might be useful for others with this device..

            Device (PCI1) // Rename to appropriate slot number
            {
                Name (_ADR, 0x00010000)  // _ADR: Address change this depending on appropriate pci bridge address in IORegistryexplorer
                Device (SSD0)
                {
                    Name (_ADR, Zero)  // _ADR: Address
                    Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
                    {
                        Store (Package (0x02)
                            {
                                "device-id",  //spoofs Apple SSD Controller
                                Buffer (0x04)
                                {
                                     0x00, 0x16, 0x00, 0x00
                                }
                            }, Local0)
                        DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                        Return (Local0)
                    }
                }
            }
        }

Now it looks like this:

 

 

ssd.png

 

If this code could be improved please feel free to let me know. I'm also curious to know if something similar could be achieved using Fake id in Clover..

 

Link to comment
Share on other sites

Now Using: 

            Device (PEGP)
            {
                Name (_ADR, 0x00010000)  // _ADR: Address
                Device (SSD0)
                {
                    Name (_ADR, Zero)  // _ADR: Address
                    Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
                    {
                        Store (Package (0x02)
                            {
                                "device-id", 
                                Buffer (0x04)
                                {
                                     0x00, 0x16, 0x00, 0x00
                                }
                            }, Local0)
                        DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                        Return (Local0)
                    }

                    Device (PRT0)
                    {
                        Name (_ADR, 0xFFFF)  // _ADR: Address
                        Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
                        {
                            Store (Package (0x02)
                                {
                                    "io-device-location", 
                                    Buffer (0x04)
                                    {
                                        "SSD"
                                    }
                                }, Local0)
                            DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                            Return (Local0)
                        }

                        Method (_SDD, 1, NotSerialized)  // _SDD: Set Device Data
                        {
                            Name (GBU0, Buffer (0x07)
                            {
                                 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00
                            })
                            CreateByteField (GBU0, Zero, GB00)
                            CreateByteField (GBU0, One, GB01)
                            CreateByteField (GBU0, 0x02, GB02)
                            CreateByteField (GBU0, 0x03, GB03)
                            CreateByteField (GBU0, 0x04, GB04)
                            CreateByteField (GBU0, 0x05, GB05)
                            CreateByteField (GBU0, 0x06, GB06)
                            If (LEqual (SizeOf (Arg0), 0x0200))
                            {
                                CreateWordField (Arg0, 0x9C, W780)
                                If (And (W780, 0x08))
                                {
                                    Store (0x10, GB00)
                                    Store (0x03, GB01)
                                    Store (0xEF, GB06)
                                }
                                Else
                                {
                                    Store (0x90, GB00)
                                    Store (0x03, GB01)
                                    Store (0xEF, GB06)
                                }
                            }

                            Store (GBU0, GTF0)
                        }

                        Method (_GTF, 0, NotSerialized)  // _GTF: Get Task File
                        {
                            Return (GTF0)
                        }
                    }
                }

  • Like 1
Link to comment
Share on other sites

 Share

×
×
  • Create New...