HPM firmware update

Vernon Mauery vernon.mauery at linux.intel.com
Fri Nov 17 04:14:12 AEDT 2017


On 16-Nov-2017 11:14 AM, Jeremy Kerr wrote:
>Hi James,
>
>> I’ve started looking at using the PICMG HPM specification that was
>> recommended as the preferred API for performing firmware updates. This
>> is not an open specification, and goes against the principles of the
>> openbmc project.
>
>Yes, that's very true. My previous experience is on the client-side of
>HPM, which is implemented in ipmitool already.
>
>> The HPM specification must also be purchased from the PICMG standards
>> organization, and contains patent liabilities. I think using HPM is a
>> non-starter.
>
>We could always request DMTF to make it more widely available. However,
>unless that does change, I'd agree with you that we'd want to avoid
>HPM.1.

We don't have to go with HPM though. Our prior version of BMC used a 
fairly straight-forward model that is not too different than the HPM 
model, though it was developed in-house. It is pretty generic and could 
be used to transfer any payload over a variety of transports.

If we can define our own 'standard' for OpenBMC firmware update methods, 
then we can implement that in ipmitool (like the dell oem commands or 
something).

An overview goes something like this:

1) enter FW transfer mode
2) optionally send parameters (no-rollback, deferred reboot, debug, etc.)
3) <make a choice for either IPMI streaming or other transport>
	a) for streaming
		i) write data blocks as IPMI FW command
	b) for usb mass storage
		i) send plug-in IPMI command
		ii) host-side mount usb mass storage device, writes fw image
		iii) send plug-out IPMI command
		iv) send 'set uri command' (usb://...)
	c) for network transport
	    i) send 'set uri command' (http(s)://..., tftp://..., ftp://...)
4) send transfer complete IPMI command
5) check status
	status moves from download -> verify -> program -> ready
	status can move to error from any state
6) once status moves to ready, firmware update is finished, ready to 
	reboot.
7) send exit fw transfer mode IPMI command. This causes the BMC to 
	reboot unless a deferred reboot has been selected.


This mostly describes what the IPMI control does, which is pretty 
generic. The trickiest bit is offering multiple mechanisms for transport 
because IPMI is not the most efficient method to transport (unless you 
use 64kB payloads during the streaming phase. Even then, the TCP 
protocols are faster because of round-trip timing (only need an ack 
rather than a full trip through the IPMI command lookup and execution 
process.) USB is pretty fast, but not available for every system.

--Vernon


More information about the openbmc mailing list