From 18e1c9a3542b1dc0ffb208555f6258717e8a6384 Mon Sep 17 00:00:00 2001
From: Leah Rowe <leah@libreboot.org>
Date: Sun, 2 Apr 2023 11:14:59 +0100
Subject: [PATCH] experimental changes so i don't fucking delete it

---
 resources/blobs/sources             |   3 +
 resources/scripts/blobs/download    | 161 ++++++++++++++++++++++------
 resources/scripts/build/release/src |   1 +
 3 files changed, 134 insertions(+), 31 deletions(-)

diff --git a/resources/blobs/sources b/resources/blobs/sources
index 4ce0ac2..49a2d3a 100644
--- a/resources/blobs/sources
+++ b/resources/blobs/sources
@@ -24,6 +24,9 @@
 }
 
 {hp8560w}{
+	EC_url https://web.archive.org/web/20230402085323/https://ftp.hp.com/pub/softpaq/sp78001-78500/sp78085.exe
+	EC_url_bkup https://web.archive.org/web/20230402085323/https://ftp.hp.com/pub/softpaq/sp78001-78500/sp78085.exe
+	EC_hash 71768d50c48551796c57c4313d90381c73172260
 	DL_hash 67f854c134d1e32e268107396af1cd5f81fb1a58
 	DL_url https://web.archive.org/web/20170918182523/https://ftp.hp.com/pub/softpaq/sp80001-80500/sp80282.exe
 	DL_url_bkup https://web.archive.org/web/20170918182523/https://ftp.hp.com/pub/softpaq/sp80001-80500/sp80282.exe
diff --git a/resources/scripts/blobs/download b/resources/scripts/blobs/download
index 7918e04..247fdd8 100755
--- a/resources/scripts/blobs/download
+++ b/resources/scripts/blobs/download
@@ -5,12 +5,17 @@
 # SPDX-FileCopyrightText: 2023 Leah Rowe <info@minifree.org>
 # SPDX-License-Identifier: GPL-3.0-only
 
+ec_url=""
+ec_url_bkup=""
+ec_hash=""
+
 blobdir="blobs"
 dl_path="${blobdir}/vendorupdate"
 appdir="${blobdir}/app"
 _7ztest="a"
 mecleaner="$(pwd)/me_cleaner/me_cleaner.py"
 me7updateparser="$(pwd)/resources/blobs/me7_update_parser.py"
+kbc1126_ec_dump="$(pwd)/coreboot/default/util/kbc1126/kbc1126_ec_dump"
 board="${1}"
 # A shorthand for each board, to avoid duplicating configs per flash size
 board_short=${board%%_*mb}
@@ -39,6 +44,11 @@ if [ "${CONFIG_HAVE_GBE_BIN}" = "y" ]; then
 	needs="${needs} GBE"
 fi
 
+if [ "${CONFIG_KBC1126_FIRMWARE}" = "y" ]; then
+	printf "HP board with KBC1126 EC detected, downloading ec\n"
+	needs="${needs} EC"
+fi
+
 # Quickly exit without wasting more time if there are no blobs needed (GM45)
 if [ -z ${needs+x} ]; then
 	printf 'No binary blobs needed for this board\n'
@@ -47,6 +57,18 @@ fi
 
 while read -r line ; do
 	case ${line} in
+		EC_url*)
+		set ${line}
+		ec_url=${2}
+		;;
+		EC_url_bkup*)
+		set ${line}
+		ec_url_bkup=${2}
+		;;
+		EC_hash*)
+		set ${line}
+		ec_hash=${2}
+		;;
 		DL_hash*)
 		set ${line}
 		dl_hash=${2}
@@ -84,6 +106,12 @@ Build_deps(){
 		printf "downloading coreboot\n"
 		./download coreboot default || Fail 'could not download coreboot'
 	fi
+
+	if [ ! -f coreboot/default/util/kbc1126/kbc1126_ec_dump ]; then
+		printf "Building kbc1126_ec_dump from coreboot\n"
+		make -BC coreboot/default/util/kbc1126 || Fail \
+			"could not build kbc1126_ec_dump"
+	fi
 	
 	if [ ! -f "coreboot/default/util/ifdtool/ifdtool" ]; then
 		printf "building ifdtool from coreboot\n"
@@ -100,6 +128,9 @@ Download_needed(){
 			*MRC*)
 				./download mrc || _failed="${_failed} mrc"
 				;;
+			*EC*)
+				Download_ec || _failed="${_failed} ec"
+				;;
 	esac
 	done
 	
@@ -111,42 +142,12 @@ Download_needed(){
 Download_me() {
 	printf "Downloading neutered ME for board: `%s`\n" ${board}
 
-	Fetch_update || return 1
+	Fetch_update me || return 1
 	Extract_me || return 1
 
 	return 0
 }
 
-Fetch_update() {
-	printf "Fetching vendor update for board: `%s`\n" ${board}
-
-	if [ -z "${dl_url+x}" ]; then
-		printf "No vendor update specified for board: `%s`\n" ${board}
-		return 1
-	fi
-
-	Vendor_checksum ${dl_path} || \
-		curl ${dl_url} > ${dl_path} || curl ${dl_url_bkup} > ${dl_path}
-
-	Vendor_checksum ${dl_path} || Fail \
-		"Cannot guarantee intergity of vendor update for board: `${board}`"
-
-	return 0
-}
-
-Vendor_checksum() {
-	if [ ! -f "${dl_path}" ]; then
-		printf "Vendor update not found on disk for board: `%s`\n" ${board}
-		return 1
-	fi
-	if [ "$(sha1sum ${dl_path} | awk '{print $1}')" != "${dl_hash}" ]; then
-		printf "Bad checksum on vendor update for board: `%s`\n" ${board}
-		rm ${dl_path}
-		return 1
-	fi
-	return 0
-}
-
 Extract_me(){
 	printf "Extracting neutered ME for ${board}\n"
 
@@ -223,4 +224,102 @@ Bruteforce_extract_me() {
 	fi
 }
 
+Download_ec() {
+	printf "Downloading KBC1126 EC firmware for HP laptop\n"
+
+	Fetch_update ec || return 1
+	Extract_ec || return 1
+
+	return 0
+}
+
+Extract_ec() {
+	printf "Extracting KBC1126 EC firmware for board: `%s`\n" ${board}
+
+	_ec_destination=${CONFIG_KBC1126_FW1#../../}
+
+	if [ ! -d "${_ec_destination%/*}" ]; then
+		mkdir -p "${_ec_destination%/*}"
+	fi
+
+	if [ -d "${appdir}" ]; then
+		rm -Rf "${appdir}"
+	fi
+
+	if [ -f "${_ec_destination}" ]; then
+		printf "ec already downloaded\n"
+		return 0
+	fi
+
+	unar "${dl_path}" -o "${appdir}"
+
+	(
+	cd "${appdir}/${dl_path##*/}"
+
+	mv Rompaq/68*.BIN ec.bin
+	"${kbc1126_ec_dump}" ec.bin
+	)
+
+	for i in 1 2; do
+		if [ ! -f "${appdir}/${dl_path##*/}/ec.bin.fw${i}" ]; then
+			printf "Not found: `%s/%s/ec.bin.fw%s`\n" \
+				${appdir} ${dl_path##*/} ${i}
+			printf "Could not extract EC firmware for board: `%s`\n" \
+				${board}
+			return 1
+		fi
+	done
+
+	cp "${appdir}/${dl_path##*/}"/ec.bin.fw* "${_ec_destination%/*}/"
+}
+
+Fetch_update() {
+	printf "Fetching vendor update for board: `%s`\n" ${board}
+
+	fw_type="${1}"
+	dl=""
+	dl_bkup=""
+	dlsum=""
+	if [ "${fw_type}" = "me" ]; then
+		dl=${dl_url}
+		dl_bkup=${dl_url_bkup}
+		dlsum=${dl_hash}
+	elif [ "${fw_type}" = "ec" ]; then
+		dl=${ec_url}
+		dl_bkup=${ec_url_bkup}
+		dlsum=${ec_hash}
+	else
+		printf "Unsupported download type: `%s`\n" ${fw_type}
+		return 1
+	fi
+
+	if [ -z "${dl_url+x}" ]; then
+		printf "No vendor update specified for board: `%s`\n" ${board}
+		return 1
+	fi
+
+	Vendor_checksum ${dlsum} || \
+		curl ${dl} > ${dl_path} || curl ${dl_bkup} > ${dl_path}
+
+	Vendor_checksum ${dlsum} || Fail \
+		"Cannot guarantee intergity of vendor update for board: `${board}`"
+
+	return 0
+}
+
+Vendor_checksum() {
+	sha1=$1
+
+	if [ ! -f "${dl_path}" ]; then
+		printf "Vendor update not found on disk for board: `%s`\n" ${board}
+		return 1
+	fi
+	if [ "$(sha1sum ${dl_path} | awk '{print $1}')" != "${sha1}" ]; then
+		printf "Bad checksum on vendor update for board: `%s`\n" ${board}
+		rm ${dl_path}
+		return 1
+	fi
+	return 0
+}
+
 Main
diff --git a/resources/scripts/build/release/src b/resources/scripts/build/release/src
index 9908f28..865c8ae 100755
--- a/resources/scripts/build/release/src
+++ b/resources/scripts/build/release/src
@@ -97,6 +97,7 @@ done
             cd "${i}/"
             make distclean
         )
+    make clean -BC default/util/kbc1126/
     done
 )
 
-- 
GitLab