140 lines
5.8 KiB
ReStructuredText
140 lines
5.8 KiB
ReStructuredText
![]() |
ibm,firmware-versions node
|
||
|
==========================
|
||
|
|
||
|
The `ibm,firmware-versions` node contains information on the versions of
|
||
|
various firmware components as they were **during boot**. It **does not**
|
||
|
change if there are pending or runtime updates. It represents (to the best
|
||
|
of boot firmware's ability) what versions of firmware were during this boot.
|
||
|
|
||
|
================= ======== ============================================
|
||
|
Property Required Value
|
||
|
================= ======== ============================================
|
||
|
version POWER9 See below
|
||
|
skiboot N component version number
|
||
|
occ N component version number
|
||
|
buildroot N component version number
|
||
|
capp-ucode N component version number
|
||
|
petitboot N component version number
|
||
|
open-power N component version number
|
||
|
hostboot-binaries N component version number
|
||
|
MACHINE-xml N MACHINE (e.g. habanero) machine XML version
|
||
|
hostboot N component version number
|
||
|
linux N component version number
|
||
|
================= ======== ============================================
|
||
|
|
||
|
``version`` property
|
||
|
^^^^^^^^^^^^^^^^^^^^
|
||
|
|
||
|
This property **must** exist on POWER9 and above systems. It **may** exist
|
||
|
on POWER8 systems.
|
||
|
|
||
|
If this property exists, it **must** conform to this specification.
|
||
|
It's a single version number of the firmware image. In the event of a system
|
||
|
supporting multiple firmware sides, this represents the **default** boot side.
|
||
|
That is, the version that is applicable when determining if a machine
|
||
|
requires a firmware update.
|
||
|
|
||
|
Examples (for three different platforms):
|
||
|
|
||
|
- ``IBM-sandwich-20170217``
|
||
|
- ``open-power-habanero-v1.14-45-g78d89280c3f9-dirty``
|
||
|
- ``open-power-SUPERMICRO-P8DTU-V2.00.GA2-20161028``
|
||
|
|
||
|
To compare two versions (for the purpose of determining if the current
|
||
|
installed firmware is in need of updating to the one being compared against)
|
||
|
we need a defined set of rules on how to do this comparison.
|
||
|
|
||
|
Version numbers are **not** intended to be compared across platforms.
|
||
|
|
||
|
The version string may include a description at the start of it. This
|
||
|
description can contain any set of characters but **must not** contain
|
||
|
a '-' followed by a digit. It also **must not** contain '-v' or '-V' followed
|
||
|
by a digit.
|
||
|
|
||
|
Each part of the version string is separated by a '-' character. Leading
|
||
|
sections are ignored, until one starts with a digit (0-9) or a 'v' or 'V',
|
||
|
followed by a digit. Where there is a leading 'v' or 'V', it is also stripped.
|
||
|
|
||
|
For the above three examples, we'd be left with:
|
||
|
|
||
|
- ``20170217``
|
||
|
- ``1.14-45-g78d89280c3f9-dirty``
|
||
|
- ``2.00.GA2-20161028``
|
||
|
|
||
|
Each section is now compared until a difference is found. All comparisons
|
||
|
are done *lexically*. The lexical comparison sorts in this order: tilde (~),
|
||
|
all letters, non-letters. The tilde is special and sorts before an end of part.
|
||
|
This allows the common usage of designating pre-release builds by a tailing
|
||
|
section beginning with a '~'.
|
||
|
|
||
|
For example: "1.0~20170217", "1.0~rc4" and "1.0~beta1" all sort
|
||
|
**before** "1.0"
|
||
|
|
||
|
Note that "1.0beta" sorts **after** "1.0"
|
||
|
|
||
|
The start of the version string contains an optional *epoch*. If not present,
|
||
|
it is zero. This allows a reset of versioning schemes. All versions with an
|
||
|
epoch of N+1 are greater than those with epoch N, no matter what the version
|
||
|
strings would compare. For example "0:4.0" is **less** than "1:1.0". Increasing
|
||
|
the epoch should **not** be a regular occurance.
|
||
|
|
||
|
For the remainder of the version strings, each part (separated by '.' or '-')
|
||
|
is compared lexically. There are two exceptions: any part beginning with "-g"
|
||
|
or "-p" followed by a hexadecimal string is compared as a string, and if they
|
||
|
are different the versions are determined to be different. For example, the
|
||
|
sections "-g78d89280c3f9" and "-g123456789abc" differ and for all comparisons
|
||
|
(less than, greater than, equal) the result should be true.
|
||
|
|
||
|
For those who have been paying attention, this scheme should look very
|
||
|
familiar to those who are familiar with RPM and Debian package versioning.
|
||
|
|
||
|
The below table shows comparisons between versions and what the result should
|
||
|
be:
|
||
|
|
||
|
=========================== =========================== ====================
|
||
|
A B Result
|
||
|
=========================== =========================== ====================
|
||
|
1.14-45-g78d89280c3f9-dirty 1.14-45-g78d89280c3f9-dirty Equal
|
||
|
1.14-45-g78d89280c3f9-dirty 1.14-45-g78d89280c3f9 A > B
|
||
|
1.14-45-g78d89280c3f9-dirty 1.14-45-g123456789abc A < B, A > B, A != B
|
||
|
1.14-45-g78d89280c3f9-dirty 1.14-46 A < B
|
||
|
1.14-45-g78d89280c3f9-dirty 1.15 A < B
|
||
|
1.14-45-g78d89280c3f9-dirty 1:1.0 A < B
|
||
|
1.0 1.0~daily20170201 A > B
|
||
|
1.0.1 1.0~daily20170201 A > B
|
||
|
1.0 1.0.1 A < B
|
||
|
1.0 1.0beta A < B
|
||
|
=========================== =========================== ====================
|
||
|
|
||
|
Examples
|
||
|
^^^^^^^^
|
||
|
|
||
|
New style (required for POWER9 and above):
|
||
|
|
||
|
.. code-block:: dts
|
||
|
|
||
|
ibm,firmware-versions {
|
||
|
version = "open-power-habanero-v1.14-45-g78d89280c3f9-dirty";
|
||
|
skiboot = "5.4.0";
|
||
|
occ = "d7efe30";
|
||
|
linux = "4.4.32-openpower1";
|
||
|
};
|
||
|
|
||
|
Old-style:
|
||
|
|
||
|
.. code-block:: dts
|
||
|
|
||
|
ibm,firmware-versions {
|
||
|
occ = "d7efe30-opdirty";
|
||
|
skiboot = "5.4.0-opdirty";
|
||
|
buildroot = "211bd05";
|
||
|
capp-ucode = "1bb7503-opdirty";
|
||
|
petitboot = "v1.3.1-opdirty-d695626";
|
||
|
open-power = "habanero-f7b8f65-dirty";
|
||
|
phandle = <0x1000012e>;
|
||
|
hostboot-binaries = "56532f5-opdirty";
|
||
|
habanero-xml = "6a78496-opdirty-526ff79";
|
||
|
hostboot = "09cfacb-opdirty";
|
||
|
linux = "4.4.32-openpower1-opdirty-85cf528";
|
||
|
};
|