Jump to content

DSDT - Vanilla Speedstep - Generic Scope (_PR)


FKA
 Share

1,949 posts in this topic

Recommended Posts

Hi blackosx

 

I've found it doesn't matter which cst tables I use ... MP3,1 .. my own ... etc .they all give the same result.

 

The code your using should work just fine.

 

D.

Okay great. I just wanted to make absolutely sure I was using the correct data as I don't know if my system actually leaves C0? What's the best way to know if C-States are working?

Link to comment
Share on other sites

Okay great. I just wanted to make absolutely sure I was using the correct data as I don't know if my system actually leaves C0? What's the best way to know if C-States are working?

 

You should have 'cstinfo' listed under ACPI_SMC in ioreg.

 

the best 'tell' is your cpu temp at idle. I think I only enter C1 and get temps around 38-40.C - others report lower temps.

 

I'd expect voodoomonitor or similar to show a vCore drop beyond your lowest p-state but this doesn't seem to be the case.

 

D.

Link to comment
Share on other sites

You should have 'cstinfo' listed under ACPI_SMC in ioreg.

 

the best 'tell' is your cpu temp at idle. I think I only enter C1 and get temps around 38-40.C - others report lower temps.

 

I'd expect voodoomonitor or similar to show a vCore drop beyond your lowest p-state but this doesn't seem to be the case.

 

D.

Thanks. Yes, I have CSTInfo in ioreg (I have attached a screengrab).

And, I have just seen VoodooMonitor flash a voltage reading of 1.116V which is lower than lowest P-State (1.132V). So it must be working!

 

My temp is reading 42C at the moment (with stock intel cooler), and it can range from 40-48C. I will keep my eye on it.

 

Cheers FormerlyKnownAs :)

post-331032-1257109890_thumb.png

Link to comment
Share on other sites

man, you're fast....:rolleyes:

got it changed same result

gone revert back to old dsdt to see if sleep works

 

T.

 

edit; with the old dsdt sleep is working

 

I was playing around with the cpu info that worked for speed-step and sleep, somehow i ended up with a dsdt that gave me speed-step and got sleep back

I don't know if this could damage the cpu

 

again Thanks for all the help MM67

 

T.

 

edit; removed this part

Scope (\)

{

Name (CFGD, 0x040383F2)

Name (PDC0, 0x80000000)

Name (PDC1, 0x80000000)

Name (PDC2, 0x80000000)

Name (PDC3, 0x80000000)

}

DSDT.dsl_speedstep_X.zip

Link to comment
Share on other sites

Thanks. Yes, I have CSTInfo in ioreg (I have attached a screengrab). Cheers FormerlyKnownAs :D

 

has anyone of the heros her found out how that Step2_0 - key shown in pic attatched - works ?

I believe thats the SP1, SP2,SP3.. keys in that .plist of ACPI_SMCplugin and are different for each Macmodell group by Model name (iMacx,y MacProx,y).

Maybe thats the thresould of the stepping, means at which CPU load % steps up / down ?

An try if SP1,SP2 is Step1_0, Step2_0.... would be to change MacModell (by chameleon smbios .plist), reboot, and look after that key again.

 

Pic "stolen" from FormerlyKnownAs :)

IOReg_CSTinfo.png

Link to comment
Share on other sites

Yea, anyone with a Gigabyte EP45-UD3P or a similar board have sleep working when injecting cst and lpc in dsdt? I've tried a few lines so far and its just not sleeping.

 

Thanks,

 

Stell

 

Try this one Stellaola,

 

Sleep works for me when mouse and keyboard connected to the mobo (doesnt wake from keyboard or mouse when connected to my cinema display's hub.)

 

And like most people here, its still a work in progress.... :)

Keeza_dsdt.zip

Link to comment
Share on other sites

Yea, anyone with a Gigabyte EP45-UD3P or a similar board have sleep working when injecting cst and lpc in dsdt? I've tried a few lines so far and its just not sleeping.

 

Thanks,

 

Stell

 

hi there Stell,

 

can you post your dsdt?

maybe you already seen this but when the applelpc got loaded, one xtra option is shown in system pref

 

T.

post-157612-1257156003_thumb.png

Link to comment
Share on other sites

Try this one Stellaola,

 

Sleep works for me when mouse and keyboard connected to the mobo (doesnt wake from keyboard or mouse when connected to my cinema display's hub.)

 

And like most people here, its still a work in progress.... :star_smile:

 

Hey keeza, thanks for that. I wont be using it since it has your P-states, but i can use it for reference.

 

Honestly, I dunno why this seems to be so difficult. I guess i'm going to have to really try to dig deep and learn this stuff. Heres to more late nights... /grumble. :)

Link to comment
Share on other sites

Hey keeza, thanks for that. I wont be using it since it has your P-states, but i can use it for reference.

 

Honestly, I dunno why this seems to be so difficult. I guess i'm going to have to really try to dig deep and learn this stuff. Heres to more late nights... /grumble. :unsure:

Then use his DSDT and replace the values in _PSS with the onces for your CPU.

 

Note: I wonder why some people here keep running in circles...

 

has anyone of the heros her found out how that Step2_0 - key shown in pic attatched - works ?

I believe thats the SP1, SP2,SP3.. keys in that .plist of ACPI_SMCplugin and are different for each Macmodell group by Model name (iMacx,y MacProx,y).

Maybe thats the thresould of the stepping, means at which CPU load % steps up / down ?

An try if SP1,SP2 is Step1_0, Step2_0.... would be to change MacModell (by chameleon smbios .plist), reboot, and look after that key again.

You might not want to use a Mac Pro model identifier, but one of the older iMac's. And yes the SP data is the stepper data, but no so far nobody knows what it really does. Not to mention that the data in the kext is changed after it loads.

Link to comment
Share on other sites

Hello everybody!

 

I have been trying for the last 2 days to get this stuff working and I can report partial success! I figured out how to patch my DSDT with C-States and P-States and both appear to be working. I can see the CSTInfo key in IORegistryExplorer. No more _cst errors on boot! Also, when I boot in 32-bit mode I can see the multipliers jumping around in CPU-i. It only jumps between the highest and the lowest, but I don't really care because as long as it stays the lowest most of the time and goes up when I need it, I don't really care if I can have a bit more fine grained on-demand power.

 

However, my main goal, to reduce the temperatures, is not achieved yet. My temperature without IntelCPUPowerManagement.kext is about 54˚C. Without any patching but with AppleLPC, IntelCPUPM and so on loaded, temps are around 58˚C. With Patching I get around 53˚C. This is still quite far off the temperatures that some are reporting, like 40˚C. What concerns me is that the temperature under Ubuntu is around the same - is my CPU cooler screwed maybe?

 

To describe exactly what I did:

1. Extract SSDT tables in Linux, add all extracted methods DSDT.dsl (CPU1PM, CPU2PM were what I extracted)

2. Add _CST from MacPro3,1 (I had to change PDC0 to TYPE, saw that done in somebody else's DSDT) I did not make any adaptions to the C-States, hope that is correct...

3. Patch Info.plist in SMCPlatformPlugin with ICH9 device-id

 

Just for the record: Asus P5K-VM, E8400, DSDT is attached.

 

Did I forget something? Did I do anything wrong? Thanks in advance for any help!

 

Leon

dsdt.dsl.zip

Link to comment
Share on other sites

Hello everybody!

 

I have been trying for the last 2 days to get this stuff working and I can report partial success! I figured out how to patch my DSDT with C-States and P-States and both appear to be working. I can see the CSTInfo key in IORegistryExplorer. No more _cst errors on boot! Also, when I boot in 32-bit mode I can see the multipliers jumping around in CPU-i. It only jumps between the highest and the lowest, but I don't really care because as long as it stays the lowest most of the time and goes up when I need it, I don't really care if I can have a bit more fine grained on-demand power.

 

However, my main goal, to reduce the temperatures, is not achieved yet. My temperature without IntelCPUPowerManagement.kext is about 54˚C. Without any patching but with AppleLPC, IntelCPUPM and so on loaded, temps are around 58˚C. With Patching I get around 53˚C. This is still quite far off the temperatures that some are reporting, like 40˚C. What concerns me is that the temperature under Ubuntu is around the same - is my CPU cooler screwed maybe?

 

To describe exactly what I did:

1. Extract SSDT tables in Linux, add all extracted methods DSDT.dsl (CPU1PM, CPU2PM were what I extracted)

2. Add _CST from MacPro3,1 (I had to change PDC0 to TYPE, saw that done in somebody else's DSDT) I did not make any adaptions to the C-States, hope that is correct...

3. Patch Info.plist in SMCPlatformPlugin with ICH9 device-id

 

Just for the record: Asus P5K-VM, E8400, DSDT is attached.

 

Did I forget something? Did I do anything wrong? Thanks in advance for any help!

 

Leon

 

If I were you I'd take a look at Master Chief's work here.

 

Not so sure you have the P and C states right.

Link to comment
Share on other sites

Hey keeza, thanks for that. I wont be using it since it has your P-states, but i can use it for reference.

 

Honestly, I dunno why this seems to be so difficult. I guess i'm going to have to really try to dig deep and learn this stuff. Heres to more late nights... /grumble. :(

 

Sorry forget to mention to replace my p-states and cst info with yours, to suit your own processor.

Link to comment
Share on other sites

If I were you I'd take a look at Master Chief's work here.

 

Not so sure you have the P and C states right.

 

I double checked my P-States and put them directly into the _PSS Method like the link you gave me said. I also pasted the _CST method from the link... No luck, still everything indicates it's working but the temperature is still at 54˚C...

Link to comment
Share on other sites

I have been looking at my Scope(_PR)'s and doing some reading and testing and have slightly changed the way my _CST is represented. I have the same results with these revised Scope(_PR)'s with VoodooMonitor showing my voltage drop below my lowest P-State as I had previously which leads me to believe it's okay.

 

I want to ask is what I have done acceptable in ASL programming terms? I am asking about the changes I have made to the _CST return package, and in losing the last blank field from the Register element. Also to having all my CST info in the _PR.CPU0 scope and just referring to it in _PR.CPU1 scope.

 

Previous Scope(_PR)'s

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

   Scope (_PR.CPU0)
   {
       Method (_PSS, 0, NotSerialized)
       {
           Return (Package(0x05)
           {
               Package (0x06) { 2660, 0, 10, 10, 0x0A1D, 0 },
               Package (0x06) { 2394, 0, 10, 10, 0x091C, 1 },
               Package (0x06) { 2128, 0, 10, 10, 0x081C, 2 },
               Package (0x06) { 1862, 0, 10, 10, 0x071B, 3 },
               Package (0x06) { 1596, 0, 10, 10, 0x61B8, 4 }
           })
       }
       Method (_CST, 0, NotSerialized)
       {
           Return (Package (0x02)
           {
               One, 
               Package (0x04) {ResourceTemplate () {Register (FFixedHW, 0x1, 0x2, 0x0, 0x1,)},0x01,0x9D,0x3E8}
           })
       }
   }
   Scope (_PR.CPU1) 
   {
       Method (_CST, 0, NotSerialized)
       {
           Return (Package (0x04)
           {
               0x03, 
               Package (0x04) {ResourceTemplate () {Register (FFixedHW, 0x01, 0x02, 0x000, ,)},0x01,0x00,0x3E8}, 
               Package (0x04) {ResourceTemplate () {Register (FFixedHW, 0x08, 0x00, 0x414, ,)},0x02,0x01,0x1F4}, 
               Package (0x04) {ResourceTemplate () {Register (FFixedHW, 0x08, 0x00, 0x415, ,)},0x03,0x55,0x0FA} 
           })
       }
   }

 

Revised Scope(_PR)'s

Scope (_PR)
   {
       Processor (CPU0, 0, 0x00000410, 6) {}
       Processor (CPU1, 1, 0x00000410, 6) {}
   }

   Scope (_PR.CPU0)
   {
Method (_PSS, 0, NotSerialized)
{
	Return (Package(0x05)
	{
		Package (0x06) { 2660, 0, 10, 10, 0x0A1D, 0 },
		Package (0x06) { 2394, 0, 10, 10, 0x091C, 1 },
		Package (0x06) { 2128, 0, 10, 10, 0x081C, 2 },
		Package (0x06) { 1862, 0, 10, 10, 0x071B, 3 },
		Package (0x06) { 1596, 0, 10, 10, 0x61B8, 4 }
	})
}
       Method (_CST, 0, NotSerialized)
       {
	Return (Package (0x04)
	{
		0x03, 
		Package (0x04) {ResourceTemplate () {Register (FFixedHW, 1, 2, 0x000)},1,1,1000}, 
		Package (0x04) {ResourceTemplate () {Register (FFixedHW, 8, 0, 0x414)},2,1,500}, 
		Package (0x04) {ResourceTemplate () {Register (FFixedHW, 8, 0, 0x415)},3,85,250} 
	})
       }
   }

   Scope (_PR.CPU1) 
   {
Method (_CST, 0, NotSerialized)
       {
            Return (\_PR.CPU0._CST())
       }
   }

Link to comment
Share on other sites

I double checked my P-States and put them directly into the _PSS Method like the link you gave me said. I also pasted the _CST method from the link... No luck, still everything indicates it's working but the temperature is still at 54˚C...

 

Yeah but take a look at all the other changes he's made. You're going to need a few of them too. Particularly SBUS

 

			Device (SBUS) // Newly added Device.
		{
			Name (_ADR, 0x001F0003)

			// pci8086,2930 -> pci8086,3a30
			Method (_DSM, 4, NotSerialized)
			{
				Store (Package (0x04)
				{
					"name",
					"pci8086,3a30",

					"device-id", 
					Buffer (0x04)
					{
						0x30, 0x3a, 0x00, 0x00
					}
				}, Local0)
				DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
				Return (Local0)
			}

Link to comment
Share on other sites

Then use his DSDT and replace the values in _PSS with the onces for your CPU.

 

Note: I wonder why some people here keep running in circles...

 

 

You might not want to use a Mac Pro model identifier, but one of the older iMac's. And yes the SP data is the stepper data, but no so far nobody knows what it really does. Not to mention that the data in the kext is changed after it loads.

 

I know I can add PSS values, it's not that. I'm trying to find a method where i can just inject some sort of generic CST info and still allow for a cooler CPU while retaining sleep no matter which CPU is use. I know it sounds kind of ass backwards, but it's what I want. <_<

 

Stell

Link to comment
Share on other sites

@blackosx No need to use Method _CST, _PSS, etc.

A simple way is to use Name (_PSS, Package (0xXY) or Name (_CST, Package (0xXY)...

Great, Thanks :P

That works and this is what I now have...

Scope (_PR.CPU0)
   {
       Name (_PSS, Package() 
{
	Package (0x06) { 2660, 0, 10, 10, 0x0A1D, 0 },
	Package (0x06) { 2394, 0, 10, 10, 0x091C, 1 },
	Package (0x06) { 2128, 0, 10, 10, 0x081C, 2 },
	Package (0x06) { 1862, 0, 10, 10, 0x071B, 3 },
	Package (0x06) { 1596, 0, 10, 10, 0x61B8, 4 }
})

       Name (_CST, Package() 
       { 
	3, 
	Package (0x04) {ResourceTemplate () {Register (FFixedHW, 1, 2, 0x000)},1,1,1000}, 
	Package (0x04) {ResourceTemplate () {Register (FFixedHW, 8, 0, 0x414)},2,1,500}, 
	Package (0x04) {ResourceTemplate () {Register (FFixedHW, 8, 0, 0x415)},3,85,250} 
       })
   }

   Scope (_PR.CPU1) 
   {
Name (_CST, Package() 
       { 
	3, 
	Package (0x04) {ResourceTemplate () {Register (FFixedHW, 1, 2, 0x000)},1,1,1000}, 
	Package (0x04) {ResourceTemplate () {Register (FFixedHW, 8, 0, 0x414)},2,1,500}, 
	Package (0x04) {ResourceTemplate () {Register (FFixedHW, 8, 0, 0x415)},3,85,250} 
       })
   }

 

Can I call the Name _CST from Scope (_PR.CPU0), in Scope (_PR.CPU1) to save repeating the code? If so, how?

Link to comment
Share on other sites

Ever seen compiler errors like: "Reserved method has too many arguments (_PSS requires 0)"?

 

I guess not, but I don't think that Intel was playing stupid. Yes Name creates an object, but it sure isn't the same thing as a Method. And when things work, that doesn't necessarily mean that you should use it. Try this as a tester:

			Method (_PSS, 1, NotSerialized)
		{
			Return (Package (0x04)
			{
				  // your data here
			})
		}

That'll raise the error for you. Now read that message, skipping the obviously wrong argument counter of course, and tell me why Intel et all add this message, and take note of the text "Reserved method". Not to mention that every single DSDT I have seen so far uses Method instead of Name. I wonder why. Not :help:

Link to comment
Share on other sites

Name (_CST, Package()

{

3,

Package (0x04) {ResourceTemplate () {Register (FFixedHW, 1, 2, 0x000)},1,1,1000},

Package (0x04) {ResourceTemplate () {Register (FFixedHW, 8, 0, 0x414)},2,1,500},

Package (0x04) {ResourceTemplate () {Register (FFixedHW, 8, 0, 0x415)},3,85,250}

})

What does the values (each) mean.

I ask to adapt it to my needs (C2D, C1 State only).

414/415hex are clear , the adress. But whats that 1,1,1000 ... ?

When i only want C1 State any changes in first line (3 > ? )

Thanks.

 

The less the dsdt injections the more i like such things. Some are very huge and also depend with other changes = more risk of errors.

Link to comment
Share on other sites

Can I call the Name _CST from Scope (_PR.CPU0), in Scope (_PR.CPU1) to save repeating the code? If so, how?

If in first Scope you used Name...:

        Method (_PSS, 0, NotSerialized)
       {
           Return (^^CPU0._PSS)
       }

If you used Method...:

        Method (_CST, 0, NotSerialized)
       {
           Return (^^CPU0._CST ())
       }

Link to comment
Share on other sites

Okay. So from what I can gather is this works...

Scope (_PR)
   {
       Processor (CPU0, 0, 0x00000410, 6) {}
       Processor (CPU1, 1, 0x00000410, 6) {}
   }

   Scope (_PR.CPU0)
   {
Method (_PSS, 0, NotSerialized)
{
	Return (Package(0x05)
	{
		Package (0x06) { 2660, 0, 10, 10, 0x0A1D, 0 },
		Package (0x06) { 2394, 0, 10, 10, 0x091C, 1 },
		Package (0x06) { 2128, 0, 10, 10, 0x081C, 2 },
		Package (0x06) { 1862, 0, 10, 10, 0x071B, 3 },
		Package (0x06) { 1596, 0, 10, 10, 0x61B8, 4 }
	})
}
       Method (_CST, 0, NotSerialized)
       {
	Return (Package (0x04)
	{
		0x03, 
		Package (0x04) {ResourceTemplate () {Register (FFixedHW, 1, 2, 0x000)},1,1,1000}, 
		Package (0x04) {ResourceTemplate () {Register (FFixedHW, 8, 0, 0x414)},2,1,500}, 
		Package (0x04) {ResourceTemplate () {Register (FFixedHW, 8, 0, 0x415)},3,85,250} 
	})
       }
   }

   Scope (_PR.CPU1) 
   {
Method (_CST, 0, NotSerialized)
       {
            Return (\_PR.CPU0._CST())
       }
   }

and so does this...

Scope (_PR)
   {
       Processor (CPU0, 0, 0x00000410, 6) {}
       Processor (CPU1, 1, 0x00000410, 6) {}
   }

   Scope (_PR.CPU0)
   {
       Name (_PSS, Package() 
{
	Package (0x06) { 2660, 0, 10, 10, 0x0A1D, 0 },
	Package (0x06) { 2394, 0, 10, 10, 0x091C, 1 },
	Package (0x06) { 2128, 0, 10, 10, 0x081C, 2 },
	Package (0x06) { 1862, 0, 10, 10, 0x071B, 3 },
	Package (0x06) { 1596, 0, 10, 10, 0x61B8, 4 }
})

       Name (_CST, Package() 
       { 
	3, 
	Package (0x04) {ResourceTemplate () {Register (FFixedHW, 1, 2, 0x000)},1,1,1000}, 
	Package (0x04) {ResourceTemplate () {Register (FFixedHW, 8, 0, 0x414)},2,1,500}, 
	Package (0x04) {ResourceTemplate () {Register (FFixedHW, 8, 0, 0x415)},3,85,250} 
       })
   }

   Scope (_PR.CPU1) 
   {
Method (_CST, 0, NotSerialized)
       {
            Return (\_PR.CPU0._CST)
       }
   }

I am very new to ASL and doing my best to learn and try to understand best practices. Page 315 of the ACPIspec40.pdf does show Name being used in the _CST example. But if using Method is best then I'll use that.. Thanks everyone.

 

Thing is, I originally posted my revised _CST to ask about the different structure I have used and the revised Register Element sections just to make sure what I had done was okay...

 

 

@mitch_de

MasterChief explained what the Register elements mean here.

Link to comment
Share on other sites

Okay. So from what I can gather is this works...

 

<snip />

 

I am very new to ASL and doing my best to learn and try to understand best practices. Page 315 of the ACPIspec40.pdf does show Name being used in the _CST example. But if using Method is best then I'll use that.. Thanks everyone.

 

Thing is, I originally posted my revised _CST to ask about the different structure I have used and the revised Register Element sections just to make sure what I had done was okay...

They both work yes. And there are indeed examples of simple _CST objects in the ACPI specifications, but there is a small difference, but in the end it all boils down to style preferences (nits) and readability. Whatever suits you best :)

Link to comment
Share on other sites

 Share

×
×
  • Create New...