Date: Sunday, October 12, 2014 @ 14:14:37 Author: thomas Revision: 224237
upgpkg: intel-ucode 20140913-1 - change upgrade method Added: intel-ucode/trunk/intel-ucode.install Modified: intel-ucode/trunk/PKGBUILD intel-ucode/trunk/intel-microcode2ucode.c -------------------------+ PKGBUILD | 18 ++++++++++++------ intel-microcode2ucode.c | 33 ++++++++++++--------------------- intel-ucode.install | 12 ++++++++++++ 3 files changed, 36 insertions(+), 27 deletions(-) Modified: PKGBUILD =================================================================== --- PKGBUILD 2014-10-12 09:45:25 UTC (rev 224236) +++ PKGBUILD 2014-10-12 12:14:37 UTC (rev 224237) @@ -2,21 +2,22 @@ # Maintainer: Thomas Bächler <[email protected]> pkgname=intel-ucode -pkgver=20140624 +pkgver=20140913 pkgrel=1 pkgdesc="Microcode update files for Intel CPUs" arch=('any') +install=$pkgname.install url="http://downloadcenter.intel.com/SearchResult.aspx?lang=eng&keyword=%22microcode%22" replaces=('microcode_ctl') license=('custom') # Some random "download id" that intel has in their downloadcenter -_dlid=23984 +_dlid=24290 source=(http://downloadmirror.intel.com/${_dlid}/eng/microcode-${pkgver}.tgz LICENSE intel-microcode2ucode.c) -sha256sums=('b4662ac780438a7b2d87e6d26a7066feb807f37c6e5b6fa147089f4edb02ea37' +sha256sums=('ea6c0ee21d1fbf261f093176a78089c21411e5fe0e2c35b258cedf2b39987e15' '6983e83ec10c6467fb9101ea496e0443f0574c805907155118e2c9f0bbea97b6' - 'c51b1b1d8b4b28e7d5d007917c1e444af1a2ff04a9408aa9067c0e57d70164de') + '03a13a966316a4d3d9c7e1b46007fd4b80911aea5ddd957ddf33ce660efe03de') build() { cd "$srcdir" @@ -26,7 +27,12 @@ package() { cd "$srcdir" - install -d -m755 "${pkgdir}"/usr/lib/firmware/intel-ucode/ - cp intel-ucode/* "${pkgdir}"/usr/lib/firmware/intel-ucode/ + + install -d -m755 "${pkgdir}"/boot + + mkdir -p kernel/x86/microcode + mv microcode.bin kernel/x86/microcode/GenuineIntel.bin + echo kernel/x86/microcode/GenuineIntel.bin | bsdcpio -o -H newc -R 0:0 > "${pkgdir}"/boot/intel-ucode.img + install -D -m644 LICENSE "${pkgdir}"/usr/share/licenses/${pkgname}/LICENSE } Modified: intel-microcode2ucode.c =================================================================== --- intel-microcode2ucode.c 2014-10-12 09:45:25 UTC (rev 224236) +++ intel-microcode2ucode.c 2014-10-12 12:14:37 UTC (rev 224237) @@ -1,13 +1,8 @@ /* - * Convert Intel microcode.dat into individual ucode files - * named: intel-ucode/$family-$model-$stepping + * Convert Intel microcode.dat into a single binary microcode.bin file * - * The subdir intel-ucode/ is created in the current working - * directory. We get multiple ucodes in the same file, so they - * are appended to an existing file. Make sure the directory - * is empty before every run of the converter. - * - * Kay Sievers <[email protected]> + * Based on code by Kay Sievers <[email protected]> + * Changed to create a single file by Thomas Bächler <[email protected]> */ @@ -48,7 +43,7 @@ int main(int argc, char *argv[]) { - char *filename = "/lib/firmware/microcode.dat"; + const char *filename = "/lib/firmware/microcode.dat"; FILE *f; char line[LINE_MAX]; char buf[4000000]; @@ -89,7 +84,12 @@ if (bufsize < sizeof(struct microcode_header_intel)) goto out; - mkdir("intel-ucode", 0750); + f = fopen("microcode.bin", "we"); + if (f == NULL) { + printf("open microcode.bin: %m\n"); + rc = EXIT_FAILURE; + goto out; + } start = 0; for (;;) { @@ -130,9 +130,7 @@ month = mc->hdr.date >> 24; day = (mc->hdr.date >> 16) & 0xff; - asprintf(&filename, "intel-ucode/%02x-%02x-%02x", family, model, stepping); printf("\n"); - printf("%s\n", filename); printf("signature: 0x%02x\n", mc->hdr.sig); printf("flags: 0x%02x\n", mc->hdr.pf); printf("revision: 0x%02x\n", mc->hdr.rev); @@ -139,24 +137,17 @@ printf("date: %04x-%02x-%02x\n", year, month, day); printf("size: %zu\n", size); - f = fopen(filename, "ae"); - if (f == NULL) { - printf("open %s: %m\n", filename); - rc = EXIT_FAILURE; - goto out; - } if (fwrite(mc, size, 1, f) != 1) { - printf("write %s: %m\n", filename); + printf("write microcode.bin: %m\n"); rc = EXIT_FAILURE; goto out; } - fclose(f); - free(filename); start += size; if (start >= bufsize) break; } + fclose(f); printf("\n"); out: return rc; Added: intel-ucode.install =================================================================== --- intel-ucode.install (rev 0) +++ intel-ucode.install 2014-10-12 12:14:37 UTC (rev 224237) @@ -0,0 +1,12 @@ +## arg 1: the new package version +## arg 2: the old package version +post_upgrade() { + if [ $(vercmp $2 20140913) -lt 0 ]; then + echo "Intel CPU ucode upgrades are no longer performed by the firmware loader." + echo "If you want to update the Intel CPU ucode on boot, add the file" + echo " /boot/intel-ucode.img" + echo "as the first initrd to your bootloader." + echo + echo "For more information, see https://wiki.archlinux.org/index.php/Microcode#Enabling_Intel_Microcode_Updates" + fi +}
