6ddacd6f5b
The placement calculation logic in cbfs_add_component() has become quite a mess, and this patch can only fix that to a limited degree. The interaction between all the different pathways of how the `offset` variable can be set and at what point exactly the final placement offset is decided can get quite convoluted. In particular, one existing problem is that the offset for a file added with the --align flag is decided before the convert() function is called, which may change the form (and thereby the size) of the file again after its location was found -- resulting in a location that ends up being too small, or being unable to find a location for a file that should fit. This used to be okay under the assumption that forced alignment should really only be necessary for use cases like XIP where the file is directly "used" straight from its location on flash in some way, and those cases can never be compressed -- however, recent AMD platforms have started using the --align flag to meet the requirements of their SPI DMA controller and broken this assumption. This patch fixes that particular problem and hopefully eliminates a bit of the convolution by moving the offset decision point in the --align case after the convert() step. This is safe when the steps in-between (add_topswap_bootblock() and convert() itself) do not rely on the location having already been decided by --align before that point. For the topswap case this is easy, because in practice we always call it with --base-address (and as far as I can tell that's the only way it was ever meant to work?) -- so codify that assumption in the function. For convert() this mostly means that the implementations that do touch the offset variable (mkstage and FSP) need to ensure they take care of the alignment themselves. The FSP case is particularly complex so I tried to rewrite the code in a slightly more straight-forward way and clearly document the supported cases, which should hopefully make it easier to see that the offset variable is handled correctly in all of them. For mkstage the best solution seems to be to only have it touch the offset variable in the XIP case (where we know compression must be disabled, so we can rely on it not changing the file size later), and have the extra space for the stage header directly taken care of by do_cbfs_locate() so that can happen after convert(). NOTE: This is changing the behavior of `cbfstool add -t fsp` when neither --base-address nor --xip are passed (e.g. FSP-S). Previously, cbfstool would implicitly force an alignment of 4K. As far as I can tell from the comments, this is unnecessary because this binary is loaded into RAM and CBFS placement does not matter, so I assume this is an oversight caused by accidentally reusing code that was only meant for the XIP case. Signed-off-by: Julius Werner <jwerner@chromium.org> Change-Id: Ia49a585988f7a74944a6630b77b3ebd79b3a9897 Reviewed-on: https://review.coreboot.org/c/coreboot/+/59877 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Patrick Georgi <patrick@coreboot.org> Reviewed-by: Raul Rangel <rrangel@chromium.org> Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org> |
||
---|---|---|
.. | ||
abuild | ||
acpi | ||
amdfwtool | ||
amdtools | ||
apcb | ||
archive | ||
autoport | ||
bincfg | ||
board_status | ||
bucts | ||
cavium | ||
cbfstool | ||
cbmem | ||
chromeos | ||
crossgcc | ||
docker | ||
dtd_parser | ||
ectool | ||
exynos | ||
find_usbdebug | ||
futility | ||
fuzz-tests | ||
genbuild_h | ||
gitconfig | ||
ifdtool | ||
intelmetool | ||
intelp2m | ||
inteltool | ||
intelvbttool | ||
ipqheader | ||
kbc1126 | ||
kconfig | ||
lint | ||
liveiso | ||
mainboard | ||
marvell | ||
me_cleaner | ||
mma | ||
msrtool | ||
mtkheader | ||
nixshell | ||
nvidia | ||
nvramtool | ||
pgtblgen | ||
pmh7tool | ||
post | ||
qemu | ||
qualcomm | ||
release | ||
riscv | ||
rockchip | ||
sconfig | ||
scripts | ||
showdevicetree | ||
spd_tools | ||
spdtool | ||
spkmodem_recv | ||
superiotool | ||
supermicro | ||
testing | ||
uio_usbdebug | ||
util_readme | ||
vboot_list | ||
vgabios | ||
x86 | ||
xcompile | ||
README.md |
README.md
- abuild - coreboot autobuild script builds coreboot images for all
available targets.
bash
- acpi - Walk through all ACPI tables with their addresses.
bash
- amdfwtool - Create AMD Firmware combination
C
- amdtools - A set of tools to compare extended) K8 memory
settings.
Perl
- apcb - AMD PSP Control Block tools
- apcb_edit.py - This tool allows patching an existing APCB
binary with specific SPDs and GPIO selection pins.
Python3
- apcb_edit.py - This tool allows patching an existing APCB
binary with specific SPDs and GPIO selection pins.
- archive - Concatenate files and create an archive
C
- autoport - Automated porting coreboot to Sandy Bridge/Ivy Bridge
platforms
Go
- bincfg - Compiler/Decompiler for data blobs with specs
Lex
Yacc
- board_status - Tools to collect logs and upload them to the board
status repository
Bash
Go
- bucts - A tool to manipulate the BUC.TS bit on Intel targets.
C
- cavium - Devicetree_convert Tool to convert a DTB to a static C
file
Python
- cbfstool
- cbfstool - For manipulating CBFS file
C
- fmaptool - Converts plaintext fmd files into fmap blobs
C
- rmodtool - Creates rmodules
C
- ifwitool - For manipulating IFWI
C
- cbfstool - For manipulating CBFS file
- cbmem - CBMEM parser to read e.g. timestamps and console log
C
- chromeos - These scripts can be used to access Chrome OS
resources, for example to extract System Agent reference code and other
blobs (e.g. mrc.bin, refcode, VGA option roms) from a Chrome OS
recovery image.
C
- crossgcc - A cross toolchain builder for -elf toolchains (ie. no libc support)
- docker - Dockerfiles for coreboot-sdk, coreboot-jenkins-node, coreboot.org-status and docs.coreboot.org
- dtd_parser - DTD structure parser
Python2
- ectool - Dumps the RAM of a laptop's Embedded/Environmental
Controller (EC).
C
- exynos - Computes and fills Exynos ROM checksum (for BL1 or BL2).
Python3
- find_usbdebug - Help find USB debug ports
- futility - Firmware utility for signing ChromeOS images
Make
- fuzz-tests - Create test cases that crash the jpeg code.
C
- genbuild_h - Generate build system definitions
Shell
- gitconfig - Initialize git repository submodules install git
hooks
Bash
- ifdtool - Extract and dump Intel Firmware Descriptor information
C
- intelmetool - Dump interesting things about Management Engine
even if hidden
C
- intelp2m - Intel Pad to Macro (intelp2m) converter 'Go'
- inteltool - Provides information about the Intel CPU/chipset
hardware configuration (register contents, MSRs, etc).
C
- intelvbttool - Parse VBT from VGA BIOS
C
- ipqheader
- createxbl.py - Concatentates XBL segments into one ELF
image
Python
- ipqheader.py - Returns a packed MBN header image with the
specified base and size
Python
- mbncat.py - Generate ipq8064 uber SBL
Python
- mbn_tools.py - Contains all MBN Utilities for image
generation
Python
- createxbl.py - Concatentates XBL segments into one ELF
image
- kbc1126 - Tools used to dump the two blobs from the factory
firmware of many HP laptops with 8051-based SMSC KBC1098/KBC1126
embedded controller and insert them to the firmware image.
C
- kconfig - Build system
Make
- lint - Source linter and linting rules
Shell
- mainboard - mainboard specific scripts
- google - Directory for google mainboard specific scripts
- marvell - Add U-Boot boot loader for Marvell ARMADA38X
C
- me_cleaner - Tool for
partial deblobbing of Intel ME/TXE firmware images
Python
- mma - Memory Margin Analysis automation tests
Bash
- msrtool - Dumps chipset-specific MSR registers.
C
- mtkheader - Generate MediaTek bootload header.
Python3
- nvidia - nvidia blob parsers
- nvramtool - Reads and writes coreboot parameters and displaying
information from the coreboot table in CMOS/NVRAM.
C
- pgtblgen - Generates page tables based on fixed physical address.
C
- pmh7tool - Dumps, reads and writes PMH7 registers on Lenovo
ThinkPads. PMH7 is used for switching on and off the power of some
devices on the board such as dGPU.
C
- post - Userspace utility that can be used to test POST cards.
C
- qemu - Makefile & comprehensive default config for QEMU Q35 emulation
- qualcomm - CMM script to debug Qualcomm coreboot environments.
CMM
- release - Generate coreboot release
Bash
- riscv
- make-spike-elf.sh - Converts a flat file into an ELF, that
can be passed to SPIKE, the RISC-V reference emulator.
Bash
- sifive-gpt.py - Wraps the bootblock in a GPT partition for
SiFive's bootrom.
Python3
- make-spike-elf.sh - Converts a flat file into an ELF, that
can be passed to SPIKE, the RISC-V reference emulator.
- rockchip - Generate Rockchip idblock bootloader.
Python3
- sconfig - coreboot device tree compiler
Lex
Yacc
- scripts
- config - Manipulate options in a .config file from the
command line
Bash
- cross-repo-cherrypick - Pull in patches from another tree
from a gerrit repository.
Shell
- decode_spd.sh - Decodes Serial Presence Detect (SPD) files into various human readable formats.
- dts-to-fmd.sh -Converts a depthcharge fmap.dts into an
fmaptool compatible .fmd format
Bash
- find-unused-kconfig-symbols.sh - Points out Kconfig
variables that may be unused. There are some false positives, but it
serves as a starting point
Shell
- gerrit-rebase - Applies all commits that from-branch has
over to-branch, based on a common ancestor and gerrit meta-data
Bash
- get_maintainer.pl - Print selected MAINTAINERS information
for the files modified in a patch or for a file
Perl
- maintainers.go - Build subsystem Maintainers
Go
- no-fsf-addresses.sh - Removes various FSF addresses from
license headers
Shell
- parse-maintainers.pl - Script to alphabetize MAINTAINERS
file
Perl
- ucode_h_to_bin.sh - Microcode conversion tool
Bash
- update_submodules - Check all submodules for updates
Bash
- config - Manipulate options in a .config file from the
command line
- showdevicetree - Compile and dump the device tree
C
- spdtool - Dumps SPD ROMs from a given blob to separate files
using known patterns and reserved bits. Useful for analysing firmware
that holds SPDs on boards that have soldered down DRAM.
python
- spd_tools - Tools for generating SPD files for DDR4 memory used
in platforms with memory down configuration.
- gen_spd.go - Generates de-duplicated SPD files using a
global memory part list provided by the mainboard in JSON format.
Go
- gen_part_id.go - Allocates DRAM strap IDs for different
DDR4 memory parts used by the board.
Go
- gen_spd.go - Generates de-duplicated SPD files using a
global memory part list provided by the mainboard in JSON format.
- spkmodem_recv - Decode spkmodem signals
C
- superiotool - A user-space utility to detect Super I/O of a
mainboard and provide detailed information about the register contents
of the Super I/O.
C
- supermicro - Tools for supermicro platforms
- smcbiosinfo - Generates SMC biosinfo for BMC BIOS updates
C
- smcbiosinfo - Generates SMC biosinfo for BMC BIOS updates
- testing - coreboot test targets
Make
- uio_usbdebug - Debug coreboot's usbdebug driver inside a running
operating system (only Linux at this time).
C
- util_readme - Creates README.md of description files in
./util
subdirectoriesBash
- vboot_list - Tools to generate a list of vboot enabled devices to
the documentation
Bash
- vgabios - emulated vga driver for qemu
C
- x86 - Generates 32-bit PAE page tables based on a CSV input file.
Go
- xcompile - Cross compile setup
Bash