3 # $FreeBSD: head/sysutils/devcpu-data/files/microcode_update.in 458664 2018-01-10 17:32:14Z sbruno $
6 # PROVIDE: microcode_update
7 # REQUIRE: root mountcritlocal
12 # Add the following line to /etc/rc.conf to enable flow-capture:
13 # microcode_update_enable (bool): Set it to "YES" to update microcode on startup
14 # Set to "NO" by default.
15 # microcode_update_datadir (str): Directory, microcode updates stored in.
16 # Default is "%%DATADIR%%"
17 # microcode_update_cpus (str): A list of cpus to update on startup, or "ALL" for all.
18 # Example: microcode_update_cpus_cpus="0 CPU0"
19 # Set to "ALL" by default.
20 # microcode_update_flags (str): Flags for cpucontrol(8).
24 name="microcode_update"
25 rcvar=microcode_update_enable
27 start_precmd="microcode_update_prepare"
28 start_cmd="microcode_update_start"
29 requires_modules="cpuctl"
31 CMT="/usr/sbin/cpucontrol"
33 microcode_update_prepare()
35 if ! kldstat -q -m cpuctl; then
36 if ! kldload cpuctl > /dev/null 2>&1; then
37 warn "Can't load cpuctl module."
43 microcode_update_start()
45 echo "Updating CPU Microcode..."
46 if [ "${microcode_cpus}" = "ALL" ]; then
47 ncpu=`/sbin/sysctl -n hw.ncpu`
50 cpus=${microcode_cpus}
53 ${CMT} -u ${microcode_update_flags} \
54 -d "${microcode_update_datadir}" /dev/cpuctl${i} 2>&1 | \
55 logger -p daemon.notice -t microcode_update || \
56 (echo "Microcode Update Failed." && exit 1)
58 if [ "${microcode_cpus}" = "ALL" ]; then
60 ${CMT} -e /dev/cpuctl${i} >/dev/null 2>&1
62 echo "Re-evalutation of CPU flags Failed."
73 : ${microcode_update_enable="NO"}
74 : ${microcode_update_datadir="%%DATADIR%%"}
75 : ${microcode_cpus="ALL"}
76 : ${microcode_update_flags=""}