2016-05-11

Notes - BIOS MOD - NVME Native Boot on Intel DZ77BH-55K

Problem: Intel BIOSes locked, can't flash modified via software without difficulty.
Solution: Direct write via test clip and Raspberry PI.

Equipment:
- Macronix MX25L6406E Datasheet: http://www.macronix.com/Lists/Datasheet/Attachments/7370/MX25L6406E,%203V,%2064Mb,%20v1.9.pdf
- Pomona 5250 Test Clip
  * Issues with knock-offs: pins too close, contacts don't mate with chip
- Raspberry PI  (Ref: https://pinout.xyz/pinout/spi)
  * Instructions: https://tomvanveen.eu/flashing-bios-chip-raspberry-pi/
                          https://github.com/bibanon/Coreboot-ThinkPads/wiki/Hardware-Flashing-with-Raspberry-Pi

Modifying BIOS:
- Source: [BHZ7710H.86A] 05/17/2013 V0100 https://downloadcenter.intel.com/download/22814/BIOS-Update-BHZ7710H-86A-
- Instructions:
  * Followed, Worked: https://www.win-raid.com/t871f50-Guide-How-to-get-full-NVMe-support-for-all-Systems-with-an-AMI-UEFI-BIOS.html
  * Untried: https://www.overclock.net/forum/6-intel-motherboards/1571271-tutorial-how-add-nvme-support-any-ami-uefi-bios-intel-chipset.html



pi@~$ flashrom -c "MX25L6406E/MX25L6408E" -p linux_spi:dev=/dev/spidev0.0,spispeed=2000 -r original.bin
flashrom v1.0 on Linux 4.14.70-v7+ (armv7l)
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).
Found Macronix flash chip "MX25L6406E/MX25L6408E" (8192 kB, SPI) on linux_spi.
Reading flash... done.

pi@~$ md5sum original.bin
4caa66abdf964d93d7a673e6a0aae7e5 original.bin
4caa66abdf964d93d7a673e6a0aae7e5 original_verify.bin

pi@~$ md5sum nvmeflash.rom
67adeb213f6fc62774ecb39130fadcfe nvmeflash.rom

pi@~$ flashrom -c "MX25L6406E/MX25L6408E" -p linux_spi:dev=/dev/spidev0.0,spispeed=2000 -w nvmeflash.rom -V
flashrom v1.0 on Linux 4.14.70-v7+ (armv7l)
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).
Initializing linux_spi programmer
Using device /dev/spidev0.0
Using 2000 kHz clock
The following protocols are supported: SPI.
Probing for Macronix MX25L6406E/MX25L6408E, 8192 kB: probe_spi_rdid_generic: id1 0xc2, id2 0x2017
Found Macronix flash chip "MX25L6406E/MX25L6408E" (8192 kB, SPI) on linux_spi.
Chip status register is 0x00.
Chip status register: Status Register Write Disable (SRWD, SRP, ...) is not set
Chip status register: Bit 6 is not set
Chip status register: Block Protect 3 (BP3) is not set
Chip status register: Block Protect 2 (BP2) is not set
Chip status register: Block Protect 1 (BP1) is not set
Chip status register: Block Protect 0 (BP0) is not set
Chip status register: Write Enable Latch (WEL) is not set
Chip status register: Write In Progress (WIP/BUSY) is not set
This chip may contain one-time programmable memory. flashrom cannot read
and may never be able to write it, hence it may not be able to completely
clone the contents of this chip (see man page for details).
Reading old flash chip contents... done.
Erasing and writing flash chip... Trying erase function 0.

pi@~$ flashrom -c "MX2flashrom -c "MX25L6406E/MX25L6408E" -p linux_spi:dev=/dev/spidev0.0,spispeed=2000 -r verify.rom

pi@~$ md5sum verify.rom
67adeb213f6fc62774ecb39130fadcfe verify.rom