Jump to content

jpcxc

jpcxc

Member Since 04 Nov 2009
Offline Last Active Jun 23 2011 02:38 AM
-----

Posts I've Made

In Topic: Need help, no sounds before sleep and wake up...

02 August 2010 - 09:01 AM

Do not use report to ask for help.
Or do you want to be banned?

Also, why do you put the word help 3 times in the title of your topic? Are you drowning?

Read the rules:

http://www.insanelym...?act=boardrules


Sorry, I am not drowing. I'm so sorry about my poor English about how to show my idea in English. I really need help. But i made a mistake when translate Chinese to English.

In Topic: ALL Fan related issues HERE. Laptop fans, overheating, cold boot no fans +

08 January 2010 - 08:38 AM

Anyone solve the fan issues with a cold boot?
I try everything but no effect.......
Can anyone help me and tell me what details step should i do?
thank you, thank you very much!
My bios can't make a DSDT path,it must be used? so sad i am.

For anybody, who have coldboot fan issues (fan is not spiinnig, or spinning slowly few enough for cooling, and the machine overheats, then reboots), try this:

Notes:

1. You must have AppleACPIPlatform.kext installed in \System\Library\Extensions, and used by system (type kextstat in terminal to see if it's loaded, or look into the \System\Library\Extensions folder and if AppleACPIPlatform.kext is blue then it's used by system)

2. You must have AppleACPIThermal.kext in the AppleACPIPlatform.kext's Contents\Plugins folder

3. You must have Chameleon2 bootloader or any other loader/efi emulator capable of handling custom dsdt. Chameleon2 can handle DSDT.aml file, when it's in the root (/) directory. If you have one installed here with fixes, use this as source file for the process, if you don't have one, then use DSDTSE v1.3.5 or newer for create one.

4. The tool DSDTSE is required for the process, put it to your application folder

The fix:

1. Open your DSDT.aml with DSDTSE. The tool decompiles it, and gives you a window with programming codes. There are several methods for fixing the coldboot issue, for the hp compaq nx7300/7400 do this(it maybe works on another typecoded or another branded machines too):

On hp nx7300 you may see this somewhere in the code:

ThermalZone (TZ0){Name (_AL0, Package (0x01){C324})Name (_AL1, Package (0x01){C325})Name (_AL2, Package (0x01){C326})Name (_AL3, Package (0x01){C327})Method (_AC0, 0, NotSerialized){Return (C315 (C30A, 0x00))}Method (_AC1, 0, NotSerialized){Return (C315 (C309, 0x00))}Method (_AC2, 0, NotSerialized){Return (C315 (C308, 0x00))}Method (_AC3, 0, NotSerialized){Return (C315 (C307, 0x00))}Method (_CRT, 0, Serialized){Return (C315 (0x04, 0x00))}Method (_TMP, 0, Serialized){If (LEqual (C30E, 0x00)){\_TZ.C31B ()Store (0x01, C30E)}Return (C31D (0x00))}}

This is the description of a thermal zone, called tz0. If your system have only one cooling fan this is the descriptor of the cpu cooling scheme.
The _ALx methods are describing a fan mode(each paired with a fan speed somewhere in the file),_AL3 has the slowest, but not 0rpm fan speed(the 0 rpm described somewhere else in the file as Zero), _AL0 has the fastest(usually full fan speed).
The _ACx methods describing each threshold temperature paired with each fan speed. _AC3 belongs to the slowest but not 0 rpm fan speed and _AC0 belongs to the full fan speed. Each _ACx calls a function, which retrieves the current treshold speed associated with its fan mode from an array. When the temperature value retrieved, the _ACx passes it with a Return to his caller.
The _TMP method works like an _ACx, but its return value is not the threshold temp of each mode. Its return value is the current temperature from the sensor.
There is also a _HOT or a _CRT (or both)method. The _HOT returns a critical temp. If it's reached the computer goes to sleep, prevent the overheat damage of the system. The _CRT does exactly the same, but it returns the critical temperature of shutdown.

The system is continuously comparing the return value of the _TMP(current temperature) with the return value of the _HOT and/or the _CRT, to prevent damage of the system, and with the _ACx-es(temperature threshold values for each fan mode) to determine which fan mode must be activated.If a current temperature value(_TMP) is bigger or equal with an _ACx temp value the system sets the corresponding ALx mode ON, and the fan speeds up....

So...I decided to install iDeneb 10.5.8 to my friend's HP Compaq nx7300, i installed it , and the next day the coldboot issue showed up. After googling a lot and reading this topic too :) ) , I thought, the coldboot issue showed up because at that moment, when the OSX boots the current cpu temp of a cold booted machine doesn't reach a threshold value. That's why the fan remains slow or stopped till the next reboot, when the current cpu temperature reaches the treshold. So I had to find out a solution, which fools the system.
If the _TMP method returns an extremely big value(bigger from the _AC0 temp, but smaller from the _HOT or _CRT threshold temp), the fan begins on maximum speed and stays here when the system boots. It doesn't matter it's cold boot or not.
You can read the default temperature thresholds for the fan modes and the critical temperature's default value from the ioreg. To do this, push the "Get" button below the registry label in DSDTSE's main window, the IOREG utilit??? appears. On a HP nx7300/7400 you can found the values you need for the TZ0 at the IOSERVICE:/AppleACPIPlatformexpert/TZ0/AppleACPIThermalZone entry.
On the bottom of the right panel you can see the critical temp for shutdown/sleep in hex value(0xsomething). If you convert the value to decimal, and you divide the decimal number with 10, you will get the temp treshold values in Kelvin.(Kelvin value minus 273.16 gives you the Celsius value)
On the top of the right panel you can see numbers, open 0 with the arrow, then open the 0 or 1 or 2 or 3 somewhere you can see temperature values in hex format (0xsomething). With the same method described above, you can get the Celsius treshold values of these fan modes. but you don't need to do that. You must choose the biggest hex value from these temp values of mode 0 1 2 3.... Call this hex value the MAX. You must choose a value between the MAX and the critical temp hex value. For me it was 0xE00. It's 85.4 Celsius. Add it has only 3 digits, add a 0 before the first (0xE00 becomes 0x0E00).

So the hack:

original code:
Method (_TMP, 0, Serialized){If (LEqual (C30E, 0x00)){\_TZ.C31B ()Store (0x01, C30E)}Return (C31D (0x00)) //the acpi gives the sensor temp here for the system}}


the fix:
Method (_TMP, 0, Serialized){If (LEqual (C30E, 0x00)){\_TZ.C31B ()Store (0x01, C30E)}(C31D (0x00)) //call the function wich read the current temp from Return (0x0E00) //the sensor,but gives something else to the caller//(the value between the biggest fan speed's threshold temp and _CRT)}}

Modify these things in your file and save it in DSDTSE to the DSDT folder in the /Library/Application Support/ dsdtse's folder(i don' know its name, because i'm not on mac currently, you have to find it).
Then hit compile in the right window of DSDTSE, and when everything went fine(NO error, no or some warnings...), you have a new dsdt.aml file in DSDTSE's application support folder. You can close the DSDTSE now.
Make a backup of your current DSDT.aml file(usually stays in / or /Extra, if any), and then replace it with the newly created DSDT.aml.
If everything went fine, the next cold boot you have your CPU fan at full speed and it stays here. It's noisy, but it protects your cpu from overheating.

But I think there is a better method, which I haven't tested yet, due to the nx7300 is not mine. Can somebody test it to me?

So, the fix:

As described above, you can read the default threshold temperatures of the fan modes from IOREG. See what is the mode number of the mode with the second smaller value(actually you determine, which is the second slowest fan mode's identifier number). For the nx7300 it's the 2 so you have to modify the _AC2.
This fix fools the system to activate the fans at mode2 on 0 Celsius :)
0Celsius has a hex value: 0x0AAB

original code:
Method (_AC2, 0, NotSerialized){Return (C315 (C308, 0x00))//system retrieves the current treshold value //for mode _AL2 from the ACPI table}

modified code:
Method (_AC2, 0, NotSerialized){C315 (C308, 0x00)//system retrieves the current treshold value for//mode _AL2 from the ACPI tableReturn (0x0AAB) //but gets the value of 0 Celsius, so the fan spins on //mode 2's speed even on cold boot}

In this fix you only modify these things, don't modify the _TMP method. You can change the other_ACx-es like i described above with your custom treshold temperatures, which give you the option to make your own power strategy for the system(if you want a fan mode to switch on at x celsius, then add x with 273.1 and multiply the result with 10, now you got a result value in decimal, so convert it to hex and if it's only 3 hex digits long put a 0 before the first digit (0x0hexvalue), now you got the return value for the current _ACx, insert it to the code like in _AC2).The compiling, saving and booting with the DSDT.aml is the same like I described before in the _TMP fix's description.

I hope I can help somebody with this howto. Sorry for my poor english :)

If anyone interested, there is the ACPI specification, which describes the thermal management(that I described above and more infos) and the other functions of DSDT.

Good news: Modifiing the DSDT with the _TMP fix doesn't makes cpu temp monitor applications reading the incorrect temperature, for example this tool reads the current temperature correctly.

Bad news: Your cpu can fried with the _TMP method, if ALL of(NOT ANY of these, just ALL!!) these circumstances are valid for your system:
1. your computer doesn't have any other thermal zone than the cpu's(which is usually the tz0, I hacked)
2. And the other thermal zones doesn't have _CRT methods to prevent system damage
3. And your CPU stops because phisical failure of the fan motor or the fan cable or the fan propeller,etc physical thingy.

So I recommend the _ACx method if it works for you, and If not, I recommend this tool with the _TMP method to monitor cpu temperature on the menu bar.



the DSDT must be used? My bios can't make a DSDT path.Have any other ideas?Thanks.

In Topic: Fan not working in Compal JFT00

23 December 2009 - 06:03 AM

Hi,i have the same problem with my CPU fan.It don't work before into the windows and restart.
PS:CPU T2390
main bord PM965

Lenovo F41 A laptop(in some region it called Lenovo Y410,i am in China,and have a poor English,need help)
© 2014 InsanelyMac  |   News  |   Forum  |   Downloads  |   OSx86 Wiki  |   Mac Netbook  |   PHP hosting by CatN  |   Designed by Ed Gain  |   Logo by irfan  |   Privacy Policy