Jump to content
knight0fdragon

E6410: macOS Sierra does not completely shut down

Recommended Posts

@Jake Lo Thank you for the reply!  duduclx's prepare-to-sleep patch resolves the shutdown problem (can't use CLOVER's on-the-fly shutdown patch), but it doesn't resolve sleep.  I'd love to know how he figured out that patch.  In that same thread on page 9, duduclx indicated that @Hervé recommended Rehabman's _PRW 0x0D patch, but I have not found that that changes my laptop behavior in any way (including sleep).  Since the fix is intended to fix the instant wake problem, it just might work (if I can get my laptop to sleep :) ).  I really appreciate your help / suggestions.  Thank you!

 

EDIT: I'm dual-booting the E6410 with High Sierra and Mojave.  Sleep behavior is identical in both.  Other than sleep, performance on this laptop is outstanding.  Since my Mojave solution is based on DosDude's Mojave patcher (a solution I've found to be surprisingly controversial even though it works great), I'm doing all my testing in High Sierra.

Share this post


Link to post
Share on other sites

@Jake Lo If I should start a new thread for this, let me know.  My system files are attached.  Note some differences from other E6410 configs that you may have seen:

  • LPCB._DSM patched with device-id "3b09" for native Nehalem power management with MacBookPro 6,2
  • ECDV renamed to EC so that AppleBusPowerController loads
  • AGP.VID._DSM patched with device-id "0a29" so that AppleGraphicsPowerManagement loads
  • No CLOVER option to Generate P or Generate C States (With the correct LPCB._DSM and MacBookPro 6,2, these CLOVER are NOT necessary for this architecture and only result in reduced number of P states and lower max multiplier).  Note that sleep still doesn't work if Generate C and Generate P states is enabled in config.plist.
  • EDIT: Added HDAU device to PCI0.AGP (device-id 0x0be3) which is not currently reflected in the attached debug files.

 

Note that my DSDT patches include Rehabman's _PRW 0x0D patch suggested by @Hervé and duduclx's _PTS shutdown patch.  Shutdown works great, but sleep does not.  When attempting to sleep, screen goes black and system enters a frozen (still on) state that can only be recovered by forcing power-off with the power button.

 

Also note that I started patching AGP.VID._DSM for backlight slider.  The slider appears in Display Settings, but moving the slider doesn't change brightness.  Will look at this again when I have time.

 

debug_7519.zip

Share this post


Link to post
Share on other sites

@Jake Lo This thread suggests that adding _OFF and _ON method calls was the trick to working sleep for another Dell Latitude.  I couldn't find _OFF and _ON methods in DSDT or any SSDTs (nor could I find any analogous methods, but I don't know what I'm looking for).  I'd be open to trying the _OFF / _ON trick if anyone can suggest how to find or create these methods.

Share this post


Link to post
Share on other sites

@Jake Lo - You suggested duduclx's _PTS patch for working sleep.  It turns out that with a minor modification, his patch almost addresses shutdown and sleep.  If I remove the conditional in _PTS (as shown below), the E6410 sleeps and then wakes immediately with a black screen.  I suspect that duduclx's _PTS logic requires some minor modification and that the "inverse" logic is required in _WAK.

 

        Method (_PTS, 1, NotSerialized)

        {

             Store (Zero, SLPE)

             Sleep (0x10)

        }

Share this post


Link to post
Share on other sites

Try adding SSDT-7.aml from here

And patch your DSDT for _wak and _pts with this

Spoiler

 

into method label _PTS code_regex ([\s\S]*) replace_matched
begin
External(\\_SB.PCI0.PEG0.VID._OFF, MethodObj)\n
If (CondRefOf(\\_SB.PCI0.PEG0.VID._OFF)) { \\_SB.PCI0.PEG0.VID._OFF() }\n
%1
end;

into method label _WAK code_regex (Return\s+\(.*) replace_matched
begin
External(\\_SB.PCI0.PEG0.VID._ON, MethodObj)\n
If (CondRefOf(\\_SB.PCI0.PEG0.VID._ON)) { \\_SB.PCI0.PEG0.VID._ON() }\n
%1
end;

 

 

Share this post


Link to post
Share on other sites

@Jake Lo - Thank you for your reply.  I will look at your solution before applying, since I can already see I need to make one change (PEG0 -> AGP in my DSDT).  It will also help me to refine my AGP.VID._DSM.  While I'm digesting your solution, do you know how duduclx came up with his _PTS shutdown fix?  He identified a register (SLPE) which he defined as:

 

       OperationRegion (PMRS, SystemIO, 0x0430, One)

       Field (PMRS, ByteAcc, NoLock, Preserve)

       {

               ,   4,

           SLPE,   1

       }

 

and then he set SLPE to Zero in _PTS

 

      Store (Zero, SLPE)

 

I'm guessing that he found this in an SSDT from another system?

 

It would help me to know how he discovered this, since I'd like to understand the solution in addition to implement it.  Thank you.

Share this post


Link to post
Share on other sites

@Jake Lo Thanks for your help, but I'm reluctant to try your suggestion, because the _OFF and _ON methods work with registers/memory locations that are very different from the Latitude E6410 / 3100m.  I did some digging and believe that @v3ct0r 's Yosemite thread was the first to implement the _PTS shutdown patch.  If I can understand how this shutdown patch was determined, it would help.

 

EDIT: @Hervé also provided this _PTS shutdown patch in this thread.

Share this post


Link to post
Share on other sites

@Hervé Thanks for your patience with me.  My digging indicates that you are clearly one of the experts in this area.  Do you know how the E6410 _PTS shutdown patch was discovered and do you know where I might look to learn more about it?  Also, in this thread you don't reference the _PRW 0x0D patch.  Do you stil believe that the _PRW 0x0D patch is necessary (I've implemented it, but not sure I did it correctly given that _PRW generates its returns with Method (GPRW).  Thanks for any help / advice / insight. 

Share this post


Link to post
Share on other sites

You give me far more credit than is due...

 

Regarding the E6410, it's been quite a few years. I vaguely remember suggesting a patch and then reading it had fixed the issue; that's about it. Never personally had the E6410 so no hands-on experience with it. As for how the _PTS shutdown patch was brought out, I couldn't tell you; sorry.

Share this post


Link to post
Share on other sites

I traced the _PTS shutdown fix back to the beginning of Hackintosh time.  I should have noticed that the same fix appears on my Thinkpad T61 (also running Mojave).  The fix was only ever intended to be for shutdown (to be conditional on LEqual (Arg0, 0x05)).  SLPE appears to be a register that controls NVidia dGPU and can be in one of two places on older laptops:

 

On the Latitude E6410 (NVS 3100m):

       OperationRegion (PMRS, SystemIO, 0x0430, One)

       Field (PMRS, ByteAcc, NoLock, Preserve)

       {

               ,   4,

           SLPE,   1

       }

 

On the Thinkpad T61 (NVS 140m)

       OperationRegion (PMRS, SystemIO, 0x1030, One)

       Field (PMRS, ByteAcc, NoLock, Preserve)

       {

               ,   4,

           SLPE,   1

       }

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...