Patch Bios HP 800 SFF G1 in order to Support NVME SSD PCIe (Booting)

@Lost_N_BIOS i am waiting for your help

@Lost_N_BIOS i some how managed to install grub 2.02 to a bootable usb and after boot from usb i enterd command setup_var 0x96 0x00 and it say error cant find command setup_var

@Fernando can you please help me on this while @Lost_N_BIOS is offline please

@elitepc : I cannot help you. Lost_N_BIOS is our expert regarding your specifc problem.

@Fernando do you have any idea when he will be available , i am waiting all day

@elitepc : Users, who want help here, should be patient and wait until an expert has the required time for the support.
Please stop bothering us by repeating your demands. If you need urgent help, I recommend to call a doctor.

@Fernando please accept my apology, i mean no disrespect, i will be patient

@kyrios @Lost_N_BIOS

Hi, I’m new here.
I have a hp 800 g1 with bios 2.78. I can use the vol1NVMEMM45.bin modification without doing the whole procedure. I get error 280 when trying to write it.
It is the same error from the beginning of the post.

thanks. sorry for my English.

@kyrios Do you happen do have the full BIOS dump. I think for me it would be easier to flash it via an external programmer. Would be a great help. Thanks!

Kind regards,
T

@radek68 @tiburcillo
Someone succeed to flash your bios with the file given in this thread ?

Thanks

Some good news. I managed to get this working. Thanks to the work of @Lost_N_BIOS earlier in this thread in finding the correct offsets for the DXE volume, @Xnet on a similar HP motherboard in another thread, and everyone else in this community.

Here is what I did. Steps taken from the post by Xnet below which are for a similar, but not identical HP Elitedesk G1 mini PC. Please note the offset and length for dumping and flashing back the BIOS volume are different! Obviously you should do your own research and if you decide to try this it’s at your own risk, I am just following instructions here so I probably have no idea how to help if this doesn’t work or worse if you brick your BIOS.

I had BIOS version L01 v2.30 04/22/2014 and ME version 9.1.xxxx. Not tested any other versions.

Requirements
1. Download WIN64.zip attached to this post by Xnet

1
 
win-raid.com/t5139f50-HP-Elitedesk-G-DM-mini-PC-Nvme-support-info-for-ssd-M-3.html#msg135158
 

2. (recommended) Read the forum guide on modding AMI UEFI to add nvme support . This is generic instructions on modding any AMI UEFI bios including this HP bios to add nvme support. I used UEFItool, steps below, but it's better to try to understand what you are doing.
1
 
win-raid.com/t871f50-Guide-How-to-get-full-NVMe-support-for-all-Systems-with-an-AMI-UEFI-BIOS.html
 

(I am unable to post links, sorry!)

Steps. Again many thanks to Xnet.
0. Make a screenshot of your BIOS system info that contains the MAC address, chasis #, etc. That can be handy later. NB: You can get all of this from "system info" in BIOS. You also need to know your ME firmware version. If ME is disabled, enable in BIOS and save and reboot.
1. Download the corresponding Intel ME System Tools version as described in the first post and unpack it in C:\Temp. You only need the Win64 folder from Flash Programing Tool folder. You can use the Win64.zip file I attached, if you have 9.1. It has all the files you need to succeed.
2. Enable in BIOS the UEFI boot sources (it won't boot if you don't) and run Deathbringer GRUB Shell unlock (see part B below).
3. Boot in Windows 10/7 x64 and open command line with admin rights and point it to C:\Temp\WIN64 folder (or whatever path you have to the Win64 folder)
4. Dump just the writable BIOS part: fptw64 -A 0x5E0000 -L 0x8B0000 -D original.rom The file size should be 9,109,504 bytes.
5. Confirm you can write it back: fptw64 -A 0x5E0000 -L 0x8B0000 -F original.rom If no go - retry step 2.
6. Load bios.rom in UEFItool. Resize the window so you can see all the columns, especially "subtype" and "text". Expand the first two levels in the tree so you can see all the DXE drivers listed.
7. Scroll to the bottom. At the end, between the last DXE driver (csplibdxe in my case) but before volume free space should be a "freeform" type item. Right click freeform item and insert after it the NVME driver - NvmExpressDxe_4.ffs - (found in Win64.zip) so that it becomes inserted at the end of the section before the free space
8. Save the file as modbios.rom & reload to confirm the NVME dxe driver is there and in the correct place and nothing else changed. Check the whole section, as MMTool has the habit of moving it up the list. (I prefer UEFITool). Size should be the same 9,109,504 bytes. Extensions .bin and .rom are interchangeable. Rename it as you see fit.
8. Flash back the modded bin/rom: fptw64 -A 0x5E0000 -L 0x8B0000 -F modbios.rom
9. Reboot immediately to confirm BIOS is ok. Load BIOS and "apply defaults and exit". Now you should be able to boot from the NVME disk. Depending on its status, your NVME disk may show or may NOT in BIOS. Do not re-flash over and over (till you brick it ), just test it, by installing Windows 10 from a USB and see if it boots into it successfully. If it does, you're all set. You'd see in Boot Order a new item under UEFI sources "Windows Boot Manager" - that's your NVME disk. Resetting again the BIOS to default and restarting made the NVME to show up in BIOS for me this time.

I found the nvme drive never showed in bios anywhere as itself or even as PATA etc but did show as "windows boot manager" once Windows was installed. I guess as long as Windows installs and the bios sees Windows Boot Manager then everything is OK. Rather than do a fresh install I actually just cloned the entire existing hard disk to the SSD using Acronis and this both created the windows boot manager entry and booted straight away though this is not a recommended way of doing things.

PART B

Deathbringer unlock - Protection can be disabled in EFI GRUB Shell:
1. Take a USB stick and format it to FAT32
2. Create directory structure EFI\Boot
3. Download and unzip bootx64.7z (it's in the Win64.zip)
4. Put BOOTX64.EFI in Boot directory.
5. Boot from this USB stick
6. Run commands:
setup_var 0x96 0x0
setup_var 0x97 0x0
setup_var 0x98 0x0
setup_var 0x99 0x0
setup_var 0x9a 0x0

Hope this helps, and I hope I have not broken any rules by copying and pasting the hard work of Xnet and others. I saw no point rewriting the instructions when I just followed them myself with only the offset and length changed to those given by Lost_N_BIOS in the posts above! Thanks!

I Don’t know, but maybe for some people my bios dump can help!.

https://drive.google.com/drive/folders/1…cE0?usp=sharing

hi,

I have an elitedesk 800 g1 sff
bios ver. L01 v02.78
ME firmware 9.0.31.1487

how to upgrade ME to 9.1.xxxxx

so that it can boot nvme

because I see ME must be version 9.1.xxxxxx

Hi everybody,

I hope I post in the right thread (I’m new here).
I wish in my turn, trying to Patch the Bios of my HP 800 G1 Tower in order to Support NVME SSD PCIe for Booting, and I wouldn’t want to make a mistake.
My bios version is L01 v02.78
My ME firmware is 9.0 build 1487 hotfix 31. I have already downloaded the good one ME System Tools

@Lost_N_BIOS :
1. Firstly as my 800 G1 is not the same as Kyrios, can I use the vol1NVMEMM45.bin file created by you in #6 post in this thread, or the offsets are not the same for me (I suppose this is the easiest method)?

2. If it is not possible, I have already modified my bios as explained “[HowTo] Get full NVMe support for all Systems with an AMI UEFI BIOS” thread. I used MMTools as UEFITool destroyed a non-empty pad-file content at the end of the last volume.
I can send you my modified BIOS if you want to verify my modification.
In this case, the 5 following commands are the same for me?
setup_var 0x96 0x00
setup_var 0x97 0x00
setup_var 0x98 0x00
setup_var 0x99 0x00
setup_var 0x9a 0x00

Thanks in advance for your help.

@balades67 Lost_N_BIOS was logged in last time in January 2021. All tinyupload links don’t work any longer. Regarding ‘surgical’ flashes (given address and length of block) as used on the first page of this thread I’d check thoroughly if they do what’s expected. Volume start end end-point will possibly change with every bios version.

Flashing a complete (modded) stock bios will overwrite your board specific data like serial, service tag…

For finding the unlocking variables- open bios with UBU, select “S” for AMI Setup IFR Extractor, check the larger text- file in newly generated folder ‘Setup…’ for the variables and if they seem to do what you want.

@lfb6 : Hi lfb6,
Thanks a lot for you answer.

It’s a shame Lost_N_BIOS is no longer there… can someone else help me (you, maybe?)?
I did notice that the tinyupload were no longer working. But about the ‘surgical’ flash, the vol1NVMEMM45.bin file created by Lost_N_BIOS for kyrios is available in the post #32. That’s why I would have preferred to be able to use it: I have the same BIOS version than kyrios, so someone can day me if volume start end end-point are the same for me?

If I decide to flash the complete moded stock bios, what will be the consequences if my board specific data like serial, service tag (sorry, I am new here)? And is it possible to avoid this?

About the unlocking variables, I used UBU and now I know why Lost_N_BIOS modified the 5 variables I sent you in my previous post. I have only one BIOS Lock in 0x97, but he unlocked all the locks:
0x96 : SMI Lock
0x97 : BIOS Lock
0x98 : GPIO Lock
0x99 : BIOS Interface Lock
0x9a : RTC RAM Lock

Well, as always- there’s a lot of information in this forum, it’s just to read and try. The tools are known and aways the same (UEFIToolNE, UEFITool, Hex-editor, ME system tools). Make valid backups of your firmware/ bios region before writing anything. This way you can recover with a programmer if something goed wrong. And when you think you got the block- addresses right: Always try to dump first to check the syntax, and compare the result.

@lfb6 : The problem is that I have no programmer, and anyway i wouldn’t know how to use it.
I just wanted to try and find my own addresses (offset and length) to see if they were the same as Kyrios. I have already found that the region modified by Lost_N_BIOS for him, was exactly the same size as mine, where the driver was inserted. I wanted to try and find the offset for me. do you know how to do, with which tool?
Also, the region modified by Lost_N_BIOS looks exactly the same as mine, where the driver was inserted (same position, same freeform created before, etc…).

Sorry, but I don’t have the possiblity to ‘guide’ you through the process. Tools are mentioned, there’s a lot of information how to proceed already in this thread. Ask specific questions, explain what you did, provide interim results and you might get answers from forum members.



I have the exact same machine as you, HP EliteDesk 800 G1 Tower. I followed the instructions exactly as outlined by ekens63 in post #31. That got mine successfully booting NVMe with no issues whatsoever. Good luck!