summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Fiddaman <illumos@fiddaman.net>2022-08-04 13:44:22 +0000
committerAndy Fiddaman <illumos@fiddaman.net>2022-08-04 13:49:42 +0000
commitbe672c8e21cc446e1091014ae0ad206f6b8c1d55 (patch)
tree915e74d7f2a25464b472da248e0114c878a3e7dc
parentaa39f6d0fd4e491afca04b12f49a18ce955efc79 (diff)
downloadillumos-gate-be672c8e21cc446e1091014ae0ad206f6b8c1d55.tar.gz
14848 Update AMD microcode to 202204
Reviewed by: Robert Mustacchi <rm+illumos@fingolfin.org> Reviewed by: Toomas Soome <tsoome@me.com> Approved by: Garrett D'Amore <garrett@damore.org>
-rw-r--r--exception_lists/copyright1
-rw-r--r--exception_lists/wscheck1
-rw-r--r--usr/src/cmd/ucodeadm/Makefile5
-rw-r--r--usr/src/cmd/ucodeadm/ucodeadm.c208
-rw-r--r--usr/src/data/ucode/Makefile3
-rw-r--r--usr/src/data/ucode/README.ucode25
-rw-r--r--usr/src/data/ucode/amd/2031-00bin0 -> 512 bytes
-rw-r--r--usr/src/data/ucode/amd/5010-00bin1824 -> 1568 bytes
-rw-r--r--usr/src/data/ucode/amd/5020-00bin1568 -> 1568 bytes
-rw-r--r--usr/src/data/ucode/amd/6012-00bin2592 -> 2592 bytes
-rw-r--r--usr/src/data/ucode/amd/6020-00bin0 -> 2592 bytes
-rw-r--r--usr/src/data/ucode/amd/6101-00bin0 -> 2592 bytes
-rw-r--r--usr/src/data/ucode/amd/7001-00bin0 -> 3458 bytes
-rw-r--r--usr/src/data/ucode/amd/8012-00bin0 -> 3200 bytes
-rw-r--r--usr/src/data/ucode/amd/8082-00bin0 -> 3200 bytes
-rw-r--r--usr/src/data/ucode/amd/8310-00bin0 -> 3200 bytes
-rw-r--r--usr/src/data/ucode/amd/A010-00bin0 -> 5568 bytes
-rw-r--r--usr/src/data/ucode/amd/A011-00bin0 -> 5568 bytes
-rw-r--r--usr/src/data/ucode/amd/A012-00bin0 -> 5568 bytes
-rw-r--r--usr/src/data/ucode/amd/THIRDPARTYLICENSE64
-rw-r--r--usr/src/data/ucode/amd/THIRDPARTYLICENSE.descrip1
-rw-r--r--usr/src/data/ucode/amd/containerbin15020 -> 12684 bytes
-rw-r--r--usr/src/data/ucode/amd/equivalence-tablebin288 -> 448 bytes
-rwxr-xr-xusr/src/data/ucode/update.amd151
-rw-r--r--usr/src/man/man8/ucodeadm.8327
-rw-r--r--usr/src/pkg/manifests/system-microcode-amd.p5m26
-rw-r--r--usr/src/uts/common/sys/ucode.h1
27 files changed, 604 insertions, 209 deletions
diff --git a/exception_lists/copyright b/exception_lists/copyright
index 2656359cea..4ed780dda1 100644
--- a/exception_lists/copyright
+++ b/exception_lists/copyright
@@ -106,6 +106,7 @@ usr/src/data/hwdata/pci.ids
usr/src/data/hwdata/usb.ids
usr/src/data/perfmon/*
usr/src/data/ucode/Makefile.links
+usr/src/data/ucode/amd/*
usr/src/data/ucode/intel/*
usr/src/grub/grub-0.97/stage2/Makefile.am
usr/src/grub/grub-0.97/stage2/builtins.c
diff --git a/exception_lists/wscheck b/exception_lists/wscheck
index 889bea8a9f..f12472376e 100644
--- a/exception_lists/wscheck
+++ b/exception_lists/wscheck
@@ -19,6 +19,7 @@ usr/src/cmd/smbsrv/testoplock/case*.ref
usr/src/data/hwdata/pci.ids
usr/src/data/hwdata/usb.ids
usr/src/data/perfmon/readme.txt
+usr/src/data/ucode/amd/*
usr/src/data/ucode/intel/*
usr/src/test/crypto-tests/tests/digest/data/*.rsp
usr/src/test/os-tests/tests/definit/init.data
diff --git a/usr/src/cmd/ucodeadm/Makefile b/usr/src/cmd/ucodeadm/Makefile
index 352aefadfb..b6a4da71b6 100644
--- a/usr/src/cmd/ucodeadm/Makefile
+++ b/usr/src/cmd/ucodeadm/Makefile
@@ -23,7 +23,7 @@
# Use is subject to license terms.
#
# Copyright 2017 RackTop Systems.
-# Copyright 2021 OmniOS Community Edition (OmniOSce) Association.
+# Copyright 2022 OmniOS Community Edition (OmniOSce) Association.
#
PROG = ucodeadm
@@ -41,10 +41,9 @@ include ../Makefile.ctf
POFILE = ucodeadm_all.po
POFILES = $(PROG_OBJS:%.o=%.po)
+CSTD = $(GNU_C99)
CPPFLAGS = -I../../common -I../../uts/common
CFLAGS += $(CCVERBOSE)
-CERRWARN += $(CNOWARN_UNINIT)
-CERRWARN += -_gcc=-Wno-type-limits
LDLIBS += -lgen
DIRMODE = 0755
diff --git a/usr/src/cmd/ucodeadm/ucodeadm.c b/usr/src/cmd/ucodeadm/ucodeadm.c
index 65f61facea..216b3dc9fb 100644
--- a/usr/src/cmd/ucodeadm/ucodeadm.c
+++ b/usr/src/cmd/ucodeadm/ucodeadm.c
@@ -25,7 +25,7 @@
/*
* Copyright (c) 2018, Joyent, Inc.
- * Copyright 2021 OmniOS Community Edition (OmniOSce) Association.
+ * Copyright 2022 OmniOS Community Edition (OmniOSce) Association.
*/
#include <sys/types.h>
@@ -53,6 +53,7 @@
#define UCODE_OPT_INSTALL 0x0001
#define UCODE_OPT_UPDATE 0x0002
#define UCODE_OPT_VERSION 0x0004
+#define UCODE_OPT_LIST 0x0008
static const char ucode_dev[] = "/dev/" UCODE_DRIVER_NAME;
@@ -69,9 +70,22 @@ static int ucode_convert_intel(const char *, uint8_t *, size_t);
static ucode_errno_t ucode_gen_files_amd(uint8_t *, int, char *);
static ucode_errno_t ucode_gen_files_intel(uint8_t *, int, char *);
+static void ucode_list_amd(uint8_t *, int);
+static void ucode_list_intel(uint8_t *, int);
+
static const struct ucode_ops ucode_ops[] = {
- { ucode_convert_intel, ucode_gen_files_intel, ucode_validate_intel },
- { ucode_convert_amd, ucode_gen_files_amd, ucode_validate_amd },
+ {
+ .convert = ucode_convert_intel,
+ .gen_files = ucode_gen_files_intel,
+ .validate = ucode_validate_intel,
+ .list = ucode_list_intel,
+ },
+ {
+ .convert = ucode_convert_amd,
+ .gen_files = ucode_gen_files_amd,
+ .validate = ucode_validate_amd,
+ .list = ucode_list_amd,
+ },
};
const struct ucode_ops *ucode;
@@ -104,6 +118,12 @@ usage(int verbose)
"\t\t microcode-file.\n\n"));
}
+ (void) fprintf(stderr, "\t%s -l microcode-file\n", cmdname);
+ if (verbose) {
+ (void) fprintf(stderr, gettext("\t\t Displays details of the "
+ "microcode file's contents.\n\n"));
+ }
+
(void) fprintf(stderr, "\t%s -i [-R path] microcode-file\n", cmdname);
if (verbose) {
(void) fprintf(stderr, gettext("\t\t Installs microcode to be "
@@ -126,6 +146,8 @@ ucode_perror(const char *str, ucode_errno_t rc)
/*
* Convert text format microcode release into binary format.
* Return the number of characters read.
+ *
+ * AMD microcode is already in binary format.
*/
static int
ucode_convert_amd(const char *infile, uint8_t *buf, size_t size)
@@ -151,7 +173,7 @@ ucode_convert_intel(const char *infile, uint8_t *buf, size_t size)
char linebuf[LINESIZE];
FILE *infd = NULL;
int count = 0, firstline = 1;
- uint32_t *intbuf = (uint32_t *)(intptr_t)buf;
+ uint32_t *intbuf = (uint32_t *)(uintptr_t)buf;
if (infile == NULL || buf == NULL || size == 0)
return (0);
@@ -242,11 +264,10 @@ ucode_gen_files_amd(uint8_t *buf, int size, char *path)
{
uint32_t *ptr = (uint32_t *)buf;
char common_path[PATH_MAX];
- int fd, count, counter;
+ int fd, count, counter = 0;
ucode_header_amd_t *uh;
int last_cpu_rev = 0;
-
/* write container file */
(void) snprintf(common_path, PATH_MAX, "%s/%s", path, "container");
@@ -339,7 +360,7 @@ ucode_gen_files_intel(uint8_t *buf, int size, char *path)
ucode_header_intel_t *uhp;
ucode_ext_table_intel_t *extp;
- uhp = (ucode_header_intel_t *)(intptr_t)curbuf;
+ uhp = (ucode_header_intel_t *)(uintptr_t)curbuf;
total_size = UCODE_TOTAL_SIZE_INTEL(uhp->uh_total_size);
body_size = UCODE_BODY_SIZE_INTEL(uhp->uh_body_size);
@@ -408,7 +429,7 @@ ucode_gen_files_intel(uint8_t *buf, int size, char *path)
continue;
/* There is extended signature table. More processing. */
- extp = (ucode_ext_table_intel_t *)(uintptr_t)&curbuf[offset];
+ extp = (ucode_ext_table_intel_t *)&curbuf[offset];
for (i = 0; i < extp->uet_count; i++) {
ucode_ext_sig_intel_t *uesp = &extp->uet_ext_sig[i];
@@ -474,6 +495,118 @@ ucode_gen_files_intel(uint8_t *buf, int size, char *path)
return (EM_OK);
}
+static void
+ucode_fms(uint32_t sig, uint8_t *family, uint8_t *model, uint8_t *stepping)
+{
+ *family = ((sig >> 8) & 0xf) + ((sig >> 20) & 0xff);
+ *model = ((sig >> 4) & 0xf) | ((sig >> 12) & 0xf0);
+ *stepping = sig & 0xf;
+}
+
+static void
+ucode_list_intel(uint8_t *buf, int size)
+{
+ int remaining;
+
+ printf("Microcode patches:\n");
+ for (remaining = size; remaining > 0; ) {
+ uint8_t *curbuf = &buf[size - remaining];
+ uint8_t family, model, stepping;
+ uint32_t total_size, body_size, offset;
+ ucode_header_intel_t *uhp;
+ ucode_ext_table_intel_t *extp;
+
+ uhp = (ucode_header_intel_t *)(uintptr_t)curbuf;
+
+ total_size = UCODE_TOTAL_SIZE_INTEL(uhp->uh_total_size);
+ body_size = UCODE_BODY_SIZE_INTEL(uhp->uh_body_size);
+
+ remaining -= total_size;
+
+ ucode_fms(uhp->uh_signature, &family, &model, &stepping);
+
+ printf(
+ " %08lX-%02lX -> Family=%02x Model=%02x Stepping=%02x\n",
+ uhp->uh_signature, uhp->uh_proc_flags,
+ family, model, stepping);
+ printf(
+ " %14s Date=%08lX Bytes=%lu\n", "",
+ uhp->uh_date, uhp->uh_body_size);
+
+ offset = UCODE_HEADER_SIZE_INTEL + body_size;
+
+ /* Check to see if there is extended signature table */
+ if (total_size == offset)
+ continue;
+
+ printf("Extended Signature Table:\n");
+
+ extp = (ucode_ext_table_intel_t *)&curbuf[offset];
+
+ for (uint32_t i = 0; i < extp->uet_count; i++) {
+ ucode_ext_sig_intel_t *uesp = &extp->uet_ext_sig[i];
+
+ ucode_fms(uesp->ues_signature,
+ &family, &model, &stepping);
+
+ printf(
+ " %08lX-%02lX -> Family=%02x Model=%02x "
+ "Stepping=%02x\n",
+ uesp->ues_signature, uesp->ues_proc_flags,
+ family, model, stepping);
+ }
+ }
+}
+
+static void
+ucode_list_amd(uint8_t *buf, int size)
+{
+ ucode_eqtbl_amd_t *eq;
+ ucode_header_amd_t *uh;
+ uint32_t tsz;
+
+ /*
+ * The file has already been validated so we can skip straight to
+ * the equivalence table.
+ */
+ tsz = *(uint32_t *)(buf + 8);
+ eq = (ucode_eqtbl_amd_t *)(buf + 12);
+ size -= 12;
+
+ printf("Equivalence table:\n");
+ while (size >= sizeof (ucode_eqtbl_amd_t) && eq->ue_inst_cpu != 0) {
+ uint8_t family, model, stepping;
+
+ ucode_fms(eq->ue_inst_cpu, &family, &model, &stepping);
+
+ printf(
+ " %08lX Family=%02x Model=%02x Stepping=%02x -> %04X\n",
+ eq->ue_inst_cpu, family, model, stepping, eq->ue_equiv_cpu);
+ eq++;
+ size -= sizeof (*eq);
+ }
+
+ /* Move past the equivalence table terminating record */
+ eq++;
+ size -= sizeof (*eq);
+ buf = (uint8_t *)eq;
+
+ printf("Microcode patches:\n");
+ while (size > sizeof (ucode_header_amd_t) + 8) {
+ tsz = *(uint32_t *)(buf + 4);
+ uh = (ucode_header_amd_t *)(buf + 8);
+
+ if (uh->uh_cpu_rev == 0)
+ break;
+
+ printf(" %4X -> Patch=%08lX Date=%08lX Bytes=%lu\n",
+ uh->uh_cpu_rev, uh->uh_patch_id, uh->uh_date, tsz);
+
+ buf += (tsz + 8);
+ size -= (tsz + 8);
+ }
+}
+
/*
* Returns 0 on success, 2 on usage error, and 3 on operation error.
*/
@@ -493,7 +626,7 @@ main(int argc, char *argv[])
ucode_errno_t rc = EM_OK;
processorid_t cpuid_max;
struct stat filestat;
- uint32_t ucode_size;
+ int ucode_size = 0;
(void) setlocale(LC_ALL, "");
@@ -504,7 +637,7 @@ main(int argc, char *argv[])
cmdname = basename(argv[0]);
- while ((c = getopt(argc, argv, "idhuvVR:")) != EOF) {
+ while ((c = getopt(argc, argv, "idhluvVR:")) != EOF) {
switch (c) {
case 'i':
@@ -512,6 +645,11 @@ main(int argc, char *argv[])
actcount++;
break;
+ case 'l':
+ action |= UCODE_OPT_LIST;
+ actcount++;
+ break;
+
case 'u':
action |= UCODE_OPT_UPDATE;
actcount++;
@@ -527,9 +665,9 @@ main(int argc, char *argv[])
break;
case 'R':
- if (optarg[0] == '-')
+ if (optarg[0] == '-') {
errflg++;
- else if (strlen(optarg) > UCODE_MAX_PATH_LEN) {
+ } else if (strlen(optarg) > UCODE_MAX_PATH_LEN) {
(void) fprintf(stderr,
gettext("Alternate path too long\n"));
errflg++;
@@ -553,8 +691,15 @@ main(int argc, char *argv[])
}
}
+ if (actcount == 0) {
+ (void) fprintf(stderr, gettext("%s: One of -i, -l, -u or -v "
+ "must be provided.\n"), cmdname);
+ usage(verbose);
+ return (2);
+ }
+
if (actcount != 1) {
- (void) fprintf(stderr, gettext("%s: options -v, -i and -u "
+ (void) fprintf(stderr, gettext("%s: options -i, -l, -u and -v "
"are mutually exclusive.\n"), cmdname);
usage(verbose);
return (2);
@@ -562,7 +707,7 @@ main(int argc, char *argv[])
if (optind <= argc - 1)
filename = argv[optind];
- else if (!(action & UCODE_OPT_VERSION))
+ else if (action != UCODE_OPT_VERSION)
errflg++;
if (errflg || action == 0) {
@@ -571,9 +716,11 @@ main(int argc, char *argv[])
}
/*
- * Convert from text format to binary format
+ * Convert from the vendor-shipped format (text for Intel, binary
+ * container for AMD) to individual microcode files.
*/
- if ((action & UCODE_OPT_INSTALL) || (action & UCODE_OPT_UPDATE)) {
+ if ((action &
+ (UCODE_OPT_INSTALL | UCODE_OPT_UPDATE | UCODE_OPT_LIST))) {
int i;
UCODE_VENDORS;
@@ -594,26 +741,26 @@ main(int argc, char *argv[])
if (ucode_vendors[i].filestr == NULL) {
rc = EM_NOVENDOR;
ucode_perror(basename(filename), rc);
- goto err_out;
+ goto out;
}
if ((stat(filename, &filestat)) < 0) {
rc = EM_SYS;
ucode_perror(filename, rc);
- goto err_out;
+ goto out;
}
if ((filestat.st_mode & S_IFMT) != S_IFREG &&
(filestat.st_mode & S_IFMT) != S_IFLNK) {
rc = EM_FILEFORMAT;
ucode_perror(filename, rc);
- goto err_out;
+ goto out;
}
if ((buf = malloc(filestat.st_size)) == NULL) {
rc = EM_SYS;
ucode_perror(filename, rc);
- goto err_out;
+ goto out;
}
ucode_size = ucode->convert(filename, buf, filestat.st_size);
@@ -623,15 +770,20 @@ main(int argc, char *argv[])
if (ucode_size == 0) {
rc = EM_FILEFORMAT;
ucode_perror(filename, rc);
- goto err_out;
+ goto out;
}
if ((rc = ucode->validate(buf, ucode_size)) != EM_OK) {
ucode_perror(filename, rc);
- goto err_out;
+ goto out;
}
}
+ if (action & UCODE_OPT_LIST) {
+ ucode->list(buf, ucode_size);
+ goto out;
+ }
+
/*
* For the install option, the microcode file must start with
* "intel" for Intel microcode, and "amd" for AMD microcode.
@@ -645,7 +797,7 @@ main(int argc, char *argv[])
if ((path = malloc(PATH_MAX)) == NULL) {
rc = EM_SYS;
ucode_perror("malloc", rc);
- goto err_out;
+ goto out;
}
(void) snprintf(path, PATH_MAX, "/%s/%s",
@@ -655,18 +807,18 @@ main(int argc, char *argv[])
if (mkdirp(path, 0755) == -1 && errno != EEXIST) {
rc = EM_SYS;
ucode_perror(path, rc);
- goto err_out;
+ goto out;
}
rc = ucode->gen_files(buf, ucode_size, path);
- goto err_out;
+ goto out;
}
if ((dev_fd = open(ucode_dev, O_RDONLY)) == -1) {
rc = EM_SYS;
ucode_perror(ucode_dev, rc);
- goto err_out;
+ goto out;
}
if (action & UCODE_OPT_VERSION) {
@@ -685,7 +837,7 @@ main(int argc, char *argv[])
malloc(cpuid_max * sizeof (uint32_t))) == NULL) {
rc = EM_SYS;
ucode_perror("malloc", rc);
- goto err_out;
+ goto out;
}
for (i = 0; i < cpuid_max; i++)
@@ -759,7 +911,7 @@ main(int argc, char *argv[])
}
}
-err_out:
+out:
if (dev_fd != -1)
(void) close(dev_fd);
diff --git a/usr/src/data/ucode/Makefile b/usr/src/data/ucode/Makefile
index 59d62813b3..c4d40f1fbf 100644
--- a/usr/src/data/ucode/Makefile
+++ b/usr/src/data/ucode/Makefile
@@ -11,6 +11,7 @@
#
# Copyright 2019 Joyent, Inc.
+# Copyright 2022 OmniOS Community Edition (OmniOSce) Association.
#
include $(SRC)/data/Makefile.data
@@ -19,7 +20,7 @@ ROOTUCODEPATH = $(ROOT)/platform/i86pc/ucode
ROOTAMDDIR = $(ROOTUCODEPATH)/AuthenticAMD
ROOTINTELDIR = $(ROOTUCODEPATH)/GenuineIntel
-AMD_FILES :sh= (cd amd; print *)
+AMD_FILES :sh= (cd amd; print *-* container)
INTEL_FILES :sh= (cd intel; print *-*)
include $(SRC)/data/ucode/Makefile.links
diff --git a/usr/src/data/ucode/README.ucode b/usr/src/data/ucode/README.ucode
index 287a2ce50d..30851457e5 100644
--- a/usr/src/data/ucode/README.ucode
+++ b/usr/src/data/ucode/README.ucode
@@ -11,6 +11,7 @@
#
# Copyright 2019 Joyent, Inc.
+# Copyright 2022 OmniOS Community Edition (OmniOSce) Association.
#
Microcode Management
@@ -27,17 +28,31 @@ Intead of using this method, we will update the microcode and manage
them in here as individual files. When updating files, please indicate
the release that the microcode was obtained from here.
+>>> Intel
+
The upstream microcode for Intel can currently be found at:
-https://github.com/intel/Intel-Linux-Processor-Microcode-Data-Files
+ https://github.com/intel/Intel-Linux-Processor-Microcode-Data-Files
The script "update.intel" in this directory can be used to help automate
the update by providing a tarball of the above microcode, and takes care
of updating the manifest as necessary. Be careful about new files.
-AMD: Updated in March 2012 as part of illumos#2546. Exact revision
-unknown.
-
-Intel: Linux YYYYMMDD release, see
+Intel - see:
usr/src/pkg/manifests/system-microcode-intel.p5m
for exact current version
+
+>>> AMD
+
+The upstream microcode for AMD can currently be found at:
+
+ git://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git
+
+The script "update.amd" in this directory can be used to help automate
+the update by automatically checking out the latest upstream firmware and
+inserting it into the tree and package manifest. Be careful about new files.
+
+AMD - see:
+ usr/src/pkg/manifests/system-microcode-amd.p5m
+for exact current version
+
diff --git a/usr/src/data/ucode/amd/2031-00 b/usr/src/data/ucode/amd/2031-00
new file mode 100644
index 0000000000..26e4731b3c
--- /dev/null
+++ b/usr/src/data/ucode/amd/2031-00
Binary files differ
diff --git a/usr/src/data/ucode/amd/5010-00 b/usr/src/data/ucode/amd/5010-00
index 49eb4aa83c..ab96d547e1 100644
--- a/usr/src/data/ucode/amd/5010-00
+++ b/usr/src/data/ucode/amd/5010-00
Binary files differ
diff --git a/usr/src/data/ucode/amd/5020-00 b/usr/src/data/ucode/amd/5020-00
index 23576ab88d..1d5cfbc735 100644
--- a/usr/src/data/ucode/amd/5020-00
+++ b/usr/src/data/ucode/amd/5020-00
Binary files differ
diff --git a/usr/src/data/ucode/amd/6012-00 b/usr/src/data/ucode/amd/6012-00
index 38a88d14a2..0206e28214 100644
--- a/usr/src/data/ucode/amd/6012-00
+++ b/usr/src/data/ucode/amd/6012-00
Binary files differ
diff --git a/usr/src/data/ucode/amd/6020-00 b/usr/src/data/ucode/amd/6020-00
new file mode 100644
index 0000000000..97b06ca874
--- /dev/null
+++ b/usr/src/data/ucode/amd/6020-00
Binary files differ
diff --git a/usr/src/data/ucode/amd/6101-00 b/usr/src/data/ucode/amd/6101-00
new file mode 100644
index 0000000000..fef3101c49
--- /dev/null
+++ b/usr/src/data/ucode/amd/6101-00
Binary files differ
diff --git a/usr/src/data/ucode/amd/7001-00 b/usr/src/data/ucode/amd/7001-00
new file mode 100644
index 0000000000..39c169c6e0
--- /dev/null
+++ b/usr/src/data/ucode/amd/7001-00
Binary files differ
diff --git a/usr/src/data/ucode/amd/8012-00 b/usr/src/data/ucode/amd/8012-00
new file mode 100644
index 0000000000..5f5d1fbe30
--- /dev/null
+++ b/usr/src/data/ucode/amd/8012-00
Binary files differ
diff --git a/usr/src/data/ucode/amd/8082-00 b/usr/src/data/ucode/amd/8082-00
new file mode 100644
index 0000000000..f692c74d3c
--- /dev/null
+++ b/usr/src/data/ucode/amd/8082-00
Binary files differ
diff --git a/usr/src/data/ucode/amd/8310-00 b/usr/src/data/ucode/amd/8310-00
new file mode 100644
index 0000000000..4b448354f0
--- /dev/null
+++ b/usr/src/data/ucode/amd/8310-00
Binary files differ
diff --git a/usr/src/data/ucode/amd/A010-00 b/usr/src/data/ucode/amd/A010-00
new file mode 100644
index 0000000000..48149467de
--- /dev/null
+++ b/usr/src/data/ucode/amd/A010-00
Binary files differ
diff --git a/usr/src/data/ucode/amd/A011-00 b/usr/src/data/ucode/amd/A011-00
new file mode 100644
index 0000000000..2bcf1d5a65
--- /dev/null
+++ b/usr/src/data/ucode/amd/A011-00
Binary files differ
diff --git a/usr/src/data/ucode/amd/A012-00 b/usr/src/data/ucode/amd/A012-00
new file mode 100644
index 0000000000..4536829bb5
--- /dev/null
+++ b/usr/src/data/ucode/amd/A012-00
Binary files differ
diff --git a/usr/src/data/ucode/amd/THIRDPARTYLICENSE b/usr/src/data/ucode/amd/THIRDPARTYLICENSE
new file mode 100644
index 0000000000..de5b29c4e4
--- /dev/null
+++ b/usr/src/data/ucode/amd/THIRDPARTYLICENSE
@@ -0,0 +1,64 @@
+Copyright (C) 2010-2018 Advanced Micro Devices, Inc., All rights reserved.
+
+Permission is hereby granted by Advanced Micro Devices, Inc. ("AMD"),
+free of any license fees, to any person obtaining a copy of this
+microcode in binary form (the "Software") ("You"), to install,
+reproduce, copy and distribute copies of the Software and to permit
+persons to whom the Software is provided to do the same, subject to
+the following terms and conditions. Your use of any portion of the
+Software shall constitute Your acceptance of the following terms and
+conditions. If You do not agree to the following terms and conditions,
+do not use, retain or redistribute any portion of the Software.
+
+If You redistribute this Software, You must reproduce the above
+copyright notice and this license with the Software.
+Without specific, prior, written permission from AMD, You may not
+reference AMD or AMD products in the promotion of any product derived
+from or incorporating this Software in any manner that implies that
+AMD endorses or has certified such product derived from or
+incorporating this Software.
+
+You may not reverse engineer, decompile, or disassemble this Software
+or any portion thereof.
+
+THE SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY EXPRESS OR IMPLIED
+WARRANTY OF ANY KIND, INCLUDING BUT NOT LIMITED TO WARRANTIES OF
+MERCHANTABILITY, NONINFRINGEMENT, TITLE, FITNESS FOR ANY PARTICULAR
+PURPOSE, OR WARRANTIES ARISING FROM CONDUCT, COURSE OF DEALING, OR
+USAGE OF TRADE. IN NO EVENT SHALL AMD OR ITS LICENSORS BE LIABLE FOR
+ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR
+LOSS OF PROFITS, BUSINESS INTERRUPTION, OR LOSS OF DATA OR
+INFORMATION) ARISING OUT OF AMD'S NEGLIGENCE, GROSS NEGLIGENCE, THE
+USE OF OR INABILITY TO USE THE SOFTWARE, EVEN IF AMD HAS BEEN ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGES. BECAUSE SOME JURISDICTIONS
+PROHIBIT THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR
+INCIDENTAL DAMAGES OR THE EXCLUSION OF IMPLIED WARRANTIES, THE ABOVE
+LIMITATION MAY NOT APPLY TO YOU.
+
+Without limiting the foregoing, the Software may implement third party
+technologies for which You must obtain licenses from parties other
+than AMD. You agree that AMD has not obtained or conveyed to You, and
+that You shall be responsible for obtaining the rights to use and/or
+distribute the applicable underlying intellectual property rights
+related to the third party technologies. These third party
+technologies are not licensed hereunder.
+
+If You use the Software (in whole or in part), You shall adhere to all
+applicable U.S., European, and other export laws, including but not
+limited to the U.S. Export Administration Regulations ("EAR"), (15
+C.F.R. Sections 730 through 774), and E.U. Council Regulation (EC) No
+1334/2000 of 22 June 2000. Further, pursuant to Section 740.6 of the
+EAR, You hereby certify that, except pursuant to a license granted by
+the United States Department of Commerce Bureau of Industry and
+Security or as otherwise permitted pursuant to a License Exception
+under the U.S. Export Administration Regulations ("EAR"), You will not
+(1) export, re-export or release to a national of a country in Country
+Groups D:1, E:1 or E:2 any restricted technology, software, or source
+code You receive hereunder, or (2) export to Country Groups D:1, E:1
+or E:2 the direct product of such technology or software, if such
+foreign produced direct product is subject to national security
+controls as identified on the Commerce Control List (currently found
+in Supplement 1 to Part 774 of EAR). For the most current Country
+Group listings, or for additional information about the EAR or Your
+obligations under those regulations, please refer to the U.S. Bureau
+of Industry and Security?s website at ttp://www.bis.doc.gov/.
diff --git a/usr/src/data/ucode/amd/THIRDPARTYLICENSE.descrip b/usr/src/data/ucode/amd/THIRDPARTYLICENSE.descrip
new file mode 100644
index 0000000000..5bfbb45f80
--- /dev/null
+++ b/usr/src/data/ucode/amd/THIRDPARTYLICENSE.descrip
@@ -0,0 +1 @@
+AMD Processor Microcode Data Files
diff --git a/usr/src/data/ucode/amd/container b/usr/src/data/ucode/amd/container
index 365d279d2b..23c9dd3402 100644
--- a/usr/src/data/ucode/amd/container
+++ b/usr/src/data/ucode/amd/container
Binary files differ
diff --git a/usr/src/data/ucode/amd/equivalence-table b/usr/src/data/ucode/amd/equivalence-table
index ebb2f9ca32..9c672e6e6a 100644
--- a/usr/src/data/ucode/amd/equivalence-table
+++ b/usr/src/data/ucode/amd/equivalence-table
Binary files differ
diff --git a/usr/src/data/ucode/update.amd b/usr/src/data/ucode/update.amd
new file mode 100755
index 0000000000..132832ca22
--- /dev/null
+++ b/usr/src/data/ucode/update.amd
@@ -0,0 +1,151 @@
+#!/bin/ksh
+
+# This file and its contents are supplied under the terms of the
+# Common Development and Distribution License ("CDDL"), version 1.0.
+# You may only use this file in accordance with the terms of version
+# 1.0 of the CDDL.
+#
+# A full copy of the text of the CDDL should have accompanied this
+# source. A copy of the CDDL is also available via the Internet at
+# http://www.illumos.org/license/CDDL.
+
+# Copyright 2022 OmniOS Community Edition (OmniOSce) Association.
+
+# A simple update script that checks out the upstream AMD firmware
+# repository, extracts the microcode into separate files within the amd/
+# directory, generates the required combined equivalence table and updates
+# the pkg(7) manifest.
+
+UPSTREAM=git://git.kernel.org
+UPSTREAM_PATH=/pub/scm/linux/kernel/git/firmware/linux-firmware.git
+
+# These are the GPG keys that AMD use to sign their CPU microcode updates
+# The first key is the current one and the second is one they have used for
+# older CPU families.
+GPGSERVER=keys.gnupg.net
+typeset -a GPGKEYS=(
+ 0xFC7C6C505DAFCC14718357CAE4BE5339F328AE73
+ 0x916A770823A7B27AADE01565A5E8DBC98C0108B4
+)
+
+FW=platform/i86pc/ucode/AuthenticAMD
+
+export LC_ALL=C.UTF-8
+
+set -e
+set -o pipefail
+
+mf=../../pkg/manifests/system-microcode-amd.p5m
+[[ -f $mf ]] || {
+ echo "Run from usr/src/data/ucode" 2>&1
+ exit 1
+}
+
+function find_cmd {
+ typeset cmd="$1"
+ typeset var=$(echo $cmd | tr '[:lower:]' '[:upper:]')
+ typeset -n path="$var"
+ path=$(whence -fp "$cmd")
+ if (($? != 0)) || [ ! -x "$path" ]; then
+ echo "Cannot find executable '$cmd' in PATH"
+ exit 1
+ fi
+}
+
+# This script uses a few commands which are not part of illumos and are
+# expected to be available in the path.
+find_cmd git
+find_cmd gpg
+find_cmd pkgfmt
+find_cmd stat
+# Search for 'ucodeadm'. If you need to use an updated ucodeadm to handle this
+# firmware update, as is occasionally necessary, ensure it occurs earlier in
+# the path than /usr/sbin.
+find_cmd ucodeadm
+
+tmp=$(mktemp -d)
+mkdir -p $tmp/out || {
+ echo "Failed to create temporary directory" 2>&1
+ exit 1
+}
+
+trap 'rm -rf $tmp' EXIT
+
+echo "** Adding AMD GPG signing keys to temporary keyring"
+mkdir -m 0700 $tmp/gnupg
+$GPG --homedir $tmp/gnupg --keyserver $GPGSERVER --receive-keys ${GPGKEYS[@]}
+
+echo "** Cloning $UPSTREAM$UPSTREAM_PATH"
+$GIT clone $UPSTREAM$UPSTREAM_PATH $tmp/ucode
+
+ver=`$GIT -C $tmp/ucode log -n1 --format=%ad --date=format:%Y%m%d amd-ucode`
+echo "** Updating to microcode version $ver"
+
+echo "** Verifying microcode signatures"
+for f in $tmp/ucode/amd-ucode/*.bin; do
+ if [[ ! -f "$f.asc" ]]; then
+ echo "Signature missing for ${f##*/}"
+ exit 1
+ fi
+ $GPG --homedir $tmp/gnupg --trust-model=always --verify $f{.asc,}
+done
+
+# Now that everything is in place and verified, begin modifying the tree.
+
+rm -f amd/*
+
+cp $tmp/ucode/LICENSE.amd-ucode amd/THIRDPARTYLICENSE
+echo AMD Processor Microcode Data Files > amd/THIRDPARTYLICENSE.descrip
+
+for f in $tmp/ucode/amd-ucode/*.bin; do
+ bf=${f##*/}
+ bf=${bf#microcode_}
+ bf=${bf%.bin}
+ [[ $bf = amd* ]] || {
+ echo "$f does not look like a firmware file"
+ exit 1
+ }
+ echo "Converting $bf"
+ mkdir $tmp/out/$bf
+ cp $f $tmp/amd-fw
+ $UCODEADM -i -R $tmp/out/$bf $tmp/amd-fw
+ rm -f $tmp/amd-fw
+done
+
+# Copy the combined container file from the old (pre-family-15h) microcode
+# file to 'container'. This file is only used by xVM.
+cp $tmp/out/amd/container amd/
+
+# Copy the firmware files into place
+cp $tmp/out/*/*-?? amd/
+
+# Combine the equivalence tables from the different updates into one
+# Each equivalence-table file is a sequence of 16-byte records with a
+# 16-byte terminator which is all zeros. To merge, we just concatenate
+# the non-terminator records and then add 16 bytes from /dev/zero.
+{
+ for f in $tmp/out/*/equivalence-table; do
+ size=$($STAT -c %s $f)
+ ((size -= 16))
+ dd if=$f bs=1 count=$size status=none
+ done
+ # Add terminator
+ dd if=/dev/zero bs=1 count=16 status=none
+} > amd/equivalence-table
+
+$PKGFMT -u $mf
+mv $mf $mf.tmp
+egrep -v "file path=$FW" $mf.tmp > $mf
+rm -f $mf.tmp
+
+for f in amd/*; do
+ bf=${f##*/}
+ [[ $bf = THIRDPARTYLICENSE* ]] && continue
+ echo "file path=$FW/$bf group=sys mode=0444"\
+ "reboot-needed=true preserve=true" >> $mf
+done
+
+sed -i "/pkg.fmri.*microcode\/amd@/s/@[0-9]*/@$ver/" $mf
+
+$PKGFMT -fv2 $mf
+
diff --git a/usr/src/man/man8/ucodeadm.8 b/usr/src/man/man8/ucodeadm.8
index 19dc40bb12..a391213974 100644
--- a/usr/src/man/man8/ucodeadm.8
+++ b/usr/src/man/man8/ucodeadm.8
@@ -1,177 +1,164 @@
-'\" te
+.\" The contents of this file are subject to the terms of the Common
+.\" Development and Distribution License (the "License"). You may not use
+.\" this file except in compliance with the License.
+.\"
+.\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE or
+.\" http://www.opensolaris.org/os/licensing. See the License for the
+.\" specific language governing permissions and limitations under the
+.\" License.
+.\"
+.\" When distributing Covered Code, include this CDDL HEADER in each file
+.\" and include the License file at usr/src/OPENSOLARIS.LICENSE. If
+.\" applicable, add the following below this CDDL HEADER, with the fields
+.\" enclosed by brackets "[]" replaced with your own identifying
+.\" information: Portions Copyright [yyyy] [name of copyright owner]
+.\"
.\" Copyright (c) 2007, Sun Microsystems, Inc. All Rights Reserved
-.\" The contents of this file are subject to the terms of the Common Development and Distribution License (the "License"). You may not use this file except in compliance with the License.
-.\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE or http://www.opensolaris.org/os/licensing. See the License for the specific language governing permissions and limitations under the License.
-.\" When distributing Covered Code, include this CDDL HEADER in each file and include the License file at usr/src/OPENSOLARIS.LICENSE. If applicable, add the following below this CDDL HEADER, with the fields enclosed by brackets "[]" replaced with your own identifying information: Portions Copyright [yyyy] [name of copyright owner]
-.TH UCODEADM 8 "Jul 10, 2007"
-.SH NAME
-ucodeadm \- update processor microcode
-.SH SYNOPSIS
-.LP
-.nf
-\fB/usr/sbin/ucodeadm\fR \fB-v\fR
-.fi
-
-.LP
-.nf
-\fB/usr/sbin/ucodeadm\fR \fB-u\fR\fImicrocode-text-file\fR
-.fi
-
-.LP
-.nf
-\fB/usr/sbin/ucodeadm\fR \fB-i\fR [\fB-R\fR \fIpath\fR] \fImicrocode-text-file\fR
-.fi
-
-.SH DESCRIPTION
-.sp
-.LP
-The \fBucodeadm\fR utility can be used to report running microcode revision on
-the processors, update microcode, or install microcode on the target system to
-be used during the boot process.
-.sp
-.LP
-The \fImicrocode-text-file\fR can be obtained from processor vendors.
-.SH OPTIONS
-.sp
-.ne 2
-.na
-\fB\fB-v\fR\fR
-.ad
-.RS 26n
-Report microcode revision.
-.RE
-
-.sp
-.ne 2
-.na
-\fB\fB-u\fR \fImicrocode-text-file\fR\fR
-.ad
-.RS 26n
-Update microcode on all cross-call interrupt ready processors.
-.RE
-
-.sp
-.ne 2
-.na
-\fB\fB-i\fR \fImicrocode-text-file\fR\fR
-.ad
-.RS 26n
-Install microcode files on target system to be used during the next boot
-cycle. The text file name must have the vendor name prefix, such as
-"\fBintel\fR" or "\fBamd\fR".
-.sp
+.\" Copyright 2022 OmniOS Community Edition (OmniOSce) Association.
+.\"
+.Dd July 23, 2022
+.Dt UCODEADM 8
+.Os
+.Sh NAME
+.Nm ucodeadm
+.Nd processor microcode utility
+.Sh SYNOPSIS
+.Nm
+.Fl i
+.Op Fl R Ar path
+.Ar microcode-file
+.Nm
+.Fl l
+.Ar microcode-file
+.Nm
+.Fl u
+.Ar microcode-file
+.Nm
+.Fl v
+.Sh DESCRIPTION
+The
+.Nm
+utility can be used to report the running microcode revision on the processors,
+update microcode, extract microcode to the target system to be used during the
+boot process, or to view details of the microcode patches contained within
+.Ar microcode-file ,
+where
+.Ar microcode-file
+is an update obtained from a processor vendor.
+.Pp
+In general, processor microcode updates are provided as part of the operating
+system and automatically applied during system boot, and there is no need for a
+system administrator to use
+.Nm
+directly.
+The operating system bundled files are not suitable for use with
+.Nm .
+.Sh OPTIONS
+.Bl -tag -width Ds
+.It Fl i Ar microcode-file
+Install microcode files on target system to be used during the next boot cycle.
+The text file name must have the vendor name prefix, such as
+.Dq intel
+or
+.Dq amd .
+.Pp
By default the microcode files will be installed at:
-.sp
-.in +2
-.nf
- /platform/i86pc/ucode/$VENDORSTR/
-.fi
-.in -2
-.sp
-
-where \fBVENDORSTR\fR is either "\fBGenuineIntel\fR" or "\fBAuthenticAMD\fR".
-.RE
-
-.sp
-.ne 2
-.na
-\fB\fB-R\fR \fIalternate path\fR\fR
-.ad
-.RS 26n
-Install \fImicrocode\fR path in the \fIalternate path\fR.
-.RE
-
-.SH EXAMPLES
-.LP
-\fBExample 1 \fRReporting the Microcode Revision
-.sp
-.LP
-The following example displays the microcode revision that is currently
-running:
-
-.sp
-.in +2
-.nf
+.Pp
+.D1 Pa /platform/i86pc/ucode/$VENDORSTR/
+.Pp
+where
+.Dv VENDORSTR
+is either
+.Dq GenuineIntel
+or
+.Dq AuthenticAMD .
+.It Fl l Ar microcode-file
+Display details of the microcode patches contained within
+.Ar microcode-file .
+.It Fl u Ar microcode-file
+Update microcode on all cross-call interrupt ready processors.
+.It Fl v
+Report the microcode revision for each CPU on the current system.
+.It Fl R Ar alternate-path
+Install
+.Ar microcode
+files into the provided
+.Ar alternate-path .
+.El
+.Sh EXIT STATUS
+The following exit values are returned:
+.Bl -tag -width Ds
+.It 0
+Successful completion.
+.It >0
+An error occurred.
+.El
+.Sh EXAMPLES
+.Sy Example 1 No Reporting the Microcode Revision
+.Pp
+The following example displays the microcode revision that is currently running:
+.Bd -literal -offset 4n
# ucodeadm -v
-.fi
-.in -2
-.sp
-
-.LP
-\fBExample 2 \fRUpdating the Processor Microcode
-.sp
-.LP
-The following example updates the processor microcode to \fBintel-ucode.txt\fR:
-
-.sp
-.in +2
-.nf
+CPU Microcode Version
+0 0x2f
+1 0x2f
+.Ed
+.Pp
+.Sy Example 2 No Updating the Processor Microcode
+.Pp
+The following example updates the processor microcode using
+.Pa intel-ucode.txt :
+.Bd -literal -offset 4n
# ucodeadm -u intel-ucode.txt
-.fi
-.in -2
-.sp
-
-.LP
-\fBExample 3 \fRInstalling the Microcode on the Target System
-.sp
-.LP
-The following example installs the microcode on the target system,
-\fB/export/ucode-path\fR:
-
-.sp
-.in +2
-.nf
+.Ed
+.Pp
+.Sy Example 3 No Installing the Microcode on the Target System
+.Pp
+The following example installs the microcode into
+.Pa /export/ucode-path
+on the target system:
+.Bd -literal -offset 4n
# ucodeadm -i -R /export/ucode-path intel-ucode.txt
-.fi
-.in -2
-.sp
-
-.sp
-.LP
+# ls /export/ucode-path
+00001632-00
+.Ed
+.Pp
If an alternate path is used when installing the microcode on the target
system, the installed microcode file is not used on the next boot cycle.
-
-.SH EXIT STATUS
-.sp
-.LP
-The following exit values are returned:
-.sp
-.ne 2
-.na
-\fB0\fR
-.ad
-.RS 6n
-Successful completion.
-.RE
-
-.sp
-.ne 2
-.na
-\fB>0\fR
-.ad
-.RS 6n
-An error occurred.
-.RE
-
-.SH ATTRIBUTES
-.sp
-.LP
-See \fBattributes\fR(7) for descriptions of the following attributes:
-.sp
-
-.sp
-.TS
-box;
-c | c
-l | l .
-ATTRIBUTE TYPE ATTRIBUTE VALUE
-_
-Interface Stability Stable
-.TE
-
-.SH SEE ALSO
-.sp
-.LP
-.BR attributes (7),
-.BR psradm (8),
-.BR psrinfo (8)
+.Pp
+.Sy Example 4 No Listing the contents of a microcode file
+.Bd -literal -offset 4n
+# ucodeadm -l amd_fam17h.bin
+Equivalence table:
+ 00800F82 Family=17 Model=08 Stepping=02 -> 8082
+ 00800F12 Family=17 Model=01 Stepping=02 -> 8012
+ 00830F10 Family=17 Model=31 Stepping=00 -> 8310
+Microcode patches:
+ 8082 -> Patch=0800820D Date=04162019 Bytes=3200
+ 8012 -> Patch=0800126E Date=11112021 Bytes=3200
+ 8310 -> Patch=08301055 Date=02152022 Bytes=3200
+
+# ucodeadm -l intel-ucode.txt
+Microcode patches:
+ 00090672-03 -> Family=06 Model=97 Stepping=02
+ Date=03032022 Bytes=212876
+Extended Signature Table:
+ 00090672-03 -> Family=06 Model=97 Stepping=02
+ 00090675-03 -> Family=06 Model=97 Stepping=05
+ 000B06F2-03 -> Family=06 Model=bf Stepping=02
+ 000B06F5-03 -> Family=06 Model=bf Stepping=05
+.Ed
+.Sh INTERFACE STABILITY
+The command line interface of
+.Nm
+is
+.Sy Committed .
+The output of
+.Nm
+is
+.Sy Not-An-Interface
+and may change at any time.
+.Sh SEE ALSO
+.Xr attributes 7 ,
+.Xr psradm 8 ,
+.Xr psrinfo 8
diff --git a/usr/src/pkg/manifests/system-microcode-amd.p5m b/usr/src/pkg/manifests/system-microcode-amd.p5m
index 5df04b9d48..a3d8fb95eb 100644
--- a/usr/src/pkg/manifests/system-microcode-amd.p5m
+++ b/usr/src/pkg/manifests/system-microcode-amd.p5m
@@ -25,7 +25,7 @@
# Copyright 2014 Gary Mills
# Copyright 2019 Peter Tribble.
# Copyright 2019 Joyent, Inc.
-# Copyright 2020 OmniOS Community Edition (OmniOSce) Association.
+# Copyright 2022 OmniOS Community Edition (OmniOSce) Association.
#
#
@@ -35,7 +35,7 @@
#
<include global_zone_only_component>
set name=pkg.fmri \
- value=pkg:/system/microcode/amd@201203,$(PKGVERS_BUILTON)-$(PKGVERS_BRANCH)
+ value=pkg:/system/microcode/amd@20220408,$(PKGVERS_BUILTON)-$(PKGVERS_BRANCH)
set name=pkg.summary value="Microcode for AMD CPUs"
set name=pkg.description value="Microcode for AMD CPUs"
set name=info.classification value=org.opensolaris.category.2008:System/Core
@@ -61,6 +61,8 @@ file path=platform/i86pc/ucode/AuthenticAMD/1081-00 group=sys mode=0444 \
preserve=true reboot-needed=true
file path=platform/i86pc/ucode/AuthenticAMD/10A0-00 group=sys mode=0444 \
preserve=true reboot-needed=true
+file path=platform/i86pc/ucode/AuthenticAMD/2031-00 group=sys mode=0444 \
+ preserve=true reboot-needed=true
file path=platform/i86pc/ucode/AuthenticAMD/3010-00 group=sys mode=0444 \
preserve=true reboot-needed=true
file path=platform/i86pc/ucode/AuthenticAMD/5010-00 group=sys mode=0444 \
@@ -69,8 +71,28 @@ file path=platform/i86pc/ucode/AuthenticAMD/5020-00 group=sys mode=0444 \
preserve=true reboot-needed=true
file path=platform/i86pc/ucode/AuthenticAMD/6012-00 group=sys mode=0444 \
preserve=true reboot-needed=true
+file path=platform/i86pc/ucode/AuthenticAMD/6020-00 group=sys mode=0444 \
+ preserve=true reboot-needed=true
+file path=platform/i86pc/ucode/AuthenticAMD/6101-00 group=sys mode=0444 \
+ preserve=true reboot-needed=true
+file path=platform/i86pc/ucode/AuthenticAMD/7001-00 group=sys mode=0444 \
+ preserve=true reboot-needed=true
+file path=platform/i86pc/ucode/AuthenticAMD/8012-00 group=sys mode=0444 \
+ preserve=true reboot-needed=true
+file path=platform/i86pc/ucode/AuthenticAMD/8082-00 group=sys mode=0444 \
+ preserve=true reboot-needed=true
+file path=platform/i86pc/ucode/AuthenticAMD/8310-00 group=sys mode=0444 \
+ preserve=true reboot-needed=true
+file path=platform/i86pc/ucode/AuthenticAMD/A010-00 group=sys mode=0444 \
+ preserve=true reboot-needed=true
+file path=platform/i86pc/ucode/AuthenticAMD/A011-00 group=sys mode=0444 \
+ preserve=true reboot-needed=true
+file path=platform/i86pc/ucode/AuthenticAMD/A012-00 group=sys mode=0444 \
+ preserve=true reboot-needed=true
file path=platform/i86pc/ucode/AuthenticAMD/container group=sys mode=0444 \
preserve=true reboot-needed=true
file path=platform/i86pc/ucode/AuthenticAMD/equivalence-table group=sys \
mode=0444 preserve=true reboot-needed=true
license lic_CDDL license=lic_CDDL
+license usr/src/data/ucode/amd/THIRDPARTYLICENSE \
+ license=usr/src/data/ucode/amd/THIRDPARTYLICENSE
diff --git a/usr/src/uts/common/sys/ucode.h b/usr/src/uts/common/sys/ucode.h
index c770f14419..7d2af4711a 100644
--- a/usr/src/uts/common/sys/ucode.h
+++ b/usr/src/uts/common/sys/ucode.h
@@ -293,6 +293,7 @@ struct ucode_ops {
int (*convert)(const char *, uint8_t *, size_t);
ucode_errno_t (*gen_files)(uint8_t *, int, char *);
ucode_errno_t (*validate)(uint8_t *, int);
+ void (*list)(uint8_t *, int);
};
#endif