# Using cpucontrol to update Intel microcode



## Hornpipe2 (Sep 21, 2010)

This took a little digging but I sorted it out.

There is a way on Intel processors to update the microcode on the CPU (until the next restart).  Supposedly this will provide performance and reliability benefits, though Intel doesn't publish a changelog so there is no way to be sure that it will actually do anything.  But I like updates for the sake of updates so here we go.

The  kernel module needed for this used to be called devcpu but is now called cpuctl as of around 7.3, with the corresponding driver app named cpucontrol.  It can do things like play with the MSRs too.

There is a companion port called sysutils/devcpu-data which includes the latest release from Intel and an rc script to do the update on boot.

On FreeBSD 8.0 or later:
[cmd=]cd /usr/ports/sysutils/devcpu-data[/cmd]
[cmd=]make install clean[/cmd]

Remember that this wears off on reboot, so if you want it to stick then you must enable the update at boot: edit rc.conf and add
[cmd=]microcode_update_enable="YES"[/cmd]

Great, you can give the update a shot:

```
# /usr/local/etc/rc.d/microcode_update start
Updating cpucodes...
/usr/local/share/cpucontrol/964-m01f0712.fw: updating cpu /dev/cpuctl0 from rev 0x7 to rev 0x12... done.
Done.
```

Cool, I jumped up 11 revisions : )


----------



## fronclynne (Sep 22, 2010)

You mean you jumped up 0xb revisions.  It's nice to know that that stuff actually works, though.


----------



## Hornpipe2 (Sep 22, 2010)

Well, it "works" in that it returned a successful error message.  I had to disable the microcode update however as it causing system instability for me after ~10 minutes.  I'm talking with the author and also have a problem report opened, but it could be a bug in the microcode itself in which case I get to take it up with Intel and see if they care about processor support for a P4 from 2001.


----------



## morbit (Aug 26, 2017)

I wonder if it only shows `Updating cpucodes... Done.` had it actually applied anything useful.

^^
OK, manually running `# cpucontrol -u -v /dev/cpuctl0` will return that.


----------

