Hello everybody!
1st of all I want to thank all of the contributors on this site for the solid tutorials and guides, they have helped me a lot. This is my 1st post. This is not meant to be a tutorial, but more a log of what i have did and a question that is addressed at the end.
Background: Asus U31F Notebook, with Intel Pentium p6200 processor and a HM55 chipset. Due to a failure in the hinge, the LCD developed a fault, working only while applying pressure on a specific area. Cable changed, lcd pcb heated with an air gun, and no success. I have ordered a new LCD but did not test right away and I also ordered a new CPU (i5-560M) from ebay and a SSD drive. The notebook was not needed as I had another one, so i was in no hurry. In then end, tested the new LCD - not working. Old LCD was made by CHIMEI (INNOLUX) model N133BGE-L41 Rev C.1 and the new one was an LG lp133wh2-TLL3. Physically compatible from all points of view. Searching around on the web I could not find any working solution, and many say that only a original swap would work which for me sounded absurd as the LVDS interface is rather universal.
Finally i have decided to try a bios mod to enable advanced configuration as the notebook did not have any real value.
Using UEFI tool i have extracted the ASUS_Setup EFI module and then using Universal IFR Extractor.exe i have found that all advanced bios menus are suppressed. Changing with AMIBCP from Default to User did not enable them. So I Hex (with HxD) edited the setup module
As I could not identify the location of Variable 0x10[1] i have changed all suppres if 0x10[1] from
Suppress If: {0A 03 00}
Variable 0x10[1] equals 0x1 {12 07 10 00 01 00 00}
to
Suppress If: {0A 03 00}
Variable 0x10[1] equals 0x0{12 07 10 00 01 00 00}
This has enabled the suppressed options but not all bios pages. Searching around I have also found that the enable / disable of pages is configured in a table and edited that as well. Now I had all menus and advanced settings enabled.
Playing around in the IGD control menu with LVDS did not make the LCD work. So reading more I have decided to play with the Vbios. I have extracted the module using MMTool and found that my bios had 2 Vbioses vendor id 8086 with device id 42 and 46.
8086,42 was an Ironlake desktop version 1914
8086,46 was an Ironlake mobile version 2056
I have downloaded the VBIOS_and_BSF.rar archive which contains a collection of intel released vbioses both old and new, both desktop and mobile. Using Intel BMP I have extracted the settings from my 2056 vbios (using the bsf file from the archive) and applied them to 2120 ironlake mobile virgin from the archive. The transfer of settings went without a glitch. Tried flashing with no success on the LCD side, and I almost quit. Then while reading the old vbios with HxD I noticed something interesting: LFP_U31Defaul
.LFP_PanelNameLFP_PanelNameLFP_U31DefaulLFP_PanelNameLFP_PanelNameLFP_PanelNameLFP_PanelNameLFP_PanelNameLFP_PanelNameLFP_PanelNameLFP_PanelNameLFP_
In BMP tool, the LFP panels are configured under the LFP (integrated LVDS) Features and the Default panel is configured in LFP Display configuration (Select Panel Type). For the stock rom, this value was set to Panel #3 which corresponded to LFP_U31Defaul which was for sure a customization (different config in comparison with all other panels).
I said ok, let me configure my own, so using the new LCD datasheet I have edited the Panel#8 which already had the correct resolution size: 1366x768.
1)Panel power sequencing was according to the datasheet (no changes)
2)DTD timings - edited all of them with values extracted from the datasheet EDID section (DTD)
3)PNP ID - the same as no.2
4)Backlight control - changed the PWM inverter freq to 1000 Hz as per new lcd datasheet (existing one was 227 Hz)
Saved, created a new vbios, replaced the exisiting one and flashed. Still not working. Then, I decided to play with the system Bios Hooks in the BMP tool. Deactivated all of them so BIOS would not override Vbios (if I understand well). With distrust i flashed again and BOOM! Lcd is working. I could not believe my eyes. Now things get interesting. I said, let me identify which of the BIOS hooks did the trick. After flashing the bios 9 or 10 times with edited vbioses I have identified Hook 5F40h Panel Type Hook to be the culprit. I have decided to clean things up and flash a final ROM when I screwed up flashing the stock. Something went wrong and I bricked it. After another day, 2 SPI arduino based flashers (uno and mini pro) that failed and a RaspberryPi + flashrom that worked I managed to extract fix and write back the Bios Chip: (MX25L3206E.). Assembled everything back together and it is now working with new LG Lcd in place without any issues.
and here is my question:
I have also updated the micro-codes to the latest available from Intel in order to support my new I5-560M , but this has failed over and over
Comparison between the 2 CPU: http://ark.intel.com/compare/49653,50176
I5-560m is compatible with the HM55 chipset and the cpu pins are the same, so I belive it is more a bios or other fw configuration.
With the i5 the notebook will power on but there is nothing on the sceen, after 30 sec or so the fan is spin at max speed and no response whatsoever.
Using the Unhuffme 2.4.1 in the POLICY file i have found at offset 18d80h the following:
“PchFeatureId CpuType Core™2 Core™2 Duo Core™2 Quad Pentium Celeron Core E8 Q9”
Is there any chance of the CPU list being hard-coded somewhere in the rom? (bios/me/…?) Is there any chance of getting the i5 to work?
Attached you can find the full spi bios dump (4MB) and the stock one. Hope any of you guys can tell if i have any chance or not.
Thank you,
Mihai
ASUS_U31F_Modded_BIOS.rar (2.73 MB)