Jump to content

DSDT fixes for Gigabyte boards


iSoprano
 Share

1,908 posts in this topic

Recommended Posts

Is there anyone with a GB board here where shutdown works without OpenHaltRestart.kext or EvOreboot.kext? If not then we should work on this as it will likely get more important over time.
Shutdown works for me most of the time without OHR or EvOreboot. It seems to not work the time after I try a restart but then does come back. I will do some more testing to be sure.

 

Here is my current dsdt.dsl.

dsdt.dsl.zip

Link to comment
Share on other sites

I just did 10 shutdowns and 7 of them worked correctly.

Thanks. I checked the _PTS and _WAK methods in your DTDT, for the obvious hint, but unfortunately didn't find anything new/different. Or I must have missed it. Thanks again.

 

I am pretty certain shutdown works on my system without OHR or EvOreboot. But I am away from my hack now so unfortunately won't be able to double check until later tonight. But I am willing to help if i can.

 

EDIT: So much for my earlier confidence.... After 28 tests and reboots I can reveal that shutdown doesn't work everytime and I can't isolate why. This needs plenty more testing to try and find a pattern. Maybe AudiSport's testing shows better results. <_<

Wow! You sure wasn't lazy. Something to think about for the other peeps here. Thanks!

Link to comment
Share on other sites

Is there anyone with a GB board here where shutdown works without OpenHaltRestart.kext or EvOreboot.kext? If not then we should work on this as it will likely get more important over time.

 

Anyone here willing to jump in and help?

 

Sure 11 shutdowns out of 15 for me the DSDT.dsl and kextstat if that helps is attached runs on the hardware in the Test Machine in the sig of course..

DSDT.dsl.zip

kextstat.txt.zip

Link to comment
Share on other sites

@Master Chief I've booted with original Apple DSDT(just my _PRT stuff and RTC to avoid CMOS reset) for test.

What can I say shutdown works every time! Not even a single failure...we miss something...

Does the same on all my hardware, only restart dosen't work.

On desktop I used MacPro4,1 DSDT.

On lappie I used MacBookPro4,1 DSDT

On Atom I used MacMini1,1 DSDT, on this one even sleep/wake works LOL

 

No idea yet what is missing...

Link to comment
Share on other sites

@Master Chief I've booted with original Apple DSDT(just my _PRT stuff and RTC to avoid CMOS reset) for test.

What can I say shutdown works every time! Not even a single failure...we miss something...

Does the same on all my hardware, only restart dosen't work.

On desktop I used MacPro4,1 DSDT.

On lappie I used MacBookPro4,1 DSDT

On Atom I used MacMini1,1 DSDT, on this one even sleep/wake works LOL

 

No idea yet what is missing...

Thank you for thinking 'out of the box'. And yes I too think that we are missing something, but what? Might be pretty obvious now that we know, thanks to you, that the original Apple DSDT's work.

 

Update:: The following code snippet might be extremely important:

	OperationRegion (PRT0, SystemIO, 0x80, 0x04)
Field (PRT0, DWordAcc, Lock, Preserve)
{
	P80H,   32
}

And I am using this for my Asus P5K Pro:

	Name (DP80, 0x80)
OperationRegion (DEB0, SystemIO, DP80, 0x02)
Field (DEB0, WordAcc, NoLock, Preserve)
{
	DBG8,   16
}

And shutdown works for me, so this is most certainly our first target to look into. Let's start by looking at method _PTS of a real MacPro4,1:

Method (_PTS, 1, NotSerialized)
{
[color="#FF0000"]    Store (0x00, P80D)
   P8XH (0x00, Arg0)
[/color]    Store (Arg0, \_SB.PCI0.LPCB.EC.ECSS)
   G3HT ()
   If (OSDW ())
   {
        \_SB.PCI0.SBUS.DISB ()
    }
}

The lines I think to be important are marked red, but mostly the second line, which calls the following Method:

    Method (P8XH, 2, Serialized)
   {
[color="#FF0000"]        If (LEqual (Arg0, 0x00)) // This is the only part used!
       {
           Store (Or (And (P80D, 0xFFFFFF00), Arg1), P80D)
       }[/color]

       If (LEqual (Arg0, 0x01))
       {
           Store (Or (And (P80D, 0xFFFF00FF), ShiftLeft (Arg1, 0x08)
               ), P80D)
       }

       If (LEqual (Arg0, 0x02))
       {
           Store (Or (And (P80D, 0xFF00FFFF), ShiftLeft (Arg1, 0x10)
               ), P80D)
       }

       If (LEqual (Arg0, 0x03))
       {
           Store (Or (And (P80D, 0x00FFFFFF), ShiftLeft (Arg1, 0x18)
               ), P80D)
       }

       [color="#006400"]Store (P80D, P80H)[/color]
   }

And this method is called from both _PTS and _WAK for things like sleep, wakeup (the red lines). However, it all boils down to the very last line (green) which I think is key for shutdown, and thus using something like:

Store (Arg0, P80H)

in Method _PTS is probably enough. And the following line for Method _WAK:

Store (Zero, P80H)

But I cannot verify this myself (no GB board) so would you please be so kind to do this for me? We might however need to mask it, but that's something for a later time to decide.

 

Note: People willing to test this with a GB DSDT need to use DBG1 instead of P80H (see example below).

 

And here's Method _PTS from a usual GB DSDT:

    Method (_PTS, 1, NotSerialized)
   {
[color="#FF0000"]        Or (Arg0, 0xF0, Local0)
       Store (Local0, DBG1)
       If (LEqual (Arg0, 0x05)) // Shutdown (S5)
       {
           Store (ESMI, Local0)
           And (Local0, 0xFB, Local0)
           Store (Local0, ESMI)
       }[/color]

       Store (Arg0, \_SB.PCI0.LPCB.EC.ECSS)
       G3HT ()
       \_SB.PCI0.SBUS.DISB ()
   }

The relevant lines as usual in red again, and it might be as simple as removing the first line. Which basically changes a sleep state (S3) from being 0x03 into 0xF3 and shutdown from 0x05 into 0xF5. But if you do this, then you might need to remove And (Local0, 0xFB, Local0) also, or change it the 0xFB into 0x0B. Not. Yeah, that might be it – neither Asus nor Apple makes use of it. Again, testing required first of course.

 

work in progress... I'm a little slow, but having cornflakes with yogurt at the very same time – had a rough night with one of the kids being sick (:

 

Well, that's it for now. Let me (us here) know what your findings are. And thanks for testing doing the dirty work :sorcerer:

Link to comment
Share on other sites

I'll do more tests next week now is weekend need to relax a bit(and move my mind from this stuff)

I will ditch Asus DSDT and use for now apple one on my desk adding only specific board stuff and removing what i don't have...but next week..

On lappie Asus EC implementation is so dirty, got a big headache trying to put things in place...

Only success that i have for now is on my atom board that works pretty well with Apple DSDT LOL

Link to comment
Share on other sites

I'll do more tests next week now is weekend need to relax a bit(and move my mind from this stuff)

I will ditch Asus DSDT and use for now apple one on my desk adding only specific board stuff and removing what i don't have...but next week..

On lappie Asus EC implementation is so dirty, got a big headache trying to put things in place...

Only success that i have for now is on my atom board that works pretty well with Apple DSDT LOL

Sure thing. Get some rest. Enjoy your weekend.

 

Any other people willing to give the proposed changes a try?

Link to comment
Share on other sites

Sure thing. Get some rest. Enjoy your weekend.

 

Any other people willing to give the proposed changes a try?

 

I'd be willing to give it a shot but not till the weekend is over like King. Got to relax a bit. So you guys think I'd be better to try MacPro4,1 rather than 3,1? Have people been seeing any difference in performance between the two if so what?

Link to comment
Share on other sites

Anyone here on a g31 based board (es2l here) and got sleep working without sleepenabler?

 

I ask as I have everything working great*..... except that occasionally I get a black screen on wake (and system is unresponsive over the network too).

 

(*i have no vanilla speedstepping stuff in, but CPU-i installed which shows the CPU as stepping? between lowest and full speed anyhow, is that right?)

Link to comment
Share on other sites

But I cannot verify this myself (no GB board) so would you please be so kind to do this for me? We might however need to mask it, but that's something for a later time to decide.

 

I'm more then happy to test it but my _PTS method looks like this:

    Method (_PTS, 1, NotSerialized)
   {
       Or (Arg0, 0xF0, Local0)
       Store (Local0, DBG1)
       OSTP ()
       If (LEqual (Arg0, One)) {}
       If (LEqual (Arg0, 0x03)) {}
       If (LEqual (Arg0, 0x05))
       {
           Store (ESMI, Local0)
           And (Local0, 0xFB, Local0)
           Store (Local0, ESMI)
       }

       If (LEqual (Arg0, 0x04))
       {
           If (LNot (PICF))
           {
               Sleep (0x64)
           }
       }
   }

 

So please let me know what to add/change and I'll give it a try.

Link to comment
Share on other sites

Thank you for thinking 'out of the box'. And yes I too think that we are missing something, but what? Might be pretty obvious now that we know, thanks to you, that the original Apple DSDT's work.

 

Update:: The following code snippet might be extremely important:

	OperationRegion (PRT0, SystemIO, 0x80, 0x04)
Field (PRT0, DWordAcc, Lock, Preserve)
{
	P80H,   32
}

And I am using this for my Asus P5K Pro:

	Name (DP80, 0x80)
OperationRegion (DEB0, SystemIO, DP80, 0x02)
Field (DEB0, WordAcc, NoLock, Preserve)
{
	DBG8,   16
}

And shutdown works for me, so this is most certainly our first target to look into. Let's start by looking at method _PTS of a real MacPro4,1:

Method (_PTS, 1, NotSerialized)
{
[color="#FF0000"]    Store (0x00, P80D)
   P8XH (0x00, Arg0)
[/color]    Store (Arg0, \_SB.PCI0.LPCB.EC.ECSS)
   G3HT ()
   If (OSDW ())
   {
        \_SB.PCI0.SBUS.DISB ()
    }
}

The lines I think to be important are marked red, but mostly the second line, which calls the following Method:

    Method (P8XH, 2, Serialized)
   {
[color="#FF0000"]        If (LEqual (Arg0, 0x00)) // This is the only part used!
       {
           Store (Or (And (P80D, 0xFFFFFF00), Arg1), P80D)
       }[/color]

       If (LEqual (Arg0, 0x01))
       {
           Store (Or (And (P80D, 0xFFFF00FF), ShiftLeft (Arg1, 0x08)
               ), P80D)
       }

       If (LEqual (Arg0, 0x02))
       {
           Store (Or (And (P80D, 0xFF00FFFF), ShiftLeft (Arg1, 0x10)
               ), P80D)
       }

       If (LEqual (Arg0, 0x03))
       {
           Store (Or (And (P80D, 0x00FFFFFF), ShiftLeft (Arg1, 0x18)
               ), P80D)
       }

       [color="#006400"]Store (P80D, P80H)[/color]
   }

And this method is called from both _PTS and _WAK for things like sleep, wakeup (the red lines). However, it all boils down to the very last line (green) which I think is key for shutdown, and thus using something like:

Store (Arg0, P80H)

in Method _PTS is probably enough. And the following line for Method _WAK:

Store (Zero, P80H)

But I cannot verify this myself (no GB board) so would you please be so kind to do this for me? We might however need to mask it, but that's something for a later time to decide.

 

Note: People willing to test this with a GB DSDT need to use DBG1 instead of P80H (see example below).

 

And here's Method _PTS from a usual GB DSDT:

    Method (_PTS, 1, NotSerialized)
   {
[color="#FF0000"]        Or (Arg0, 0xF0, Local0)
       Store (Local0, DBG1)
       If (LEqual (Arg0, 0x05)) // Shutdown (S5)
       {
           Store (ESMI, Local0)
           And (Local0, 0xFB, Local0)
           Store (Local0, ESMI)
       }[/color]

       Store (Arg0, \_SB.PCI0.LPCB.EC.ECSS)
       G3HT ()
       \_SB.PCI0.SBUS.DISB ()
   }

The relevant lines as usual in red again, and it might be as simple as removing the first line. Which basically changes a sleep state (S3) from being 0x03 into 0xF3 and shutdown from 0x05 into 0xF5. But if you do this, then you might need to remove And (Local0, 0xFB, Local0) also, or change it the 0xFB into 0x0B. Not. Yeah, that might be it – neither Asus nor Apple makes use of it. Again, testing required first of course.

 

work in progress... I'm a little slow, but having cornflakes with yogurt at the very same time – had a rough night with one of the kids being sick (:

 

Well, that's it for now. Let me (us here) know what your findings are. And thanks for testing doing the dirty work :whistle:

 

i have tested it, with no chance,

 

 

let me know if i done something wrong :D

 

ps: since 10.6.2, shutdown don't work at all w/o OHR

Link to comment
Share on other sites

Anyone here on a g31 based board (es2l here) and got sleep working without sleepenabler?

 

I ask as I have everything working great*..... except that occasionally I get a black screen on wake (and system is unresponsive over the network too).

 

(*i have no vanilla speedstepping stuff in, but CPU-i installed which shows the CPU as stepping? between lowest and full speed anyhow, is that right?)

Sleep is working great on my ES2L without sleepenabler. I do have vanilla speedstep working with 10 p-states.

 

 

I am not seeing a difference with these changes either. Sometime shutdown works and other times it doesn't. I am running 10.6.2 and shutdown does work occasionally without OHR or EvOReboot.

Link to comment
Share on other sites

Can't see modifying method PTS making any difference to shutdown. I can even remove the whole method and I still have perfectly working S3 sleep and wakeup and 50/50 chance of successful shutdown.

Link to comment
Share on other sites

Sleep is working great on my ES2L without sleepenabler. I do have vanilla speedstep working with 10 p-states.

 

That's great news.

 

Any chance you could post up your DSDT for me to compare mine against, it'd be a great help? (just attach it in a zip file)

 

You get your power button working for sleep BTW? Cos I know the fix for that, it's easy :-)

 

change:

Device (PWRB)

{

Name (_HID, EisaId ("PNP0C0C"))

 

to:

Device (PWRB)

{

Name (_CID, EisaId ("PNP0C0C"))

 

Not seen that mentioned in this thread previously, might help folk (or maybe it's common knowledge!).

 

 

EDIT: I'm blind, you posted it above!

Link to comment
Share on other sites

Can't see modifying method PTS making any difference to shutdown. I can even remove the whole method and I still have perfectly working S3 sleep and wakeup and 50/50 chance of successful shutdown.

My machine sleeps & wakes up perfectly too with or without the _PTS method.

With _PTS removed, I did some shutdown tests and it shutdown successfully 7 times in a row, until it finally failed - So no real progress with that. (If it's any use to anyone I dumped my ioreg to file before performing each shutdown to see if I could identify anything when it failed to shutdown).

Link to comment
Share on other sites

@iSoprano I have the same mobo, ep35-ds3l

Your dsdt file has:

 

Device (SATA)
		{
			Name (_ADR, 0x001F0002)
			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)
			}
		}
?>

 

I don't have Device (SATA), just IDE1 and IDE2. Strange, we have the same mobo :D

Did you remove IDE1, IDE2 and added SATA?

 

I would be grateful for any help. Thanks, mate!

Link to comment
Share on other sites

@iSoprano I have the same mobo, ep35-ds3l

Your dsdt file has:

 

 ... see post #521

 

I don't have Device (SATA), just IDE1 and IDE2. Strange, we have the same mobo :D

Did you remove IDE1, IDE2 and added SATA?

 

I would be grateful for any help. Thanks, mate!

Search for 0x001F0002 because that's the one you are looking for – probably under a different name.

Link to comment
Share on other sites

0x001F0002 is IDE1. Thanks anyway!

I don't understand why does he have SATA (same mobo).

 

You can use any name you want to as long as you follow these rules from Acpispec:

-All names are a fixed 32 bits.

-The first byte of a name is inclusive of: ‘A’–‘Z’, ‘_’, (0x41–0x5A, 0x5F).

-The remaining three bytes of a name are inclusive of: ‘A’–‘Z’, ‘0’–‘9’, ‘_’, (0x41–0x5A, 0x30–0x39, 0x5F).

Link to comment
Share on other sites

0x001F0002 is IDE1. Thanks anyway!

I don't understand why does he have SATA (same mobo).

That's because we rename devices, to match the Apple DSDT. Not to mention that SATA is the most logical name to use.

 

Note: Certain devices cannot be change because Apple (OS X) expects specific device names!

Link to comment
Share on other sites

 Share

×
×
  • Create New...