Showing posts with label P55. Show all posts
Showing posts with label P55. Show all posts

Monday, July 11, 2011

Minimal DSDT Edits for Gigabyte Socket 1155 Motherboards


I started researching and testing what edits from my New Minimal DSDT Edits for Gigabyte Socket 1156 Motherboards were or weren't needed on the Socket 1155 boards. 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 1155 specific edits.

The following is a guide for editing the extracted DSDT. The first thing you will need to do is the required edits so that the DSDT will compile. They are:

1) "Reserved method must return a value"

 Add to the end of _WAK

        Return (Package (0x02)
        {
            0x00,
            0x00
        })
     
2) "Method local variable is not initialized"

 In Scope (\_SI)

Change both:

  Store (Local0, Local0)
 
 To:

 Store (0x00, Local0)

3) "Use of compiler reserved name"

 Replace all _T_ with T_

4) "Effective AML package length is zero"

 Change:

  Name (RPMV, Package (0x00) {})

 To:

  Name (RPMV, Package (Zero) {})

5) "Result is not used, operator has no effect"

 Change:

  Or (0x03, PARM)

 To:

  Or (PARM, 0x03, PARM)

The first required edit is to include Method DTGP for passing configuration parameters to OS X. Next up is renaming device names to follow Apple's conventions. They are renaming all PX40 to LPCB, PX43 to SBUS, all AZAL to HDEF, Device (IDE1) to Device (SATA) and it's sub-device ports from Device (PRIM) to Device (PRT0) and Device (SECD) to Device (PRT1), deleting Device (IDE2) (unused) and finally renaming the USB device names, USBE to EHC1 and USE2 to EHC2

Now that we have all of the correct device names now we need to add some missing information. For the SMBus we need to add the following to Device (SBUS) as a nested sub-device:

                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)
                        }
                    }
                }

For ALC8xxHDA to work correctly we need to inject into Device (HDEF) codec information. Here is an example of what needs to be added for a board using and an ALC889 codec:

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

For other codecs you will need to change the layout-id to match your codec.

There is a problem with Audio break ups 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 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)
                    }

The next fix is to prevent kernel panics in AppleIntelCPUPowerManagement at boot time. This fix is easy; just change Method (_STA, 0, NotSerialized) to Return (0x0F) and to change Method (_CRS, 0, NotSerialized) to Return (ATT3).

The final edit is to allow you to use the power button to put the computer to sleep.  In Device (PWRB) change Name (_HID, EisaId ("PNP0C0C")) to Name (_CID, EisaId ("PNP0C0C")).

If you don't want to bother with these edits, you can download pre-edited DSDTs from the tonymacx86.com DSDT Database.



For discussions on this and other topics, register today at http://www.tonymacx86.com/

Sunday, July 18, 2010

Typo in New Minimal DSDT Edits for Gigabyte Socket 1156 Motherboards

I was notified that there is a typo in the USBE/EHCI and USE2/EHC2 device edits section of my article New Minimal DSDT Edits for Gigabyte Socket 1156 Motherboards.

In that section:
                            "AAPL,current-extra",
                            0x04C,
Should be:
                            "AAPL,current-extra",
                            0x044C,

So that it matches what an iMac with a Core i5/i7 reports.

I have corrected the original article and I would suggest using this correction in your edits.

Many thanks to rekursor for finding this.

Wednesday, June 9, 2010

New Minimal DSDT Edits for Gigabyte Socket 1156 Motherboards



We know that using a DSDT is the best way to create a vanilla Hackintosh build.  The problem is that there have been numerous articles and forum posts on editing that are based on old versions of Gigabyte BIOS extracts. Many of them are retreads of the same information and are more complex than necessary. Since I am now doing the DSDT edits for the tonymacx86.com DSDT Database, I wanted to figure out what was the least amount of edits I can do, while trying to make the edits match a real Mac as much as possible.

Gigabyte's latest release cycle of P55/H55 BIOS updates in May 2010 includes a few Hackintosh-friendly enhancements.  They've included the CMOS reset fix and some other changes.  However, these modifications are not complete and some edits still need to be made. The way to tell if you have the Hackintosh-friendly BIOS is to search the decompiled DSDT for AMAC. If you find "Name (AMAC, 0x00)" then you have the new BIOS.

The following is a guide for editing the extracted DSDT from the new Hackintosh-friendly BIOSes only. Some of these edits can be used with the older BIOS extracts, but has not been tested or is the complete list for those versions.

First here are some cosmetic changes that will make your system look more Mac like. Gigabyte uses generic device names in it's DSDT instead of descriptive names like Apple does. One example is Gigabyte use 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 table:

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 USB6 to UHC7
Rename USBE to EHC1
Rename USE2 to EHC2

There are 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 new edits. One of the common edits has been to add a Device (BUS0). The problem I found is that sometimes it was added to the incorrect place or was coded incorrectly. The proper place for this device is as a sub-device within Device (SBUS). Here is what the correct device code should look like:


                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). Here I found that a lot of edits were injecting a lot of information that wasn't need. 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 and an ALC889 codec and using our Legacy889HDA.kext:

                Method (_DSM, 4, NotSerialized)
                {
                    Store (Package (0x04)
                        {
                            "layout-id",
                            Buffer (0x04)
                            {
                                0x79, 0x03, 0x00, 0x00   // decimal 889
                            },
                            "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 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).

tonymacx86.com forum user Lnx2Mac brought this next edit to my attention. This 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")).

It seems that if the USB devices have no device-id or it's incorrect you won't have any USB 1.1 devices. So you have to add the following code to each USBx/UHCx device to enable it in Snow Leopard.

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

I have found that the same device-id can be used for each USBx/UHCx device. They don't have to be unique, just valid.

Likewise for the USBE/EHC1 and USE2/EHC2 devices we need to add the following code:

                Method (_DSM, 4, NotSerialized)
                {
                    Store (Package (0x08)
                        {
                            "AAPL,current-available",
                            0x05DC,
                            "AAPL,current-extra",
                            0x044C,
                            "AAPL,current-in-sleep",
                            0x09C4,
                            "device-id",
                            Buffer (0x04)
                            {
                                0x3A, 0x3A, 0x00, 0x00
                            }
                        }, Local0)
                    DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                    Return (Local0)
                }

The "AAPL, ..." insertion is for compatibility and for native USB power savings.  Again, it is safe to use duplicate device-ids.

If you have a Gigabyte P55/H55 motherboard whose current DSDT is not in the tonymacx86.com DSDT Database, you can submit it on the tonymacx86.com 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 tonymacx86.com!

Sunday, June 6, 2010

JMicron SATA Support

Are you tired of seeing this in System Profiler?


I was, so that’s why I created JMicron36xeSATA.kext and JMicron36xSATA.kext.

Now in System Profiler you will see this if you use JMicron36xeSATA.kext:


Or this if you use JMicron36xSATA.kext:


So what’s the difference other than the name display? When using JMicron36xSATA.kext all drives connected to the JMicron controllers will be displayed on the desktop as internal disks, just like the Intel connected drives. But if you use the JMicron36xeSATA.kext, then they show up on the desktop as external (orange) disks and can be hot swapped.

They are available in iBoot 2.0 and in MultiBeast and are installed in /Extra/Extensions.


For discussions on this and other topics, register today at tonymacx86.com!

JMicron ATA Support

Are you trying to build a Hackintosh on the cheap? Do you have an old IDE CD/DVD drive or hard drive from your Pentium II rig collecting dust in the closet? Does your motherboard use the JMicron or GSATA IDE controller? Have I got the answer for you.

JMicron36xATA.kext is a 32/64-bit driver for the JMicron 361, 363, 365, 366, 368 and Gigabyte GSATA IDE controllers for supporting that old drive in your shiny new Hackintosh.

It is available in iBoot 2.0 so you can install from an IDE DVD Drive or to an IDE Hard Drive and in MultiBeast for installation to running systems.

For discussions on this and other topics, register today at tonymacx86.com!