Jump to content
biotoxin

fancontrol hp pavilion g6 1339sg - dsdt modification

Recommended Posts

Hi


a few days ago i bought a new HPg and noticed the cpu reachin very high temperatures. since there is no fan control software supporting this notebook and the official hp fancontrol software is not working with this model, i decided to modify the dsdt, rising the fanspeed.


Since i have almost none of the required skills to do so, i´m looking for some tipps or support with this.

Thanks for yout time.


** I know this forum is not decided for problems like this one, but after days searching this seems to be not the worst idea i had :D **


Produkt: Pavilion g6 1339sg

Info: http://h10025.www1.hp.com/ewfrf/wc/product?product=5228884&lc=de&cc=de&dlc=de&lang=de&tmp_track_link=ot_we/prodlink/de_de/5228884/loc:0&cc=de


BiosVersion: 2012-04-16 , Version:F.63

Download: http://h10025.www1.hp.com/ewfrf/wc/softwareDownloadIndex?softwareitem=ob-104248-1&cc=de&dlc=de&lc=de&os=4063&product=5228884&sw_lang=


With activated "Fan always on" in Bios the fan is just that: always on - running at low speed. Almoust no sound or airstream can be noticed. Same behaviour in idle and "working".


With deactivated "Fan always off" the fan is off in idle, gets a short (1-3 sec.) boost-up if activated at around 60C and else stays at the same low speed as described above. Even if the cpu reaches very high temperatures it is not speeding up.


Orig DSDT is attached


I isolated the temperature zone and tried to understand what it does. this is what i´ve got so far:

 

// create package "_TZ" - containing a series of object references
Scope (_TZ)
{
	Name (TPTM, 75)
	Name (T085, Buffer (2)
	{
		83, 85
	})
	Name (T090, Buffer (2)
	{
		85, 95
	})
	Name (T100, Buffer (2)
	{
		98, 100
	})
	Name (T105, Buffer (2)
	{
		100, 110
	})
	Name (EDTM, 1)
	Name (S4TP, 100)
	ThermalZone (TZ01)
	{
		// method "_HOT"
		//
		// If the used OS is Windows 2006 or above (Windows 2006 SP1 is not
		// included here), then check the value of object "TJMX"
		//			
		// If its equal to
		//					"85" -	return "3582" and store "85" in object S4TP (used in method: "_TMP")
		//					"90" -	return "3632" and store "95" in object S4TP (used in method: "_TMP")
		//					"100" -	return "3732" and store "100" in object S4TP (used in method: "_TMP")
		//					"105" -	return "3782" and store "110" in object S4TP (used in method: "_TMP")
		//					else -	return "3732" and store "100" in object S4TP (used in method: "_TMP")
		//
		// -------------------------------------------------------------------
		//
		// "TJMX": unknown, yet
		//
		//	OperationRegion (OGNS, SystemMemory, 0x9CFBA018, 0x000010E2)
		//		Field (OGNS, AnyAcc, Lock, Preserve)
		//			{
		//				[...]
		//				TJMX,   8,
		//				[...]
		//			}
		Method (_HOT, 0, Serialized)
		{
		Name (_T_0, 0)
			If (LGreaterEqual (OSYS, 2006))
			{
				While (1)
				{
					Store (TJMX, _T_0)
					If (LEqual (_T_0, 85))
					{
						Store (DerefOf (Index (T085, 1)), S4TP)
						Return (Add (2732, Multiply (DerefOf (Index (T085, 1)), 10
						)))
					}
					Else
					{
						If (LEqual (_T_0, 90))
						{
                              	Store (DerefOf (Index (T090, 1)), S4TP)
                              	Return (Add (2732, Multiply (DerefOf (Index (T090, 1)),10
							)))
                          	}
                          	Else
                          	{
							If (LEqual (_T_0, 100))
							{
								Store (DerefOf (Index (T100, 1)), S4TP)
								Return (Add (2732, Multiply (DerefOf (Index (T100, 1)), 10
								)))
							}
							Else
							{
								If (LEqual (_T_0, 105))
								{
									Store (DerefOf (Index (T105, 1)), S4TP)
									Return (Add (2732, Multiply (DerefOf (Index (T105, 1)), 10
									)))
								}
                                  	Else
                                  	{
                                      	Store (DerefOf (Index (T100, 1)), S4TP)
                                    	Return (Add (2732, Multiply (DerefOf (Index (T100, 1)), 10
									)))
								}
							}
						}
					}
					Break
				}		
			}
		}
		// method: "_CRT"
		//
		// For any other OS than Windows 2006 and above (Windows 2006 SP1 is
		// included here): check the value of object "TJMX"
		//
		// If its equal to
		//					"85" -	return "3582" and store "85" in object S4TP (used in method: "_TMP")
		//					"90" -	return "3632" and store "95" in object S4TP (used in method: "_TMP")
		//					"100" -	return "3732" and store "100" in object S4TP (used in method: "_TMP")
		//					"105" -	return "3782" and store "110" in object S4TP (used in method: "_TMP")
		//					else -	return "3732" and store "100" in object S4TP (used in method: "_TMP")
		//
		// object "S4TP"
		//
		// -------------------------------------------------------------------
		//
		// "TJMX": unknown, yet
		//
		//	OperationRegion (OGNS, SystemMemory, 0x9CFBA018, 0x000010E2)
		//		Field (OGNS, AnyAcc, Lock, Preserve)
		//			{
		//				[...]
		//				TJMX,   8,
		//				[...]
		//			}
		//	
           Method (_CRT, 0, Serialized)
           {
			Name (_T_0, 0)
               If (LLess (OSYS, 2006))
               {
                   While (1)
                   {
                       Store (TJMX, _T_0)
                       If (LEqual (_T_0, 85))
                       {
                           Store (DerefOf (Index (T085, 1)), S4TP)
                           Return (Add (2732, Multiply (DerefOf (Index (T085, 1)), 10
                           )))
                       }
                       Else
                       {
                           If (LEqual (_T_0, 90))
                           {
                               Store (DerefOf (Index (T090, 1)), S4TP)
                               Return (Add (2732, Multiply (DerefOf (Index (T090, 1)), 10
							)))
                           }
                           Else
                           {
                               If (LEqual (_T_0, 100))
                               {
                                   Store (DerefOf (Index (T100, 1)), S4TP)
                                   Return (Add 2732, Multiply (DerefOf (Index (T100, 1)), 10
								)))
                               }
                               Else
                               {
                                   If (LEqual (_T_0, 105))
                                   {
                                       Store (DerefOf (Index (T105, 1)), S4TP)
                                       Return (Add (2732, Multiply (DerefOf (Index (T105, 1)), 10
									)))
                                   }
                                   Else
                                   {
                                       Store (DerefOf (Index (T100, 1)), S4TP)
                                       Return (Add (2732, Multiply (DerefOf (Index (T100, 1)), 10
									)))
                                   }
                               }
                           }
                       }
                       Break
                   }
               }
           }
		// method: "_TMP"
		//
		// if 	unknown device "\_SB.PCI0.LPCB.EC0.ECOK" 	is reporting value "1"
		// then
		//
		// 		if the value reported by unknown device "\_SB.PCI0.LPCB.EC0.RTMP"  is greater or equal to "83", "85", "98" or "100" (these values come
		//		from method _HOT and _CRT - object S4TP(
		// 		AND unknown device "\_SB.PCI0.LPCB.EC0.QWHF" is not reporting value "1", store "1" in object "HTS4"
		//
		//		if object "TJMX" is not "85" take value from method "CTMT" to calculate the result,
		//		else use the value reported by unknown device "\_SB.PCI0.LPCB.EC0.RTMP"
		//		(Return (Add (2732, Multiply (VALUE_CTMT_OR_DEVICE, 10))))
		//
		// else
		//
		//		return "3482"
		//
		//
		//
		//		object "HTS4"
		//
		//			IndexField (CMSI, CMSD, ByteAcc, NoLock, Preserve)
		//			{
		//				[...]
		//				HTS4,   1,
		//				[...]
		//			}
		//			
		//		unknown devices:		\_SB.PCI0.LPCB.EC0.ECOK
		//								\_SB.PCI0.LPCB.EC0.RTMP
		//								\_SB.PCI0.LPCB.EC0.QWHF
		//
           Method (_TMP, 0, Serialized)
		{
               If (LEqual (\_SB.PCI0.LPCB.EC0.ECOK, 1))
               {
                   Store (\_SB.PCI0.LPCB.EC0.RTMP, Local0)
                   If (LAnd (LGreaterEqual (Local0, S4TP), LNotEqual (\_SB.PCI0.LPCB.EC0.QWHF, 1)))
                   {
                       Store (1, HTS4)
                   }
                   If (LNotEqual (TJMX, 85))
                   {
                       CTMT (Local0)
                   }
                   Return (Add (2732, Multiply (Local0, 10)))
               }
               Else
               {
                   Return (Add (2732, Multiply (TPTM, 10)))
               }
           }
		// method: "_PSL"
		//
		// check the value of object "TCNT" and identify and return associated CPU config
		//
		//	object "TCNT":
		//
		//		OperationRegion (GNVS, SystemMemory, 0x9CFBCE18, 0x000001BA)
		//		Field (GNVS, AnyAcc, Lock, Preserve)
		//			{
		//				[...]
		//				TCNT,   8, 
		//				[...]
		//			}
		//
           Method (_PSL, 0, NotSerialized)
           {
               If (LEqual (TCNT, 8))
               {
                   Return (Package (8)
                   {
                       \_PR.CPU0, 
                       \_PR.CPU1, 
                       \_PR.CPU2, 
                       \_PR.CPU3, 
                       \_PR.CPU4, 
                       \_PR.CPU5, 
                       \_PR.CPU6, 
                       \_PR.CPU7
                   })
               }
               If (LEqual (TCNT, 4))
               {
                   Return (Package (4)
                   {
                       \_PR.CPU0, 
                       \_PR.CPU1, 
                       \_PR.CPU2, 
                       \_PR.CPU3
                   })
               }
               If (LEqual (TCNT, 2))
               {
                   Return (Package (2)
                   {
                       \_PR.CPU0, 
                       \_PR.CPU1
                   })
               }
               Return (Package (1)
               {
                   \_PR.CPU0
               })
           }
		// method: "_SCP"
		//
		// If the used OS is above Windows 2006 SP1
		// then
		// 			store "0" in object "CTYP"
		//			and
		//			if unknown device "\_SB.PCI0.LPCB.EC0.ECOK" is "1"
		//			store "1" in unknwon device "\_SB.PCI0.LPCB.EC0.TRPM" (turn device on?)
		//	else
		// 			store "0" in object "CTYP"
		//			and
		//			if unknown device "\_SB.PCI0.LPCB.EC0.ECOK" is "1"
		//			store "0" in unknwon device "\_SB.PCI0.LPCB.EC0.TRPM" (turn device off?)
		//
		//
		// object: "CTYP"
		//
		//		OperationRegion (GNVS, SystemMemory, 0x9CFBCE18, 0x000001BA)
		//		Field (GNVS, AnyAcc, Lock, Preserve)
		//			{
		//				[...]
		//				CTYP,   8, 
		//				[...]
		//			}
		//
           Method (_SCP, 1, Serialized)
           {
               If (LGreater (OSYS, 2006))
               {
                   Store (0, CTYP)
                   If (LEqual (\_SB.PCI0.LPCB.EC0.ECOK, 1))
                   {
                       Store (Arg0, \_SB.PCI0.LPCB.EC0.TRPM)
                   }
               }
               Else
               {
                   Store (0, CTYP)
                   If (LEqual (\_SB.PCI0.LPCB.EC0.ECOK, 1))
                   {
                       Store (0, \_SB.PCI0.LPCB.EC0.TRPM)
                   }
               }
           }
		// method: "_PSV"
		//
		// if object "CTYP" is "1"
		//
		//		return "3432"
		//
		// else
		//
		//		if object "PPMF" is "0" check if object "TJMX" is
		//		
		//				85 - return "3645" (object "PSVD" returns "0") / "3372" (object "PSVD" returns "19") / "3442" (object "PSVD" returns "12")
		//				90 - return "3582" (object "PSVD" returns "0") / "3392" (object "PSVD" returns "19") / "3562" (object "PSVD" returns "12")
		//				100 - return "3712" (object "PSVD" returns "0") / "3522" (object "PSVD" returns "19") / "3592" (object "PSVD" returns "12")
		//				105 - return "3732" (object "PSVD" returns "0") / "3542" (object "PSVD" returns "19") / "3612" (object "PSVD" returns "12")
		//				else - return "3712" (object "PSVD" returns "0") / "3522" (object "PSVD" returns "19") / "3592" (object "PSVD" returns "12")
		//
		// object: "PPMF"
		//
		//		OperationRegion (GNVS, SystemMemory, 0x9CFBCE18, 0x000001BA)
		//		Field (GNVS, AnyAcc, Lock, Preserve)
		//			{
		//				[...]
		//				PPMF,   32,  
		//				[...]
		//			}
		//
		// object "PSVD:	" can be "0", "19", "12" // gets values from method "_Q92"
		//
           Method (_PSV, 0, Serialized)
           {
               Name (_T_0, 0)
               If (CTYP)
               {
                   Return (3432)
               }
               Else
               {
                   And (PPMF, 1, Local0)
                   If (Local0)
                   {
                       While (1)
                       {
                           Store (TJMX, _T_0)
                           If (LEqual (_T_0, 85))
                           {
                               Return (Add (2732, Multiply (Subtract (DerefOf (Index (T085, 0)), 
                                   PSVD), 10)))
                           }
                           Else
                           {
                               If (LEqual (_T_0, 90))
                               {
                                   Return (Add (2732, Multiply (Subtract (DerefOf (Index (T090, 0)), 
                                       PSVD), 10)))
                               }
                               Else
                               {
                                   If (LEqual (_T_0, 100))
                                   {
                                       Return (Add (2732, Multiply (Subtract (DerefOf (Index (T100, 0)), 
                                           PSVD), 10)))
                                   }
                                   Else
                                   {
                                       If (LEqual (_T_0, 105))
                                       {
                                           Return (Add (2732, Multiply (Subtract (DerefOf (Index (T105, 0)), 
                                               PSVD), 10)))
                                       }
                                       Else
                                       {
                                           Return (Add (2732, Multiply (Subtract (DerefOf (Index (T100, 0)), 
                                               PSVD), 10)))
                                       }
                                   }
                               }
                           }

                           Break
                       }
                   }
               }
           }
           Name (_TC1, 2)
           Name (_TC2, 5)
           Name (_TSP, 50)
           Name (REGN, "Processor Thermal Zone")
           Name (FMAX, 5000)
           Name (FMIN, 0)





           Method (FRSP, 0, NotSerialized)
           {
               Store (0, Local2)
               If (LEqual (\_SB.PCI0.LPCB.EC0.ECOK, 1))
               {
                   Store (\_SB.PCI0.LPCB.EC0.RPM1, Local0)
                   Store (\_SB.PCI0.LPCB.EC0.RPM2, Local1)
                   ShiftLeft (Local1, 8, Local1)
                   Or (Local0, Local1, Local0)
                   If (LNotEqual (Local0, 0))
                   {
                       Divide (480000, Local0, Local0, Local2)
                   }
               }

               Return (Local2)
           }








           Method (FSSP, 1, NotSerialized)
           {
               If (LEqual (\_SB.PCI0.LPCB.EC0.ECOK, 1))
               {
                   If (LNotEqual (Arg0, 0))
                   {
                       Store (0, \_SB.PCI0.LPCB.EC0.SFAN)
                   }
                   Else
                   {
                       Store (2, \_SB.PCI0.LPCB.EC0.SFAN)
                   }
               }
           }








           Method (CTMT, 1, NotSerialized)
           {
               If (LEqual (\_SB.PCI0.LPCB.EC0.ECOK, 1))
               {
                   If (LGreaterEqual (Arg0, TBOF))
                   {
                       If (LEqual (\_SB.PCI0.LPCB.EC0.TMDE, 1))
                       {
                           Store (0, EDTM)
                           Store (1, \_SB.PCI0.LPCB.EC0.ECTB)
                           Store (0, \_SB.PCI0.LPCB.EC0.TMDE)
                       }
                   }

                   If (LLessEqual (Arg0, TBON))
                   {
                       If (LEqual (\_SB.PCI0.LPCB.EC0.TMEE, 1))
                       {
                           Store (1, EDTM)
                           Store (0, \_SB.PCI0.LPCB.EC0.ECTB)
                           Store (0, \_SB.PCI0.LPCB.EC0.TMEE)
                       }
                   }

                   \_SB.PCI0.LPCB.EC0.TBMC (EDTM)
               }
           }
       }
   }

 

last 3 methods need to be analyzed, yet.


Maybe someone can tell me a way to identify these unknown devices.


Also I´m stuck at the moment. I cant find the trippoint of 60C in this code (fan is speeding up for 1, 2 sec. when the cpu reaches this temperature)!?


Guessing the calculations like "Return (Add (2732, Multiply (DerefOf (Index (T085, 1)), 10" are returning the fanspeed, but I don´t know exactly ...


Also:

 

		Name (T085, Buffer (2)
	{
		83, 85
	})
	Name (T090, Buffer (2)
	{
		85, 95
	})
	Name (T100, Buffer (2)
	{
		98, 100
	})
	Name (T105, Buffer (2)
	{
		100, 110
	})

 

Maybe these values are the temperatures wich the alters the fanspeed. but ... there are two values...


Thanks for helping


since the original dsdt contained more than 200 errors i tried to fix them.

the new dsdt got 2 errors left i cannot fix. - attached


remaining errors:

 

line 7382 - syntax error - unexpected "}", expecting "("
line 11022 - syntax error - unexpected $end and premature end-of-file

dsdt.7z

dsdt_fixed.7z

Link to comment
Share on other sites

Hm after hours and hours ... it seems the Thermalzone only reports temperatures and the fancontroll is managed by the motherboard itself. editing the reported temperatures wont´t work as i wished it would do: raising up fanspeed.

Seems modifying the hardware is the only solution.


As a temporary fix I capped the cpu at 1,75 GHZ ( -.- ) and undervolted it. With "fan always on" the temperature now stays at max. 70C (better than 85+C).


Good days :)

Link to comment
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.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  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.





×
  • Create New...
The popup will be closed in 15 seconds...