Posts: 14
Threads: 1
Joined: Feb 2012
Reputation:
3
02-24-2012, 09:08 AM
(This post was last modified: 03-13-2012, 03:54 PM by AHMED HOSSAM.)
FIC / Everex XT5000T
Bios Version: 1.1D
Bios Date: 09/23/2008
BIOS Direct Download (flashabl.rom in the iso file): http://pcambrosia.com/XT5000T/Files/Bios/BIOS11D.zip
Motherboard: FIC XTB70 (used by Fujitsu-Siemens Amilo Xa1526, Amilo 1527, Amilo 2528, Amilo 2529, and FIC Everex Xt5000T/Xt5300T notebooks)
Side questions:
Older bios version C.1C (6/28/2007) - Update allows BIOS to recognize 4GB memory configuration for Vista 64bit edition.
Bios 1.1D update implements low RPM(instead of stop) fan solution to ease thermal cycling concerns of Nvidia chipset.
1. I extracted and compared ACPI DSDT tables from both C.1C and 1.1D and found them identical. Could you perhaps help point out where the change was made? (Really clueless about assembly/IDA-Pro etc.)
2. Amilo Xa1527 Bios ver. 1.1S (24.10.2008)
Could it be flashed on the XT5000T? Is it unlocked, or provides more unlocking potential?
Given that Everex XT5000T & Amilo Xa1526 are almost identical (only the latter has bluetooth, and wifi card and touchpad differ, otherwise identical mobo)
Many thanks
Posts: 1,237
Threads: 17
Joined: Mar 2011
Reputation:
51
Welcome in BIOS-MODS
---- I have found some options for unlocking in the BIOS but it doesn`t include AHCI or VT as they aren`t available and i guess the chipset doesn`t support these features ........... The unlocked BIOS will be ready today .
Also i couldn`t extract the BIOS file from ver 1D ( from iso file ) but i have extracted the 1C ver and found some hidden options ( normally all BIOS version are the same in menus and options and changes only made to other settings like power management and display , so it will be the same options for the 1D ) ......... upload the .rom file of the 1D ver if you need to modify it .
By the way, don`t expect too much from most of BIOSes which supports AMD chipset as most of it has few hidden options unlike INTEL .
1) ACPI tables in general or specially the DSDT tables are for windows only to let it control some hardware including fans but alot of notebooks and specially ones with AMD chipset , its DSDT didn`t include commands for controlling fans ........ it`s only reporting information about thermal zones but not controlling fans ( sothat you found no changes in DSDT as they don`t need to modify it for controlling fans ) ............ the EMBEDDED CONTROLLER is the only device controlling fans and its using 80X51 assembly unlike the main BIOS which uses 80X86 ...... i don`t prefer modifying it as its hard and hasn`t got any recovery procedure .
2) I think no , any different hardware results in different BIOS modules and structure . Also , the BIOS will be broken if you flashed the wrong BIOS .
There are no new options in the BIOS except some options for the new hardware like CIR controller ......................... its not worth anything to risk and flash this BIOS as there are no new options will be available .
"Many of life's failures are people who did not realize how close they were to success when they gave up."
Posts: 14
Threads: 1
Joined: Feb 2012
Reputation:
3
Many thanks for your reply Hossam.
1.1D Bios ROM file: http://www.mediafire.com/?4c4zrj94g94hhyt
1.1D is the latest original, so the only one I need to have unlocked. If there's not much worth unlocking, then I'd advise you spare your valuable time & effort
On a side note, the best I can find so far in terms of simulating direct fan control:
1. Download latest RWEverything (currently v1.5.2)
2. Click Access -> Embedded Controller (or the EC icon in the toolbar)
3. Enter 006E and 006A for the EC_SC and EC_DATA values
4. Change bit E9 (E0 + 09 in the table) from 01 to FF to increase fan speed, or FF to 01 for low fan speed..
Changing bit E9 to 00 (whether from 01 or FF) seems to consistently result in quick system powerdown, even if temps are low. In some prior testing, I somehow managed to boot system with fan off, but couldn't duplicate this again...
STILL, the high speed as controllable by OS or direct EC access is not the full speed at which the fan blows when the laptop is first powered on (right before the BIOS loads). I understand I could just hack the sensor (3rd) wire of the fan, perhaps hook to an on/off switch accessible from outside the box to get full speed by disconnecting the sensor wire, whenever needed?
P.S. After a second look at the DST table, I guess I can at least change the thermal trip points for the fan control.
Code: Name(HILM,Package(0x04){
0x41,
0x49,
0x55,
0x69
})
Name(LOLM,Package(0x04){
0x00,
0x37,
0x44,
0x4E
})
Posts: 1,237
Threads: 17
Joined: Mar 2011
Reputation:
51
Hmm , you seems experienced sothat i can talk about advanced things and you will understand quickly
1) You are modifying the EC ram region not the firmware itslef ....... the commands you are making may not apply .
the EC FRIMWARE is usually the first 128KB of the BIOS file ( or a file called EC.BIN attached with bios files ) and it has a code name or a project name , you need to find the project name for your EC and download its data sheet then read it carefully and finally think about modifying the EC FW .
the EC FW extracts the values in the RAM and it has a region in the RAM called EC REGION and there you will find the values which you have found .................... so far , these values are not controlling anything or in other words its just like flags ....... EC reads this flags and work depending on it ...... these flags are changed every few seconds .
you may have control on fan in windows by using this method but its not permanent and every time you boot into windows you should do this ........ remember that these are just values in the ram not the main commands controlling the fan .
on a side not :-
you should knew that i have done like you exactly but with the ALIENWARE M18X-R1 as i was trying to increase fan speeds ...... i used RW tool like you , i modified DSDT table like you are trying to do now ....... and finally i wrongly modified the EC FW in the BIOS file and results in broken motherboard as there is no recovery for the EC FW ! just because the values in the DATA SHEETS is for the EC RAM as well not the main program !!! no one will give you the source code as no one have it and you will have to trace these flags to the main program in the 80x51 disassembler then modify it .
2) as you said that the DSDT isn`t changed from 1C to 1D and fans speeds are changed , then any modified values in the DSDT will lead you to no result ( i guess this ) .
as i promised , BIOS will be ready today
"Many of life's failures are people who did not realize how close they were to success when they gave up."
Posts: 14
Threads: 1
Joined: Feb 2012
Reputation:
3
(02-24-2012, 02:09 PM)AHMED HOSSAM Wrote: Hmm , you seems experienced sothat i can talk about advanced things and you will understand quickly
1) You are modifying the EC ram region not the firmware itslef ....... the commands you are making may not apply .
the EC FRIMWARE is usually the first 128KB of the BIOS file ( or a file called EC.BIN attached with bios files ) and it has a code name or a project name , you need to find the project name for your EC and download its data sheet then read it carefully and finally think about modifying the EC FW .
the EC FW extracts the values in the RAM and it has a region in the RAM called EC REGION and there you will find the values which you have found .................... so far , these values are not controlling anything or in other words its just like flags ....... EC reads this flags and work depending on it ...... these flags are changed every few seconds .
you may have control on fan in windows by using this method but its not permanent and every time you boot into windows you should do this ........ remember that these are just values in the ram not the main commands controlling the fan .
Of course, I understand all that. The whole point was that everex went out of business, and this laptop was only supported up to Win Vista. Getting some stuff working in Windows 7 x64 is a pain. old hotkey driver doesn't work, so I programmed a tool in AHK_L to interface with WMI to control LCD brightness with Function keys (Fn+F8/F9), turn off display (Win+F8), toggle touchpad on/off (Fn+F5), and some media keys, one of which is the Fan button. I dont recall fan button working even in XP (with latest 1.1D bios) , so I needed to put it to use, at least for toggling fan speed, which is what i managed to discover
Having said that, I made sure that the E9 register does not change, and is only ever affected by manual intervention, and never changes back on its own, unless I reboot, of course.
Similar was done on the Acer TimelineX (and also happens to be how thinkpad fancontrol 3rd party apps work -- all through interfacing with the EC in OS):
http://forum.notebookreview.com/acer/562...ost7260497
(02-24-2012, 02:09 PM)AHMED HOSSAM Wrote: on a side not :-
you should knew that i have done like you exactly but with the ALIENWARE M18X-R1 as i was trying to increase fan speeds ...... i used RW tool like you , i modified DSDT table like you are trying to do now ....... and finally i wrongly modified the EC FW in the BIOS file and results in broken motherboard as there is no recovery for the EC FW ! just because the values in the DATA SHEETS is for the EC RAM as well not the main program !!! no one will give you the source code as no one have it and you will have to trace these flags to the main program in the 80x51 disassembler then modify it .
Perfectly understandable. I wasn't intending to actually modify the EC FW, just was curious to know the differences, perhaps to lead to better understanding of how to better interface with it in OS (whether windows or Linux). Unfortunately, the EC on this board is a Mitsubishi PMU08a, and documentation is very scarce. I did manage to find its datasheet, but ended up quickly deleting it, as it was of zero to no use for me (maybe only useful to manufacturers).
(02-24-2012, 02:09 PM)AHMED HOSSAM Wrote: 2) as you said that the DSDT isn`t changed from 1C to 1D and fans speeds are changed , then any modified values in the DSDT will lead you to no result ( i guess this ) .
understood, of course.. I was only speaking of changing the trip points of the temp. so for example, knowing fan turns high on 65, I can make it kick in earlier, like at 60 (given load rarely gets it up over 65 -- especially when using RMClock)
Another thought was obviating the need for RMClock to undervolt (epsecially due to occasional trouble with RMClock in Win7 x64, even with updated RTCore.dll from 8/31/2011 -- from evga precision 2.0.4) by doing this:
http://www.stderr.nl/Blog/Hardware/S270/...lting.html
& like this: http://www.insanelymac.com/forum/index.p...try1296407
Though from looking in RWeverything, mine was in SSDT table + lowest VID achievable by this method is 0.8000v and I normally underclock lowest multiplier (0x = 800mhz) to 0.7000 with RMClock..
It was so much easier in Linux, that I contributed a patch to phc-linux tool, back in the days http://linux-phc.org/forum/viewtopic.php?f=10&t=111
(02-24-2012, 02:09 PM)AHMED HOSSAM Wrote: as i promised , BIOS will be ready today
Thanks again for your efforts
Posts: 1,237
Threads: 17
Joined: Mar 2011
Reputation:
51
This is perfect work from you keep on this great work
Here is the unlocked BIOS , i have unlocked ADVANCED tab , moved some options inside it and i have also replaced the options inside the INFO tab with other important options :-
http://www.mediafire.com/?920aabr8u5c4850
My advice to you : to control fans , you should code a driver that send commands to ports 60/64 that send commands from 40h~4Fh which control the fan speeds , stop it , increase or decrease ........ even for multiple fans .
you have to write a driver which will perform the I/O operations through READ_PORT_UCHAR .
note that this may cause conflict with the other ACPI sub-systems .
"Many of life's failures are people who did not realize how close they were to success when they gave up."
Posts: 14
Threads: 1
Joined: Feb 2012
Reputation:
3
(02-24-2012, 05:10 PM)AHMED HOSSAM Wrote: This is perfect work from you keep on this great work
Here is the unlocked BIOS , i have unlocked ADVANCED tab , moved some options inside it and i have also replaced the options inside the INFO tab with other important options :-
http://www.mediafire.com/?920aabr8u5c4850
Awesome! will give it a shot tomorrow and report back
(02-24-2012, 05:10 PM)AHMED HOSSAM Wrote: My advice to you : to control fans , you should code a driver that send commands to ports 60/64 that send commands from 40h~4Fh which control the fan speeds , stop it , increase or decrease ........ even for multiple fans .
you have to write a driver which will perform the I/O operations through READ_PORT_UCHAR .
note that this may cause conflict with the other ACPI sub-systems .
trying 60/64 as EC_DATA and EC_SC in rweverything froze my touchpad, and soon after, my video card driver
even default values (66/62) in rweverything was very awkward, often froze rweverything followed by BSOD's.
The only I/O ports that worked normally (and instantaneously) were 6E/6A, as I found from a google search 2 days prior, for this model of EC Chip (Google: Embedded Controller PMU08A)
I guess I could use something like WinIO or Winring0 for driver development purposes. And on linux, perhaps adapt simple kernel module like this: http://www.chihoang.de/code-schnipsel/am...-3530.html
thanks
Posts: 1,237
Threads: 17
Joined: Mar 2011
Reputation:
51
Port 60/64 and commands from 40h~4Fh are only example and common for most of EC but may be your EC use different ports and commands ( this should be found in the EC datasheet which you have deleted ) but if it uses the same commands but no response from the EC when you use it , then the only way is to modify the EC FW ( or may be you can add some statements in the DSDT to control fan speeds .
The plug&play ID for the fans is PNP0C0B .
Just like this example :-
Code: Scope(\_SB) {
Processor(
CPU0,
1, // unique number for this processor
0x110, // system IO address of Pblk Registers
0x06 // length in bytes of PBlk
) {}
Scope(\_SB.PCI0.ISA0) {
Device(EC0) {
Name(_HID, EISAID("PNP0C09")) // ID for this EC
// current resource description for this EC
Name(_CRS,
ResourceTemplate() {
IO(Decode16,0x62,0x62,0,1)
IO(Decode16,0x66,0x66,0,1)
})
Name(_GPE, 0) // GPE index for this EC
// create EC's region and field for thermal support
OperationRegion(EC0, EmbeddedControl, 0, 0xFF)
Field(EC0, ByteAcc, Lock, Preserve) {
MODE, 1, // thermal policy (quiet/perform)
FAN, 1, // fan power (on/off)
, 6, // reserved
TMP, 8, // current temp
AC0, 8, // active cooling temp (fan high)
, 8, // reserved
PSV, 8, // passive cooling temp
CS4 8, // critical S4 temp
CRT, 8 // critical temp
}
// following is a method that OSPM will schedule after
// it receives an SCI and queries the EC to receive value 7
Method(_Q07) {
Notify (\_SB.PCI0.ISA0.EC0.TZ0, 0x80)
} // end of Notify method
// fan cooling on/off - engaged at AC0 temp
PowerResource(PFAN, 0, 0) {
Method(_STA) { Return (\_SB.PCI0.ISA0.EC0.FAN) } // check power state
Method(_STA) { Return (\_SB.PCI0.ISA0.EC0.FAN) } // check power state
Method(_ON) { Store (One, \_SB.PCI0.ISA0.EC0.FAN) } // turn on fan
Method(_OFF) { Store ( Zero, \_SB.PCI0.ISA0.EC0.FAN) } // turn off fan
}
// Create FAN device object
Device (FAN) {
// Device ID for the FAN
Name(_HID, EISAID("PNP0C0B"))
// list power resource for the fan
Name(_PR0, Package(){PFAN})
}
// create a thermal zone
ThermalZone (TZ0) {
Method(_TMP) { Return (\_SB.PCI0.ISA0.EC0.TMP )} // get current temp
Method(_AC0) { Return (\_SB.PCI0.ISA0.EC0.AC0) } // fan high temp
Name(_AL0, Package(){\_SB.PCI0.ISA0.EC0.FAN}) // fan is act cool dev
Method(_PSV) { Return (\_SB.PCI0.ISA0.EC0.PSV) } // passive cooling temp
Name(_PSL, Package (){\_SB.CPU0}) // passive cooling devices
Method(_CS4) { Return (\_SB.PCI0.ISA0.EC0.CS4) } // get critical S4 temp
Method(_CRT) { Return (\_SB.PCI0.ISA0.EC0.CRT) } // get critical temp
Method(_SCP, 1) { Store (Arg1, \_SB.PCI0.ISA0.EC0.MODE) } // set cooling mode
Name(_TC1, 4) // bogus example constant
Name(_TC2, 3) // bogus example constant
Name(_TSP, 150) // passive sampling = 15 sec
Name(_TZP, 0) // polling not required
} // end of TZ0
} // end of ECO
} // end of \_SB.PCI0.ISA0 scope-
} // end of \_SB scope
And for multiple fan speeds , use code like this :-
Code: Scope(\_SB) {
Processor(
CPU0,
1, // unique number for this processor
0x110, // system IO address of Pblk Registers
0x06 // length in bytes of PBlk
) {}
Scope(\_SB.PCI0.ISA0) {
Device(EC0) {
Name(_HID, EISAID("PNP0C09")) // ID for this EC
// current resource description for this EC
Name(_CRS,
ResourceTemplate() {
IO(Decode16,0x62,0x62,0,1)
IO(Decode16,0x66,0x66,0,1)
})
Name(_GPE, 0) // GPE index for this EC
// create EC's region and field for thermal support
OperationRegion(EC0, EmbeddedControl, 0, 0xFF)
Field(EC0, ByteAcc, Lock, Preserve) {
MODE, 1, // thermal policy (quiet/perform)
FAN0, 1, // fan strength high/off
FAN1, 1, // fan strength low/off
, 5, // reserved
TMP, 8, // current temp
AC0, 8, // active cooling temp (high)
AC1, 8, // active cooling temp (low)
PSV, 8, // passive cooling temp
CS4 8, // critical S4 temp
CRT, 8 // critical temp
}
// following is a method that OSPM will schedule after it
// receives an SCI and queries the EC to receive value 7
Method(_Q07) {
Notify (\_SB.PCI0.ISA0.EC0.TZ0, 0x80)
} end of Notify method
// fan cooling mode high/off - engaged at AC0 temp
PowerResource(FN10, 0, 0) {
Method(_STA) { Return (\_SB.PCI0.ISA0.EC0.FAN0) } // check power state
Method(_ON) { Store (One, \_SB.PCI0.ISA0.EC0.FAN0) } // turn on fan at high
Method(_OFF) { Store (Zero, \_SB.PCI0.ISA0.EC0.FAN0) }// turn off fan
}
// fan cooling mode low/off - engaged at AC1 temp
PowerResource(FN11, 0, 0) {
Method(_STA) { Return (\_SB.PCI0.ISA0.EC0.FAN1) } // check power state
Method(_ON) { Store (One, \_SB.PCI0.ISA0.EC0.FAN1) } // turn on fan at low
Method(_OFF) { Store (Zero, \_SB.PCI0.ISA0.EC0.FAN1) }// turn off fan
// Following is a single fan with two speeds. This is represented
// by creating two logical fan devices. When FN2 is turned on then
// the fan is at a low speed. When FN1 and FN2 are both on then
// the fan is at high speed.
//
// Create FAN device object FN1
Device (FN1) {
// Device ID for the FAN
Name(_HID, EISAID("PNP0C0B"))
Name(_PR0, Package(){FN10, FN11})
}
// Create FAN device object FN2
Device (FN2) {
// Device ID for the FAN
Name(_HID, EISAID("PNP0C0B"))
Name(_PR0, Package(){FN10})
}
// create a thermal zone
ThermalZone (TZ0) {
Method(_TMP) { Return (\_SB.PCI0.ISA0.EC0.TMP )} // get current temp
Method(_AC0) { Return (\_SB.PCI0.ISA0.EC0.AC0) } // fan high temp
Method(_AC1) { Return (\_SB.PCI0.ISA0.EC0.AC1) } // fan low temp
Name(_AL0, Package() {\_SB.PCI0.ISA0.EC0.FN1}) // active cooling (high)
Name(_AL1, Package() {\_SB.PCI0.ISA0.EC0.FN2}) // active cooling (low)
Method(_PSV) { Return (\_SB.PCI0.ISA0.EC0.PSV) } // passive cooling temp
Name(_PSL, Package() {\_SB.CPU0}) // passive cooling devices
Method(_CS4) { Return (\_SB.PCI0.ISA0.EC0.CS4) } // get critical S4 temp
Method(_CRT) { Return (\_SB.PCI0.ISA0.EC0.CRT) } // get crit. temp
Method(_SCP, 1) { Store (Arg1, \_SB.PCI0.ISA0.EC0.MODE) } // set cooling mode
Name(_TC1, 4) // bogus example constant
Name(_TC2, 3) // bogus example constant
Name(_TSP, 150) // passive sampling = 15 sec
Name(_TZP, 0) // polling not required
} // end of TZ0
} // end of ECO
} // end of \_SB.PCI0.ISA0 scope
} // end of \_SB scope
These are just examples , use you own EC ID But the FAN ID is the same in the example ........... also tweak the code as you like .
you can download the ACPI datasheet and look for this , its fully explained there with more examples .
I was thinking to make one for my ACER 5536G with AMD chipset and CPU but don`t have time ......... i just read most of the datasheet and knew how to do it but don`t have time as i can`t finish modifying BIOSes in the forum to begin doing this
I hope the unlocked BIOS works well
"Many of life's failures are people who did not realize how close they were to success when they gave up."
Posts: 14
Threads: 1
Joined: Feb 2012
Reputation:
3
02-25-2012, 10:13 AM
(This post was last modified: 02-25-2012, 10:19 AM by jasmineaura.)
Unlocked BIOS flashed and working like a charm. Thanks Ahmed
Some emulated screens from Phoenix Bios Editor Pro, highlighting your changes:
1. USB Bios Legacy Support moved to main page
2. Static Info page replaced with several options.. Most interesting is the CPU Throttle option which is disabled by default. Couldn't tell a difference yet after enabling it.
3. Advanced page.. Some possibly useful options
4. iGPU - Chipset settings page. Enabling it doesn't seem to make any difference. Windows doesn't detect any new hardware, and CPU-Z only lists the standalone Geforce Go 7600 in the GPU tab, with the drop down list dimmed. Ponders whether Dynamic Crush Voltage would be of any use then. From quick preliminary testing, enabling it doesn't seem to cause any change in terms of idle GPU temp (GPU shares heatsink with NB chipset).
Some real screenshots of the iGPU - Chipset page:
Posts: 1,237
Threads: 17
Joined: Mar 2011
Reputation:
51
you are welcome ,Thanks for confirming i will move the thread to unlocked section .
the CPU throttle will only occur in high temps not in the normal case ......... sothat it will not change anything if you don`t suffer from overheating CPU as the CPU will only throttle at predefined temp.
dynamic crash voltage is a good technique for making the CPU and the GPU always safe ( just search in google , you will find alot of explain for this ) .
I don`t knew if your notebook includes an integrated graphics card or not , but if you don`t have one , then this option will not change anything and may cause your notebook not to boot properly if adjusted ( in this case you need to just reset CMOS battery ) .
I hope you fix your issue using the DSDT method ( incase you found that your EC use the same 60/64 ports and it didn`t work )
"Many of life's failures are people who did not realize how close they were to success when they gave up."
|