diff options
author | Patrick Rudolph <siro@das-labor.org> | 2018-08-04 10:04:45 +0200 |
---|---|---|
committer | Philipp Deppenwiese <zaolin.daisuki@gmail.com> | 2018-09-30 03:20:36 +0000 |
commit | 15d840558480536ddaca71bc1876254d59fca7fe (patch) | |
tree | ecbb8b330e53b9413eaf17a72e0fb79a9ed2523f /Documentation/flash_tutorial/index.md | |
parent | 3d1d966dd8866e8fd399f988b38b7ceba9f4cfee (diff) | |
download | coreboot-15d840558480536ddaca71bc1876254d59fca7fe.tar.xz |
Documentation: Add basic flashing tutorial for Lenovo
* Add basic flashing tutorial
** Describe internal and external flashing
** Describe flash supply diode protection
** Gives general advices on flashing
** Describe how to use flashrom --ifd
* Describe basic flashing on Lenovo T4xx devices
** Describe how to disassemble and access the flash IC on T4xx
** Describe flash layout on Sandy Bridge and Ivy Bridge series.
Change-Id: Ia833e27f4e7d89ee32be9bed21a0c021839facec
Signed-off-by: Patrick Rudolph <siro@das-labor.org>
Reviewed-on: https://review.coreboot.org/27852
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Philipp Deppenwiese <zaolin.daisuki@gmail.com>
Diffstat (limited to 'Documentation/flash_tutorial/index.md')
-rw-r--r-- | Documentation/flash_tutorial/index.md | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/Documentation/flash_tutorial/index.md b/Documentation/flash_tutorial/index.md new file mode 100644 index 0000000000..1a291372a6 --- /dev/null +++ b/Documentation/flash_tutorial/index.md @@ -0,0 +1,105 @@ +# Flashing firmware tutorial + +Updating the firmware is possible using the **internal method**, where the updates +happen from a running system, or using the **external method**, where the system +is in a shut down state and an external programmer is attached to write into the +flash IC. + +## Contents + +* [Flashing internaly](int_flashrom.md) +* [Flashing firmware standalone](ext_standalone.md) +* [Flashing firmware externally supplying direct power](ext_power.md) +* [Flashing firmware externally without supplying direct power](no_ext_power.md) + +## General advice + +* It's recommended to only flash the BIOS region. +* Always verify the firmware image. +* If you flash externally and have transmission errors: + * Use short wires + * Reduce clock frequency + * Check power supply + * Make sure that there are no other bus masters (EC, ME, SoC, ...) + +## Internal method + +This method using [flashrom] is available on many platforms, as long as they +aren't locked down. + +There are various protection schemes that make it impossible to modify or +replace a firmware from a running system. coreboot allows to disable these +mechanisms, making it possible to overwrite (or update) the firmware from a +running system. + +Usually you must use the **external method** once to install a retrofitted +coreboot and then you can use the **internal method** for future updates. + +There are multiple ways to update the firmware: +* Using flashrom's *internal* programmer to directly write into the firmware + flash IC, running on the target machine itself +* A proprietary software to update the firmware, running on the target machine + itself +* A UEFI firmware update capsule + +More details on flashrom's +* [internal programmer](int_flashrom.md) + +## External method + +External flashing is possible on many platforms, but requires disassembling +the target hardware. You need to buy a flash programmer, that +exposes the same interface as your flash IC (likely SPI). + +Please also have a look at the mainboard-specific documentation for details. + +After exposing the firmware flash IC, read the schematics and use one of the +possible methods: + +* [Flashing firmware standalone](ext_standalone.md) +* [Flashing firmware externally supplying direct power](ext_power.md) +* [Flashing firmware externally without supplying direct power](no_ext_power.md) + +**WARNING:** Using the wrong method or accidentally using the wrong pinout might + permanently damage your hardware! + +## Using a layout file +On platforms where the flash IC is shared with other components you might want +to write only a part of the flash IC. On Intel for example there are IFD, ME and +GBE which don't need to be updated to install coreboot. +To make [flashrom] only write the *bios* region, leaving Intel ME and Intel IFD +untouched, you can use a layout file, which can be created using ifdtool + +```bash +ifdtool -f rom.layout coreboot.rom +``` + +and looks similar to: + +``` +00000000:00000fff fd +00500000:00bfffff bios +00003000:004fffff me +00001000:00002fff gbe +``` + +By specifying *-l* and *-i* [flashrom] writes a single region: +```bash +flashrom -l rom.layout -i bios -w coreboot.rom -p <programmer> +``` + +## Using an IFD to determine the layout +flashrom version 1.0 supports reading the layout from the IFD (first 4KiB of +the ROM). You don't need to manually specify a layout it, but it only works +under the following conditions: + +* Only available on Intel ICH7+ +* There's only one flash IC when flashing externally + +```bash +flashrom --ifd -i bios -w coreboot.rom -p <programmer> +``` + +**TODO** explain FMAP regions, normal/fallback mechanism, flash lock mechanisms + +[flashrom]: https://www.flashrom.org/Flashrom |