2023-09-29 15:37:18 +00:00
|
|
|
# SPDX-License-Identifier: GPL-2.0-only
|
|
|
|
|
|
|
|
# Logic based on util/chromeos/crosfirmware.sh in coreboot cfc26ce278.
|
NEW MAINBOARD: HP EliteBook 820 G2
This is of Broadwell platform, one generation above Haswell.
Of note: this uses HP Sure Start. Although the flash is 16MB,
our CBFS section (and IFD configuration) assumes 12MB flash,
so the final 4MB will be left unflashed on installation,
after blanking the private flash. The coreboot documents have
more information about this.
Some minor design changes in lbmk were made, to accomodate
this port:
Support for extracting refcode binaries added (pulled from
Google recovery images). The refcode file is an ELF that
initialises the MRC and the PCH. It is also responsible for
enabling or disabling the Intel GbE device, where Google
does not enable it, but lbmk modifies it per the instructions
on the coreboot documentation, so as to enable Intel GbE.
Google's recovery image stores the refcode as a stage file,
but coreboot changed the format (for CBFS files) after 4.13
so coreboot 4.13's cbfstool is used to extract refcode. This
realisation made me also change the script logic to use a
cbfstool and ifdtool version matching the coreboot tree, for
all parts of lbmk, whereas lbmk previously used only the
default tree for cbfstool/ifdtool, on insertion and deletion
of vendor files - it was 81dc20e744 that broke extraction of
refcode on google's recovery images, where google used an older
version of cbfstool to insert the files in their coreboot ROMs.
A further backported patch has been added, copying coreboot
revision f22f408956 which is a build fix from Nico Huber.
Iru Cai submitted an ACPI bugfix after the revision lbmk
currently uses, for coreboot/default, and this fix is
needed for rebooting to work on Linux 6.1 or higher. This
patch has been backported to lbmk, while it still uses the
same October 2023 revision of coreboot.
Broadwell MRC is inserted at the same offset as Haswell,
so I didn't need to tweak that.
Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-01-07 13:25:33 +00:00
|
|
|
# Modifications in this version are Copyright 2021, 2023 and 2024 Leah Rowe.
|
2023-09-29 15:37:18 +00:00
|
|
|
# Original copyright detailed in repo: https://review.coreboot.org/coreboot/
|
|
|
|
|
2023-12-22 06:34:14 +00:00
|
|
|
eval "$(setvars "" MRC_url MRC_url_bkup MRC_hash MRC_board SHELLBALL)"
|
2023-10-15 10:22:43 +00:00
|
|
|
|
NEW MAINBOARD: HP EliteBook 820 G2
This is of Broadwell platform, one generation above Haswell.
Of note: this uses HP Sure Start. Although the flash is 16MB,
our CBFS section (and IFD configuration) assumes 12MB flash,
so the final 4MB will be left unflashed on installation,
after blanking the private flash. The coreboot documents have
more information about this.
Some minor design changes in lbmk were made, to accomodate
this port:
Support for extracting refcode binaries added (pulled from
Google recovery images). The refcode file is an ELF that
initialises the MRC and the PCH. It is also responsible for
enabling or disabling the Intel GbE device, where Google
does not enable it, but lbmk modifies it per the instructions
on the coreboot documentation, so as to enable Intel GbE.
Google's recovery image stores the refcode as a stage file,
but coreboot changed the format (for CBFS files) after 4.13
so coreboot 4.13's cbfstool is used to extract refcode. This
realisation made me also change the script logic to use a
cbfstool and ifdtool version matching the coreboot tree, for
all parts of lbmk, whereas lbmk previously used only the
default tree for cbfstool/ifdtool, on insertion and deletion
of vendor files - it was 81dc20e744 that broke extraction of
refcode on google's recovery images, where google used an older
version of cbfstool to insert the files in their coreboot ROMs.
A further backported patch has been added, copying coreboot
revision f22f408956 which is a build fix from Nico Huber.
Iru Cai submitted an ACPI bugfix after the revision lbmk
currently uses, for coreboot/default, and this fix is
needed for rebooting to work on Linux 6.1 or higher. This
patch has been backported to lbmk, while it still uses the
same October 2023 revision of coreboot.
Broadwell MRC is inserted at the same offset as Haswell,
so I didn't need to tweak that.
Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-01-07 13:25:33 +00:00
|
|
|
extract_ref()
|
|
|
|
{
|
|
|
|
# refcode needed on broadwell, but not needed on haswell
|
|
|
|
|
|
|
|
# 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"
|
|
|
|
}
|
|
|
|
|
2023-09-29 15:37:18 +00:00
|
|
|
extract_mrc()
|
|
|
|
{
|
2023-12-24 09:04:36 +00:00
|
|
|
[ -z "$MRC_board" ] && err "extract_mrc $MRC_hash: MRC_board not set"
|
2023-09-29 15:37:18 +00:00
|
|
|
[ -z "${CONFIG_MRC_FILE}" ] && \
|
|
|
|
err "extract_mrc $MRC_hash: CONFIG_MRC_FILE not set"
|
|
|
|
|
2023-10-19 22:36:56 +00:00
|
|
|
SHELLBALL="chromeos-firmwareupdate-${MRC_board}"
|
2023-09-29 15:37:18 +00:00
|
|
|
|
|
|
|
(
|
2023-10-01 05:33:43 +00:00
|
|
|
x_ cd "${appdir}"
|
2023-12-22 06:34:14 +00:00
|
|
|
extract_partition "${MRC_url##*/}"
|
2023-12-21 16:16:11 +00:00
|
|
|
extract_archive "${SHELLBALL}" .
|
2023-12-11 05:21:27 +00:00
|
|
|
) || err "mrc download/extract failure"
|
2023-09-29 15:37:18 +00:00
|
|
|
|
2023-12-21 15:52:03 +00:00
|
|
|
"${cbfstool}" "${appdir}/"bios.bin extract -n mrc.bin \
|
2023-12-24 09:04:36 +00:00
|
|
|
-f "$_dest" -r RO_SECTION || err "extract_mrc: cbfstool $_dest"
|
NEW MAINBOARD: HP EliteBook 820 G2
This is of Broadwell platform, one generation above Haswell.
Of note: this uses HP Sure Start. Although the flash is 16MB,
our CBFS section (and IFD configuration) assumes 12MB flash,
so the final 4MB will be left unflashed on installation,
after blanking the private flash. The coreboot documents have
more information about this.
Some minor design changes in lbmk were made, to accomodate
this port:
Support for extracting refcode binaries added (pulled from
Google recovery images). The refcode file is an ELF that
initialises the MRC and the PCH. It is also responsible for
enabling or disabling the Intel GbE device, where Google
does not enable it, but lbmk modifies it per the instructions
on the coreboot documentation, so as to enable Intel GbE.
Google's recovery image stores the refcode as a stage file,
but coreboot changed the format (for CBFS files) after 4.13
so coreboot 4.13's cbfstool is used to extract refcode. This
realisation made me also change the script logic to use a
cbfstool and ifdtool version matching the coreboot tree, for
all parts of lbmk, whereas lbmk previously used only the
default tree for cbfstool/ifdtool, on insertion and deletion
of vendor files - it was 81dc20e744 that broke extraction of
refcode on google's recovery images, where google used an older
version of cbfstool to insert the files in their coreboot ROMs.
A further backported patch has been added, copying coreboot
revision f22f408956 which is a build fix from Nico Huber.
Iru Cai submitted an ACPI bugfix after the revision lbmk
currently uses, for coreboot/default, and this fix is
needed for rebooting to work on Linux 6.1 or higher. This
patch has been backported to lbmk, while it still uses the
same October 2023 revision of coreboot.
Broadwell MRC is inserted at the same offset as Haswell,
so I didn't need to tweak that.
Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-01-07 13:25:33 +00:00
|
|
|
|
|
|
|
[ -n "$CONFIG_REFCODE_BLOB_FILE" ] && extract_refcode; return 0
|
2023-09-29 15:37:18 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
extract_partition()
|
|
|
|
{
|
|
|
|
printf "Extracting ROOT-A partition\n"
|
|
|
|
ROOTP=$( printf "unit\nB\nprint\nquit\n" | \
|
2023-12-22 06:34:14 +00:00
|
|
|
parted "${1%.zip}" 2>/dev/null | grep "ROOT-A" )
|
2023-09-29 15:37:18 +00:00
|
|
|
|
|
|
|
START=$(( $( echo ${ROOTP} | cut -f2 -d\ | tr -d "B" ) ))
|
|
|
|
SIZE=$(( $( echo ${ROOTP} | cut -f4 -d\ | tr -d "B" ) ))
|
|
|
|
|
2023-12-22 06:34:14 +00:00
|
|
|
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"
|
2023-12-22 08:36:23 +00:00
|
|
|
|
|
|
|
printf "cd /usr/sbin\ndump chromeos-firmwareupdate ${SHELLBALL}\nquit" \
|
2023-12-24 09:04:36 +00:00
|
|
|
| debugfs "root-a.ext2" || err "can't extract shellball"
|
2023-09-29 15:37:18 +00:00
|
|
|
}
|
NEW MAINBOARD: HP EliteBook 820 G2
This is of Broadwell platform, one generation above Haswell.
Of note: this uses HP Sure Start. Although the flash is 16MB,
our CBFS section (and IFD configuration) assumes 12MB flash,
so the final 4MB will be left unflashed on installation,
after blanking the private flash. The coreboot documents have
more information about this.
Some minor design changes in lbmk were made, to accomodate
this port:
Support for extracting refcode binaries added (pulled from
Google recovery images). The refcode file is an ELF that
initialises the MRC and the PCH. It is also responsible for
enabling or disabling the Intel GbE device, where Google
does not enable it, but lbmk modifies it per the instructions
on the coreboot documentation, so as to enable Intel GbE.
Google's recovery image stores the refcode as a stage file,
but coreboot changed the format (for CBFS files) after 4.13
so coreboot 4.13's cbfstool is used to extract refcode. This
realisation made me also change the script logic to use a
cbfstool and ifdtool version matching the coreboot tree, for
all parts of lbmk, whereas lbmk previously used only the
default tree for cbfstool/ifdtool, on insertion and deletion
of vendor files - it was 81dc20e744 that broke extraction of
refcode on google's recovery images, where google used an older
version of cbfstool to insert the files in their coreboot ROMs.
A further backported patch has been added, copying coreboot
revision f22f408956 which is a build fix from Nico Huber.
Iru Cai submitted an ACPI bugfix after the revision lbmk
currently uses, for coreboot/default, and this fix is
needed for rebooting to work on Linux 6.1 or higher. This
patch has been backported to lbmk, while it still uses the
same October 2023 revision of coreboot.
Broadwell MRC is inserted at the same offset as Haswell,
so I didn't need to tweak that.
Signed-off-by: Leah Rowe <leah@libreboot.org>
2024-01-07 13:25:33 +00:00
|
|
|
|
|
|
|
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
|
|
|
|
}
|