Jump to content

Yosemite 10.10.3 on ASUS X555L does not shut down correctly


vandebergz
 Share

55 posts in this topic

Recommended Posts

But still no luck. Can't see where I'm doing it wrong.  I did it all as mentioned.

It has nothing to do with luck.

 

Download patchmatic: https://bitbucket.org/RehabMan/os-x-maciasl-patchmatic/downloads/RehabMan-patchmatic-2015-0107.zip

Extract the 'patchmatic' binary from the ZIP. Copy it to /usr/bin, such that you have the binary at /usr/bin/patchmatic.

 

In terminal,

if [ -d ~/Downloads/RehabMan ]; then rm -R ~/Downloads/RehabMan; fi
mkdir ~/Downloads/RehabMan
cd ~/Downloads/RehabMan
patchmatic -extract
Note: It is easier if you use copy/paste instead of typing the commands manually.

 

Post contents of Downloads/RehabMan directory (as ZIP).

 

Post also EFI/Clover folder.

 

And post ioreg using IORegistryExplorer v2.1.

Link to comment
Share on other sites

Why all the M_OF(calling SGOF) stuff in DSDT? Was that in the original or something you added?

 

I think you're dropping too many SSDTs. Origin shows many more than just SSDT11 and SSDT12. You can't arbitrarily eliminate a bunch of SSDTs without analysing each one. Best to include all you can.

Link to comment
Share on other sites

Why all the M_OF(calling SGOF) stuff in DSDT? Was that in the original or something you added?

 

 

 

I added that method to disable NVIDIA from another guide. Now I got it removed.

 

 

I think you're dropping too many SSDTs. Origin shows many more than just SSDT11 and SSDT12. You can't arbitrarily eliminate a bunch of SSDTs without analysing each one. Best to include all you can.

 
So I should disable DropOEM? I think graphics related stuff is only in SSDT10, SSDT11, and SSDT12
Link to comment
Share on other sites

So I should disable DropOEM? I think graphics related stuff is only in SSDT10, SSDT11, and SSDT12

Your ACPI/patched does not include SSDT10.

 

DropOem=true is required if you have any patched SSDTs.

 

When using DropOem=true, you need to provide all SSDTs (patched appropriately) in ACPI/patched.

 

Don't forget to update SortedOrder.

Link to comment
Share on other sites

Your ACPI/patched does not include SSDT10.

 

DropOem=true is required if you have any patched SSDTs.

 

When using DropOem=true, you need to provide all SSDTs (patched appropriately) in ACPI/patched.

 

Don't forget to update SortedOrder.

That I accidentally moved it elsewhere, now it's back there.

Everything is sorted out. I only use SSDT from SSDTRPgen, SSDT-10, SSDT11, and SSDT-12, SortedOrder is configured too.

Yet, the NVIDIA...

 

Link to comment
Share on other sites

That I accidentally moved it elsewhere, now it's back there.

Everything is sorted out. I only use SSDT from SSDTRPgen, SSDT-10, SSDT11, and SSDT-12, SortedOrder is configured too.

Yet, the NVIDIA...

You may need more than 10/11/12. Include all you can, appropriately patched.

 

Use ACPIDebug.kext to determine what is going on.

Link to comment
Share on other sites

I read it, but not sure how and what to call. I can't say that I'm familiar with debugging and stuff..

You will want to use RMDT.p1 (etc) to output messages in system.log to help indicate which code (if any) is being reached.

 

eg. You may want to know if _OFF is being called, and if the patched _INI is being called.

 

Method (_INI, ...)
{
  \rmdt.p1("PEGP._INI enter")
... original code ...
  \rmdt.p1("PEGP._INI exit")
}
Same goes for _OFF.

 

You should also listen to prior advice regarding all SSDTs.

Link to comment
Share on other sites

You will want to use RMDT.p1 (etc) to output messages in system.log to help indicate which code (if any) is being reached.

 

eg. You may want to know if _OFF is being called, and if the patched _INI is being called.

 

Method (_INI, ...)
{
  \rmdt.p1("PEGP._INI enter")
... original code ...
  \rmdt.p1("PEGP._INI exit")
}
Same goes for _OFF.

 

You should also listen to prior advice regarding all SSDTs.

 

 

I think _INI and _OFF is called.

But there are lines that say "PEGP: Not usable"

I'm not quite sure what that means.

I attached the system.log anyway

 

system.log.zip

Link to comment
Share on other sites

I think _INI and _OFF is called.

But there are lines that say "PEGP: Not usable"

I'm not quite sure what that means.

I attached the system.log anyway

According to log _OFF was entered, but did not execute completely:

Jul  6 10:12:40 localhost kernel[0]: ACPIDebug: "PEGP._INI enter"
Jul  6 10:12:40 localhost kernel[0]: ACPIDebug: "PEGP._OFF enter"
Jul  6 10:12:40 localhost kernel[0]: ACPIDebug: "PEGP._INI enter"
Assuming you added code to trace at the end of the method.

 

So... you have a problem. Add further traces to determine the code causing the problem.

 

Did you add all SSDTs yet?

Link to comment
Share on other sites

According to log _OFF was entered, but did not execute completely:

Jul  6 10:12:40 localhost kernel[0]: ACPIDebug: "PEGP._INI enter"
Jul  6 10:12:40 localhost kernel[0]: ACPIDebug: "PEGP._OFF enter"
Jul  6 10:12:40 localhost kernel[0]: ACPIDebug: "PEGP._INI enter"
Assuming you added code to trace at the end of the method.

 

So... you have a problem. Add further traces to determine the code causing the problem.

 

Did you add all SSDTs yet?

 

 

Where should I put more traces?

 

I added all SSDT from SSDT-0 to SSDT-12.

Some of them which has GFX0 in it(SSDT-8, SSDT-10, SSDT-11, and SSDT-12), got patched to replace it with IGPU. I done nothing to the rest as long there's no errors in the .dsl format, because I don't know what to do so better to leave as is than mess with it.

 

Do you need pathmatic extract?

 

----------------

Anyway, did you check my DSDT? It has recurring errors "Name already exists in scope (_SB.PCI0.RP05.PEGP)". No matter how many times it is being removed, next time I open MaciASL to edit my DSDT it will always be there, and need to be removed so I can save.

Link to comment
Share on other sites

Where should I put more traces?

Basically you add them as necessary to determine what line is causing the code to abort.

 

I added all SSDT from SSDT-0 to SSDT-12.

Some of them which has GFX0 in it(SSDT-8, SSDT-10, SSDT-11, and SSDT-12), got patched to replace it with IGPU. I done nothing to the rest as long there's no errors in the .dsl format, because I don't know what to do so better to leave as is than mess with it.

 

Do you need pathmatic extract?

Post patchmatic -extract output.

Link to comment
Share on other sites

I'm not quite sure where to begin...

 

Anyway here is the latest pathmatic extract with all SSDT loaded

Your DSDT has some incorrect edits.

 

If you take your patchmatic output and try to disassemble it:

iasl -da -dl *.aml
You'll get an error:

ACPI Error: [IGPU] Namespace lookup failure, AE_ALREADY_EXISTS (20150410/dswload-451)
ACPI Exception: AE_ALREADY_EXISTS, During name lookup/catalog (20150410/psobject-305)
Which means you're trying to define IGPU in two places. Which is, of course, wrong. If iasl can't disassemble your set of APCI files, OS X will have equal trouble loading them properly.

 

Finding the problem is easy:

iasl -d -dl *.aml
grep Device.*IGPU *.dsl
Which shows:

DSDT.dsl:        Device (IGPU)
SSDT-10.dsl:        Device (IGPU)
So... DSDT is defining IGPU as well as SSDT-10.

 

Typically, the integrated device is defined only in an SSDT.

 

So, you must have added the one in DSDT:

        Device (IGPU)
        {
            Name (_ADR, 0x00020000)  // _ADR: Address
            OperationRegion (VSID, PCI_Config, Zero, 0x04)
            Field (VSID, ByteAcc, NoLock, Preserve)
            {
                REG0,   32
            }

            Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
            {
                Store (Package (0x06)
                    {
                        "device-id", 
                        Buffer (0x04)
                        {
                             0x12, 0x04, 0x00, 0x00                         
                        }, 

                        "AAPL,ig-platform-id", 
                        Buffer (0x04)
                        {
                             0x06, 0x00, 0x26, 0x0A                         
                        }, 

                        "hda-gfx", 
                        Buffer (0x0A)
                        {
                            "onboard-1"
                        }
                    }, Local0)
                DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                Return (Local0)
            }
        }
Having a duplicate like that will cause OS X to disregard SSDT-10.

 

Check your Clover options to be certain you're not attempting to patch things with so-called DSDT "Fixes".

Link to comment
Share on other sites

Your DSDT has some incorrect edits.

 

If you take your patchmatic output and try to disassemble it:

iasl -da -dl *.aml
You'll get an error:

ACPI Error: [IGPU] Namespace lookup failure, AE_ALREADY_EXISTS (20150410/dswload-451)
ACPI Exception: AE_ALREADY_EXISTS, During name lookup/catalog (20150410/psobject-305)
Which means you're trying to define IGPU in two places. Which is, of course, wrong. If iasl can't disassemble your set of APCI files, OS X will have equal trouble loading them properly.

 

Finding the problem is easy:

iasl -d -dl *.aml
grep Device.*IGPU *.dsl
Which shows:

DSDT.dsl:        Device (IGPU)
SSDT-10.dsl:        Device (IGPU)
So... DSDT is defining IGPU as well as SSDT-10.

 

Typically, the integrated device is defined only in an SSDT.

 

So, you must have added the one in DSDT:

        Device (IGPU)
        {
            Name (_ADR, 0x00020000)  // _ADR: Address
            OperationRegion (VSID, PCI_Config, Zero, 0x04)
            Field (VSID, ByteAcc, NoLock, Preserve)
            {
                REG0,   32
            }

            Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
            {
                Store (Package (0x06)
                    {
                        "device-id", 
                        Buffer (0x04)
                        {
                             0x12, 0x04, 0x00, 0x00                         
                        }, 

                        "AAPL,ig-platform-id", 
                        Buffer (0x04)
                        {
                             0x06, 0x00, 0x26, 0x0A                         
                        }, 

                        "hda-gfx", 
                        Buffer (0x0A)
                        {
                            "onboard-1"
                        }
                    }, Local0)
                DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                Return (Local0)
            }
        }
Having a duplicate like that will cause OS X to disregard SSDT-10.

 

Check your Clover options to be certain you're not attempting to patch things with so-called DSDT "Fixes".

 

 

Removed it, and checked Clover to make sure no fixes is applied

 

Latest pathmatic

RehabMan.zip

Link to comment
Share on other sites

Removed it, and checked Clover to make sure no fixes is applied

 

Latest pathmatic

There is no RMDT debugging calls in these files.

 

_REG patch appears to be incorrect. It should consist of only the EC related code. And only when _REG is called with the correct parameters (previously mentioned).

 

_INI method in SSDT-11 is not patched to call _OFF.

 

_OFF method in SSDT-12 is not patched to remove EC related code.

 

_STA method in SSDT-12 is patched (strangely) to call _OFF.

Link to comment
Share on other sites

There is no RMDT debugging calls in these files.

 

_REG patch appears to be incorrect. It should consist of only the EC related code. And only when _REG is called with the correct parameters (previously mentioned).

 

_INI method in SSDT-11 is not patched to call _OFF.

 

_OFF method in SSDT-12 is not patched to remove EC related code.

 

_STA method in SSDT-12 is patched (strangely) to call _OFF.

 

Sorry about that. I was using new files as I was trying to follow this solution from here http://www.tony*macx86.com/laptop-compatibility/146329-hackintosh-lenovo-z50-70-a-6.html

You assisted that guy too.

I'll be back with former solution you mentioned

 

Newest rmdt pathmatic with system.log

RehabMan.zip

Link to comment
Share on other sites

Sorry about that. I was using new files as I was trying to follow this solution from here http://www.tony*macx86.com/laptop-compatibility/146329-hackintosh-lenovo-z50-70-a-6.html

You assisted that guy too.

I'll be back with former solution you mentioned

 

Newest rmdt pathmatic with system.log

Your files are invalid. They contain duplicate devices (again). Remember what I said about duplicate definitions and being able to disassemble your patched set of files with iasl -da?

 

iasl -da -dl *.aml
Shows:

ACPI Error: [RMDT] Namespace lookup failure, AE_ALREADY_EXISTS (20150410/dswload-451)
ACPI Exception: AE_ALREADY_EXISTS, During name lookup/catalog (20150410/psobject-305)
Could not parse external ACPI tables, AE_ALREADY_EXISTS
So I disassemble without -da:

iasl -d -dl *.aml
And then search for duplicate:

grep Device.*RMDT *.dsl
Result:

SSDT-11.dsl:    Device (RMDT)
SSDT-12.dsl:    Device (RMDT)
Not valid. There can be only one RMDT device in the patched set.

 

Use "Add DSDT Debug Methods" to DSDT.

Use "Add SSDT Debug Extern Declarations" to each SSDT you wish to do debugging from.

 

Your first clue that you were doing something wrong: Applying a patch that is clearly labeled 'DSDT' to more than one SSDT.

Link to comment
Share on other sites

Your files are invalid. They contain duplicate devices (again). Remember what I said about duplicate definitions and being able to disassemble your patched set of files with iasl -da?

 

iasl -da -dl *.aml
Shows:

ACPI Error: [RMDT] Namespace lookup failure, AE_ALREADY_EXISTS (20150410/dswload-451)
ACPI Exception: AE_ALREADY_EXISTS, During name lookup/catalog (20150410/psobject-305)
Could not parse external ACPI tables, AE_ALREADY_EXISTS
So I disassemble without -da:

iasl -d -dl *.aml
And then search for duplicate:

grep Device.*RMDT *.dsl
Result:

SSDT-11.dsl:    Device (RMDT)
SSDT-12.dsl:    Device (RMDT)
Not valid. There can be only one RMDT device in the patched set.

 

Use "Add DSDT Debug Methods" to DSDT.

Use "Add SSDT Debug Extern Declarations" to each SSDT you wish to do debugging from.

 

Your first clue that you were doing something wrong: Applying a patch that is clearly labeled 'DSDT' to more than one SSDT.

 

 

My bad, I was being too careless. Now I'm certain there's no duplicated things, I decompiled it from terminal like you've mentioned

RehabMan.zip

Link to comment
Share on other sites

My bad, I was being too careless. Now I'm certain there's no duplicated things, I decompiled it from terminal like you've mentioned

You can see that _OFF is entered, but never makes it to the end.

Jul  6 23:48:16 localhost kernel[0]: ACPIDebug: "OFF enter"
Jul  6 23:48:16 localhost kernel[0]: ACPIDebug: "_STA enter"
Add more traces to determine why (eg. add inside the method and inside SGOF).

 

Continue to add traces until you determine the exact line of code causing the abort.

 

Note: The code you added at the end of _STA is unreachable as it is after the Return statement:

        Method (_STA, 0, NotSerialized)  // _STA: Status
        {
            \RMDT.P1 ("_STA enter")
            Return (Zero)
            \RMDT.P1 ("_STA exit") // UNREACHABLE
        }
--

 

Extra note: Make sure you DID NOT place dynamic SSDTs in ACPI/patched.

 

--

 

Note likely cause of problems... SGOF has quite a bit of EC related code. As I noted before, all EC related code must be done from _REG. The EC is not ready at the point _INI is called.

 

        Method (SGOF, 0, Serialized)
        {
            P8XH (Zero, 0xD6)
            P8XH (One, 0xF0)
            Store ("SG_ULT_RP_NUM.PEGP._OFF", Debug)
            If (LEqual (CCHK (Zero), Zero))
            {
                Return (Zero)
            }

            Store (Zero, ONOF)
            Store (\_SB.PCI0.LPCB.EC0.RRAM (0x0521), Local0)
            And (Local0, 0xCF, Local0)
            \_SB.PCI0.LPCB.EC0.WRAM (0x0521, Local0)
            \_SB.PCI0.LPCB.EC0.WRAM (0x0520, 0x95)
            \_SB.PCI0.LPCB.EC0.WRAM (0x03A4, Zero)
            \_SB.PCI0.LPCB.EC0.WRAM (0x03A5, Zero)
            Store (LCTL, ELCT)
            Store (SVID, HVID)
            Store (SDID, HDID)
            Store (One, LNKD)
            While (LNotEqual (LNKS, Zero))
            {
                Sleep (One)
            }

            SGPO (HLRS, One)
            SGPO (PWEN, Zero)
            Sleep (0x32)
            Return (Zero)
        }
Link to comment
Share on other sites

You can see that _OFF is entered, but never makes it to the end.

Jul 6 23:48:16 localhost kernel[0]: ACPIDebug: "OFF enter"

Jul 6 23:48:16 localhost kernel[0]: ACPIDebug: "_STA enter"

Add more traces to determine why (eg. add inside the method and inside SGOF).

 

Continue to add traces until you determine the exact line of code causing the abort.

 

Note: The code you added at the end of _STA is unreachable as it is after the Return statement:

Method (_STA, 0, NotSerialized) // _STA: Status

{

\RMDT.P1 ("_STA enter")

Return (Zero)

\RMDT.P1 ("_STA exit") // UNREACHABLE

}

--

 

Extra note: Make sure you DID NOT place dynamic SSDTs in ACPI/patched.

 

--

 

 

Now removed SSDT with x from bootloader.

 

Note likely cause of problems... SGOF has quite a bit of EC related code. As I noted before, all EC related code must be done from _REG. The EC is not ready at the point _INI is called.

 

        Method (SGOF, 0, Serialized)
        {
            P8XH (Zero, 0xD6)
            P8XH (One, 0xF0)
            Store ("SG_ULT_RP_NUM.PEGP._OFF", Debug)
            If (LEqual (CCHK (Zero), Zero))
            {
                Return (Zero)
            }

            Store (Zero, ONOF)
            Store (\_SB.PCI0.LPCB.EC0.RRAM (0x0521), Local0)
            And (Local0, 0xCF, Local0)
            \_SB.PCI0.LPCB.EC0.WRAM (0x0521, Local0)
            \_SB.PCI0.LPCB.EC0.WRAM (0x0520, 0x95)
            \_SB.PCI0.LPCB.EC0.WRAM (0x03A4, Zero)
            \_SB.PCI0.LPCB.EC0.WRAM (0x03A5, Zero)
            Store (LCTL, ELCT)
            Store (SVID, HVID)
            Store (SDID, HDID)
            Store (One, LNKD)
            While (LNotEqual (LNKS, Zero))
            {
                Sleep (One)
            }

            SGPO (HLRS, One)
            SGPO (PWEN, Zero)
            Sleep (0x32)
            Return (Zero)
        }

 

I removed this from SSDT

            \_SB.PCI0.LPCB.EC0.WRAM (0x0521, Local0)
            \_SB.PCI0.LPCB.EC0.WRAM (0x0520, 0x95)
            \_SB.PCI0.LPCB.EC0.WRAM (0x03A4, Zero)
            \_SB.PCI0.LPCB.EC0.WRAM (0x03A5, Zero)

And then put this to _REG, with little modification (Local0 turned into "Local0"), because it would cause an error if it remain Local0

            \_SB.PCI0.LPCB.EC0.WRAM (0x0521, "Local0")
            \_SB.PCI0.LPCB.EC0.WRAM (0x0520, 0x95)
            \_SB.PCI0.LPCB.EC0.WRAM (0x03A4, Zero)
            \_SB.PCI0.LPCB.EC0.WRAM (0x03A5, Zero)

-----

Should I remove EC0.SPIN from method _ON too?

RehabMan.zip

Link to comment
Share on other sites

 Share

×
×
  • Create New...