Bios Mods -The Best BIOS Update and Modification Source

Full Version: [Project] SHE and AHCI BIOS mod for ASUS EeePC 1000H
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Pages: 1 2 3 4 5 6 7 8 9 10 11
Available mods by Antinomy & Tol Phobos :

ASUS 1000H ACPI BIOS Revision 2204GT (AHCI)
ASUS 1000H ACPI BIOS Revision 2204GTS (AHCI + improved SHE)
ASUS 1000H ACPI BIOS Revision 2204GTX (AHCI + increased SHE ... maybe RAM settings will come later)


-------------------------------------------------
Hello allz.

My 8 years’ old daughter has an ASUS EeePC 1000H for 1.5 year, and she (me to) fells the limits of her computer's performances. That's why I'm working to improve them following two axes:
1) Installation of a SSD (Intel X25-V 40Go is my target)
2) Perpetuate 2Ghz overclocking (tested and validated using EeeCTL and SetFSB)

While working on these 2 axes, I met the limits of default 1000H BIOS on two points:
1) Even if the AHCI is supported by the southbridge ICH7-M, it is not activated and non-actionable in BIOS.
2) Impossible to modify the 'Super Performance Mode' frequency of the SHE (Super Hybrid Engine) which is defined in BIOS, but not accessible.

As I have not found already modded BIOS (but I maybe badly looked), I decided to mod my own one. For that purpose, I was inspired by a similar work made on a 1000HE for a CKFB mod (modification of the frequencies' SHE). I have begun to analyse BIOS 2204 of 1000H and BIOS 1104 of 1000HE to look for sequences of similar code. Bingo ! I found equivalent CKFB + FSBB sequences:

1000H
Code:
Name (CKFB, Package (0x03)
{
Package (0x0A)
{
0xEF,
0x2F,
0x8F,
0x6A,
0xEF,
0x2F,
0x25,
One,
Zero,
0x8F
},

Package (0x0A)
{
0xEF,
0x2F,
0x8F,
0x68,
0xEF,
0x2F,
0x25,
One,
One,
0x8F
},

Package (0x0A)
{
0xEF,
0x2F,
0x8F,
0x68,
0xEF,
0x2F,
0x1C,
Zero,
One,
0x4F
}
})

Method (FSBB, 1, NotSerialized)
{
Store (DerefOf (Index (DerefOf (Index (CKFB, Arg0)), 0x07)),
Local0)
If (LLess (Arg0, ^^^ATKD.CFVG ()))
{
VOLS (Local0)
}

RCLK ()
If (LEqual (Arg0, Zero))
{
And (RCKB (Zero), 0x9F, Local1)
WCKB (Zero, Local1)
}

WCLK ()
RCLK ()
WCKB (0x11, DerefOf (Index (DerefOf (Index (CKFB, Arg0)), 0x04
)))
WCKB (0x12, DerefOf (Index (DerefOf (Index (CKFB, Arg0)), 0x05
)))
WCKB (0x0F, DerefOf (Index (DerefOf (Index (CKFB, Arg0)), 0x02
)))
WCKB (0x10, DerefOf (Index (DerefOf (Index (CKFB, Arg0)), 0x03
)))
WCLK ()
Sleep (0x0A)
RCLK ()
WCKB (0x0B, DerefOf (Index (DerefOf (Index (CKFB, Arg0)), 0x09
)))
WCKB (0x0C, DerefOf (Index (DerefOf (Index (CKFB, Arg0)), 0x06
)))
WCKB (0x0D, DerefOf (Index (DerefOf (Index (CKFB, Arg0)), Zero
)))
WCKB (0x0E, DerefOf (Index (DerefOf (Index (CKFB, Arg0)), One
)))
WCLK ()
Sleep (0x0A)
RCLK ()
If (LNotEqual (Arg0, Zero))
{
Or (RCKB (Zero), 0x40, Local1)
WCKB (Zero, Local1)
}

WCLK ()
Sleep (0x0A)
Store (DerefOf (Index (DerefOf (Index (CKFB, Arg0)), 0x07)),
Local0)
If (LGreater (Arg0, ^^^ATKD.CFVG ()))
{
VOLS (Local0)
}

Store (Arg0, FS70)
SNVS (0x2641, Arg0)
}

1000HE
Code:
Name (CKFB, Package (0x03)
{
Package (0x0A)
{
0xEF,
0x2F,
0x8F,
0x6A,
0xEF,
0x2F,
0x25,
One,
Zero,
0x8F
},

Package (0x0A)
{
0xEF,
0x2F,
0x8F,
0x68,
0xEF,
0x2F,
0x25,
One,
One,
0x8F
},

Package (0x0A)
{
0xEF,
0x2F,
0x8F,
0x68,
0xEF,
0x2F,
0x20,
Zero,
One,
0x8F
}
})
Method (FSBB, 1, NotSerialized)
{
Store (DerefOf (Index (DerefOf (Index (CKFB, Arg0)), 0x07)),
Local0)
If (LLess (Arg0, ^^^ATKD.CFVG ()))
{
VOLS (Local0)
}

RCLK ()
And (RCKB (Zero), 0x9F, Local1)
WCKB (Zero, Local1)
WCLK ()
RCLK ()
WCKB (0x11, DerefOf (Index (DerefOf (Index (CKFB, Arg0)), 0x04
)))
WCKB (0x12, DerefOf (Index (DerefOf (Index (CKFB, Arg0)), 0x05
)))
WCKB (0x0F, DerefOf (Index (DerefOf (Index (CKFB, Arg0)), 0x02
)))
WCKB (0x10, DerefOf (Index (DerefOf (Index (CKFB, Arg0)), 0x03
)))
WCLK ()
Sleep (0x0A)
RCLK ()
WCKB (0x0B, DerefOf (Index (DerefOf (Index (CKFB, Arg0)), 0x09
)))
WCKB (0x0C, DerefOf (Index (DerefOf (Index (CKFB, Arg0)), 0x06
)))
WCKB (0x0D, DerefOf (Index (DerefOf (Index (CKFB, Arg0)), Zero
)))
WCKB (0x0E, DerefOf (Index (DerefOf (Index (CKFB, Arg0)), One
)))
WCLK ()
Sleep (0x0A)
RCLK ()
If (LEqual (Arg0, One))
{
Or (RCKB (Zero), 0x40, Local1)
WCKB (Zero, Local1)
}

WCLK ()
Sleep (0x0A)
Store (DerefOf (Index (DerefOf (Index (CKFB, Arg0)), 0x07)),
Local0)
If (LGreater (Arg0, ^^^ATKD.CFVG ()))
{
VOLS (Local0)
}

Store (Arg0, FS70)
SNVS (0x2622, Arg0)
}

However, 1000H values set into the BIOS seems strange compared to 'Clock Generator' ones read into RW when I witch between SHE modes (S = Super Perf Mode, H = High Perf Mode, P = Power Saving Mode).

[attachment=1449]

Even if the code into the BIOS is similar, the logic seems différent ... what do you think about it ?

Thank you in advance for your help
Wow well this ones a little too technical even for me!!!

Will watch this with interest Smile

Admin
Hello allz.

(11-28-2010, 05:29 AM)1234s282 Wrote: [ -> ]Wow well this ones a little too technical even for me!!!
Will watch this with interest Smile
I don't know how to take this : do I have to feel flattering or worried ? Confused Let's see it by trying ! Big Grin

So now, here are news from my project.

First, as i was not able to link SetFSB/EeeCTL/SHE modification with CKFB/FSBB code, like for 1000HE, I have tryed to modified another portion of code which is differnt between 1000H and 1000HE : CKFG/FSBA.

Code:
Name (CKFG, Package (0x03)
{
    Package (0x09)
    {
0x6C,
0x32,
0x0F,
0x6E,
Zero,
0x2F,
0x2D,
One,
Zero
    },

    Package (0x09)
    {
0xEF,
0x2F,
0x8F,
0x68,
0xEF,
0x2F,
0x2A,
One,
One
    },

    Package (0x09)
    {
0xEF,
0x2F,
0x8F,
0x68,
Zero,
0x2F,
0x21,
Zero,
One
    }
})
Method (FSBA, 1, NotSerialized)
{
    Store (DerefOf (Index (DerefOf (Index (CKFG, Arg0)), 0x07)),
Local0)
    If (Local0)
    {
VOLS (Local0)
    }

    RCLK ()
    If (LEqual (DerefOf (Index (DerefOf (Index (CKFG, Arg0)), 0x04
)), Zero))
    {
And (RCKB (Zero), 0xBF, Local0)
WCKB (Zero, Local0)
    }
    Else
    {
Or (RCKB (Zero), 0x40, Local0)
WCKB (Zero, Local0)
WCKB (0x11, DerefOf (Index (DerefOf (Index (CKFG, Arg0)), 0x04
)))
WCKB (0x12, DerefOf (Index (DerefOf (Index (CKFG, Arg0)), 0x05
)))
    }

    WCLK ()
    Sleep (0x0A)
    RCLK ()
    WCKB (0x0C, DerefOf (Index (DerefOf (Index (CKFG, Arg0)), 0x06
)))
    WCLK ()
    Sleep (0x0A)
    Store (DerefOf (Index (DerefOf (Index (CKFG, Arg0)), 0x08)),
^^VGA.GFXL)
    Store (DerefOf (Index (DerefOf (Index (CKFG, Arg0)), 0x07)),
Local0)
    If (LEqual (Local0, Zero))
    {
VOLS (Local0)
    }

    Store (Arg0, FS70)
    SNVS (0x2641, Arg0)
}

The 3 packages correspond into this order : Super/High/Power. Seventh value of the package corresponds into RW & SetFSB to the 0x0C byte of PLL Control Registers for Super/High/Power modes.

I have tested manually all the values of 0x0C byte :
[attachment=1496]
With this, I am able to modify FSB between 79.2 and 148.8Mhz.

So I have modified a 1000H_2204.ROM file to change Super mode CKFG value with 0x0C byte set to 2F instead of 2A ... and it works !!!

So now, I am able to create a BIOS with a SHE 1786Mhz Super mode and a 950Mhz Power mode.

However, I'm not satisfied. I don't understand why this SHE on 1000H use a PLL byte (0x0C) different from SetFSB and 1000HE ones (0x0F & 0x10). With 0x0C, the up limit is 148.8Mhz, and with 0x0F & 0x10 is higher than 166.6Mhz ...

So now, I try to understand how work and interact these three bytes to be able to modify CKFG/FSBA code to reach my first target : Super=2Ghz/166Mhz|High=1.6Ghz/133Mhz|Power=1.2Ghz/100Mhz

If somebody has information about PLL Register bytes interact, please help me !!!! Heart
Wow, you (I mean the guy who made the original tutorial too) are really freaks inventing a wheel instead of using a ready one. Why doesn't SetFSB make you happy enough?

O.K. let's return. Thanks about the mod, I didn't know how to modify PLL programming in BIOS.

What is the PLL we are talking about, do you know the model? You want to say that the problem is that it's VCO dividers do not directly show up when modifying the values in BIOS, e.g. the HEX values in BIOS are different from what you see when asking VCO registers from the PLL via I2C?
Yes, macauman is impresive.

SetFSB doen't not make me happy because is not enought kid friendly (my daughter is 9 years old) ... SHE or eeectl are quite better on this point. However, eectl doesn't work if user is not administrator : not security friendly for a 9 years old kid.

Regarding PLL registry, I have identify 3 bytes which drive the FSB : 0x0C, 0x0F and 0x10. However, I don't understand well the way of driving ... PLL number is ICS9LPR427AGLF. If somebody can help, thx in advance.

Last but not least, I'm working now on AHCI modding. And I would like to know in which BIOS module (as visible in MMTOOL) the BIOS menu is managed. I want to add a line in BIOS menu to manage IDE/AHCI option. This option is absent in 1000H BIOS and exists in 1000HE BIOS : I just want to compare the modules of each to find how to add this line ! Somebody can help ?
Get me your BIOS, the BIOS from 1000HE and I think I'll be able to add the menu that you want. Wink
The menus are in the 1B - main BIOS module, by the way.
(01-23-2011, 08:03 PM)Antinomy Wrote: [ -> ]Get me your BIOS, the BIOS from 1000HE and I think I'll be able to add the menu that you want. Wink
The menus are in the 1B - main BIOS module, by the way.

Yes, I have seen it since my last post ... I have replaced (mmtools) 1000H-2204.rom 1B (Single Link Arch BIOS) and 21 (Multi Language) modules by 1000HE-1104.rom ones, and now i can see (amibcp) the AHCI option into the 1000H-2204.rom ... but I don't want to brick my 1000H with such an hybrid BIOS : there are too many differences between 1000H and 1000HE 1B module. So now I'm trying to disassemble 1B module to understand these differences.
What do you think about it ?

However, find joined the two bioses (1000H-2204 & 1000HE-1104) : I will appreciate your contribution if you can add this options ! Big Grin

You don't need to disassemble the BIOS to make what you need Smile

I'll check today.
Are using this method ?
Not exactly, but close. The method you've linked to is about adding a blank menu item that doesn't do anything. And then write an assembler routine that will use this CMOS menu. What I'm adding is a menu that is linked to an routine that already exists in the BIOS.
Pages: 1 2 3 4 5 6 7 8 9 10 11