mirror of
https://review.coreboot.org/flashrom.git
synced 2025-04-26 22:52:34 +02:00
doc: Add page with misc notes and advice
This page is a combination of info from the following pages: https://wiki.flashrom.org/Common_problems https://wiki.flashrom.org/Connections https://wiki.flashrom.org/FAQ https://wiki.flashrom.org/Random_notes https://wiki.flashrom.org/Live_CD Change-Id: I538f31765576584760524cd8b06cbf5bce191bde Signed-off-by: Anastasia Klimchuk <aklm@flashrom.org> Reviewed-on: https://review.coreboot.org/c/flashrom/+/83450 Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
parent
f944a0488d
commit
923b6b5b8d
@ -9,3 +9,4 @@ Users documentation
|
||||
chromebooks
|
||||
management_engine
|
||||
misc_intel
|
||||
misc_notes
|
||||
|
149
doc/user_docs/misc_notes.rst
Normal file
149
doc/user_docs/misc_notes.rst
Normal file
@ -0,0 +1,149 @@
|
||||
=====================
|
||||
Misc notes and advice
|
||||
=====================
|
||||
|
||||
This document contains miscellaneous and unstructured (and mostly, legacy) notes and advice about using flashrom.
|
||||
|
||||
Command set tricks for parallel and LPC chips
|
||||
=============================================
|
||||
|
||||
This is only mentioned in very few datasheets, but it applies to some parallel (and some LPC) chips.
|
||||
|
||||
Upper address bits of commands are ignored if they are not mentioned explicitly. If a datasheet specifies the following sequence::
|
||||
|
||||
chip_writeb(0xAA, bios + 0x555);
|
||||
chip_writeb(0x55, bios + 0x2AA);
|
||||
chip_writeb(0x90, bios + 0x555);
|
||||
|
||||
then it is quite likely the following sequence will work as well::
|
||||
|
||||
chip_writeb(0xAA, bios + 0x5555);
|
||||
chip_writeb(0x55, bios + 0x2AAA);
|
||||
chip_writeb(0x90, bios + 0x5555);
|
||||
|
||||
However, if the chip datasheet specifies addresses like ``0x5555``, you can't shorten them to ``0x555``.
|
||||
|
||||
To summarize, replacing short addresses with long addresses usually works, but the other way round usually fails.
|
||||
|
||||
flashrom doesn't work on my board, what can I do?
|
||||
=================================================
|
||||
|
||||
* First of all, check if your chipset, ROM chip, and mainboard are supported
|
||||
(see :doc:`/supported_hw/index`).
|
||||
* If your board has a jumper for BIOS flash protection (check the manual), disable it.
|
||||
* Should your BIOS menu have a BIOS flash protection option, disable it.
|
||||
* If you run flashrom on Linux and see messages about ``/dev/mem``, see next section.
|
||||
* If you run flashrom on OpenBSD, you might need to obtain raw access permission by setting
|
||||
``securelevel = -1`` in ``/etc/rc.securelevel`` and rebooting, or rebooting into single user mode.
|
||||
|
||||
What can I do about /dev/mem errors?
|
||||
====================================
|
||||
|
||||
* If flashrom tells you ``/dev/mem mmap failed: Operation not permitted``:
|
||||
|
||||
* Most common at the time of writing is a Linux kernel option, ``CONFIG_IO_STRICT_DEVMEM``,
|
||||
that prevents even the root user from accessing hardware from user-space if the resource is unknown
|
||||
to the kernel or a conflicting kernel driver reserved it. On Intel systems, this is most often ``lpc_ich``,
|
||||
so ``modprobe -r lpc_ich`` can help. A more invasive solution is to try again after rebooting
|
||||
with ``iomem=relaxed`` in the kernel command line.
|
||||
|
||||
* Some systems with incorrect memory reservations (e.g. E820 map) may have the same problem
|
||||
even with ``CONFIG_STRICT_DEVMEM``. In that case ``iomem=relaxed`` in the kernel command line may help too.
|
||||
|
||||
* If it tells you ``/dev/mem mmap failed: Resource temporarily unavailable``:
|
||||
|
||||
* This may be an issue with PAT (e.g. if the memory flashrom tries to map is already mapped
|
||||
in an incompatible mode). Try again after rebooting with nopat in the kernel command line.
|
||||
|
||||
* If you see this message ``Can't mmap memory using /dev/mem: Invalid argument``:
|
||||
|
||||
* Your flashrom is very old, better update it. If the issue persists, try the kernel options mentioned above.
|
||||
|
||||
* Generally, if your version of flashrom is very old, an update might help.
|
||||
Flashrom has less strict requirements now and works on more systems without having to change the kernel.
|
||||
|
||||
Connections
|
||||
===========
|
||||
|
||||
Using In-System programming requires some means to connect the external programmer to the flash chip.
|
||||
|
||||
Note that some external flashers (like the Openmoko debug board) lack a connector,
|
||||
so they do requires some soldering to be used. Some other don't. For instance the buspirate has a pin connector on it.
|
||||
|
||||
Programmer <-> Removable chip connection
|
||||
----------------------------------------
|
||||
|
||||
A breadboard can be used to connect Dual in-line 8 pins chips to the programmer, as they they fit well into it.
|
||||
|
||||
Programmer <-> Clip connection
|
||||
------------------------------
|
||||
|
||||
If your programmer has a pin connector, and that you want to avoid soldering, you can use
|
||||
**Short** `Jump Wires <https://en.wikipedia.org/wiki/Jump_wire>`_ to connect it to a clip.
|
||||
They usually can be found on some electronic shops.
|
||||
|
||||
Other issues
|
||||
-------------
|
||||
|
||||
* Wires length and connection quality: Long wires, and bad connection can create some issues, so avoid them.
|
||||
|
||||
* The maximum wires length is very dependent on your setup, so try to have the shortest wires possible.
|
||||
* If you can't avoid long wires and if you're flash chip is SPI, then lowering the SPI clock could make
|
||||
it work in some cases. Many programmers do support such option (Called spispeed with most of them, or divisor with ft2232_spi).
|
||||
|
||||
* When soldering wires, the wire tend to break near the soldering point. To avoid such issue,
|
||||
you have to prevent the wires from bending near the soldering point.
|
||||
To do that `Heat-shrink_tubing <https://en.wikipedia.org/wiki/Heat-shrink_tubing>`_ or similar methods can be used.
|
||||
|
||||
Common problems
|
||||
===============
|
||||
|
||||
The following describes problems commonly found when trying to access flash chips in systems
|
||||
that are not designed properly for this job, e.g. ad-hoc setups to flash in-system
|
||||
(TODO add a doc for in-system-specific problems).
|
||||
|
||||
Symptoms indicating you may have at least one of these are for example inconsistent reads or probing results.
|
||||
This happens basically because the analog electrical waveforms representing the digital information
|
||||
get too distorted to by interpreted correctly all the time. Depending on the cause different steps can be tried.
|
||||
|
||||
* Not all input pins are connected to the correct voltage level/output pin of the programmer.
|
||||
Always connect all input pins of ICs!
|
||||
|
||||
* The easiest thing to try is lowering the (SPI) clock frequency if your programmer supports it.
|
||||
That way the waveforms have more time to settle before being sampled by the receiver which might be enough.
|
||||
Depending on the design of the driver and receiver as well as the actual communication path
|
||||
this might not change anything as well.
|
||||
|
||||
* Wires are too long. Shortening them to a few cm (i.e. < 20, the lesser the better) might help.
|
||||
|
||||
* The impedances of the wires/traces do not match the impedances of the input pins
|
||||
(of either the circuit/chip on the mainboard or the external programmer).
|
||||
Try using shorter wires, adding small (<100 Ohm) series resistors or parallel capacitors (<20pF)
|
||||
as near as possible to the input pins (this includes also the MISO line which ends near the programmer)\
|
||||
and/or ask someone who has experience with high frequency electronics.
|
||||
|
||||
* The supply voltage of the flash chip is not stable enough. Try adding a 0.1 µF - 1 µF (ceramic) capacitor
|
||||
between the flash chip's VCC and GND pins as near as possible to the chip.
|
||||
|
||||
Live CD
|
||||
=========
|
||||
|
||||
A Live CD containing flashrom provides a user with a stable work environment to read, write and verify a flash device on any supported hardware.
|
||||
|
||||
It can help avoid Linux installation issues, which can be a hassle for some users.
|
||||
|
||||
flashrom is already shipped in some of the Live CDs, see below. *Please note, some of these ship very old versions of flashrom*.
|
||||
|
||||
* `SystemRescueCd <http://www.sysresccd.org/>`_ has been including flashrom since about version 2.5.1.
|
||||
|
||||
* `grml <http://grml.org/>`_
|
||||
|
||||
* Note: You need the full grml ISO, "small" (and "medium") ISOs do not contain flashrom.
|
||||
* Note: Some releases (e.g. 2011.12) did not contain flashrom.
|
||||
|
||||
* `Parted Magic <http://partedmagic.com/>`_
|
||||
|
||||
* `Hiren's BootCD <http://www.hirensbootcd.org/>`_
|
||||
|
||||
* When you select "Linux based rescue environment (Parted Magic 6.7)" and then "Live with default settings",
|
||||
you have access to a system which has flashrom.
|
Loading…
x
Reference in New Issue
Block a user