In this post I will show you how you can install an NVMe SSD into a HP Compaq Elite 8300 Small Form Factor and modify the BIOS so that the machine can boot natively from it. The 8300 SFF does have a UEFI BIOS, but there is no NVMe driver present.
I wrote a post on how add NVMe support to a Dell OptiPlex 7010 which has the same Q77 chipset at the HP 8300. So I wondered if the the same procedure could be used to upgrade the HP. Although the procedure is quite different, it is easy to do and can be completed in under 20 minutes.
The completed modification produces impressive results. Here is my CrystalDiskMark Result from the 8300 using a Samsung 970 EVO Plus:
This blog post contains instructions on how to modify your BIOS using a hardware programmer.
You could very easily break your machine. Proceed at your own risk!
In order to carry out this upgrade, you will need a few things:
- An NVMe SSD. I used a 512Gb Samsung 970 EVOPlus
- An NVMe to PCIe Adapter, I used this one from Amazon.
- A USB Memory Stick of at least 2Gb.
- A jumper cap/paperclip etc.
- A HP Compaq 8300 computer to modify.
These computers are now really cheap on Amazon and in they are a bargain in my opinion if you just need a basic machine work school or office work.
The process involves a number of steps:
- Upgrade your current BIOS to the latest version.
- Create a SystemRescue bootable USB Drive.
- Put the machine into service mode.
- Modify the BIOS and inject the NVMe driver.
- Install the new NVMe hardware.
Before proceeding with the rest of the steps. Take a moment to check that you are on the latest BIOS available from HP. At the time of writing that was version 00.03.08 Rev.A.
ROM Firmware for 8300 Elite and 6300 Pro Business
I’d be interested to know if this BIOS mod also works for the 6300. But I do not have one to try it.
Create the bootable SystemRescue Image
Next, download SystemRescue using and make a bootable USB drive using Rufus. There are instructions on the SystemRescue website on how to make it bootable.
Put the machine into service mode
Once you have created the bootable USB you can shut the machine down and put it into service mode.
To put the machine into service mode you will need to remove the lid and find the FDO (Flash Descriptor Override) jumper, which is here:
Jump the pins with a jumper cap or anything else that you can find (paperclip etc). So it should look like this:
Boot the machine with SystemRescue
With the jumper on the FDO pins, insert your bootable USB into the machine and turn it on.
Press the escape key to access the boot menu and select your USB Stick. You will come to the SystemRescue boot menu, which should look like this:
Press the e key to change the default boot options. Use the cursor keys to move down to the line that says linux and add the following to the end:
setkeymap=uk copytoram dostartx
Change the keymap to be appropriate for your own environment or if you are in the USA, just leave that part out.
Press CTRL-X to proceed with the boot.
Backup and modify the BIOS
The system will boot into a graphical interface. From there open Firefox and come back to this blog post so that you can copy and paste commands.
We have booted the USB drive using the copytoram option, which will enable us to mount the USB drive from within our booted environment to store the backup of the BIOS.
First, open a terminal by clicking on the terminal icon:
Type the following command:
fdisk -l |grep "W95"
The output of the fdisk command should be something like this:
/dev/sda1 * 2048 500118191 500116144 238.5G c W95 FAT32 (LBA)
Make a note of the device, this should be your USB thumb drive, in my case it is /dev/sda1. Then type the following commands:
mkdir /mnt/usb mount -t vfat /dev/sda1 /mnt/usb flashrom -p internal -c MT25QL128 -r /mnt/usb/backup.bin
It should look like this:
The flash chip will now be read and you should get output like this:
Leave the terminal window open as we will be coming back to use it again soon.
Now the backup of the HP BIOS is safely stored on the USB device we can inject the USB driver. Open Firefox and download UEFITool 0.28.0 from here.
Open the downloaded zip file and drag the executable on to the desktop. Then open UEFI Tool. Open backup.bin that was created in the previous step by navigating to Other Locations -> Computer -> mnt – usb.
Modify the BIOS in UEFITool
Next we can modify the BIOS.
- Expand the BIOS Image like this:
- Scroll to the bottom of this section until the final DXE driver, which should be HpDigitalSignatureVerification.
- Download this NVME Driver and save it to your machine.
- Right click on the final DXE driver and choose Insert After.
- Choose the NvmExpressDxe_Small.ffs that you just download and then save the file as nvme.bin.
Write the modified BIOS back to the HP 8300
Now that you have the modified BIOS image complete, go back to your terminal and use the command:
flashrom -p internal -c MT25Q128 -w /mnt/usb/nvme.bin
The new BIOS image will be flashed to the chip and it should look like this:
Now you can shutdown the system and remove the jumper from the FDO pin headers.
Add the NVMe Adapter and Drive
The system will now be able to from an NVMe drive! You can either complete a fresh install of your Operating system or clone your existing installation to the new NVMe SSD
Here is my Samsung 970 EVO Plus NVMe SSD from Amazon installed on to a PCI Adapter in the machine:
Adding NVMe support the HP Compaq 8300 Elite does provide a massive boost in performance. The machine I upgraded had a mechanical hard drive so the difference was astonishing. Here is the difference in speed results:
Cold boot time for Windows 10 with the mechanical hard drive was 1 minute and 16 seconds. With the NVMe drive it was 20 seconds.
Google Chrome OS Flex
As the HP Compaq Elite 8300 is a Chrome OS Flex Certified Device I decided to install that on to the NVMe drive and try it out. The installation worked no problem and it booted in 12 seconds. I really like OS Flex for giving older machines a new lease of life. It feel like a brand new machine.
You will have to judge if this is the right upgrade for you. A SATA SSD would be much easier to fit and does not require any additional hardware. This NVMe modification provides greater performance.
I would like to say a big thanks to Ivan in the comments who found that the BIOS chip could be flashed using the Linux based Flashrom tool. Previously this guide contained a much more complicated procedure.
In the end I actually used this Dual M.2 NVMe and SATA adapter from Amazon:
This allowed me to have the Samsung NVMe drive with a Western Digital SATA drive for additional storage. I used a short right angled SATA cabled which turned out to be a very neat solution. I removed the hard drive completely.
Jake Klumpp says
How do you get those speeds its only pcie 2.0, more like 1650mps ?
Those are the speeds I got. According to the service guide:
HP Compaq 8300 Elite Maintenance and Service Guide
The computer has one PCI expansion slot, one PCI Express x1 expansion slot, one PCI Express x16
expansion slot, and one PCI Express x16 expansion slot that is downshifted to a x4 slot.
Hi Paulie, I have HP Compaq Elite 8100 SFF. Do you think I can do the same upgrade just like here ?
Paulie, Do you think you will be trying the HP 8200 in the future? I have 3 or four.
@Paulie – I used flashrom (https://www.flashrom.org/Flashrom) for reading and writing flash, and UEFITool 0.28.0 (https://github.com/LongSoft/UEFITool/releases/tag/0.28.0) for modifying the firmware adding your linked .ffs.
Find below the precise commands executed by root:
# flashrom –programmer internal -c MT25QL128 -r backup.bin
(Modified backup.bin inserting NvmExpressDxe_Small.ffs and saving as Fixed_NVME.bin)
# flashrom –programmer internal -c MT25QL128 -w Fixed_NVME.bin
Juan Carlos says
Hola, intento implementar esto en un HP Z230 SFF, de momento no lo he probado, solo he encontrado las guías para poder hacerlo.
Os adjunto 3 enlaces sobre como instalar NVMe M.2 pcie, reprogramando la bios por software (1 y 2) o, alternativamente, mediante un simple arranque alternativo del bios (3). Para quién pueda interesar
1. [Cómo] Obtenga soporte completo de NVMe para todos los sistemas con un AMI (American Megatrends Inc) UEFI BIOS
2. [Solucionado] HP Z230 Tower Workstation
3. [Guía] NVMe-boot sin modificar su UEFI/BIOS (método con Clover)
Mike Steak says
Great work that is impressive!
Maybe you can help me with an issue. I have a 6300sff i7 3770 – 16gb- sata ssd.
Its been nothing but issue after issue. I have had great results in the past with similar models like your 8300 and an older version that had a core 2 quad.
The rear usb 3.0 ports are the main reason I bought this machine and the damn things wont transfer faster than usb 2 speeds.
Ive updated BIOs to 3.08 but I only read too late that you have to do 2.99 first.
Ive even reverted from windows 10 to 8.1 pro.
theres a guy on the hp forum with my exact same issue and he said if he boots into linux they work at usb 3 speeds but not in win 10.
in windows 10 No matter what I did it would not find a driver for a few components even with snappy driver.
Windows 8.1 found the driver as soon as I got wifi.
my current bios version reads 3.08. Do I have to rollback to 2.99 and then go back up again? or since it accepted the flash that means its algood?
it wont accept rollbacks now through BIOs flash or winflash.
If I have to I will buy a 3.5″ front usb 3 panel that connects to the pci slot from memory?
Look forward to hearing from you.
I’d like to say BIG Thank You! – for your amazing knowledge, great tutorials on modding BIOS for NVMe boot capability and your willingness to share this information. I really appreciate your work because I’m very interested in these old and affordable SFF office PCs/desktops that lack NVMe boot support.
So far, I managed to enable NVMe boot in my DELL OptiPlex 3020 SFF PC – making a good use of your tutorial. I also would like to try modding BIOS in DELL OptiPlex 790 and HP Elite 8300 SFF that are on my shelf.
However, I’d love to learn about modding BIOS in my current main PC which is HP Z230 SFF (BIOS L51 v01.63 – Rev.A / Xeon E3-1245 v3). So far, I was able to open BIOS .BIN file in UEFI Tool (.BIN BIOS file taken from this official HP repository https://ftp.hp.com/pub/softpaq/sp103501-104000/sp103745.exe ) I managed to insert NvmExpressDxe_Small.ffs somewhere after the last DXE driver (I’m not sure if this place was chosen correctly).
However, after saving modded BIOS .BIN file to nvme.bin … I don’t know how to flash it back into my machine. I tried via USB DOS Flash option but system said it could not find proper BIOS .BIN file on my pendrive formatted in FREE DOS via Rufus. Maybe it can recognize that BIOS file has been changed in an unauthorized manner? I can only guess because my knowledge is very basic in this area. Can I somehow switch this PC in Service Mode or flash back modded BIOS via clip and programmer … I’d like to read your opinion or advice if possible.
See this post here: https://winraid.level1techs.com/t/success-hp-z230-tower-workstation/38156
This person gives you step by step instructions for what to do and how to do it for your specific machine+bios file and version.
Hmm so here’s my update. I suppose it could just be the m.2 adapter I got, but the nvme isnt showing up in bios. anyone know why that might be? I guess I will order another adapter to rule the first one out.
clonezilla does detect the nvme drive though. I am presently cloning my SSD boot drive just to see if that will do anything.
ok so my issue now is MBR vs GPT. I guess my SSD that I am cloning is GPT. but with the nvme on the pcie adapter, it needs to be MBR. the bios doesn’t detect the drive unless it is MBR. so there’s no way that I’ve tried that will clone the SSD to the NVME, keep the data, but make it bootable over MBR. Maybe someone here can drop a hint. Really don’t want to have to reinstall my entire system and all the settings and data etc.
lost patience and just started a fresh windows install. so so so much to restore now. but at least I have an nvme running as a boot drive. anyone who has questions I spent a lot of time on this and now know it like the back of my hand. feel free to reach out and I’m happy to help
ok, final word on this. originally had a crucial 500gb p3 plus nvme in there. 3500 read and 1900 write. just used clonezilla to clone that 500gb drive to a 1tb version of the same drive with 3500 read and 3500 write. then used gparted to move my recovery partition, permitting me to expand my data partition to the full 1tb. read and write speeds confirmed at 3400ish/3400ish. seems like this project has reached its end for me. this PC will now have another 5-7 years of life. thanks to all who have helped me along the way.
again, if anyone has any questions, please feel free to reach out. email@example.com
Jim G. says
Do you recall what kind of processor is in your HP 8300?
It looks like you are getting PCIe 3.0 speeds with your setup.
This is a gen2 and gen3 crossover motherboard. Whereas a lot of the newer chipsets only handle 1 generation of cpu.
It sounds like 2nd gen sandy bridge chips are PCIe 2.0 and the 3rd gen Ivy Bridge chips are PCIe 3.0
I was under the impression this is a PCIe 2.0 board only.
@Paulie and @Ivan Thanks for the instructions.
I modified the flash following Paulie’s path and Ivan’s Linux way on two HP 8300 SFF PCs.
I did something like:
– Install the internal jumper
– Format a USB pen with SystemRescue (https://www.system-rescue.org/) I used RUFUS utility.
– Boot from the pen and select SystemRescue to be fully loaded into ram memory. This allows the USB pen to be mounted and used to exchange the files.bin with Windows.
– run #flashrom -p internal -c MT25QL128 -r backup.bin
– Modify backup.bin inserting NvmExpressDxe_Small.ffs and save it as Fixed_NVME.bin.
I did it in Windows and copied the fixed file to the USB pen back to Linux.
– run #flashrom -p internal -c MT25QL128 -w Fixed_NVME.bin
– Remove the internal jumper
Note that the procedure generates different NVME.bin code starting from each backup.bin .
If you write the wrong one possibly you will require the hardware programming tool to recover the flash ?
@Paulie thanks again for the very useful post.
System is HP 8000 SFF, I7-3770, BIOS 3.08 modified, Window10 Pro 22H2.
After bios mod to move Win10 to the new NVME disk I followed this tip https://youtu.be/Z939daHclxY .
It run well for my GPT partition system.
@oscar, I think the reason you had different nvme bins generated is because the bios clock changes, so the CRC or the bin necessarily changes. that’s my logic to justify the change anyway.
@Jim G, i have the same speeds as @paulie. I am running an i7 processor in this machine: Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz 3.40 GHz.
i am using a piece of sh*t nvme adapter purchased from amazon — cheapest i could find. i also bought 4 others to test and they all produced identical speeds. my nvme is a crucial p5 pro 1tb drive. dont forget, most drives market as UP TO 3500meg/s or whatever. because the 500gb and smaller drives are slower. typically only the 1tb and up drives support the fastest theoretical transfer speeds.
Joseph Shaff says
Will that method work on the HP Compaq Elite 8300 CMT (Convertable Micro Towers) ?
Gary Sapir says
@ Joseph Shaff, i can’t speak to that, sorry. I would think if the bios file used to upgrade the 8300 sff and cmt is an identical file, then the method should work the same
For anyone following this blog post, it has now been completely rewritten with the useful information provided by Ivan. Let me know how you get on!
Jim G says
Thanks for the heads up. I’m glad I made a PDF of the old one. Honestly if it was me I would have made two pages, offering two different methods. Why dump up tried, tested, and true work? Method 1 would have been with the SOIC 16 programmer stuff you have already done, and Method 2 as a whole new write up using the the Linux programming.
As for me, I wouldn’t have even have the idea right now to try resurrecting my bad flashed HP 8300 if it weren’t for @Paulies original article with the SOIC 16 programmer stuff… After 2 weeks of delays from amazon, I finally got an SOIC 16 cable to go with the usb programmer. I had to go with an off brand, and hope it works. It’s 16 pins and 16 cables. The DollaTek from the article was out of stock.
I am wondering too about other HP system possiblities, but I have to find out more on the flash chips for them.
HP Pro 6200 (it’s only PCIe 2.0 and would be similar in NVMe speed to the Dell 990 write up), plus HP 600/800 G1 core 4th gen and HP 600/800 G2 core 6th gen machines. They all use a similar ‘blue bios’ to the 8300. All things being equal with the programmer, chip etc… it might work.
Hoping the HP 8300 will come back to life trying this method to read and flash the bios. Then will try the other steps to add the NVMe support…
Hi Jim, I did toy with keeping the existing page active. But I want new visitors to have the clearest, and easiest possible solution. The Linux method is very easy and will make this modification straightforward for anyone else trying to do the same. Your situation is a bit of an exception.
I wouldn’t worry too much that you couldn’t get the same brand programmer, they all seem to be the same until you get into the higher quality, more expensive units. I am sure there are many possibilities of machines that this mod will work with. But right now I have an Office full of old machines that I need to get rid of before trying any more!
Jim G says
I hear you, true the Linux method is easier overall. I wish someone out there had a writeup about programming using the SOIC 16 method some time ago. Without your old post, I would have never known about any of this, so thanks for the idea anyway.
I am having some problems with your old SOIC 16 clip method though. I noticed my off brand cable did not come with the 8 to 16 pin header that yours has with the Dolla Tek (which is still out of stock right now at Amazon). It only came with a 16 pin header for the clip cable to connect to the programmer. Do you think this is a problem? Only once has the aux light came on so far. So maybe this 16 pin header is an issue?
Even with the ram chip white holder clip fully removed for the same slot that your top part was broken for in the old post: the clip still does not like to stay on the chip, and it is a bit difficult to line up right.
All the software and drivers installed ok, the programmer red power light is on, so all looks well.
The problem is this: The HP 8300 mainboard aux light has come on only one time. The AS programmer just keeps returning FF FFF FFFF etc for all the stats. It is not reading the IC correctly. I have tried flipping the SOIC 16 cable every which way at the programmer side and at the BIOS chip side, and no luck. Do you think this 8 pin to 16 pin converter is really needed? Is it a bad cable?
Maybe I need take the board fully out of the case and look to see what the clip contact looks like? I don’t get why only 1 aux light in about 12+ tries at getting this clip to make good contact, unless it IS that 16 pin header vs the 8 pin header you have???
I can see why you broke part of the RAM slot holder off in your original post with the programmer method. The SOIC 16 clip is very sensitive, the spring is super tight. I managed to take out the RAM slot holder clip completely, by gently but firmly pulling on it with a needle nose pliers. Squeezing in the right spot apparently released the tabs enough for it to come out as one piece. The holder tabs on the sides of it look ok. We’ll see if it goes back in or not later once the machine is repaired…
It can be very difficult to get the clip on. But when it’s on you’ll know you have it right. I’ve got the knack of it now having done it to several machines, but the first time I tried I just couldn’t get it right for quite a while.
if you need the old guide, you can reference it using waybackmachine
If people really want the old guide, I can make it available again. But it is a very complex procedure for most people to follow.
Hi @Paulue @Cosmo
Getting further with the SOIC16 clip, but still no luck.
Got a 2nd cable, it seems to be making better contact than the first one, but still problems. I don’t know if I fudged my AUX light on the mainboard, but it is not coming on now no matter what I do.
Programmer is reading the IC but the codes are all different each time. As the old article said, to stop ‘here’. None of the codes matched what you had on the page.
The IC Chip on the 341A also getting VERY hot. I think this programmer is shot from the get go. It’s never read anything correctly with 2 different SOIC 16 cables now. The programmer usb device is coming up as unrecognized too after a few chip detections too and programmer not recognized (-1). I don’t think a bad SOIC 16 cable would cause this… very strange.
Should the LEFT side light on the programmer stay ON when it has made a proper connection to the SOIC16 clip? Or does that light only blink when there is activity?
Either way: getting another programmer… having such horrible luck with this.
Trying this with win 11, maybe this weekend I need to break out a win 10 box… I don’t think the OS would make that much difference.
You might be better off using a higher quality clip if you are struggling. Have a look at this one made by Pomona: https://cpc.farnell.com/pomona/5250/test-clip-8-pos-1-27mm-soj-soic/dp/IN08790
Jim G says
@Paulie Have you got more info for that Pomona clip: a part number, or model number, etc? Maybe I can google it or something. Getting Access Denied error…
You don’t have permission to access “http://cpc.farnell.com/pomona/5250/test-clip-8-pos-1-27mm-soj-soic/dp/IN08790” on this server.
Jim G says
Ok so I got your clip page to come up now. Went to https://cpc.farnell.com and searched for Pomona 5250.
it came up, but it is only 8 pins:
8-Pin SOJ/SO IC Test Clip – 5250
The winbond bios chip for the 8300 is 16 pins. Shouldn’t I get one that is 16 pin like this one? Pomona 5252
16-Pin SOJ/SO IC Test Clip – 5252
Yes, sorry. I’ve ordered a selection of them. I don’t know what they are like yet – but they seem to be higher quality (but may be not better for our purposes).
Jim G says
Understood. Let us know how it goes, I hope the Pomona clips work better for you. Amazon can’t get me one until May and for $35.00 or so US to use with the 8300…
Before dropping back to punt with a totally different working motherboard as a replacement:
I was wondering too about somehow using patch wires to piggyback a good working bios rom from another working HP 8300 board to fire up the ‘dead’ one and get it reflashed. Is that even possible somehow without soldering?
As for the Linux steps in the new article: I have prepped a system rescue usb drive, while I figure out my next move for the 8300.
I was considering trying the patch on a working HP 6200, or maybe the 800 G1 or G2, but you have just posted a new article for the 800 G1 🙂 yay!
I still have a question on this new method for the Linux programming though:
It looks like one has to know what kind of rom chip with the -c switch from your Linux commands:
flashrom -p internal -c MT25QL128 -r /mt/usb/backup.bin
flashrom -p internal -c MT25QL128 -w /mt/usb/nvme.bin
I am confused why MT25QL128 (Micron Technologies?), when the bios chip on my HP 8300 mainboard says Winbond on it? In the old article for the 8300 for the 341A programmer, you had us select the W25Q128BV for the winbond chip.
Is the Linux flashrom util able to detect what kind of rom is on the mainboard? If not, how are you getting this info about MT to use in the command?
That said I’ll look up the IC info for my HP 6200 bios (its probably a similar winbond chip). I’d like to know how to figure out what to use for -c if I were to try this with some different HP machines, where the Intel ME tools might not work.