git: 8972ab311c75 - main - sysutils/cpu-microcode*: support early loading of AMD ucode

From: Chuck Silvers <chs_at_FreeBSD.org>
Date: Fri, 23 Feb 2024 17:29:17 UTC
The branch main has been updated by chs:

URL: https://cgit.FreeBSD.org/ports/commit/?id=8972ab311c750984f6936ea93e80642beb7f792a

commit 8972ab311c750984f6936ea93e80642beb7f792a
Author:     Chuck Silvers <chs@FreeBSD.org>
AuthorDate: 2024-02-23 17:14:47 +0000
Commit:     Chuck Silvers <chs@FreeBSD.org>
CommitDate: 2024-02-23 17:29:13 +0000

    sysutils/cpu-microcode*: support early loading of AMD ucode
    
    Install the AMD ucode in /boot/firmware for early loading just like
    is done for intel.  Update the instructions for early loading to
    reflect that AMD is now supported too.
    
    Sponsored By:   Netflix
    Reviewed by:    jrm
    Differential Revision:  https://reviews.freebsd.org/D44025
---
 sysutils/cpu-microcode-amd/Makefile            | 11 ++++++++++-
 sysutils/cpu-microcode-rc/files/pkg-message.in | 21 +++++++++++++--------
 sysutils/cpu-microcode/Makefile                |  3 ++-
 3 files changed, 25 insertions(+), 10 deletions(-)

diff --git a/sysutils/cpu-microcode-amd/Makefile b/sysutils/cpu-microcode-amd/Makefile
index 27c726759236..838e5ade7302 100644
--- a/sysutils/cpu-microcode-amd/Makefile
+++ b/sysutils/cpu-microcode-amd/Makefile
@@ -1,5 +1,6 @@
 PORTNAME=	microcode
 PORTVERSION=	20231019
+PORTREVISION=	1
 CATEGORIES=	sysutils
 MASTER_SITES=	https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/amd-ucode/
 PKGNAMEPREFIX=	cpu-
@@ -24,6 +25,8 @@ ONLY_FOR_ARCHS=	amd64 i386
 RUN_DEPENDS=	${LOCALBASE}/etc/rc.d/microcode_update:sysutils/cpu-microcode-rc
 
 DATADIR=	${PREFIX}/share/cpucontrol
+FWDIR=		/boot/firmware
+
 EXTRACT_CMD=	${CP}
 EXTRACT_BEFORE_ARGS=	# empty
 EXTRACT_AFTER_ARGS=	.
@@ -31,12 +34,18 @@ NO_ARCH=	yes
 NO_BUILD=	yes
 
 NO_WRKSUBDIR=	yes
-PLIST_FILES=	${DISTFILES:S/^/${DATADIR}\//g:C/\?.*//}
+PLIST_FILES=	${DISTFILES:S/^/${DATADIR}\//g:C/\?.*//} \
+		${FWDIR}/amd-ucode.bin
 
 _REV=		06afd7f939c5b245b2af9e0fee13026f2aaf77fa
 
+post-extract:
+	${CAT} ${WRKSRC}/microcode_amd* > ${WRKSRC}/amd-ucode.bin
+
 do-install:
 	${MKDIR} ${STAGEDIR}${DATADIR}/
+	${MKDIR} ${STAGEDIR}${FWDIR}
+	${INSTALL_DATA} ${WRKSRC}/amd-ucode.bin ${STAGEDIR}${FWDIR}/
 .for f in ${DISTFILES}
 	${INSTALL_DATA} ${WRKSRC}/${f} ${STAGEDIR}${DATADIR}/${f:C/\?.*//}
 .endfor
diff --git a/sysutils/cpu-microcode-rc/files/pkg-message.in b/sysutils/cpu-microcode-rc/files/pkg-message.in
index 8984694e5476..10c1816da5f7 100644
--- a/sysutils/cpu-microcode-rc/files/pkg-message.in
+++ b/sysutils/cpu-microcode-rc/files/pkg-message.in
@@ -4,23 +4,28 @@
 This port includes an RC script, which is one of two methods to update
 the CPU microcode on a FreeBSD system.
 
-1. The first method does not require the RC script included here and is
-   only supported with Intel processors.  It is the preferred method,
-   because it ensures that any CPU features introduced by a microcode
-   update are visible to the kernel by applying the update before the
-   kernel performs CPU feature detection.
+1. Early loading.
+   This method does not use the RC script included here.
+   This is the preferred method, because it ensures that any CPU features
+   added or removed by a microcode update are visible to the kernel by
+   applying the update before the kernel performs CPU feature detection.
 
-   To enable updates using the first method, add the following lines to
+   To enable updates using early loading, add the following lines to
    /boot/loader.conf:
 
    cpu_microcode_load="YES"
+
+   and the appropriate one of these lines:
+
    cpu_microcode_name="/boot/firmware/intel-ucode.bin"
+   cpu_microcode_name="/boot/firmware/amd-ucode.bin"
 
    The microcode update will be loaded when the system is rebooted.
 
 
-2. The second method, which uses the RC script included here, can be
-   enabled by adding the following line to /etc/rc.conf:
+2. Late loading.
+   This method, which does use the RC script included here, is enabled by
+   adding the following line to /etc/rc.conf:
 
    microcode_update_enable="YES"
 
diff --git a/sysutils/cpu-microcode/Makefile b/sysutils/cpu-microcode/Makefile
index 1661c015fd2b..a6075a1cc5b8 100644
--- a/sysutils/cpu-microcode/Makefile
+++ b/sysutils/cpu-microcode/Makefile
@@ -1,5 +1,6 @@
 PORTNAME=	microcode
 PORTVERSION=	1.0
+PORTREVISION=	1
 CATEGORIES=	sysutils
 PKGNAMEPREFIX=	cpu-
 
@@ -8,7 +9,7 @@ COMMENT=	Meta-package for CPU microcode updates
 
 ONLY_FOR_ARCHS=	amd64 i386
 
-RUN_DEPENDS=	${LOCALBASE}/share/cpucontrol/microcode_amd.bin:sysutils/cpu-microcode-amd \
+RUN_DEPENDS=	/boot/firmware/amd-ucode.bin:sysutils/cpu-microcode-amd \
 		/boot/firmware/intel-ucode.bin:sysutils/cpu-microcode-intel
 
 USES=		metaport