mirror of
https://codeberg.org/libreboot/lbmk.git
synced 2026-07-11 14:02:52 +02:00
cc33974150
broadwell mrc is retained, because it's needed on 820 g2 it's no longer needed on haswell, because nri is stable. nri is short for "native ram initialisation", and libreboot provides this for: thinkpad t440p, thinkpad w541, dell optiplex 9020 mt, and dell optiplex 9020 sff remove, in line with libreboot's binary blob reduction policy previous revisions, prior to the recent release, stated that it would be retained for compatibility, but it's really not right to retain it, because doing so violates libreboot's policy the recent release excluded mrc-based rom images for haswell machines, providing only those rom images that use the libre raminit, while retaining support for mrc in the build system, so that users could still run the lbmk inject script on older release roms that use mrc again: libreboot's binary blob reduction policy is very clear: https://libreboot.org/news/policy.html it is a policy that can be summarised, thus: if a blob can be avoided, it must be avoided. therefore, we will avoid the Haswell MRC raminit blob Signed-off-by: Leah Rowe <leah@libreboot.org>
80 lines
2.8 KiB
Bash
Executable File
80 lines
2.8 KiB
Bash
Executable File
# SPDX-License-Identifier: GPL-2.0-only
|
|
|
|
# Logic based on util/chromeos/crosfirmware.sh in coreboot cfc26ce278.
|
|
# Modifications in this version are Copyright 2021, 2023 and 2024 Leah Rowe.
|
|
# Original copyright detailed in repo: https://review.coreboot.org/coreboot/
|
|
|
|
eval "$(setvars "" MRC_url MRC_url_bkup MRC_hash MRC_board SHELLBALL)"
|
|
|
|
extract_ref()
|
|
{
|
|
# we check mrc twice, because each check only verifies one file,
|
|
# but refcode is downloaded alongside mrc. in cases where lbmk
|
|
# erred, downloading only mrc, we must ensure downloading refcode
|
|
[ -n "$CONFIG_MRC_FILE" ] || \
|
|
$err "extract_ref $board: CONFIG_MRC_FILE not defined"
|
|
|
|
# the extract_mrc function actually downloads the refcode
|
|
fetch "mrc" "$MRC_url" "$MRC_url_bkup" "$MRC_hash" "$CONFIG_MRC_FILE"
|
|
}
|
|
|
|
extract_mrc()
|
|
{
|
|
[ -z "$MRC_board" ] && $err "extract_mrc $MRC_hash: MRC_board not set"
|
|
[ -z "${CONFIG_MRC_FILE}" ] && \
|
|
$err "extract_mrc $MRC_hash: CONFIG_MRC_FILE not set"
|
|
|
|
SHELLBALL="chromeos-firmwareupdate-${MRC_board}"
|
|
|
|
(
|
|
x_ cd "${appdir}"
|
|
extract_partition "${MRC_url##*/}"
|
|
extract_archive "${SHELLBALL}" .
|
|
) || $err "mrc download/extract failure"
|
|
|
|
"${cbfstool}" "${appdir}/"bios.bin extract -n mrc.bin \
|
|
-f "$_dest" -r RO_SECTION || $err "extract_mrc: cbfstool $_dest"
|
|
|
|
[ -n "$CONFIG_REFCODE_BLOB_FILE" ] && extract_refcode; return 0
|
|
}
|
|
|
|
extract_partition()
|
|
{
|
|
printf "Extracting ROOT-A partition\n"
|
|
ROOTP=$( printf "unit\nB\nprint\nquit\n" | \
|
|
parted "${1%.zip}" 2>/dev/null | grep "ROOT-A" )
|
|
|
|
START=$(( $( echo ${ROOTP} | cut -f2 -d\ | tr -d "B" ) ))
|
|
SIZE=$(( $( echo ${ROOTP} | cut -f4 -d\ | tr -d "B" ) ))
|
|
|
|
dd if="${1%.zip}" of="root-a.ext2" bs=1024 \
|
|
skip=$(( ${START} / 1024 )) count=$(( ${SIZE} / 1024 )) || \
|
|
$err "extract_partition, dd ${1%.zip}, root-a.ext2"
|
|
|
|
printf "cd /usr/sbin\ndump chromeos-firmwareupdate ${SHELLBALL}\nquit" \
|
|
| debugfs "root-a.ext2" || $err "can't extract shellball"
|
|
}
|
|
|
|
extract_refcode()
|
|
{
|
|
_refdest="${CONFIG_REFCODE_BLOB_FILE##*../}"
|
|
[ -f "$_refdest" ] && return 0
|
|
|
|
# cbfstool changed the attributes scheme for stage files,
|
|
# incompatible with older versions before coreboot 4.14,
|
|
# so we need coreboot 4.13 cbfstool for certain refcode files
|
|
[ -n "$cbfstoolref" ] || \
|
|
$err "extract_refcode $board: MRC_refcode_cbtree not set"
|
|
mkdir -p "${_refdest%/*}" || \
|
|
$err "extract_refcode $board: !mkdir -p ${_refdest%/*}"
|
|
|
|
"$cbfstoolref" "$appdir/bios.bin" extract \
|
|
-m x86 -n fallback/refcode -f "$_refdest" -r RO_SECTION \
|
|
|| $err "extract_refcode $board: !cbfstoolref $_refdest"
|
|
|
|
# enable the Intel GbE device, if told by offset MRC_refcode_gbe
|
|
[ -z "$MRC_refcode_gbe" ] || dd if="config/ifd/hp820g2/1.bin" \
|
|
of="$_refdest" bs=1 seek=$MRC_refcode_gbe count=1 conv=notrunc || \
|
|
$err "extract_refcode $_refdest: byte $MRC_refcode_gbe"; return 0
|
|
}
|