aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEmil Velikov <emil.l.velikov@gmail.com>2023-06-05 14:58:12 +0100
committerJosh Boyer <jwboyer@kernel.org>2023-06-25 12:18:57 -0400
commitee91452dac5abfc4c5b9827cf55e701d8c0ca678 (patch)
tree5866ac612bcfb7f69240bc1bf97d2ed0af0c2f1b
parentad2ce8beeeb46bca4246ecb62ac4fe715f097e39 (diff)
downloadlinux-firmware-ee91452dac5abfc4c5b9827cf55e701d8c0ca678.tar.gz
Makefile, copy-firmware: support xz/zstd compressed firmware
The kernel has supported compressed firmware for quite some time. So let's add a couple of targets to produce that. In practical terms this means it we'll use ~5x times less space on disk. Reportedly the amd ucode, needs to be uncompressed _within_ the initrd in order to work. Using compressed ucode in late load just works. Ideally this will be addressed by the initrd generators, but considering the files are tiny in size let's skip the compression. v2 - commit message, skip compression for files annotated as Raw v3 - rebase [Drop extra verbose statement in zstd case, Josh Boyer <jwboyer@kernel.org>] Cc: David Woodhouse <dwmw2@infradead.org> Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com> Signed-off-by: Josh Boyer <jwboyer@kernel.org>
-rw-r--r--Makefile8
-rw-r--r--WHENCE5
-rwxr-xr-xcopy-firmware.sh47
3 files changed, 51 insertions, 9 deletions
diff --git a/Makefile b/Makefile
index 83a0ec60..50a4c29b 100644
--- a/Makefile
+++ b/Makefile
@@ -11,3 +11,11 @@ check:
install:
install -d $(DESTDIR)$(FIRMWAREDIR)
./copy-firmware.sh $(DESTDIR)$(FIRMWAREDIR)
+
+install-xz:
+ install -d $(DESTDIR)$(FIRMWAREDIR)
+ ./copy-firmware.sh --xz $(DESTDIR)$(FIRMWAREDIR)
+
+install-zst:
+ install -d $(DESTDIR)$(FIRMWAREDIR)
+ ./copy-firmware.sh --zstd $(DESTDIR)$(FIRMWAREDIR)
diff --git a/WHENCE b/WHENCE
index 8566b208..e6309eba 100644
--- a/WHENCE
+++ b/WHENCE
@@ -3890,14 +3890,19 @@ License: Redistributable. See LICENSE.amd-sev for details
Driver: microcode_amd - AMD CPU Microcode Update Driver for Linux
File: amd-ucode/microcode_amd.bin
+Raw: amd-ucode/microcode_amd.bin
Version: 2013-07-10
File: amd-ucode/microcode_amd_fam15h.bin
+Raw: amd-ucode/microcode_amd_fam15h.bin
Version: 2018-05-24
File: amd-ucode/microcode_amd_fam16h.bin
+Raw: amd-ucode/microcode_amd_fam16h.bin
Version: 2014-10-28
File: amd-ucode/microcode_amd_fam17h.bin
+Raw: amd-ucode/microcode_amd_fam17h.bin
Version: 2023-04-13
File: amd-ucode/microcode_amd_fam19h.bin
+Raw: amd-ucode/microcode_amd_fam19h.bin
Version: 2023-01-31
File: amd-ucode/README
diff --git a/copy-firmware.sh b/copy-firmware.sh
index 40cec04e..58eb7e39 100755
--- a/copy-firmware.sh
+++ b/copy-firmware.sh
@@ -6,6 +6,9 @@
verbose=:
prune=no
+# shellcheck disable=SC2209
+compress=cat
+compext=
while test $# -gt 0; do
case $1 in
@@ -20,6 +23,27 @@ while test $# -gt 0; do
shift
;;
+ --xz)
+ if test "$compext" == ".zst"; then
+ echo "ERROR: cannot mix XZ and ZSTD compression"
+ exit 1
+ fi
+ compress="xz --compress --quiet --stdout --check=crc32"
+ compext=".xz"
+ shift
+ ;;
+
+ --zstd)
+ if test "$compext" == ".xz"; then
+ echo "ERROR: cannot mix XZ and ZSTD compression"
+ exit 1
+ fi
+ # shellcheck disable=SC2209
+ compress="zstd --compress --quiet --stdout"
+ compext=".zst"
+ shift
+ ;;
+
*)
if test "x$destdir" != "x"; then
echo "ERROR: unknown command-line options: $*"
@@ -35,18 +59,23 @@ done
# shellcheck disable=SC2162 # file/folder name can include escaped symbols
grep '^File:' WHENCE | sed -e 's/^File: *//g;s/"//g' | while read f; do
test -f "$f" || continue
- $verbose "copying file $f"
install -d "$destdir/$(dirname "$f")"
- cp -d "$f" "$destdir/$f"
+ $verbose "copying/compressing file $f$compext"
+ if test "$compress" != "cat" && grep -q "^Raw: $f\$" WHENCE; then
+ $verbose "compression will be skipped for file $f"
+ cat "$f" > "$destdir/$f"
+ else
+ $compress "$f" > "$destdir/$f$compext"
+ fi
done
# shellcheck disable=SC2162 # file/folder name can include escaped symbols
grep -E '^Link:' WHENCE | sed -e 's/^Link: *//g;s/-> //g' | while read f d; do
- if test -L "$f"; then
- test -f "$destdir/$f" && continue
- $verbose "copying link $f"
+ if test -L "$f$compext"; then
+ test -f "$destdir/$f$compext" && continue
+ $verbose "copying link $f$compext"
install -d "$destdir/$(dirname "$f")"
- cp -d "$f" "$destdir/$f"
+ cp -d "$f$compext" "$destdir/$f$compext"
if test "x$d" != "x"; then
target="$(readlink "$f")"
@@ -58,16 +87,16 @@ grep -E '^Link:' WHENCE | sed -e 's/^Link: *//g;s/-> //g' | while read f d; do
$verbose "WARNING: unneeded symlink detected: $f"
else
$verbose "WARNING: pruning unneeded symlink $f"
- rm -f "$f"
+ rm -f "$f$compext"
fi
fi
else
$verbose "WARNING: missing target for symlink $f"
fi
else
- $verbose "creating link $f -> $d"
install -d "$destdir/$(dirname "$f")"
- ln -sf "$d" "$destdir/$f"
+ $verbose "creating link $f$compext -> $d$compext"
+ ln -s "$d$compext" "$destdir/$f$compext"
fi
done