From 89d6d2b82c2515cd3d7aa6aec40b951fe33a4ec8 Mon Sep 17 00:00:00 2001 From: Nicholas Chin Date: Sat, 24 Sep 2022 19:02:05 -0600 Subject: [PATCH] Documentation/flashing_firmware: Add info about SPI flash header Some mainboards have a header connected to the SPI bus, which can be used to connect a second flash chip and override the onboard flash. This allows one to boot coreboot on the system without ever having to flash the onboard flash. HP boards with this header all seem to use the same 2x8 or 2x10 header layout, so document the pinout. Change-Id: Ic2bf1244adfb78872340f212519c6ab33e26646a Signed-off-by: Nicholas Chin Reviewed-on: https://review.coreboot.org/c/coreboot/+/67818 Reviewed-by: Angel Pons Tested-by: build bot (Jenkins) --- .../flashing_firmware/ext_standalone.md | 40 +++++++ .../flashing_firmware/hp_spi_header.svg | 109 ++++++++++++++++++ .../flashing_firmware/hp_spi_header_mb.jpg | Bin 0 -> 21906 bytes 3 files changed, 149 insertions(+) create mode 100644 Documentation/tutorial/flashing_firmware/hp_spi_header.svg create mode 100644 Documentation/tutorial/flashing_firmware/hp_spi_header_mb.jpg diff --git a/Documentation/tutorial/flashing_firmware/ext_standalone.md b/Documentation/tutorial/flashing_firmware/ext_standalone.md index 3a676ce47c..1cb03e1cc1 100644 --- a/Documentation/tutorial/flashing_firmware/ext_standalone.md +++ b/Documentation/tutorial/flashing_firmware/ext_standalone.md @@ -19,5 +19,45 @@ It is possible to set the onboard flash on hold and use another flash chip. Connect all lines one-to-one, except /HOLD. Pull /HOLD of the soldered flash IC low, and /HOLD of your replacement flash IC high. +### SPI header +Some boards feature a pin header which is connected to the SPI bus. This can +also be used to connect a secondary flash chip. + +#### HP boards +Many HP desktop mainboards have a 2x8 or 2x10 block of header pins which +can be used to connect a second flash chip. One pin is connected to the +onboard flash's /CS pin, and another is connected to the chipset's /CS +pin. Normally a jumper cap is placed between these pins, allowing the +chipset to access the onboard flash. To use this header, remove this +jumper and connect all lines except /CS one-to-one with the +corresponding pin on the header. The secondary flash chip's /CS line +should be connected to the chipset /CS pin on the header. By doing this +the secondary SPI flash, rather than the onboard flash, will respond to +accesses from the chipset. + +![][hp_spi_header_pinout] + +![][hp_spi_header_mainboard] + +Note that on boards where this header is unpopulated, a jumper resistor +will be populated nearby which serves the purpose of the jumper cap. One +end should have continuity with the /CS pin on the flash, and the other +end should have continuity with the chipset /CS pin on the unpopulated +header. It may also be possible to find this resistor through visual +inspection of the traces on the /CS pins. This resistor should be +desoldered if you wish to solder a pin header to the board and connect a +secondary flash, otherwise the onboard flash will always respond to +accesses. + +#### Other boards +Other boards may have similar headers, but will likely use a different +pinout than the ones explicitly mentioned here. Usually such a header +will be located near the onboard SPI flash. If schematics are available, +the pinout for the header will likely be found in it, but it could also +be determined using a multimeter in continuity mode to map out the +connections between the SPI flash and the header. + [EM100Pro]: https://www.dediprog.com/product/EM100Pro +[hp_spi_header_pinout]: hp_spi_header.svg +[hp_spi_header_mainboard]: hp_spi_header_mb.jpg diff --git a/Documentation/tutorial/flashing_firmware/hp_spi_header.svg b/Documentation/tutorial/flashing_firmware/hp_spi_header.svg new file mode 100644 index 0000000000..c29a444604 --- /dev/null +++ b/Documentation/tutorial/flashing_firmware/hp_spi_header.svg @@ -0,0 +1,109 @@ + + + + + + + + + + + VCC + GND + CLK + DO + DI + /CS + /CSchipset + + diff --git a/Documentation/tutorial/flashing_firmware/hp_spi_header_mb.jpg b/Documentation/tutorial/flashing_firmware/hp_spi_header_mb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b9edd734b855b8df340e6d6d0216e4cabcac46d2 GIT binary patch literal 21906 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 B40Qki literal 0 HcmV?d00001