lbwww/site/docs/install/e6400.md

12 KiB

title x-toc-enable
Flashing the Dell Latitude E6400 true

The microcode bugfixes/mitigations added for GM45 are also applicable to this board, for users who are interested. Read that article for more information.

Libreboot still recommends that boot with CPU microcode updates, by default, for all the reasons described by Libreboot's Binary Blobs Reductions Policy but this board run reasonably well without them.

A note about GPUs

We confirm that the Nvidia models are PM45, and therefore will require a VGA blob for initialisation. This is experimentally supported in Libreboot. - A Video BIOS Option ROM is used, in this configuration, which is a binary blob. Libreboot's build system automatically downloads this at build time, or it can handle that for you in the same way if it was scrubbed from a release ROM.

Models with Intel graphics are GM45, and fully supported in Libreboot with native initialisation; ROM images are available since Libreboot 20230423. The Intel video initialisation is libre, implemented with publicly available source code via libgfxinit, from the coreboot project.

Flash chip size

Use this to find out:

flashrom -p internal

We believe most/all are 4MB (32Mb) flash sizes, but larger ROM images are provided for people who wish to upgrade.

MAC address

The MAC address is part of the ROM image that you're flashing. You can change it at any time, before or after you've flashed Libreboot; you can also change it in the Dell BIOS, if you really want to. This is for the onboard gigabit ethernet device.

Refer to mac_address.md.

It is recommended that you run nvmutil. See:

nvmutil usage manual

The nvmutil software is specifically designed for changing MAC addresses, and it implements a few more safeguards (e.g. prevents multicast/all-zero MAC addresses) and features (MAC address randomisation, ability to correct or intententionally corrupt(disable) GbE sections if you wish, swap GbE parts, etc). You can also run ich9gen, if you wish:

ich9gen usage manual

Intel GPU: libre video initialisation available

Libreboot uses coreboot's native libgfxinit on this platform, for variants with Intel graphics.

For Intel GPU variants, Libreboot 20230423 and up have full support. Simply flash a release ROM, if you wish.

Nvidia GPU: Video BIOS Option ROM required

NOTE: nouveau (Linux video driver) is unstable when it was last tested, in this setup. Either specify nomodeset kernel option, or use another operating system such as OpenBSD. More information is written on the E6400 hardware page, regarding OS compatibility.

This is unavailable in Libreboot 20230423 and 20230625, but a future release will contain support for these variants; for now, you must compile Libreboot from Git.

Download the Libreboot build system, lbmk, like so:

git clone https://codeberg.org/libreboot/lbmk

When you clone the Libreboot git repository lbmk.git, go in there and do this:

git checkout e6400nvidia_wip

Actual installation is the same as with regular E6400 (Intel GPU) variants. Refer to the E6400 flashing instructions.

The e6400nvidia_wip is used, because this version is still under development. Refer to development discussion for more information - testers needed!

Obtaining the VGA Option ROM (Nvidia)

Libreboot does not (and will not) directly distribute the Nvidia ROM, but this WIP branch has logic added to blobutil, which automatically fetches Dell update files and extracts the Video BIOS from it. This is inserted during the build process, automatically. Everything has been figured out for you, as is the purpose of Libreboot's automated build system.

In Libreboot release ROMs after Libreboot 20230423, this Video BIOS ROM will not be present, but you'll be able to run the same script that lbmk uses, to manually re-download and re-add it. The Libreboot build system scrubs certain binary blobs, in the scripts from lbmk that create release archives.

Please read the Libreboot build guide for more general guidance on compiling Libreboot. You should especially set name/email in Git, like so:

git config --global user.name "John Doe"
git config --global user.email "you@example.com"

Ensure that the python command on your system is python 3, not 2. You should ensure that you have the correct build dependencies installed; check the script names inside resources/scripts/build/dependencies and pick one that matches your Linux distro; if one isn't available, adapt accordingly. Then run it as root. For example, on Debian (stable, testing or sid all confirmed to work, as of 9 May 2023):

./build dependencies debian

With build dependencies installed, and Git configured, you may then run lbmk commands to compile the ROM image.

Libreboot's blobutil, while in the e6400nvidia_wip branch, can be executed like so:

./blobutil download e6400nvidia_4mb

The above command is executed automatically, when Libreboot's build system is called, to build the full E6400 ROM image like so:

./build boot roms e6400nvidia_4mb

The download command (see above) pulls down Dell's BIOS update (A34 release), and extracts the VGA ROM from that. This is then saved to pciroms/ under lbmk.

The ./build boot roms command (see above) automatically inserts this PCI ROM, and it is downloaded automatically if the PCI ROM is missing; if downloading and/or extraction (of the Option ROM) fails, the entire build process will fail (non-zero exit status). DO NOT flash it until you confirm that the build went successfully. For example, try:

make -BC coreboot/default/util/cbfstool/cbfstool
cp coreboot/default/util/cbfstool/cbfstool .

Then check the E6400 ROM under bin/. Let's say the ROM was named libreboot.rom, you would do:

./cbfstool libreboot.rom print

This would print the files that have been inserted into the ROM image (rom stage, car, payloads etc), and it should list the PCI option ROM as the following file, by name: pci10de,06eb.rom.

DO NOT flash it unless that file is present. If you've confirmed that the ROM has compiled successfully, you can flash it.

BEFORE you flash it, please know that support for Nvidia variants is a work in progress. Known issues exist. For more information, please read the E6400 info page, E6400 nvidia news page and the development discussion via codeberg.

How to flash internally (no diassembly)

Warning for BSD users

BSD boots and works properly on these machines, but take note:

Nicholas's e6400-flash-unlock utility has not yet been ported to BSD systems. The flashrom software is available on BSD systems. Libreboot's build system has not yet been ported to the BSDs.

BSD users could run Linux from USB to run flashrom and e6400-flash-unlock. Virtualisation is available in BSDs, where it should be feasible to run the Libreboot build system, in Linux, under virtualisation.

Flashing from Linux

MAKE SURE you boot with this Linux kernel parameter: iomem=relaxed - this disables memory protections, permitting /dev/mem access needed by flashrom. The flash is memory mapped and flashrom accesses it via /dev/mem.

You can flash Libreboot directly from the vendor (Dell) BIOS, without taking the machine apart. It can be done entirely from Linux. It will probably also work on BSD systems, but it has only been testing on Linux thus far.

Check util/e6400-flash-unlock in the lbmk.git repository, or in release archives for Libreboot releases from 20230423 onwards.

Go in there:

cd util/e6400-flash-unlock
make

With this program, you can unlock the flash in such a way where everything is writeable. Information about how to use it is in the README.md file which is included in that program's directory, or you can read it online here:

https://browse.libreboot.org/lbmk.git/plain/util/e6400-flash-unlock/README.md

Literally just run that program, and do what it says. You run it once, and shut down, and when you do, the system brings itself back up automatically. Then you run it and flash it unlocked. Then you run it again. The source code is intuitive enough that you can easily get the gist of it; it's writing some EC commands and changing some chipset config bits. The EC on this machine is hooked up to the GPIO33 signal, sometimes called HDA_DOCK_EN, which sets the flash descriptor override thus disabling any flash protection by the IFD. It also bypasses the SMM BIOS lock protection by disabling SMIs, and Dell's BIOS doesn't set any other type of protection either such as writing to Protected Range registers.

When you flash it, you can use this command:

flashrom -p internal -w libreboot.rom

Where libreboot.rom is your E6400 ROM. Make sure it's the right one. If flashrom complains about multiple flash chips detected, just pick one of them (doesn't matter which one). On most Dell machines, the most correct would probably be this option in flashrom: -c MX25L3205D/MX25L3208D.

So:

flashrom -p internal -w libreboot.rom -c MX25L3205D/MX25L3208D

When you see flashrom say VERIFIED at the end, that means the flash was successful. If you don't see that, or you're unsure, please contact the Libreboot project via IRC.

BACK UP THE FACTORY BIOS

The -w option flashes libreboot.rom. You may consider backing up the original Dell BIOS first, using the -r option:

flashrom -p internal -r backup.rom -c MX25L3205D/MX25L3208D

Do this while in a flashable state, after the 2nd run of e6400-flash-unlock.

Make sure the backup.rom file gets backed up to an external storage media, not the E6400 itself.

With this method, you can probably flash it within 5 minutes. Again, zero disassembly required!

How to flash externally

Refer to spi.md as a guide for external re-flashing.

The SPI flash chip shares a voltage rail with the ICH9 southbridge, which is not isolated using a diode. As a result, powering the flash chip externally causes the ICH9 to partially power up and attempt to drive the SPI clock pin low, which can interfere with programmers such as the Raspberry Pi. See RPi Drive Strength for a workaround.

Have a look online for videos showing how to disassemble, if you wish to externally re-flash.