]> git.proxmox.com Git - mirror_linux-firmware.git/commitdiff
Makefile, copy-firmware: support xz/zstd compressed firmware
authorEmil Velikov <emil.l.velikov@gmail.com>
Mon, 5 Jun 2023 13:58:12 +0000 (14:58 +0100)
committerJosh Boyer <jwboyer@kernel.org>
Sun, 25 Jun 2023 16:18:57 +0000 (12:18 -0400)
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>
Makefile
WHENCE
copy-firmware.sh

index 83a0ec609908325596ddf55245995dd00b4c9d16..50a4c29be5b4fbb17114f2a0dc4f427104a176b3 100644 (file)
--- 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 8566b208ab2740f4d3cbcd40c6ef21d148da1794..e6309ebae499f9f15bd57ae3e60f1bc509e9fc59 100644 (file)
--- 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
 
index 40cec04e8b8ccf2889c94bb16f6d79d010be49c9..58eb7e39ffb76ce851b4b14e6e661912d64ad6ab 100755 (executable)
@@ -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