Wednesday, November 17, 2010

Minimal DSDT Edits for Gigabyte Socket 1366 Motherboards


Since I posted Minimal DSDT Edits for Gigabyte Socket 1156 Motherboards I picked up a Gigabyte X58A-UD3R Rev 2.0 motherboard as part of the post tonymacx86 and I did for the CustoMac Pro 2010 project on his blog.

I started researching and testing what edits from my Socket 1156 post were or weren't needed on this board. The good news is that the majority of the edits carry over, but some are not needed. For example, we don't need to inject anything for the USB ports to be fully recognized. But there are a couple of required Socket 1366 specific edits.

The following is a guide for editing the extracted DSDT from the new Hackintosh-friendly BIOSes only. If you don't have a new Hackintosh-friendly BIOS, as I described in a previous post, you will have to have to manually edit the DSDT for the CMOS reset issue. You will also need to do the three required edits needed regardless of BIOS version. They are to include Method DTGP, add Return Package at the end of _WAK and fix the "Method local variable is not initialized (Local0)" error.

Now let’s review the common edits that are valid for the Socket 1356 and Socket 1156 motherboards.

First up are the cosmetic changes. Gigabyte uses generic device names in its DSDT instead of descriptive names like Apple does. One example is Gigabyte uses PX40 instead of LPCB for the LPC Interface Bridge. So the first thing we can do is to search for PX40 and do a global replace with LPCB. The next is to rename the System Management Bus (SMBus) device PX43 to SBUS. Next would be to rename Device (IDE1) to Device (SATA) and then within it rename Device (PRIM) to Device (PRT0) and Device (SECD) to Device (PRT1). The final cosmetic edits deal with USB. You can rename the devices to more appropriate ones as shown within this list:

Rename USB0 to UHC1
Rename USB1 to UHC2
Rename USB2 to UHC3
Rename USB3 to UHC4
Rename USB4 to UHC5
Rename USB5 to UHC6
Rename USBE to EHC1
Rename USE2 to EHC2

Next we need to add to Device (SBUS) a sub-device named Device (BUS0) as seen here:

                Device (BUS0)
                {
                    Name (_CID, "smbus")
                    Name (_ADR, 0x00)
                    Device (DVL0)
                    {
                        Name (_ADR, 0x57)
                        Name (_CID, "diagsvault")
                        Method (_DSM, 4, NotSerialized)
                        {
                            Store (Package (0x02)
                                  {
                                    "address",
                                     0x57
                                  }, Local0)
                            DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                            Return (Local0)
                        }
                    }
                }

The next edit is for audio. Gigabyte uses a device name of AZAL, so we need to do a global replace with HDEF. Then we need to add codec information to Device (HDEF). All that is required is to inject layout-id and PinConfigurations.

Here is an example of what needs to be added for a board using an ALC889 codec and using our Legacy889HDA.kext:

                Method (_DSM, 4, NotSerialized)
                {
                    Store (Package (0x04)
                        {
                            "layout-id",
                            Buffer (0x04)
                            {
                                0x79, 0x03, 0x00, 0x00
                            },
                            "PinConfigurations",
                            Buffer (Zero)
                            {
                            }
                        }, Local0)
                    DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                    Return (Local0)
                }

There is a problem with Audio break ups in 10.6.3 and later that can be corrected in the DSDT. The first is in Device (PIC) remove these two lines:

                IRQNoFlags ()
                {2}

The other fix for audio break ups is in Device (TMR) where Gigabyte has not yet added Hackintosh logic. We need to change:

                    Method (_CRS, 0, NotSerialized)
                    {
                        If (LGreaterEqual (OSFX, 0x03))
                        {
                            If (HPTF)
                            {
                                Return (ATT6)
                            }
                            Else
                            {
                                Return (ATT5)
                            }
                        }
                        Else
                        {
                            Return (ATT5)
                        }
                    }

To:
                    Method (_CRS, 0, NotSerialized)
                    {
                        Return (ATT6)
                    }

Gigabyte has not yet added Hackintosh logic to Device (HPET), so you will get kernel panics in AppleIntelCPUPowerManagement. The fix is easy; just change Method (_STA, 0, NotSerialized) to Return (0x0F) and to change Method (_CRS, 0, NotSerialized) to Return (ATT3).

The next edit allows use of the power button to put the computer to sleep.  In Device (PWRB) change Name (_HID, EisaId ("PNP0C0C")) to Name (_CID, EisaId ("PNP0C0C")).

One fix we can do in a Socket 1366 DSDT that I haven't been able to figure out how to do in a Socket 1156 DSDT, is cure the orange external drive icon issue. In Device (SATA) you need to add the following code:

                Method (_DSM, 4, NotSerialized)
                {
                    Store (Package (0x02)
                        {
                            "device-id",
                            Buffer (0x04)
                            {
                                0x81, 0x26, 0x00, 0x00
                            }
                        }, Local0)
                    DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                    Return (Local0)
                }

For the final edits, we can thank insanelymac user mm67. His modification enables shutdown without a kernel panic (KP). This is a two part edit, of which for the first part after:

    OperationRegion (APMP, SystemIO, 0xB2, 0x02)
    Field (APMP, ByteAcc, NoLock, Preserve)
    {
        APMC,   8,
        APMD,   8
    }

Insert:

    OperationRegion (PMRS, SystemIO, 0x0430, 0x01)
    Field (PMRS, ByteAcc, NoLock, Preserve)
    {
        , 4,
        SLPE, 1
    }

For the second part change:

    Method (\_PTS, 1, NotSerialized)
    {
        Or (Arg0, 0xF0, Local0)
        Store (Local0, DBG1)
        OSTP ()
        If (LEqual (Arg0, 0x01)) {}
        If (LEqual (Arg0, 0x03)) {}
        If (LEqual (Arg0, 0x05))
        {
            Store (0x99, SMIP)
        }

To:

    Method (\_PTS, 1, NotSerialized)
    {
        Or (Arg0, 0xF0, Local0)
        Store (Local0, DBG1)
        OSTP ()
        If (LEqual (Arg0, 0x01)) {}
        If (LEqual (Arg0, 0x03)) {}
        If (LEqual (Arg0, 0x05))
        {
            Store (0x99, SMIP)
            Store (0x00, SLPE)
            Sleep (0x10)
        }

So with these edits you'll have a fully functional Socket 1366 DSDT for Gigabyte motherboards. If you don't want to tackle these edits yourself, we maintain a database at tonymacx86 with all of these edits already applied. You will always find the latest versions listed here and can access the complete database here.

If you don't see your Gigabyte Socket 1156 or Socket 1366 motherboard or version listed. You can submit it on the tonymacx86 Forum by clicking here. The instructions are at the top of the topic. After we receive it and verify that it is vanilla, we will do the edits and upload it to the database.

For discussions on this and other topics, register today at the tonymacx86 Forum!

15 comments:

longtom said...

Wow! Great!
Any 1366 Mobo in particular preffered?
Thx!

Lnx2Mac said...

Nice post !

Not Shy said...

Hi MacMan,

Can I ask - does the comment on the "orange icons" mean anything for MultiBeast options?

MacManx86 said...

Not Shy,

That means you will no longer have to use IOAHCIBlockStorageInjector.kext or modify the drive icons.

Nigel said...

Are you planning to work your way through the existing X58A DSDTs, applying this new change set, or only apply the changes as new BIOS versions are released?

--nigel

MacManx86 said...

Nigel,

All of the Gigabyte X58 DSDTs in the database were already edited using this guide.

Anonymous said...

I took the GA-X58A-UD3R-F5 (rev.1) dsdt-file from database and changed the part for LPCB (PX40) to get back native speedstep with AsereBLN 1.1.9 bootloader:

Device (LPCB)
{
Name (_ADR, 0x001F0000)
OperationRegion (PREV, PCI_Config, 0x08, One)
Scope (\)
{
Field (\_SB.PCI0.LPCB.PREV, ByteAcc, NoLock, Preserve)
{
REV0, 8
}
}

changed to:

Device (LPCB)
{
Name (_ADR, 0x001F0000)
Method (_DSM, 4, NotSerialized)
{
Store (Package (0x02)
{
"device-id",
Buffer (0x04)
{
0x18, 0x3A, 0x00, 0x00
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}

OperationRegion (PREV, PCI_Config, 0x08, One)
Scope (\)
{
Field (\_SB.PCI0.LPCB.PREV, ByteAcc, NoLock, Preserve)
{
REV0, 8
}
}


After that my CPU-temps goes down from 48°C to 38°C (10°C cooler) in idle-mode. (with boxed cooler)
In bios I had all options on for energysaving. (C1-C7, EIST ect.)
Geekbench scores 10058 with i7 930 2.8 Ghz (default-clock-speed)

I dont know if this works for the new Chameleon RC5 beta bootloader too;
maybe it interferes with the generic speedstep of the Ch-RC5

I rearranged the part of the CPU at the beginning a bit, to shorten up the boot-time.
My DSDT starts now with:

Scope (_PR)
{
Processor (CPU0, 0x00, 0x00000410, 0x06) {}
...
...

After these steps all works perfect now!


Clairon

vasu said...

dear MacMan:

I have a Dell T5400 with dual quad xeons and after trying a number of bootloaders I was successful using NAWCOM's bootloader. Was able to install 10.6.3 on an internal SATA. then I did the 10.6.4 update and then installed multibeast 2.4.1. but after the reboot the system does not fully boot. it comes to the gray mac screen then I get a circle with line through it. perhaps it was some options I installed in multibeast? I am so close....any advice would be greatly appreciated....cheers

wavesequence from tonymacx86 said...

MacMan

You're going Fast forward too much for normal people like us.
Anyway your blog is sign of a genius. :-)

TechTonics said...

I found an inconsistency in the instructions. I obtained the dsdt.aml information from a live boot of Ubuntu, cat /proc/acpi/dsdt > dsdt.aml. There was no Device (SBUS) in the decompiled dsdt.dsl obtained in that manner, so there was no place to put Device (BUS0) to append after Device (SBUS). It appears that part of the instructions are missing. So I downloaded my appropriate dsdt.aml from the database and dissembled it and found the missing section (from the content given above). But it did not compile. Error 4063 - Object does not exist ^ (DTGP)
I found the cause, there was some more editing that wasn't covered in the above web tutorial at,

DefinitionBlock ("dsdt.aml", "DSDT", 1, "GBT ", "GBTUACPI", 0x00001000)
{
Name (TMAC, "X58A-UD5-2.0-FB DSDT edits by MacMan at tonymacx86.com 2010-09-22")
Method (DTGP, 5, NotSerialized)

found in the downloaded dsdt.aml file. Why I was trying to follow your tutorial above instead of just copying the dsdt database file was because I wanted to understand how DSDT.aml actually worked.

MacManx86 said...

TechTonics

You missed this in the post, "The next is to rename the System Management Bus (SMBus) device PX43 to SBUS. "

TechTonics said...

You are right.

Anonymous said...

Thanks. Will these edits work with an Asus P6P67 Deluxe?

Bryan P said...

Hi MacMan,

I tried following your guide with my MSI X58A board, i find some difficulty finding some of the things you listed with much difficulties. Could you point me in the right direction on how to edit my own dsdt?

Thank you very much

teo said...

Hi Macman, when I am using the DSDT for my X58A-UD3R mobo i get high pinched noise from firewire audio interface to my speakers.
Also some applications are producing noise that you can hear coming out of the mobo even if I have the speakers off! e.g Parallels or sometimes scrolling windows etc.
Even my usb tv tuner produces noise when I'm using it!
The systems is running silent when booting into windows or running OSX DSDT free.

Since you have the same mobo have you noticed anything similar?

Post a Comment