Edward O'Callaghan has submitted this change. ( https://review.coreboot.org/c/flashrom/+/73456 )
Change subject: internal: Move laptop_ok into board_cfg
......................................................................
internal: Move laptop_ok into board_cfg
Due to how internal is structured around chipset_flash_enable()
entry we need to prepare a crafted programmer_cfg that contains
a board_enable substructure with data derived from the board_enable
subsystem. While this is certainly not perfection, it does make
clear the relationships between board_enable into chipset_flash_enable
and subsequently the overall internal programmer initialisation
in a RAII fashion at the type level over closure upon global
state that is impossible to reason about.
Also flip predicate in report_nonwl_laptop_detected() and
return early with the trivial base-case.
TEST=`$ sudo ./flashrom -p internal --flash-name`.
Change-Id: I459215253845c2af73262943ce91a36464e9eb06
Signed-off-by: Edward O'Callaghan <quasisec(a)google.com>
Reviewed-on: https://review.coreboot.org/c/flashrom/+/73456
Tested-by: build bot (Jenkins) <no-reply(a)coreboot.org>
Reviewed-by: Sam McNally <sammc(a)google.com>
---
M board_enable.c
M chipset_enable.c
M flashrom.c
M include/programmer.h
M internal.c
5 files changed, 72 insertions(+), 44 deletions(-)
Approvals:
build bot (Jenkins): Verified
Sam McNally: Looks good to me, approved
diff --git a/board_enable.c b/board_enable.c
index f95430a..d9af44e 100644
--- a/board_enable.c
+++ b/board_enable.c
@@ -2293,7 +2293,7 @@
static int p2_whitelist_laptop(struct board_cfg *cfg)
{
cfg->is_laptop = 1;
- g_laptop_ok = true;
+ cfg->laptop_ok = true;
msg_pdbg("Whitelisted laptop detected.\n");
return 0;
}
diff --git a/chipset_enable.c b/chipset_enable.c
index 37a48fc..16ef0f4 100644
--- a/chipset_enable.c
+++ b/chipset_enable.c
@@ -826,7 +826,7 @@
/* Suppress unknown laptop warning if we booted from SPI. */
if (boot_buses & BUS_SPI)
- g_laptop_ok = true;
+ cfg->bcfg->laptop_ok = true;
return 0;
}
@@ -971,7 +971,7 @@
/* Suppress unknown laptop warning if we booted from SPI. */
if (!ret && (boot_buses & BUS_SPI))
- g_laptop_ok = true;
+ cfg->bcfg->laptop_ok = true;
_freepci_ret:
pci_free_dev(spi_dev);
@@ -1087,7 +1087,7 @@
/* Suppress unknown laptop warning if we booted from SPI. */
if (boot_buses & BUS_SPI)
- g_laptop_ok = true;
+ cfg->bcfg->laptop_ok = true;
return 0;
}
@@ -1676,7 +1676,7 @@
/* Suppress unknown laptop warning if we booted from SPI. */
if (!ret && want_spi)
- g_laptop_ok = true;
+ cfg->bcfg->laptop_ok = true;
return ret;
}
diff --git a/flashrom.c b/flashrom.c
index b135e58..01c78fd 100644
--- a/flashrom.c
+++ b/flashrom.c
@@ -65,10 +65,6 @@
*/
static bool may_register_shutdown = false;
-struct programmer_cfg {
- char *params;
-};
-
/* Register a function to be executed on programmer shutdown.
* The advantage over atexit() is that you can supply a void pointer which will
* be used as parameter to the registered function upon programmer shutdown.
diff --git a/include/programmer.h b/include/programmer.h
index 157de2e..5b304f5 100644
--- a/include/programmer.h
+++ b/include/programmer.h
@@ -30,7 +30,11 @@
USB,
OTHER,
};
-struct programmer_cfg;
+struct board_cfg;
+struct programmer_cfg {
+ char *params;
+ struct board_cfg *bcfg;
+};
struct dev_entry {
uint16_t vendor_id;
@@ -162,6 +166,7 @@
struct board_cfg {
int is_laptop;
+ bool laptop_ok;
};
struct board_match {
@@ -267,7 +272,6 @@
#endif
#if CONFIG_INTERNAL == 1
-extern bool g_laptop_ok;
extern bool force_boardmismatch;
void probe_superio(void);
int register_superio(struct superio s);
diff --git a/internal.c b/internal.c
index 1f0e6ee..faeb463 100644
--- a/internal.c
+++ b/internal.c
@@ -27,8 +27,6 @@
#include "hwaccess_x86_io.h"
#endif
-bool g_laptop_ok = false;
-
bool force_boardmismatch = false;
enum chipbustype internal_buses_supported = BUS_NONE;
@@ -107,33 +105,37 @@
return 0;
}
-static void report_nonwl_laptop_detected(int is_laptop, bool laptop_ok)
+static void report_nonwl_laptop_detected(const struct board_cfg *bcfg)
{
- if (is_laptop && !laptop_ok) {
- msg_pinfo("========================================================================\n");
- if (is_laptop == 1) {
- msg_pinfo("You seem to be running flashrom on an unknown laptop. Some\n"
- "internal buses have been disabled for safety reasons.\n\n");
- } else {
- msg_pinfo("You may be running flashrom on an unknown laptop. We could not\n"
- "detect this for sure because your vendor has not set up the SMBIOS\n"
- "tables correctly. Some internal buses have been disabled for\n"
- "safety reasons. You can enforce using all buses by adding\n"
- " -p internal:laptop=this_is_not_a_laptop\n"
- "to the command line, but please read the following warning if you\n"
- "are not sure.\n\n");
- }
- msg_perr("Laptops, notebooks and netbooks are difficult to support and we\n"
- "recommend to use the vendor flashing utility. The embedded controller\n"
- "(EC) in these machines often interacts badly with flashing.\n"
- "See the manpage and https://flashrom.org/Laptops for details.\n\n"
- "If flash is shared with the EC, erase is guaranteed to brick your laptop\n"
- "and write may brick your laptop.\n"
- "Read and probe may irritate your EC and cause fan failure, backlight\n"
- "failure and sudden poweroff.\n"
- "You have been warned.\n"
- "========================================================================\n");
+ const int is_laptop = bcfg->is_laptop;
+ const bool laptop_ok = bcfg->laptop_ok;
+
+ if (!is_laptop || laptop_ok)
+ return;
+
+ msg_pinfo("========================================================================\n");
+ if (is_laptop == 1) {
+ msg_pinfo("You seem to be running flashrom on an unknown laptop. Some\n"
+ "internal buses have been disabled for safety reasons.\n\n");
+ } else {
+ msg_pinfo("You may be running flashrom on an unknown laptop. We could not\n"
+ "detect this for sure because your vendor has not set up the SMBIOS\n"
+ "tables correctly. Some internal buses have been disabled for\n"
+ "safety reasons. You can enforce using all buses by adding\n"
+ " -p internal:laptop=this_is_not_a_laptop\n"
+ "to the command line, but please read the following warning if you\n"
+ "are not sure.\n\n");
}
+ msg_perr("Laptops, notebooks and netbooks are difficult to support and we\n"
+ "recommend to use the vendor flashing utility. The embedded controller\n"
+ "(EC) in these machines often interacts badly with flashing.\n"
+ "See the manpage and https://flashrom.org/Laptops for details.\n\n"
+ "If flash is shared with the EC, erase is guaranteed to brick your laptop\n"
+ "and write may brick your laptop.\n"
+ "Read and probe may irritate your EC and cause fan failure, backlight\n"
+ "failure and sudden poweroff.\n"
+ "You have been warned.\n"
+ "========================================================================\n");
}
static int internal_init(const struct programmer_cfg *cfg)
@@ -157,9 +159,6 @@
if (ret)
return ret;
- /* Unconditionally reset global state from previous operation. */
- g_laptop_ok = false;
-
/* Default to Parallel/LPC/FWH flash devices. If a known host controller
* is found, the host controller init routine sets the
* internal_buses_supported bitfield.
@@ -228,13 +227,15 @@
* this isn't a laptop. Board-enables may override this,
* non-legacy buses (SPI and opaque atm) are probed anyway.
*/
- if (bcfg.is_laptop && !(g_laptop_ok || force_laptop || (not_a_laptop && bcfg.is_laptop == 2)))
+ if (bcfg.is_laptop && !(bcfg.laptop_ok || force_laptop || (not_a_laptop && bcfg.is_laptop == 2)))
internal_buses_supported = BUS_NONE;
/* try to enable it. Failure IS an option, since not all motherboards
* really need this to be done, etc., etc.
*/
- ret = chipset_flash_enable(cfg);
+ struct programmer_cfg icfg = *cfg;
+ icfg.bcfg = &bcfg;
+ ret = chipset_flash_enable(&icfg);
if (ret == -2) {
msg_perr("WARNING: No chipset found. Flash detection "
"will most likely fail.\n");
@@ -258,7 +259,7 @@
internal_par_init(internal_buses_supported);
/* Report if a non-whitelisted laptop is detected that likely uses a legacy bus. */
- report_nonwl_laptop_detected(bcfg.is_laptop, g_laptop_ok);
+ report_nonwl_laptop_detected(&bcfg);
ret = 0;
--
To view, visit https://review.coreboot.org/c/flashrom/+/73456
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: flashrom
Gerrit-Branch: master
Gerrit-Change-Id: I459215253845c2af73262943ce91a36464e9eb06
Gerrit-Change-Number: 73456
Gerrit-PatchSet: 6
Gerrit-Owner: Edward O'Callaghan <quasisec(a)chromium.org>
Gerrit-Reviewer: Angel Pons <th3fanbus(a)gmail.com>
Gerrit-Reviewer: Edward O'Callaghan <quasisec(a)chromium.org>
Gerrit-Reviewer: Sam McNally <sammc(a)google.com>
Gerrit-Reviewer: Thomas Heijligen <src(a)posteo.de>
Gerrit-Reviewer: build bot (Jenkins) <no-reply(a)coreboot.org>
Gerrit-MessageType: merged
Attention is currently required from: Thomas Heijligen.
Anastasia Klimchuk has posted comments on this change. ( https://review.coreboot.org/c/flashrom/+/73822 )
Change subject: doc: Add contact page
......................................................................
Patch Set 4:
(1 comment)
File doc/index.rst:
https://review.coreboot.org/c/flashrom/+/73822/comment/1c4c741c_744d545c
PS4, Line 9: dev_guide/index
: classic_cli_manpage
: contact
I want to spend some more time thinking about order of items and nesting, and about group names. For example what `dev_guide` translates into, is this "Dev guide" group in the menu? Maybe this can be "Dev guides" plural? Also I think manpage can go into "User guides"... etc
But I assume this can be changed later right? I don't want to block this patch.
--
To view, visit https://review.coreboot.org/c/flashrom/+/73822
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: flashrom
Gerrit-Branch: master
Gerrit-Change-Id: Ibfba6a59c5a945b4238d16e07a07584f94159568
Gerrit-Change-Number: 73822
Gerrit-PatchSet: 4
Gerrit-Owner: Thomas Heijligen <src(a)posteo.de>
Gerrit-Reviewer: Alexander Goncharov <chat(a)joursoir.net>
Gerrit-Reviewer: Anastasia Klimchuk <aklm(a)chromium.org>
Gerrit-Reviewer: Edward O'Callaghan <quasisec(a)chromium.org>
Gerrit-Reviewer: build bot (Jenkins) <no-reply(a)coreboot.org>
Gerrit-Attention: Thomas Heijligen <src(a)posteo.de>
Gerrit-Comment-Date: Thu, 06 Apr 2023 04:20:55 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Gerrit-MessageType: comment
Anastasia Klimchuk has uploaded this change for review. ( https://review.coreboot.org/c/flashrom/+/74225 )
Change subject: doc: Add doc how to add docs
......................................................................
doc: Add doc how to add docs
Change-Id: I356a286ad2f3334392efadda366b0ca0f8042752
Signed-off-by: Anastasia Klimchuk <aklm(a)chromium.org>
---
A doc/how_to_add_docs.rst
M doc/index.rst
2 files changed, 35 insertions(+), 0 deletions(-)
git pull ssh://review.coreboot.org:29418/flashrom refs/changes/25/74225/1
diff --git a/doc/how_to_add_docs.rst b/doc/how_to_add_docs.rst
new file mode 100644
index 0000000..ad5953c
--- /dev/null
+++ b/doc/how_to_add_docs.rst
@@ -0,0 +1,24 @@
+How to add or update docs
+=========================
+
+To add or update a documentation page, you need to create or modify
+an ``.rst`` file in the ``/doc`` directory and send a patch for
+review.
+
+People who are registered in MAINTAINERS file for doc/ directory will
+be automatically added to the patch as reviewers. However, you are
+very welcome to add more reviewers who know the subject. In fact, it
+is always a good idea to add someone who has knowledge of the specific
+area you are documenting.
+
+We are using Sphinx doc engine for documentation (see
+https://www.sphinx-doc.org/) and reStructured Text format for content.
+reStructuredText Primer page has more details
+https://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html#restructuredtext-primer
+
+Brand new page needs to be added to the appropriate ``index.rst`` file
+under ``/doc`` directory (that could be a root index file or nested one).
+
+To test your changes, build flashrom with documentation and open
+generated ``.html`` file in the browser. Generated ``.html`` files are
+in meson ``builddir/doc/html`` directory.
diff --git a/doc/index.rst b/doc/index.rst
index d309a03..4af7ca4 100644
--- a/doc/index.rst
+++ b/doc/index.rst
@@ -7,5 +7,6 @@
:hidden:
classic_cli_manpage
+ how_to_add_docs
.. include:: ../README
--
To view, visit https://review.coreboot.org/c/flashrom/+/74225
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: flashrom
Gerrit-Branch: master
Gerrit-Change-Id: I356a286ad2f3334392efadda366b0ca0f8042752
Gerrit-Change-Number: 74225
Gerrit-PatchSet: 1
Gerrit-Owner: Anastasia Klimchuk <aklm(a)chromium.org>
Gerrit-MessageType: newchange
Attention is currently required from: Stefan Reinauer, Thomas Heijligen, Alexander Goncharov.
Anastasia Klimchuk has posted comments on this change. ( https://review.coreboot.org/c/flashrom/+/74216 )
Change subject: [WAIT FOR CB:73822]doc: Convert README to sphinx
......................................................................
Patch Set 1:
(1 comment)
Patchset:
PS1:
(removing the reviewer was not intentional sorry, returning back)
--
To view, visit https://review.coreboot.org/c/flashrom/+/74216
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: flashrom
Gerrit-Branch: master
Gerrit-Change-Id: I6e0debc0e15a9c4866f6d16fb010cd3f13171ff3
Gerrit-Change-Number: 74216
Gerrit-PatchSet: 1
Gerrit-Owner: Anastasia Klimchuk <aklm(a)chromium.org>
Gerrit-Reviewer: Alexander Goncharov <chat(a)joursoir.net>
Gerrit-Reviewer: Stefan Reinauer <stefan.reinauer(a)coreboot.org>
Gerrit-Reviewer: Thomas Heijligen <src(a)posteo.de>
Gerrit-Reviewer: build bot (Jenkins) <no-reply(a)coreboot.org>
Gerrit-Attention: Stefan Reinauer <stefan.reinauer(a)coreboot.org>
Gerrit-Attention: Thomas Heijligen <src(a)posteo.de>
Gerrit-Attention: Alexander Goncharov <chat(a)joursoir.net>
Gerrit-Comment-Date: Thu, 06 Apr 2023 02:43:19 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Gerrit-MessageType: comment
Attention is currently required from: Thomas Heijligen, Alexander Goncharov.
Anastasia Klimchuk has posted comments on this change. ( https://review.coreboot.org/c/flashrom/+/74216 )
Change subject: [WAIT FOR CB:73822]doc: Convert README to sphinx
......................................................................
Patch Set 1:
(1 comment)
Patchset:
PS1:
This one is special: because it will be a home page (default page), but I am not sure how to implement that. Do I need to add it to the root index.rst just like all the other pages?
--
To view, visit https://review.coreboot.org/c/flashrom/+/74216
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: flashrom
Gerrit-Branch: master
Gerrit-Change-Id: I6e0debc0e15a9c4866f6d16fb010cd3f13171ff3
Gerrit-Change-Number: 74216
Gerrit-PatchSet: 1
Gerrit-Owner: Anastasia Klimchuk <aklm(a)chromium.org>
Gerrit-Reviewer: Alexander Goncharov <chat(a)joursoir.net>
Gerrit-Reviewer: Thomas Heijligen <src(a)posteo.de>
Gerrit-Reviewer: build bot (Jenkins) <no-reply(a)coreboot.org>
Gerrit-Attention: Thomas Heijligen <src(a)posteo.de>
Gerrit-Attention: Alexander Goncharov <chat(a)joursoir.net>
Gerrit-Comment-Date: Thu, 06 Apr 2023 02:42:19 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Gerrit-MessageType: comment
Attention is currently required from: Felix Singer, Thomas Heijligen, Edward O'Callaghan, Angel Pons.
Anastasia Klimchuk has posted comments on this change. ( https://review.coreboot.org/c/flashrom/+/67073 )
Change subject: usb_device.c: detach/attach usb kernel driver explicitly
......................................................................
Patch Set 5:
(1 comment)
Patchset:
PS5:
> This code is currently used in raiden_debug_spi programmer only, it seems. […]
My previous comment did not sent and email for some reason :\ trying again
--
To view, visit https://review.coreboot.org/c/flashrom/+/67073
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: flashrom
Gerrit-Branch: master
Gerrit-Change-Id: I1363fea13368b7ac1e9a3829864d06d123c4e157
Gerrit-Change-Number: 67073
Gerrit-PatchSet: 5
Gerrit-Owner: Thomas Heijligen <src(a)posteo.de>
Gerrit-Reviewer: Anastasia Klimchuk <aklm(a)chromium.org>
Gerrit-Reviewer: Edward O'Callaghan <quasisec(a)chromium.org>
Gerrit-Reviewer: Felix Singer <felixsinger(a)posteo.net>
Gerrit-Reviewer: Peter Marheine <pmarheine(a)chromium.org>
Gerrit-Reviewer: build bot (Jenkins) <no-reply(a)coreboot.org>
Gerrit-CC: Angel Pons <th3fanbus(a)gmail.com>
Gerrit-Attention: Felix Singer <felixsinger(a)posteo.net>
Gerrit-Attention: Thomas Heijligen <src(a)posteo.de>
Gerrit-Attention: Edward O'Callaghan <quasisec(a)chromium.org>
Gerrit-Attention: Angel Pons <th3fanbus(a)gmail.com>
Gerrit-Comment-Date: Thu, 06 Apr 2023 02:37:19 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Anastasia Klimchuk <aklm(a)chromium.org>
Gerrit-MessageType: comment
Attention is currently required from: Thomas Heijligen.
Anastasia Klimchuk has posted comments on this change. ( https://review.coreboot.org/c/flashrom/+/73822 )
Change subject: doc: Add contact page
......................................................................
Patch Set 4:
(1 comment)
File doc/contact.rst:
https://review.coreboot.org/c/flashrom/+/73822/comment/1cbbaf6d_4f863855
PS4, Line 2: =
One extra char?
--
To view, visit https://review.coreboot.org/c/flashrom/+/73822
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: flashrom
Gerrit-Branch: master
Gerrit-Change-Id: Ibfba6a59c5a945b4238d16e07a07584f94159568
Gerrit-Change-Number: 73822
Gerrit-PatchSet: 4
Gerrit-Owner: Thomas Heijligen <src(a)posteo.de>
Gerrit-Reviewer: Alexander Goncharov <chat(a)joursoir.net>
Gerrit-Reviewer: Anastasia Klimchuk <aklm(a)chromium.org>
Gerrit-Reviewer: Edward O'Callaghan <quasisec(a)chromium.org>
Gerrit-Reviewer: build bot (Jenkins) <no-reply(a)coreboot.org>
Gerrit-Attention: Thomas Heijligen <src(a)posteo.de>
Gerrit-Comment-Date: Wed, 05 Apr 2023 13:02:40 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Gerrit-MessageType: comment
Anastasia Klimchuk has uploaded this change for review. ( https://review.coreboot.org/c/flashrom/+/74216 )
Change subject: [WAIT FOR CB:73822]doc: Convert README to sphinx
......................................................................
[WAIT FOR CB:73822]doc: Convert README to sphinx
This patch also includes small changes to README file that were
agreed earlier:
changing all links to https
re-ordering of sections as Build instructions, Installations,
Packaging, Contact
Change-Id: I6e0debc0e15a9c4866f6d16fb010cd3f13171ff3
Signed-off-by: Anastasia Klimchuk <aklm(a)chromium.org>
---
A doc/readme.rst
1 file changed, 261 insertions(+), 0 deletions(-)
git pull ssh://review.coreboot.org:29418/flashrom refs/changes/16/74216/1
diff --git a/doc/readme.rst b/doc/readme.rst
new file mode 100644
index 0000000..60ed628
--- /dev/null
+++ b/doc/readme.rst
@@ -0,0 +1,244 @@
+flashrom README
+===============
+
+flashrom is a utility for detecting, reading, writing, verifying and erasing
+flash chips. It is often used to flash BIOS/EFI/coreboot/firmware images
+in-system using a supported mainboard, but it also supports flashing of network
+cards (NICs), SATA controller cards, and other external devices which can
+program flash chips.
+
+It supports a wide range of flash chips (most commonly found in SOIC8, DIP8,
+SOIC16, WSON8, PLCC32, DIP32, TSOP32, and TSOP40 packages), which use various
+protocols such as LPC, FWH, parallel flash, or SPI.
+
+Do not use flashrom on laptops (yet)! The embedded controller (EC) present in
+many laptops might interact badly with any attempts to communicate with the
+flash chip and may brick your laptop.
+
+Please make a backup of your flash chip before writing to it.
+
+Please see the flashrom(8) manpage :doc:`classic_cli_manpage`.
+
+
+Build Instructions
+------------------
+
+flashrom supports building with make and meson.
+
+Meson build system supports almost all the environments, although not exactly
+all of them. Full meson support is on the roadmap in the nearest future.
+To build flashrom with meson, follow the instruction and information in
+:doc:`dev_guide/building_from_source`
+
+If you are unsure which build system to use, and/or don't know what's the
+difference, use make for now.
+
+The rest of Build Instructions below refers to building flashrom with make.
+
+To build flashrom you need to install the following software:
+
+ * C compiler (GCC / clang)
+ * pkg-config
+
+ * pciutils+libpci (if you want support for mainboard or PCI device flashing)
+ * libusb (if you want FT2232, Dediprog or USB-Blaster support)
+ * libftdi (if you want FT2232 or USB-Blaster support)
+ * libjaylink (if you want support for SEGGER J-Link and compatible devices)
+
+Linux et al:
+
+ * pciutils / libpci
+ * pciutils-devel / pciutils-dev / libpci-dev
+ * zlib-devel / zlib1g-dev (needed if libpci was compiled with libz support)
+
+On FreeBSD, you need the following ports:
+
+ * devel/gmake
+ * devel/libpci
+
+On OpenBSD, you need the following ports:
+
+ * devel/gmake
+ * sysutils/pciutils
+
+To compile on Linux, use:
+
+.. code-block::
+
+ make
+
+To compile on FreeBSD, OpenBSD or DragonFly BSD, use:
+
+.. code-block::
+
+ gmake
+
+To compile on Nexenta, use:
+
+.. code-block::
+
+ make
+
+To compile on Solaris, use:
+
+.. code-block::
+
+ gmake LDFLAGS="-L$pathtolibpci" CC="gcc -I$pathtopciheaders" CFLAGS=-O2
+
+To compile on NetBSD (with pciutils, libftdi, libusb installed in /usr/pkg/), use:
+
+.. code-block::
+
+ gmake
+
+To compile and run on Darwin/Mac OS X:
+
+Install DirectHW from coresystems GmbH.
+DirectHW is available at https://www.coreboot.org/DirectHW .
+
+To cross-compile on Linux for DOS:
+
+Get packages of the DJGPP cross compiler and install them:
+
+ * djgpp-filesystem djgpp-gcc djgpp-cpp djgpp-runtime djgpp-binutils
+
+As an alternative, the DJGPP web site offers packages for download as well:
+
+ * djcross-binutils-2.29.1-1ap.x86_64.rpm
+ * djcross-gcc-7.2.0-1ap.x86_64.rpm
+ * djcrx-2.05-5.x86_64.rpm
+
+The cross toolchain packages for your distribution may have slightly different
+names (look for packages named *djgpp*).
+
+Alternatively, you could use a script to build it from scratch:
+https://github.com/andrewwutw/build-djgpp
+
+You will need the libpci and libgetopt library source trees and
+their compiled static libraries and header files installed in some
+directory say libpci-libgetopt/, which will be later specified with
+LIBS_BASE parameter during flashrom compilation. Easiest way to
+handle it is to put pciutils, libgetopt and flashrom directories
+in one subdirectory. There will be an extra subdirectory libpci-libgetopt
+created, which will contain compiled libpci and libgetopt.
+
+Download pciutils 3.5.6 and apply https://flashrom.org/File:Pciutils-3.5.6.patch.gz
+Compile pciutils, using following command line:
+
+.. code-block::
+
+ make ZLIB=no DNS=no HOST=i386-djgpp-djgpp CROSS_COMPILE=i586-pc-msdosdjgpp- \
+ PREFIX=/ DESTDIR=$PWD/../libpci-libgetopt \
+ STRIP="--strip-program=i586-pc-msdosdjgpp-strip -s" install install-lib
+
+Download and compile with 'make' https://flashrom.org/File:Libgetopt.tar.gz
+
+Copy the libgetopt.a to ../libpci-libgetopt/lib and
+getopt.h to ../libpci-libgetopt/include
+
+Enter the flashrom directory.
+
+.. code-block::
+
+ make CC=i586-pc-msdosdjgpp-gcc STRIP=i586-pc-msdosdjgpp-strip LIBS_BASE=../libpci-libgetopt/ strip
+
+If you like, you can compress the resulting executable with UPX:
+
+.. code-block::
+
+ upx -9 flashrom.exe
+
+To run flashrom.exe, download https://flashrom.org/File:Csdpmi7b.zip and
+unpack CWSDPMI.EXE into the current directory or one in PATH.
+
+To cross-compile on Linux for Windows:
+
+Get packages of the MinGW cross compiler and install them:
+
+.. code-block::
+
+ mingw32-filesystem mingw32-cross-cpp mingw32-cross-binutils mingw32-cross-gcc
+ mingw32-runtime mingw32-headers
+
+The cross toolchain packages for your distribution may have slightly different
+names (look for packages named *mingw*).
+PCI-based programmers (internal etc.) are not supported on Windows.
+Run (change CC= and STRIP= settings where appropriate)
+
+.. code-block::
+
+ make CC=i686-w64-mingw32-gcc STRIP=i686-w64-mingw32-strip
+
+Processor architecture dependent features:
+
+On non-x86 architectures a few programmers don't work (yet) because they
+use port-based I/O which is not directly available on non-x86. Those
+programmers will be disabled automatically if you run "make".
+
+Compiler quirks:
+
+If you are using clang and if you want to enable only one driver, you may hit an
+overzealous compiler warning from clang. Compile with "make WARNERROR=no" to
+force it to continue and enjoy.
+
+Bindings:
+
+Foreign function interface bindings for the rust language are included in the
+bindings folder. These are not compiled as part of the normal build process.
+See the readme under bindings/rust for more information.
+
+
+Installation
+------------
+
+In order to install flashrom and the manpage into /usr/local, type:
+
+.. code-block::
+
+ make install
+
+For installation in a different directory use DESTDIR, e.g. like this:
+
+.. code-block::
+
+ make DESTDIR=/usr install
+
+If you have insufficient permissions for the destination directory, use sudo
+by adding sudo in front of the commands above.
+
+
+Packaging
+---------
+
+To package flashrom and remove dependencies on Git, either use
+
+.. code-block::
+
+ make export
+ or
+ make tarball
+
+'make export' will export all flashrom files from the Git repository at
+revision HEAD into a directory named "$EXPORTDIR/flashrom-$RELEASENAME"
+and will additionally add a "versioninfo.inc" file in that directory to
+contain the Git revision of the exported tree and a date for the manual
+page.
+
+'make tarball' will simply tar up the result of make export and compress
+it with bzip2.
+
+The snapshot tarballs are the result of 'make tarball' and require no
+further processing. Some git files (for example the rust bindings) are omitted
+from the tarball, as controlled by the .gitattributes files.
+
+
+Contact
+-------
+
+The official flashrom website is:
+
+ https://www.flashrom.org/
+
+Available contact methods are
+
+ https://www.flashrom.org/Contact
--
To view, visit https://review.coreboot.org/c/flashrom/+/74216
To unsubscribe, or for help writing mail filters, visit https://review.coreboot.org/settings
Gerrit-Project: flashrom
Gerrit-Branch: master
Gerrit-Change-Id: I6e0debc0e15a9c4866f6d16fb010cd3f13171ff3
Gerrit-Change-Number: 74216
Gerrit-PatchSet: 1
Gerrit-Owner: Anastasia Klimchuk <aklm(a)chromium.org>
Gerrit-MessageType: newchange