| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,112 @@ | ||
| # Code of Conduct | ||
|
|
||
| This code of conduct outlines our rules and expectations for everybody | ||
| participating in the coreboot community. | ||
|
|
||
| ## coreboot community etiquette | ||
|
|
||
| We have a friendly and productive atmosphere on our mailing lists, | ||
| development / code review tools, IRC chat rooms and when we meet in | ||
| person. Our principles evolve around the following: | ||
|
|
||
| * It's not the user's fault if something goes wrong. | ||
| * Attempt collaboration before conflict. | ||
| * People who intentionally insult others (users, developers, corporations, | ||
| other projects, or the coreboot project itself) will be dealt with. See | ||
| policy below. | ||
| * We are dealing with hardware with lots of undocumented pitfalls. It is quite | ||
| possible that you did everything right, but coreboot or its tools still | ||
| won't work for you. | ||
|
|
||
| Refrain from insulting anyone or the group they belong to. Remember that | ||
| people might be sensitive to other things than you are. | ||
|
|
||
| Most of our community members are not native English speakers, thus | ||
| misunderstandings can (and do) happen. Always assume that others are | ||
| friendly and may have picked less-than-stellar wording by accident. | ||
|
|
||
| If you have a grievance due to conduct in this community, we want to hear | ||
| about it so we can handle the situation. Please contact our arbitration | ||
| team directly: They will listen to you and react in a timely fashion. | ||
|
|
||
| For transparency there is no alias or private mailing list address for | ||
| you to reach out to, since we want to make sure that you know who will | ||
| (and who won't) read your message. | ||
|
|
||
| However since people might be on travel or otherwise be unavailable at | ||
| times, consider reaching out to multiple persons. | ||
|
|
||
| The team will treat your messages confidential as far as the law permits. | ||
| For the purpose of knowing what law applies, the list provides the usual | ||
| country of residence of each team member. | ||
|
|
||
| ## Unacceptable Behavior | ||
|
|
||
| Unacceptable behaviors include: intimidating, harassing, abusive, | ||
| discriminatory, derogatory or demeaning speech or actions by any | ||
| participant in our community online, at all related events and in | ||
| one-on-one communications carried out in the context of community | ||
| business. Community event venues may be shared with members of the public; | ||
| please be respectful to all patrons of these locations. | ||
|
|
||
| Examples of behaviors we do not accept in our community: | ||
|
|
||
| * harmful or prejudicial verbal or written comments related to gender, | ||
| sexual orientation, race, religion, disability; | ||
| * inappropriate physical contact, and unwelcome sexual advances; | ||
| * deliberate intimidation, stalking or following; | ||
| * harassing photography or recording; | ||
| * sustained disruption of talks or other events. | ||
|
|
||
| Using this code of conduct aggressively against other people in the | ||
| community might also be harassment. Be considerate when enforcing the code | ||
| of conduct and always try to listen to both sides before passing judgment. | ||
|
|
||
| ## Consequences of Unacceptable Behavior | ||
|
|
||
| Unacceptable behavior from any community member, including sponsors and | ||
| those with decision-making authority, will not be tolerated. | ||
|
|
||
| Anyone asked to stop unacceptable behavior is expected to comply | ||
| immediately. | ||
|
|
||
| If a community member engages in unacceptable behavior, the community | ||
| organizers may take any action they deem appropriate, up to and including | ||
| a temporary ban or permanent expulsion from the community without warning | ||
| (and without refund in the case of a paid event). Community organizers | ||
| can be part of the arbitration team, or organizers of events and online | ||
| communities. | ||
|
|
||
| ## If You Witness or Are Subject to Unacceptable Behavior | ||
|
|
||
| If you are subject to or witness unacceptable behavior, or have any other | ||
| concerns, please notify someone from the arbitration team immediately. | ||
|
|
||
|
|
||
| ## Addressing Grievances | ||
|
|
||
| If you feel you have been falsely or unfairly accused of violating this | ||
| Code of Conduct, you should notify the arbitration team with a concise | ||
| description of your grievance. | ||
|
|
||
| ## Scope | ||
|
|
||
| We expect all community participants (contributors, paid or otherwise; | ||
| sponsors; and other guests) to abide by this Code of Conduct in all | ||
| community venues, online and in-person, as well as in all one-on-one | ||
| communications pertaining to community business. | ||
|
|
||
| ## Contact info | ||
|
|
||
| Our arbitration team consists of the following people | ||
| * Stefan Reinauer <stefan.reinauer@coreboot.org> (USA) | ||
| * Patrick Georgi <patrick@coreboot.org> (Germany) | ||
| * Ronald Minnich <rminnich@coreboot.org> (USA) | ||
| * Marc Jones <mjones@coreboot.org> (USA) | ||
|
|
||
| ## License and attribution | ||
|
|
||
| This Code of Conduct is distributed under | ||
| a [Creative Commons Attribution-ShareAlike | ||
| license](http://creativecommons.org/licenses/by-sa/3.0/). It is based | ||
| on the [Citizen Code of Conduct](http://citizencodeofconduct.org/) |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,40 @@ | ||
| # Google Dragonegg (Chromebook) | ||
|
|
||
| This page describes how to run coreboot on the google dragonegg board. | ||
|
|
||
| Dragonegg is based on Intel Ice Lake platform, please refer to below link to get more details | ||
| ```eval_rst | ||
| :doc:`../../soc/intel/icelake/iceLake_coreboot_development` | ||
| ``` | ||
|
|
||
| ## Building coreboot | ||
|
|
||
| * Follow build instructions mentioned in Ice Lake document | ||
| ```eval_rst | ||
| :doc:`../../soc/intel/icelake/iceLake_coreboot_development` | ||
| ``` | ||
|
|
||
| * The default options for this board should result in a fully working image: | ||
| ```bash | ||
| # echo "CONFIG_VENDOR_GOOGLE=y" > .config | ||
| # echo "CONFIG_BOARD_GOOGLE_DRAGONEGG=y" >> .config | ||
| # make olddefconfig && make | ||
| ``` | ||
|
|
||
| ## Flashing coreboot | ||
|
|
||
| ```eval_rst | ||
| +---------------------+------------+ | ||
| | Type | Value | | ||
| +=====================+============+ | ||
| | Socketed flash | no | | ||
| +---------------------+------------+ | ||
| | Vendor | Winbond | | ||
| +---------------------+------------+ | ||
| | Size | 32 MiB | | ||
| +---------------------+------------+ | ||
| | Internal flashing | yes | | ||
| +---------------------+------------+ | ||
| | External flashing | yes | | ||
| +---------------------+------------+ | ||
| ``` |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,40 @@ | ||
| # Intel Ice Lake RVP (Reference Validation Platform) | ||
|
|
||
| This page describes how to run coreboot on the Intel icelake_rvp board. | ||
|
|
||
| Ice Lake RVP is based on Intel Ice Lake platform, please refer to below link to get more details | ||
| ```eval_rst | ||
| :doc:`../../soc/intel/icelake/iceLake_coreboot_development` | ||
| ``` | ||
|
|
||
| ## Building coreboot | ||
|
|
||
| * Follow build instructions mentioned in Ice Lake document | ||
| ```eval_rst | ||
| :doc:`../../soc/intel/icelake/iceLake_coreboot_development` | ||
| ``` | ||
|
|
||
| * The default options for this board should result in a fully working image: | ||
| ```bash | ||
| # echo "CONFIG_VENDOR_INTEL=y" > .config | ||
| # echo "CONFIG_BOARD_INTEL_ICELAKE_RVPU=y" >> .config | ||
| # make olddefconfig && make | ||
| ``` | ||
|
|
||
| ## Flashing coreboot | ||
|
|
||
| ```eval_rst | ||
| +---------------------+------------+ | ||
| | Type | Value | | ||
| +=====================+============+ | ||
| | Socketed flash | no | | ||
| +---------------------+------------+ | ||
| | Vendor | Winbond | | ||
| +---------------------+------------+ | ||
| | Size | 32 MiB | | ||
| +---------------------+------------+ | ||
| | Internal flashing | yes | | ||
| +---------------------+------------+ | ||
| | External flashing | yes | | ||
| +---------------------+------------+ | ||
| ``` |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,79 @@ | ||
| # Intel Kaby lake RVP11 | ||
|
|
||
| ## Specs | ||
|
|
||
| * 1 SATA cable connect | ||
| * 1 SATAe direct | ||
| * 2 USB2.0 connector | ||
| * 4 USB3.0 connector | ||
| * 1 Gigabit Ethernet | ||
| * 1 x4 PCIe slot | ||
| * 1 x1 PCIe slot | ||
| * 1 X16 PEG slot | ||
| * UART debug DB9 connector | ||
| * 4 DIMMS with DDR4 memory | ||
| * SPI flash | ||
| * Audio Jack | ||
| * PS2 Keyboard and Mouse | ||
| * Display: HDMI, DP, VGA | ||
|
|
||
| ## Target Audience | ||
|
|
||
| * OEMs, internal only | ||
|
|
||
| ## Flashing coreboot | ||
|
|
||
| ```eval_rst | ||
| +---------------------+------------+ | ||
| | Type | Value | | ||
| +=====================+============+ | ||
| | Socketed flash | no | | ||
| +---------------------+------------+ | ||
| | Vendor | Winbond | | ||
| +---------------------+------------+ | ||
| | Model | W25Q128FV | | ||
| +---------------------+------------+ | ||
| | Size | 16 MiB | | ||
| +---------------------+------------+ | ||
| | Package | SOIC-8 | | ||
| +---------------------+------------+ | ||
| | Write protection | No | | ||
| +---------------------+------------+ | ||
| | Dual BIOS feature | No | | ||
| +---------------------+------------+ | ||
| ``` | ||
|
|
||
| ### Instruction to flash coreboot to SPI | ||
|
|
||
| ### Internal programming | ||
|
|
||
| The SPI flash can be accessed internally using [flashrom]. | ||
| The following command is used to flash BIOS region. | ||
|
|
||
| ```bash | ||
| $ flashrom -p internal --ifd -i bios -w coreboot.rom --noverify-all | ||
| ``` | ||
|
|
||
| ### External programming | ||
|
|
||
| 1. Dediprog SF600 with adapter B is used. | ||
| 2. Make sure power supply is disconnected from board. | ||
| 3. Connect Dediprog SF600 to header at J7H1. | ||
| 4. Ensure that "currently working on" is in "application memory chip 1" | ||
| 5. Go to "file" and select the .rom file (16 MB) to program chip1. | ||
| 6. Execute the batch operation to erase and program the chip. | ||
|
|
||
| ## Technology | ||
|
|
||
| ```eval_rst | ||
| +------------------+---------------------------------------------------+ | ||
| | CPU | Kaby lake H (i7-7820EQ) | | ||
| +------------------+---------------------------------------------------+ | ||
| | PCH | Skylake PCH-H (called SPT-H) | | ||
| +------------------+---------------------------------------------------+ | ||
| | Coprocessor | Intel ME | | ||
| +------------------+---------------------------------------------------+ | ||
| ``` | ||
|
|
||
| [W25Q128FV]: https://www.winbond.com/resource-files/w25q128fv%20rev.m%2005132016%20kms.pdf | ||
| [flashrom]: https://flashrom.org/Flashrom |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,42 @@ | ||
| # Lenovo T431s | ||
|
|
||
| ## Disassembly Instructions | ||
|
|
||
| You must remove the following parts before flipping the mainboard | ||
| off the main frame: | ||
|
|
||
|  | ||
|
|
||
| * Base cover | ||
| * Hard disk drive | ||
| * Battery pack | ||
| * Keyboard | ||
|
|
||
| Its [Hardware Maintenance Manual](https://thinkpads.com/support/hmm/hmm_pdf/t431s_hmm_en_0c10894_02.pdf) could be used as a guidance of disassembly. | ||
|
|
||
|  | ||
|
|
||
| The WSON-8 flash chip (surrounded with red circle in the photo above) | ||
| sits on the opposite side of the mainboard, under a piece of insulating | ||
| tape. If solders between the chip and soldering pads fortunately | ||
| overflows beside the chip as tiny tin balls attached to soldering pads, | ||
| it will be possible to use a pomona 5250 clip to hold the chip, with | ||
| its metal tips just attached to tin balls, thus connecting the chip to | ||
| the programmer. | ||
|
|
||
|  | ||
|
|
||
| ```eval_rst | ||
| :doc:`../../flash_tutorial/ext_power` | ||
| ``` | ||
|
|
||
| Currently, detecting the model of soldered RAM at runtime and loading | ||
| the corresponding SPD datum from CBFS is not implemented yet. You may | ||
| have to dump the SPD data when running the vendor firmware with | ||
| inteltool, and replace the content of the SPD hex with what is dumped. | ||
|
|
||
| (the mechanism may be similar to that on x1_carbon_gen1 and s230u, but | ||
| I do not know how to find gpio ports for that, and SPD data stored in | ||
| vendor firmware.) | ||
|
|
||
| [T420 / T520 / X220 / T420s / W520 common]: xx20_series.md |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,203 @@ | ||
| # Supermicro X10SLM+-F | ||
|
|
||
| This section details how to run coreboot on the [Supermicro X10SLM+-F]. | ||
|
|
||
| ## Required proprietary blobs | ||
|
|
||
| ```eval_rst | ||
| Please see :doc:`../../northbridge/intel/haswell/mrc.bin`. | ||
| ``` | ||
|
|
||
| ## Building coreboot | ||
|
|
||
| ```eval_rst | ||
| If you haven't already, build the coreboot toolchain as described in | ||
| :doc:`../../lessons/lesson1`. | ||
| ``` | ||
|
|
||
| A fully working image should be possible so long as you have the | ||
| Haswell `mrc.bin` file. You can set the basic config with the following | ||
| commands. However, it is strongly advised to use `make menuconfig` | ||
| afterwards (or instead), so that you can see all of the settings. | ||
|
|
||
| ```bash | ||
| make distclean # Note: this will remove your current config, if it exists. | ||
| touch .config | ||
| ./util/scripts/config --enable VENDOR_SUPERMICRO | ||
| ./util/scripts/config --enable BOARD_SUPERMICRO_X10SLM_PLUS_F | ||
| ./util/scripts/config --enable HAVE_MRC | ||
| make olddefconfig | ||
| ``` | ||
|
|
||
| If you don't plan on using coreboot's serial console to collect logs, | ||
| you might want to disable it at this point (`./util/scripts/config | ||
| --disable CONSOLE_SERIAL`). It should reduce the boot time by several | ||
| seconds. However, a more flexible method is to change the console log | ||
| level from within an OS using `util/nvramtool`, or with the `nvramcui` | ||
| payload. | ||
|
|
||
| Now, run `make` to build the coreboot image. | ||
|
|
||
| ## Flashing coreboot | ||
|
|
||
| ```eval_rst | ||
| In addition to the information here, please see the | ||
| :doc:`../../flash_tutorial/index`. | ||
| ``` | ||
|
|
||
| ### Internal programming | ||
|
|
||
| Under the vendor firmware, the BIOS region of the flash chip is | ||
| write-protected. Additionally, the vendor flashing tool does not work | ||
| with a coreboot image. So, [external programming](#external-programming) | ||
| needs to be used when first installing coreboot. By default, coreboot is | ||
| not configured to write-protect the BIOS region, so internal programming | ||
| can be used thereafter. | ||
|
|
||
| [flashrom] may be used to flash coreboot internally: | ||
|
|
||
| ```bash | ||
| sudo flashrom -p internal --ifd -i bios --noverify-all -w coreboot.rom | ||
| ``` | ||
|
|
||
| The use of `--noverify-all` is required since the Management Engine | ||
| region is not readable even by the host. | ||
|
|
||
| ### External programming | ||
|
|
||
| The main firmware flash chip is an SOIC-8 package located near the CMOS | ||
| battery and SATA ports. It should come with a sticker attached that | ||
| states the firmware revision (e.g. "X10SLH 4.424"). The chip model is | ||
| an N25Q128A, and the datasheet can be found [here][N25Q128A]. | ||
|
|
||
| As with [internal programming](#internal-programming), [flashrom] works | ||
| reliably: | ||
|
|
||
| ```bash | ||
| flashrom -p <your-programmer> --ifd -i bios -w coreboot.rom | ||
| ``` | ||
|
|
||
| For flashing to work, power to the board should be disconnected (ACPI | ||
| G3), and power should be supplied from the external programmer. There is | ||
| a diode attached to Vcc, so such flashing should not damage the board. | ||
| During testing, a single X10SLM+-F has been flashed dozens of times this | ||
| way without issue. | ||
|
|
||
| ## BMC (IPMI) | ||
|
|
||
| This board has an ASPEED [AST2400], which has BMC functionality. The | ||
| BMC firmware resides in a 32 MiB SOIC-16 chip just above the [AST2400]. | ||
| This chip is an MX25L25635F, whose datasheet can be found | ||
| [here][MX25L25635F]. | ||
|
|
||
| ### Removing the BMC functionality | ||
|
|
||
| The BMC functionality on this board can be removed. If you do not need | ||
| its features, removing the BMC functionality might increase security. | ||
| This topic has not been widely explored, and you should only **undertake | ||
| this process at your own risk.** | ||
|
|
||
| There is a jumper labelled `JPB1` on the board that states the ability | ||
| to disable the BMC. Though, pins 1 and 2 are fixed together, keeping | ||
| the BMC enabled. It might be possible to disable the BMC by cutting the | ||
| connection between pins 1 and 2 (and then connecting pins 2 and 3). This | ||
| has not been tested so far. | ||
|
|
||
| Another approach is to erase the entire BMC firmware chip. However, if | ||
| this is done, and the board's power cycled, the voltage changes on some | ||
| pins of the flash chip, **so it will be harder to flash it again!** | ||
|
|
||
| To remove the firmware, connect an external programmer to the BMC | ||
| firmware chip. Vcc should **not** be connected via the external | ||
| programmer. The system should be turned off, but the power still | ||
| connected (ACPI S5). Then, erase the chip with [flashrom]. Power cycle | ||
| the board, and the BMC should no longer be active. | ||
|
|
||
| If you erase the BMC firmware while using the **vendor BIOS**, you | ||
| will need to cut the connection between pins 1 and 2 of `JPB1`. The | ||
| system will stall for two minutes each time when booting, but it will | ||
| eventually start. There is no such delay when running coreboot. | ||
|
|
||
| ## ECC DRAM | ||
|
|
||
| ```eval_rst | ||
| ECC DRAM seems to work, but please see | ||
| :doc:`../../northbridge/intel/haswell/mrc.bin` | ||
| for caveats. | ||
| ``` | ||
|
|
||
| ## Known issues | ||
|
|
||
| - Broadwell CPUs are not supported. They might work with minimal changes | ||
| to the code, but this has not been tested. | ||
|
|
||
| - The PCH thermal sensor doesn't yet have a driver in coreboot, so it | ||
| can't be used for temperature readings. | ||
|
|
||
| - There is no automatic, OS-independent fan control. This is because | ||
| the super I/O hardware monitor can only obtain valid CPU temperature | ||
| readings from the PECI agent, but the required driver doesn't exist | ||
| in coreboot. The `coretemp` driver can still be used for accurate CPU | ||
| temperature readings from an OS, and hence the OS can do fan control. | ||
|
|
||
| ```eval_rst | ||
| Please also see :doc:`../../northbridge/intel/haswell/known-issues`. | ||
| ``` | ||
|
|
||
| ## Untested | ||
|
|
||
| - TPM | ||
| - PCIe (likely to work, but maybe not at Gen 3 speeds) | ||
| - BMC (IPMI) functionality | ||
| - internal serial port | ||
| - chassis intrusion header | ||
| - SATA DOM header | ||
| - standby power header | ||
| - serial GPIO headers | ||
| - power supply SMBus header | ||
| - jumpers not otherwise mentioned | ||
| - LEDs | ||
|
|
||
| ## Working | ||
|
|
||
| - USB | ||
| - S3 suspend/resume | ||
| - Gigabit Ethernet | ||
| - SATA | ||
| - external serial port | ||
| - VGA graphics | ||
| - disabling VGA graphics using the jumper | ||
| - hiding the AST2400 using the CMOS setting | ||
| - super I/O hardware monitor (see [Known issues](#known-issues)) | ||
| - initialisation with Haswell MRC version 1.6.1 build 2 | ||
| - flashrom under coreboot | ||
| - Wake-on-LAN | ||
| - front panel header | ||
| - internal buzzer | ||
|
|
||
| ## Technology | ||
|
|
||
| ```eval_rst | ||
| +------------------+--------------------------------------------------+ | ||
| | CPU | :doc:`../../northbridge/intel/haswell/index` | | ||
| +------------------+--------------------------------------------------+ | ||
| | PCH | Intel Lynx Point (C224) | | ||
| +------------------+--------------------------------------------------+ | ||
| | Super I/O | Nuvoton NCT6776 | | ||
| +------------------+--------------------------------------------------+ | ||
| | Coprocessor | Intel SPS (server version of the ME) | | ||
| +------------------+--------------------------------------------------+ | ||
| | Coprocessor | ASPEED AST2400 | | ||
| +------------------+--------------------------------------------------+ | ||
| ``` | ||
|
|
||
| ## Extra links | ||
|
|
||
| - [Board manual] | ||
|
|
||
| [AST2400]: https://www.aspeedtech.com/products.php?fPath=20&rId=376 | ||
| [Board manual]: https://www.supermicro.com/manuals/motherboard/C224/MNL-1500.pdf | ||
| [flashrom]: https://flashrom.org/Flashrom | ||
| [MX25L25635F]: https://media.digikey.com/pdf/Data%20Sheets/Macronix/MX25L25635F.pdf | ||
| [N25Q128A]: https://www.micron.com/~/media/Documents/Products/Data%20Sheet/NOR%20Flash/Serial%20NOR/N25Q/n25q_128mb_3v_65nm.pdf | ||
| [Supermicro X10SLM+-F]: https://www.supermicro.com/products/motherboard/xeon/c220/x10slm_-f.cfm |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,12 @@ | ||
| # Intel Haswell documentation | ||
|
|
||
| This section describes the Intel Haswell architecture as it relates to | ||
| coreboot. | ||
|
|
||
| ## Proprietary blobs | ||
|
|
||
| - [mrc.bin](mrc.bin.md) | ||
|
|
||
| ## Issues | ||
|
|
||
| - [Known issues](known-issues.md) |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,28 @@ | ||
| # Known issues with Haswell | ||
|
|
||
| These issues are specific to the Haswell architecture. For a given | ||
| mainboard, there might be additional issues to those listed here. | ||
|
|
||
| ## PCIe graphics | ||
|
|
||
| ```eval_rst | ||
| Using a PCIe graphics card for display output is not currently | ||
| supported. This is because :doc:`./mrc.bin` requires workarounds to | ||
| have such a feature working correctly. | ||
| ``` | ||
|
|
||
| However, there is a [patch on Gerrit][hsw-gfx-gerrit] that allows PCIe | ||
| graphics to be used for display output. This patch is not guaranteed to | ||
| be of the same level of quality as code committed to coreboot. | ||
|
|
||
| Still, in some cases, a PCIe graphics card can be used for rendering, | ||
| while the integrated graphics device is used for display output. This | ||
| can be achieved under GNU/Linux by using [PRIME GPU offloading][PRIME]. | ||
|
|
||
| ## PCIe 3.0 | ||
|
|
||
| Only PCIe 2.0 has been tested so far. PCIe 3.0 could potentially have | ||
| stability issues. | ||
|
|
||
| [PRIME]: https://wiki.archlinux.org/index.php/PRIME | ||
| [hsw-gfx-gerrit]: https://review.coreboot.org/c/30456 |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,36 @@ | ||
| # mrc.bin | ||
|
|
||
| All Haswell boards supported by coreboot currently require a proprietary | ||
| blob in order to initialise the DRAM and a few other components. The | ||
| blob, named `mrc.bin`, largely consists of Intel's memory reference code | ||
| (MRC), but it has been tailored specifically for Chrome OS. It is just | ||
| under 200 KiB in size. Another name for `mrc.bin` is the system agent | ||
| binary. | ||
|
|
||
| Having a replacement for `mrc.bin` using native coreboot code is very | ||
| much desired, but it is not an easy task. | ||
|
|
||
| ## Obtaining mrc.bin | ||
|
|
||
| Unfortunately, it is not currently possible to distribute `mrc.bin` as | ||
| part of coreboot. Though, it can be obtained from a Haswell Chromebook | ||
| firmware image like so, starting in the root of the coreboot directory: | ||
|
|
||
| ```bash | ||
| make -C util/cbfstool | ||
| cd util/chromeos | ||
| ./crosfirmware.sh peppy | ||
| ../cbfstool/cbfstool coreboot-*.bin extract -f mrc.bin -n mrc.bin -r RO_SECTION | ||
| ``` | ||
|
|
||
| Now, place `mrc.bin` in the root of the coreboot directory. | ||
| Alternatively, place `mrc.bin` anywhere you want, and set `MRC_FILE` to | ||
| its location when building coreboot. | ||
|
|
||
| ## ECC DRAM | ||
|
|
||
| When `mrc.bin` has finished executing, ECC is active on the channels | ||
| populated with ECC DIMMs. However, `mrc.bin` was tailored specifically | ||
| for Haswell Chromebooks and Chomeboxes, none of which support ECC DRAM. | ||
| While ECC likely functions correctly, it is advised to further validate | ||
| the correct operation of ECC if data integrity is absolutely critical. |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,210 @@ | ||
| # coreboot Release Process | ||
|
|
||
| This document describes our release process and all prerequisites to implement | ||
| it successfully. | ||
|
|
||
| ## Purpose of coreboot releases | ||
| Our releases aren't primarily a vehicle for code that is stable across all | ||
| boards: The logistics of testing the more than 100 boards that are spread out | ||
| all continents (except Antarctica, probably) on a given tree state are | ||
| prohibitive for project of our size. | ||
|
|
||
| Instead, the releases are regular breakpoints that serve multiple purposes: | ||
| They support cooperation between multiple groups (corporations or otherwise) | ||
| in that it's easier to keep source trees synchronized based on a limited set | ||
| of commits. They allow a quick assessment of the age of any given build or | ||
| source tree based on its git version (4.8-1234 was merged into master a few | ||
| months after 4.8, which came out in April 2018. 4.0-21718's age is harder to | ||
| guess). | ||
|
|
||
| And finally we use releases to as points in time where we remove old code: | ||
| Once we decide that a certain part of coreboot gets in the way of future | ||
| development, we announce on the next release that we intend to remove that | ||
| part - and everything that depends on it - after the following release. | ||
| So removing feature FOO will be announced in release X for release | ||
| X+1. The first commit after X+1 is fair game for such removal. | ||
|
|
||
| Together with our 6 months release horizon, this provides time to plan | ||
| any migrations necessary to keep older boards in the tree by bringing | ||
| them up to current standards. | ||
|
|
||
| ## Needed credentials & authorizations | ||
| * Website access is required to post the release files to the website. | ||
| * IRC admin access is required to update the topic. | ||
| * Git access rights are needed to post the tag. | ||
| * Blog post access is needed to do the blog post. | ||
| * A PGP key is required to sign the release tarballs and git tag. | ||
|
|
||
| This set of required credentials implies that releases can only be done | ||
| by a coreboot admin. | ||
|
|
||
| ## When to release | ||
| Releases are done roughly on a 6-month schedule, ideally around end | ||
| of April and end of October (can be a bit earlier or delay into May | ||
| or November). | ||
|
|
||
| We initially followed a 3 month release schedule, but we found that to | ||
| be more frequent than was needed, so we scaled it back to twice a year. | ||
|
|
||
| ## Checklist | ||
| ### ~2 weeks prior to release | ||
| - [ ] Announce upcoming release to mailing list, ask people to test and | ||
| to update release notes | ||
|
|
||
| ### ~1 week prior to release | ||
| - [ ] Send reminder email to mailing list, ask for people to test, | ||
| and to update the release notes | ||
| - [ ] Update the topic in the irc channel with the date of the upcoming | ||
| release | ||
|
|
||
| ### Day of release | ||
| - [ ] Update release notes, without specifying release commit ids | ||
| - [ ] Select a commit ID to base the release upon, announce to IRC, | ||
| ask for testing. | ||
| - [ ] Test the commit selected for release | ||
| - [ ] Run release script | ||
| - [ ] Test the release from the actual release tarballs | ||
| - [ ] Push signed Tag to repo | ||
| - [ ] Announce that the release tag is done on IRC | ||
| - [ ] Update release notes with actual commit id, push to repo | ||
| - [ ] Upload release files to web server | ||
| - [ ] Update download page to point to files, push to repo | ||
| - [ ] Write and publish blog post with release notes. | ||
| - [ ] Update the topic in the irc channel that the release is done. | ||
|
|
||
| ## Pre-Release tasks | ||
| Announce the upcoming release to the mailing list release 2 weeks ahead | ||
| of the planned release date. | ||
|
|
||
| The announcement should state the planned release date, point to the | ||
| release notes that are in the making and ask people to test the hardware | ||
| they have to make sure it's working with the current master branch, | ||
| from which the release will ultimately be derived from. | ||
|
|
||
| People should also be encouraged to provide additions to the | ||
| release notes, for example by putting them on some [collaborative | ||
| editor](https://www.piratenpad.de). | ||
|
|
||
| The final release notes will reside in coreboot's Documentation/releases | ||
| directory, so asking for additions to that through the regular Gerrit | ||
| process works as well. Note that git requires lots of conflict resolution | ||
| on heavily edited text files though. | ||
|
|
||
| Frequently, we will want to wait until particular things are in the | ||
| release. Once those are in, you can select the commit ID that you want | ||
| to use for your release. For the 4.6 release, we waited until we had | ||
| time to do the release, then pulled in a few patches that we wanted | ||
| to have in the release. The release was based on the final of those | ||
| patches to be pulled in. | ||
|
|
||
| When a release candidate has been selected, announce the commit ID to | ||
| the #coreboot irc channel, and request that it get some testing, just | ||
| to make sure that everything is sane. | ||
|
|
||
| ## Generate the release | ||
| After the commit for the release has been selected and verified, run the | ||
| release script - util/release/build-release. This will download a new | ||
| tree, checkout the commit that you specified, download the submodules, | ||
| create a tag, then generate and sign the tarballs. | ||
|
|
||
| Be prepared to type in your PGP key’s passphrase. | ||
|
|
||
| ```` | ||
| usage: util/release/build-release <version> [commit id] [username] [gpg key id] | ||
| Tags a new coreboot version and creates a tar archive | ||
| version: New version name to tag the tree with | ||
| commit id: check out this commit-id after cloning the coreboot tree | ||
| username: clone the tree using ssh://USERNAME - defaults to https:// | ||
| gpg key id: used to tag the version, and generate a gpg signature | ||
| ```` | ||
|
|
||
| After running the script, you should have a new directory for the release, | ||
| along with 4 files - 2 tarballs, and 2 signature files. | ||
|
|
||
| ```` | ||
| drwxr-xr-x 9 martin martin 4096 Apr 30 19:57 coreboot-4.6 | ||
| -rw-r--r-- 1 martin martin 29156788 Apr 30 19:58 coreboot-4.6.tar.xz | ||
| -rw-r--r-- 1 martin martin 836 Apr 30 19:58 coreboot-4.6.tar.xz.sig | ||
| -rw-r--r-- 1 martin martin 5902076 Apr 30 19:58 coreboot-blobs-4.6.tar.xz | ||
| -rw-r--r-- 1 martin martin 836 Apr 30 19:58 coreboot-blobs-4.6.tar.xz.sig | ||
| ```` | ||
|
|
||
| Here’s the command that was used to generate the 4.6 release: | ||
| ```` | ||
| % util/release/build-release 4.6 db508565 Gaumless 3E4F7DF7 | ||
| ```` | ||
|
|
||
| ## Test the release from the tarballs | ||
| * Run “make what-jenkins-does” and verify that everything is building. | ||
| * Build and test qemu | ||
| ```` | ||
| cp configs/config.emulation_qemu_x86_i440fx .config; make olddefconfig; make | ||
| qemu-system-x86_64 -bios build/coreboot.rom -serial stdio | ||
| ```` | ||
| * Build and test any other platforms you can. | ||
| * Compare the directory from the tarballs to the coreboot repo to make sure nothing went wrong. | ||
| * Push the tag to git | ||
|
|
||
| A good tag will look like this: | ||
| ```` | ||
| % git show 4.6 | ||
| tag 4.6 | ||
| Tagger: Martin Roth <martinroth@google.com> | ||
| Date: Sun Apr 30 19:48:38 2017 -0600 | ||
| coreboot version 4.6 | ||
| -----BEGIN PGP SIGNATURE----- | ||
| Version: GnuPG v1 | ||
| iQIcBAABCQAGBQJZBpP2AAoJEBl5bCs+T333xfgQAKhilfDTzqlr3MLJC4VChbmr | ||
| ... | ||
| 678e0NzyWsyqU1Vx2rdFdLANx6hghH1R7E5ybzHHUQrhb55BoEsnQMU1oS0npnT4 | ||
| dwfLho1afk0ZLPUU1JFW | ||
| =25y8 | ||
| -----END PGP SIGNATURE----- | ||
| commit db508565d2483394b709654c57533e55eebace51 (HEAD, tag: 4.6, origin/master, origin/HEAD) | ||
| ... | ||
| ```` | ||
|
|
||
| When you used the script to generate the release, a tag was generated in the tree that was downloaded. | ||
| From the coreboot-X.Y tree, just run: `git push -f origin <TAG (X.Y)>` | ||
|
|
||
| You will need write access for tags to the coreboot git repo to do this. | ||
|
|
||
| ## After the release is tagged in git | ||
| Announce that the release has been tagged - this lets people know that | ||
| they should update their trees to grab the new tag. Until they do this, | ||
| the version number in build.h will still be based on the previous tag. | ||
|
|
||
| Copy the tarballs and .sig files generated by the script to | ||
| the coreboot server, and put them in the release directory at | ||
| `/srv/docker/www.coreboot.org-staticfiles/releases/` | ||
|
|
||
| ```` | ||
| % sha256sum -b coreboot-*.tar.xz > sha256suma.txt # Update the sha256sum file | ||
| % diff sha256sum.txt sha256suma.txt # make sure that the two new files are present (and that nothing else has changed) | ||
| % mv sha256suma.txt sha256sum.txt | ||
| ```` | ||
|
|
||
| People can now see the release tarballs on the website at | ||
| https://www.coreboot.org/releases/ | ||
|
|
||
| The downloads page is the official place to download the releases from, and it needs to be updated with links to the new release tarballs and .sig files. It can be found at https://review.coreboot.org/cgit/homepage.git/tree/downloads.html | ||
|
|
||
| Here is an example commit to change it: https://review.coreboot.org/#/c/19515/ | ||
|
|
||
| ## After the release is complete | ||
| Post the release notes on https://blogs.coreboot.org | ||
|
|
||
| ## Making a branch | ||
| At times we will need to create a branch, generally for patch fixes. | ||
| When making a branch, do NOT name it the same as the release tag: X.Y - this creates trouble when trying to check it out, as git can’t tell whether you want the tag or the branch. | ||
| Instead, name it X.Y\_branch: `git checkout 4.8; git checkout -b 4.8_branch; git push origin 4.8_branch` | ||
|
|
||
| You can then cherry-pick changes and push them up to the branch: | ||
| ```` | ||
| git cherry-pick c6d134988c856d0025153fb885045d995bc8c397 | ||
| git push origin HEAD:refs/for/4.8_branch | ||
| ```` |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,24 @@ | ||
| Upcoming release - coreboot 4.10 | ||
| =========================== | ||
|
|
||
| The 4.10 release is planned for April/May 2019 | ||
|
|
||
| Update this document with changes that should be in the release | ||
| notes. | ||
| * Please use Markdown. | ||
| * See the [4.7](coreboot-4.7-relnotes.md) and [4.9](coreboot-4.9-relnotes.md) | ||
| release notes for the general format. | ||
| * The chip and board additions and removals will be updated right | ||
| before the release, so those do not need to be added. | ||
|
|
||
| Significant changes | ||
| ------------------- | ||
|
|
||
| ### `device_t` is no more | ||
| coreboot used to have a data type, `device_t` that changed shape depending on | ||
| whether it is compiled for romstage (with limited memory) or ramstage (with | ||
| unlimited memory as far as coreboot is concerned). It's an old relic from the | ||
| time when romstage wasn't operated in Cache-As-RAM mode, but compiled with | ||
| our romcc compiler. | ||
|
|
||
| That data type is now gone. |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,30 +1,267 @@ | ||
| coreboot 4.9 release notes | ||
| ========================== | ||
|
|
||
| The 4.9 release covers commit 532b8d5f25 to commit 7f520c8fe6 | ||
| There is a pgp signed 4.9 tag in the git repository, and a branch will | ||
| be created as needed. | ||
|
|
||
| In the little more than 7 months since 4.8.1 we had 175 authors commit | ||
| 2610 changes to master. The changes were, for the most part, all over | ||
| the place, touching every part of the repository: chipsets, mainboards, | ||
| tools, build system, documentation. | ||
|
|
||
| In that time we also had 70 authors made their first commit to coreboot: | ||
| Welcome and to many more! | ||
|
|
||
| Finally, a big Thank You to all contributors who helped shape the | ||
| coreboot project, community and code with their effort, no matter if | ||
| through development, review, testing, documentation or by helping people | ||
| asking questions on our venues like IRC or our mailing list. | ||
|
|
||
| Clean up | ||
| -------- | ||
| If there's any topic to give to this release, "clean up" might be the | ||
| most appropriate: There was lots of effort to bring the codebase into | ||
| compliance with our coding style, to remove old idioms that we'd like | ||
| to retire like the overloaded `device_t` data type, and to let features | ||
| percolate through the entire tree to bring more uniformity to its parts. | ||
|
|
||
| For example, during the coreboot 4.4 cycle, coreboot gained the notion | ||
| of mainboard variants to avoid duplication of code in rather similar | ||
| mainboards. | ||
|
|
||
| Back then, this feature was developed and used mostly for the benefit | ||
| of Chrome OS devices, but more recently the code for various Lenovo | ||
| Thinkpads was deduplicated in the same way. | ||
|
|
||
| Another part of cleaning up our tree is improving our tools that help | ||
| developers follow coding style and avoid mistakes, as well as the | ||
| infrastructure we have for automated build tests and we've seen quite | ||
| some activity in that space as well. | ||
|
|
||
| Documentation | ||
| ------------- | ||
| Since the last release we also moved the documentation into the | ||
| repository. No need for a special wiki account to edit the documentation, | ||
| and by colocating sources and documentation, it's easier to keep the | ||
| latter in sync with the code, too. | ||
|
|
||
| This effort is still under way, which is why we still host the old wiki (now | ||
| read-only) in parallel to the [new documentation | ||
| site](https://doc.coreboot.org) that is rendered from coreboot.git's | ||
| Documentation/ directory. | ||
|
|
||
| Blobs handling | ||
| -------------- | ||
| Another big change is in our blobs handling: Given that Intel now | ||
| provides a reasonably licensed repository with FSP binaries, we were | ||
| able to mirror it to coreboot.org and integrate it in the build system. | ||
| This makes it easier to have working images out of the box for devices | ||
| that depend on Intel's proprietary init code. | ||
|
|
||
| As usual the blobs aren't part of the coreboot tree and only downloaded | ||
| with the `USE_BLOBS` options. | ||
|
|
||
| Deprecations | ||
| ------------ | ||
| One of the first changes to coreboot after the 4.8 release was to remove | ||
| boards that didn't support certain new features and were apparently | ||
| unmaintained, as discussed in the release notes of coreboot 4.6. | ||
|
|
||
| We didn't follow up on all plans made back then to deprecate boards more | ||
| aggressively: The board status reporting mechanism is still rather raw | ||
| and therefore places quite a burden on otherwise sympathetic contributors | ||
| of build results. | ||
|
|
||
| Also, there will be no deprecations after 4.10: Due to its slipping | ||
| schedule, coreboot 4.9 is released rather late, and as a result 4.10 | ||
| will only see about 4 months of development. We considered that a rather | ||
| short timeframe in which to bring old boards up to new standards, and | ||
| so the next deprecation cycle may be announced with 4.10 to occur after | ||
| 4.11 is released, in late 2019. | ||
|
|
||
| General changes | ||
| --------------- | ||
| * Various code cleanups | ||
| * Removed `device_t` in favor of `struct device*` in ramstage code | ||
| * Removed unnecessary include directives | ||
| * Improved adherence to coding style | ||
| * Deduplicated boards by using the variants mechanism | ||
| * Expand use of the postcar stage | ||
| * Add bootblock compression capability: on systems that copy the bootblock | ||
| from very slow flash to SRAM, allow adding a stub that decompresses the | ||
| bootblock into SRAM to minimize the amount of flash reads | ||
| * Rename the POWER8 architecture port to PPC64 to reflect that it isn't limited | ||
| to POWER8 | ||
| * Added support for booting FIT (uImage) payloads on arm64 | ||
| * Added SPI flash write protection API | ||
| * Implemented on Winbond | ||
| * Implemented TCPA log for measured boot | ||
| * Implemented GDB support for arm64 architecture in libpayload | ||
| * Dropped support for unmaintained code paths | ||
| * Measured boot support | ||
|
|
||
| Added 56 mainboards | ||
| ------------------- | ||
| * ASROCK G41C-GS | ||
| * ASROCK G41M-GS | ||
| * ASROCK G41M-S3 | ||
| * ASROCK G41M-VS3 R2.0 | ||
| * ASROCK H81M-HDS | ||
| * ASUS P5QC | ||
| * ASUS P5QL-PRO | ||
| * ASUS P5Q-PRO | ||
| * ASUS P8H61-M-LX | ||
| * ASUS P8H61-M-PRO | ||
| * CAVIUM CN8100-SFF-EVB | ||
| * FACEBOOK WATSON | ||
| * FOXCONN D41S | ||
| * GIGABYTE GA-H61M-S2PV | ||
| * GOOGLE ALEENA | ||
| * GOOGLE AMPTON | ||
| * GOOGLE ARCADA | ||
| * GOOGLE ASUKA | ||
| * GOOGLE BOBBA | ||
| * GOOGLE BUDDY | ||
| * GOOGLE CAREENA | ||
| * GOOGLE CAROLINE | ||
| * GOOGLE CASTA | ||
| * GOOGLE CAVE | ||
| * GOOGLE DELAN | ||
| * GOOGLE DRAGONEGG | ||
| * GOOGLE FLEEX | ||
| * GOOGLE HATCH | ||
| * GOOGLE KARMA | ||
| * GOOGLE KUKUI | ||
| * GOOGLE LIARA | ||
| * GOOGLE MEEP | ||
| * GOOGLE RAMMUS | ||
| * GOOGLE SARIEN | ||
| * GOOGLE SENTRY | ||
| * HEWLETT PACKARD HP COMPAQ 8200 ELITE SFF PC | ||
| * INTEL COFFEELAKE RVP11 | ||
| * INTEL COFFEELAKE RVP8 | ||
| * INTEL COFFEELAKE RVPU | ||
| * INTEL DG41WV | ||
| * INTEL ICELAKE RVPU | ||
| * INTEL ICELAKE RVPY | ||
| * INTEL WHISKEYLAKE RVP | ||
| * LENOVO T431S | ||
| * LENOVO THINKCENTRE A58 | ||
| * LENOVO W500 | ||
| * LENOVO W530 | ||
| * OPENCELLULAR ELGON | ||
| * OPENCELLULAR ROTUNDU | ||
| * OPENCELLULAR SUPABRCKV1 | ||
| * SIEMENS MC-APL2 | ||
| * SIEMENS MC-APL3 | ||
| * SIEMENS MC-APL4 | ||
| * SIEMENS MC-APL5 | ||
|
|
||
| Dropped 71 mainboards | ||
| --------------------- | ||
| * AAEON PFM-540I REVB | ||
| * AMD DB800 | ||
| * AMD DBM690T | ||
| * AMD F2950 | ||
| * AMD MAHOGANY | ||
| * AMD NORWICH | ||
| * AMD PISTACHIO | ||
| * AMD SERENGETI-CHEETAH | ||
| * ARTECGROUP DBE61 | ||
| * ASROCK 939A785GMH | ||
| * ASUS A8N-E | ||
| * ASUS A8N-SLI | ||
| * ASUS A8V-E DELUXE | ||
| * ASUS A8V-E SE | ||
| * ASUS K8V-X | ||
| * ASUS KFSN4-DRE K8 | ||
| * ASUS M2N-E | ||
| * ASUS M2V | ||
| * ASUS M2V MX-SE | ||
| * BACHMANN OT200 | ||
| * BCOM WINNETP680 | ||
| * BROADCOM BLAST | ||
| * DIGITALLOGIC MSM800SEV | ||
| * GIGABYTE GA-2761GXDK | ||
| * GIGABYTE M57SLI | ||
| * GOOGLE KAHLEE | ||
| * GOOGLE MEOWTH | ||
| * GOOGLE PURIN | ||
| * GOOGLE ROTOR | ||
| * GOOGLE ZOOMBINI | ||
| * HP DL145-G1 | ||
| * HP DL145-G3 | ||
| * IEI PCISA LX-800 R10 | ||
| * IEI PM LX2-800 R10 | ||
| * IEI PM LX-800 R11 | ||
| * INTEL COUGAR-CANYON2 | ||
| * INTEL STARGO2 | ||
| * IWILL DK8 HTX | ||
| * JETWAY J7F2 | ||
| * JETWAY J7F4K1G2E | ||
| * JETWAY J7F4K1G5D | ||
| * KONTRON KT690 | ||
| * LINUTOP LINUTOP1 | ||
| * LIPPERT HURRICANE LX | ||
| * LIPPERT LITERUNNER LX | ||
| * LIPPERT ROADRUNNER LX | ||
| * LIPPERT SPACERUNNER LX | ||
| * LOWRISC NEXYS4DDR | ||
| * MSI MS7135 | ||
| * MSI MS7260 | ||
| * MSI MS9185 | ||
| * MSI MS9282 | ||
| * NVIDIA L1-2PVV | ||
| * SIEMENS SITEMP-G1P1 | ||
| * SUNW ULTRA40 | ||
| * SUNW ULTRA40M2 | ||
| * SUPERMICRO H8DME | ||
| * SUPERMICRO H8DMR | ||
| * TECHNEXION TIM5690 | ||
| * TECHNEXION TIM8690 | ||
| * TRAVERSE GEOS | ||
| * TYAN S2912 | ||
| * VIA EPIA-CN | ||
| * VIA EPIA-M700 | ||
| * VIA PC2500E | ||
| * VIA VT8454C | ||
| * WINENT MB6047 | ||
| * WINENT PL6064 | ||
| * WINNET G170 | ||
|
|
||
| CPU changes | ||
| ----------- | ||
| * cpu/intel/model\_2065x,206ax,haswell: Switch to `POSTCAR_STAGE` | ||
| * cpu/intel/slot\_1: Switch to different CAR setup | ||
| * Dropped support for the FSP1.0 sandy-/ivy-bridge bootpath | ||
|
|
||
| SoC changes | ||
| ----------- | ||
| * Added Cavium CN81xx, Intel Ice Lake and Mediatek MT8183 | ||
| * Dropped Broadcom Cygnus, Lowrisc and Marvell mvmap2315 | ||
|
|
||
| Northbridge changes | ||
| ------------------- | ||
| * Dropped AMD K8, VIA CN700, VIA CX700, VIA VX800 because they lack `EARLY_CBMEM` support | ||
| * intel/e7505: Moved to `EARLY_CBMEM` | ||
| * nb/intel/i945,e7505,pineview,x4x,gm45,i440bx: Moved to `POSTCAR_STAGE` | ||
| * nb/intel/i440bx, e7505: Moved to `RELOCATABLE_RAMSTAGE` | ||
| * intel/x4x: Add DDR3 support | ||
| * nb/intel/pineview: Speed up fetching SPD | ||
| * nb/intel/i945,gm45,x4x,pineview: Use TSEG in SMI | ||
|
|
||
| Southbridge changes | ||
| ------------------- | ||
| * sb/intel/i82801{g,i,j}x, lynxpoint: Use the common ACPI pirq generator | ||
| * sb/intel/i82801{g,i,j}x: Use common code to set up SMM and for the smihandler | ||
| * Use common functions for PMBASE configuration | ||
|
|
||
| Payload changes | ||
| --------------- | ||
| * Support initrd in uImage/FIT to be placed above 4GiB | ||
| * Added documentation for uImage/FIT payloads | ||
|
|
||
| Toolchain | ||
| --------- | ||
| * Update to gcc 8.1.0, binutils 2.30, IASL 20180810, clang 6 |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,72 @@ | ||
| # Intel Ice Lake coreboot development | ||
|
|
||
| ## Introduction | ||
|
|
||
| This document captures the coreboot development strategy for Intel SoC named Ice lake. | ||
|
|
||
| The Ice Lake processor family is the next generation Intel® Core processor family. | ||
| These processors are built using Intel's 10 nm+ process. | ||
|
|
||
| * [What is Ice Lake?](https://www.intel.in/content/www/in/en/design/products-and-solutions/processors-and-chipsets/ice-lake/overview.html) | ||
|
|
||
| ## Development Strategy | ||
|
|
||
| Like any other Intel SoC, Ice Lake coreboot development is also based on "Intel common code development model". | ||
|
|
||
| 1. Intel develops initial Firmware code for Ice Lake SoC. | ||
|
|
||
| 2. Additionally provides Firmware code support for Intel Reference Platform (RVP), known as Ice lake RVP with same SoC. | ||
| ```eval_rst | ||
| :doc:`../../../mainboard/intel/icelake_rvp` | ||
| ``` | ||
|
|
||
| 3. OEMs to design based on reference platform and make use of mainboard sample code. Dragonegg is Ice Lake based mainboard developed by Google | ||
| ```eval_rst | ||
| :doc:`../../../mainboard/google/dragonegg` | ||
| ``` | ||
|
|
||
| ### Summary: | ||
| * SoC is Ice Lake. | ||
| * Reference platform is icelake_rvp. | ||
| * OEM board is Dragonegg. | ||
|
|
||
| ## Create coreboot Image | ||
|
|
||
| 1. Clone latest coreboot code as below | ||
| ```bash | ||
| $ git clone https://review.coreboot.org/coreboot.git | ||
| ``` | ||
|
|
||
| 2. Place blobs (ucode, me.bin and FSP packages) in appropriate locations | ||
|
|
||
| Note: | ||
| Consider the fact that ucode and ME kit for Ice Lake SoC will be available from Intel VIP site. | ||
| After product launch, FSP binary will be available externally as any other program. | ||
|
|
||
| 3. Create coreboot .config | ||
|
|
||
| 4. Build toolchain | ||
| ```bash | ||
| CPUS=$(nproc--ignore=1) make crossgcc-i386 iasl | ||
| ``` | ||
|
|
||
| 5. Build image | ||
| ```bash | ||
| $ make # the image is generated as build/coreboot.rom | ||
| ``` | ||
|
|
||
| ## Flashing coreboot | ||
|
|
||
| Flashing mechanism might be different between Intel RVP (Reference Validation Platform) and Chromebooks: | ||
|
|
||
| * Make use of dediprog while flashing coreboot image on Intel-RVP | ||
| * For Chromebook related platform like dragonegg, one can flash via servo: | ||
|
|
||
| ```bash | ||
| $ dut-control spi2_vref:pp3300 spi2_buf_en:on spi2_buf_on_flex_en:on warm_reset:on | ||
| $ sudo flashrom -n -p ft2232_spi:type=servo-v2 -w <bios_image> | ||
| $ dut-control spi2_vref:off spi2_buf_en:off spi2_buf_on_flex_en:off warm_reset:off | ||
| ``` | ||
| ### References | ||
| * [flashrom](https://flashrom.org/Flashrom) | ||
| * [Servo](https://www.chromium.org/chromium-os/servo) |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,16 +1,18 @@ | ||
| CONFIG_LOCALVERSION="v4.9.0.1" | ||
| CONFIG_VENDOR_PCENGINES=y | ||
| CONFIG_PAYLOAD_CONFIGFILE="$(top)/src/mainboard/$(MAINBOARDDIR)/seabios_config" | ||
| CONFIG_BOARD_PCENGINES_APU1=y | ||
| CONFIG_NO_GFX_INIT=y | ||
| CONFIG_DEFAULT_CONSOLE_LOGLEVEL_1=y | ||
| CONFIG_SEABIOS_REVISION=y | ||
| CONFIG_SEABIOS_REVISION_ID="rel-1.12.0.1" | ||
| CONFIG_SEABIOS_BOOTORDER_FILE="$(top)/src/mainboard/$(MAINBOARDDIR)/bootorder" | ||
| CONFIG_SEABIOS_DEBUG_LEVEL=0 | ||
| CONFIG_PXE=y | ||
| CONFIG_BUILD_IPXE=y | ||
| CONFIG_IPXE_MASTER=y | ||
| # CONFIG_PXE_SERIAL_CONSOLE is not set | ||
| CONFIG_PXE_CUSTOM_BUILD_ID="12345678" | ||
| CONFIG_MEMTEST_SECONDARY_PAYLOAD=y | ||
| CONFIG_SORTBOOTORDER_SECONDARY_PAYLOAD=y | ||
| CONFIG_USER_TPM2=y |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,18 +1,20 @@ | ||
| CONFIG_LOCALVERSION="v4.9.0.1" | ||
| CONFIG_VENDOR_PCENGINES=y | ||
| CONFIG_PAYLOAD_CONFIGFILE="$(top)/src/mainboard/$(MAINBOARDDIR)/seabios_config" | ||
| CONFIG_BOARD_PCENGINES_APU2=y | ||
| CONFIG_NO_GFX_INIT=y | ||
| CONFIG_DEFAULT_CONSOLE_LOGLEVEL_1=y | ||
| CONFIG_SEABIOS_REVISION=y | ||
| CONFIG_SEABIOS_REVISION_ID="rel-1.12.0.1" | ||
| CONFIG_SEABIOS_BOOTORDER_FILE="$(top)/src/mainboard/$(MAINBOARDDIR)/variants/$(CONFIG_VARIANT_DIR)/bootorder" | ||
| CONFIG_SEABIOS_DEBUG_LEVEL=0 | ||
| CONFIG_PXE=y | ||
| CONFIG_BUILD_IPXE=y | ||
| CONFIG_IPXE_MASTER=y | ||
| CONFIG_PXE_ROM_ID="8086,157b" | ||
| # CONFIG_PXE_SERIAL_CONSOLE is not set | ||
| CONFIG_PXE_CUSTOM_BUILD_ID="12345678" | ||
| CONFIG_MEMTEST_SECONDARY_PAYLOAD=y | ||
| CONFIG_SORTBOOTORDER_SECONDARY_PAYLOAD=y | ||
| CONFIG_MEMTEST_MASTER=y | ||
| CONFIG_USER_TPM2=y |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,18 +1,19 @@ | ||
| CONFIG_LOCALVERSION="v4.9.0.1" | ||
| CONFIG_VENDOR_PCENGINES=y | ||
| CONFIG_PAYLOAD_CONFIGFILE="$(top)/src/mainboard/$(MAINBOARDDIR)/seabios_config" | ||
| CONFIG_BOARD_PCENGINES_APU3=y | ||
| CONFIG_NO_GFX_INIT=y | ||
| CONFIG_DEFAULT_CONSOLE_LOGLEVEL_1=y | ||
| CONFIG_SEABIOS_REVISION=y | ||
| CONFIG_SEABIOS_REVISION_ID="rel-1.12.0.1" | ||
| CONFIG_SEABIOS_BOOTORDER_FILE="$(top)/src/mainboard/$(MAINBOARDDIR)/variants/$(CONFIG_VARIANT_DIR)/bootorder" | ||
| CONFIG_SEABIOS_DEBUG_LEVEL=0 | ||
| CONFIG_PXE=y | ||
| CONFIG_BUILD_IPXE=y | ||
| CONFIG_IPXE_MASTER=y | ||
| CONFIG_PXE_ROM_ID="8086,1539" | ||
| # CONFIG_PXE_SERIAL_CONSOLE is not set | ||
| CONFIG_PXE_CUSTOM_BUILD_ID="12345678" | ||
| CONFIG_MEMTEST_SECONDARY_PAYLOAD=y | ||
| CONFIG_SORTBOOTORDER_SECONDARY_PAYLOAD=y | ||
| CONFIG_MEMTEST_MASTER=y |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,18 +1,19 @@ | ||
| CONFIG_LOCALVERSION="v4.9.0.1" | ||
| CONFIG_VENDOR_PCENGINES=y | ||
| CONFIG_PAYLOAD_CONFIGFILE="$(top)/src/mainboard/$(MAINBOARDDIR)/seabios_config" | ||
| CONFIG_BOARD_PCENGINES_APU4=y | ||
| CONFIG_NO_GFX_INIT=y | ||
| CONFIG_DEFAULT_CONSOLE_LOGLEVEL_1=y | ||
| CONFIG_SEABIOS_REVISION=y | ||
| CONFIG_SEABIOS_REVISION_ID="rel-1.12.0.1" | ||
| CONFIG_SEABIOS_BOOTORDER_FILE="$(top)/src/mainboard/$(MAINBOARDDIR)/variants/$(CONFIG_VARIANT_DIR)/bootorder" | ||
| CONFIG_SEABIOS_DEBUG_LEVEL=0 | ||
| CONFIG_PXE=y | ||
| CONFIG_BUILD_IPXE=y | ||
| CONFIG_IPXE_MASTER=y | ||
| CONFIG_PXE_ROM_ID="8086,1539" | ||
| # CONFIG_PXE_SERIAL_CONSOLE is not set | ||
| CONFIG_PXE_CUSTOM_BUILD_ID="12345678" | ||
| CONFIG_MEMTEST_SECONDARY_PAYLOAD=y | ||
| CONFIG_SORTBOOTORDER_SECONDARY_PAYLOAD=y | ||
| CONFIG_MEMTEST_MASTER=y |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,18 +1,20 @@ | ||
| CONFIG_LOCALVERSION="v4.9.0.1" | ||
| CONFIG_VENDOR_PCENGINES=y | ||
| CONFIG_PAYLOAD_CONFIGFILE="$(top)/src/mainboard/$(MAINBOARDDIR)/seabios_config" | ||
| CONFIG_BOARD_PCENGINES_APU5=y | ||
| CONFIG_NO_GFX_INIT=y | ||
| CONFIG_DEFAULT_CONSOLE_LOGLEVEL_1=y | ||
| CONFIG_SEABIOS_REVISION=y | ||
| CONFIG_SEABIOS_REVISION_ID="rel-1.12.0.1" | ||
| CONFIG_SEABIOS_BOOTORDER_FILE="$(top)/src/mainboard/$(MAINBOARDDIR)/variants/$(CONFIG_VARIANT_DIR)/bootorder" | ||
| CONFIG_SEABIOS_DEBUG_LEVEL=0 | ||
| CONFIG_PXE=y | ||
| CONFIG_BUILD_IPXE=y | ||
| CONFIG_IPXE_MASTER=y | ||
| CONFIG_PXE_ROM_ID="8086,1539" | ||
| # CONFIG_PXE_SERIAL_CONSOLE is not set | ||
| CONFIG_PXE_CUSTOM_BUILD_ID="12345678" | ||
| CONFIG_MEMTEST_SECONDARY_PAYLOAD=y | ||
| CONFIG_SORTBOOTORDER_SECONDARY_PAYLOAD=y | ||
| CONFIG_MEMTEST_MASTER=y | ||
| CONFIG_USER_TPM2=y |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,95 @@ | ||
| ## This file is part of the coreboot project. | ||
| ## | ||
| ## Copyright (C) 2017 Facebook Inc. | ||
| ## Copyright (C) 2018 9elements Cyber Security | ||
| ## | ||
| ## This program is free software; you can redistribute it and/or modify | ||
| ## it under the terms of the GNU General Public License as published by | ||
| ## the Free Software Foundation; version 2 of the License. | ||
| ## | ||
| ## This program is distributed in the hope that it will be useful, | ||
| ## but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| ## GNU General Public License for more details. | ||
| ## | ||
|
|
||
| kernel_tarball=https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-$(CONFIG_LINUXBOOT_KERNEL_VERSION).tar.xz | ||
| project_dir=linuxboot | ||
| kernel_dir=$(project_dir)/kernel | ||
|
|
||
| XGCCPATH?=$(PWD)/util/crossgcc/xgcc/bin | ||
| ifeq ($(CONFIG_LINUXBOOT_ARCH),i386) | ||
| LINUXBOOT_COMPILE?=$(XGCCPATH)/i386-linux- | ||
| ARCH?=x86 | ||
| else ifeq ($(CONFIG_LINUXBOOT_ARCH),amd64) | ||
| LINUXBOOT_COMPILE?=$(XGCCPATH)/x86_64-linux- | ||
| ARCH?=x86_64 | ||
| else ifeq ($(CONFIG_LINUXBOOT_ARCH),arm64) | ||
| LINUXBOOT_COMPILE?=$(XGCCPATH)/aarch64-linux- | ||
| ARCH?=arm64 | ||
| endif | ||
|
|
||
| OBJCOPY:=$(LINUXBOOT_COMPILE)objcopy | ||
|
|
||
| all: kernel | ||
|
|
||
| toolchain: | ||
| if [[ ! -x "$(LINUXBOOT_COMPILE)gcc" ]]; then \ | ||
| echo "Toolchain '$(LINUXBOOT_COMPILE)*' is missing."; \ | ||
| exit 1; \ | ||
| fi | ||
|
|
||
| $(kernel_dir)/.config: | ||
| echo " WWW Download Linux $(CONFIG_LINUXBOOT_KERNEL_VERSION)" | ||
| mkdir -p $(kernel_dir) | ||
| ifeq ("$(wildcard $(kernel_dir)/README)","") | ||
| curl -s $(kernel_tarball) | tar xJ -C $(kernel_dir) --strip 1 | ||
| endif | ||
|
|
||
| config: $(kernel_dir)/.config | ||
| echo " CONFIG Linux $(CONFIG_LINUXBOOT_KERNEL_VERSION)" | ||
| ifneq ($(CONFIG_LINUXBOOT_KERNEL_CONFIGFILE),) | ||
| cp $(CONFIG_LINUXBOOT_KERNEL_CONFIGFILE) $(kernel_dir)/.config | ||
| else ifeq ($(CONFIG_LINUXBOOT_ARCH),i386) | ||
| cp x86/defconfig $(kernel_dir)/.config | ||
| else ifeq ($(CONFIG_LINUXBOOT_ARCH),amd64) | ||
| cp x86_64/defconfig $(kernel_dir)/.config | ||
| else ifeq ($(CONFIG_LINUXBOOT_ARCH),arm64) | ||
| cp arm64/defconfig $(kernel_dir)/.config | ||
| endif | ||
|
|
||
| ifneq (,$(filter $(CONFIG_LINUXBOOT_ARCH),i386 amd64)) | ||
| $(kernel_dir)/arch/x86/boot/bzImage: config toolchain | ||
| else ifeq ($(CONFIG_LINUXBOOT_ARCH),arm64) | ||
| $(kernel_dir)/vmlinux: config toolchain | ||
| endif | ||
| echo " MAKE Kernel $(CONFIG_LINUXBOOT_KERNEL_VERSION)" | ||
| $(MAKE) -C $(kernel_dir) olddefconfig CROSS_COMPILE=$(LINUXBOOT_COMPILE) ARCH=$(ARCH) | ||
| $(MAKE) -C $(kernel_dir) -j $(CPUS) CROSS_COMPILE=$(LINUXBOOT_COMPILE) ARCH=$(ARCH) | ||
|
|
||
| ifneq (,$(filter $(CONFIG_LINUXBOOT_ARCH),i386 amd64)) | ||
| $(project_dir)/bzImage: $(kernel_dir)/arch/x86/boot/bzImage | ||
| cp $< $@ | ||
| else ifeq ($(CONFIG_LINUXBOOT_ARCH),arm64) | ||
| $(project_dir)/vmlinux.bin: $(kernel_dir)/vmlinux | ||
| $(OBJCOPY) -O binary $< $@ | ||
|
|
||
| $(project_dir)/target.dtb: $(PWD)/$(CONFIG_LINUXBOOT_DTB_FILE) | ||
| cp $< $@ | ||
|
|
||
| $(project_dir)/vmlinux.bin.lzma: $(project_dir)/vmlinux.bin | ||
| xz -c -k -f --format=lzma --lzma1=dict=1MiB,lc=3,lp=0,pb=3 $< > $@ | ||
|
|
||
| $(project_dir)/uImage: $(project_dir)/vmlinux.bin.lzma $(project_dir)/../arm64/kernel_fdt_lzma.its $(project_dir)/target.dtb | ||
| cp $(project_dir)/../arm64/kernel_fdt_lzma.its $(project_dir) | ||
| cp $(PWD)/$(CONFIG_LINUXBOOT_INITRAMFS)$(CONFIG_LINUXBOOT_INITRAMFS_SUFFIX) $(project_dir)/u-initramfs | ||
| mkimage -f $(project_dir)/kernel_fdt_lzma.its $@ | ||
| endif | ||
|
|
||
| ifneq (,$(filter $(CONFIG_LINUXBOOT_ARCH),i386 amd64)) | ||
| kernel: $(project_dir)/bzImage | ||
| else ifeq ($(CONFIG_LINUXBOOT_ARCH),arm64) | ||
| kernel: $(project_dir)/uImage | ||
| endif | ||
|
|
||
| .PHONY: kernel config toolchain |