<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<pre wrap="">Hello,
I'd like to solicit feedback on the d-bus interfaces that we're defining to represent FRU information, also known as FRU VPD (Vital Product Data).
A little background :
- The d-bus interfaces are being written as Inventory interfaces, as YAML files, under the openbmc/phosphor-dbus-interfaces repo [1].
- As far as sources/formats of VPD are concerned, we've looked at the IPMI FRU information spec [2], and the open-power VPD format [3].
- The goal has been to define properties in the d-bus interfaces to describe various pieces of FRU VPD, and to describe them in such a way that they're agnostic to the VPD format. It would be up to VPD related applications to parse specific VPD formats and then to populate the Inventory via the new d-bus interfaces.
- There are in general two classes of interfaces : those describing physical items such as processors, DIMMs, etc.; and those describing virtual items such as a replaceable item, a repairable item, an item having voltage control enabled, etc.
- We've realized that each and every property from the IPMI or the open-power spec need not be mapped as-is. D-Bus objects could implement an aggregate of interfaces to represent a specific item or FRU, and to have all relevant properties contained. For instance, we have interfaces such as an Asset Item, a generic Item, that could apply to multiple types of FRUs.
- There are currently two commits up in Gerrit for review. One commit is specific to open-power interfaces [4] (since these could describe properties specific to IBM systems, and may eventually be moved to a new repo), and another commit for generic properties [5].
I'm looking for :
- Code review comments on [4] and [5].
- Any properties that you think should be added or left out.
- Any other comments on the interface design.
For details on specific properties that have been mapped, I have a section below that you may want to have a look at.
[1] <a class="moz-txt-link-freetext" href="https://github.com/openbmc/phosphor-dbus-interfaces/tree/master/xyz/openbmc_project/Inventory">https://github.com/openbmc/phosphor-dbus-interfaces/tree/master/xyz/openbmc_project/Inventory</a>
[2] <a class="moz-txt-link-freetext" href="http://www.intel.com/content/dam/www/public/us/en/documents/product-briefs/platform-management-fru-document-rev-1-2-feb-2013.pdf">http://www.intel.com/content/dam/www/public/us/en/documents/product-briefs/platform-management-fru-document-rev-1-2-feb-2013.pdf</a>
[3] <a class="moz-txt-link-freetext" href="https://github.com/open-power/vpdtools/tree/master/examples/p9/sysplanar32_ddr4">https://github.com/open-power/vpdtools/tree/master/examples/p9/sysplanar32_ddr4</a>
[4] <a class="moz-txt-link-freetext" href="https://gerrit.openbmc-project.xyz/#/c/1095/">https://gerrit.openbmc-project.xyz/#/c/1095/</a>
[5] <a class="moz-txt-link-freetext" href="https://gerrit.openbmc-project.xyz/#/c/1094/">https://gerrit.openbmc-project.xyz/#/c/1094/</a>
1) Properties mapped from the IPMI FRU information spec :
- The IPMI FRU information spec classifies FRU information into three broad areas : Chassis Info Area, Board Info Area and Product Info Area.
</pre>
<table border="1" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<td align="center" valign="top">
<pre wrap="">IPMI property
</pre>
</td>
<td align="center" valign="top">
<pre wrap="">D-Bus property
</pre>
</td>
</tr>
<tr>
<td align="center" valign="top">
<pre>Chassis Type</pre>
</td>
<td align="center" valign="top">
<pre>Item.interface : PrettyName</pre>
</td>
</tr>
<tr>
<td align="center" valign="top">
<pre>Chassis Part Number</pre>
</td>
<td align="center" valign="top">
<pre>Asset.interface : PartNumber</pre>
</td>
</tr>
<tr>
<td align="center" valign="top">
<pre>Chassis Serial Number</pre>
</td>
<td align="center" valign="top">
<pre>Asset.interface : SerialNumber</pre>
</td>
</tr>
<tr>
<td align="center" valign="top">
<pre>Board Manufacturing Date/Time</pre>
</td>
<td align="center" valign="top">
<pre>Asset.interface : BuildDate</pre>
</td>
</tr>
<tr>
<td align="center" valign="top">
<pre>Board Manufacturer</pre>
</td>
<td align="center" valign="top">
<pre>Asset.interface : Manufacturer</pre>
</td>
</tr>
<tr>
<td align="center" valign="top">
<pre>Board Product Name</pre>
</td>
<td align="center" valign="top">
<pre>Item.interface : PrettyName</pre>
</td>
</tr>
<tr>
<td align="center" valign="top">
<pre>Board Serial Number</pre>
</td>
<td align="center" valign="top">
<pre>Asset.interface : SerialNumber</pre>
</td>
</tr>
<tr>
<td align="center" valign="top">
<pre>Board Part Number</pre>
</td>
<td align="center" valign="top">
<pre>Asset.interface : PartNumber</pre>
</td>
</tr>
<tr>
<td align="center" valign="top">
<pre>Board FRU File ID</pre>
</td>
<td align="center" valign="top">
<pre>Asset.interface : FileId</pre>
</td>
</tr>
<tr>
<td align="center" valign="top">
<pre>Product Manufacturer</pre>
</td>
<td align="center" valign="top">
<pre>Asset.interface : Manufacturer</pre>
</td>
</tr>
<tr>
<td align="center" valign="top">
<pre>Product Name</pre>
</td>
<td align="center" valign="top">
<pre>Item.interface : PrettyName</pre>
</td>
</tr>
<tr>
<td align="center" valign="top">
<pre>Product Part Number</pre>
</td>
<td align="center" valign="top">
<pre>Asset.interface : PartNumber</pre>
</td>
</tr>
<tr>
<td align="center" valign="top">
<pre>Product Serial Number</pre>
</td>
<td align="center" valign="top">
<pre>Asset.interface : SerialNumber</pre>
</td>
</tr>
<tr>
<td align="center" valign="top">
<pre>Product Version</pre>
</td>
<td align="center" valign="top">
<pre>Revision.interface : Version</pre>
</td>
</tr>
<tr>
<td align="center" valign="top">
<pre>Product Asset Tag</pre>
</td>
<td align="center" valign="top">
<pre>Not mapped yet</pre>
</td>
</tr>
</tbody>
</table>
<pre wrap="">
2) The open-power VPD format uses a record/keyword mechanism to describe FRU VPD. A record is a group of related keywords. A keyword is a specific property. There are too many keywords to individually list here (please see [3]), hence I've shown how we've mapped records.
</pre>
<table border="1" cellpadding="2" cellspacing="2" width="100%">
<tbody>
<tr>
<td align="center" valign="top">
<pre>open-power property
</pre>
</td>
<td align="center" valign="top">
<pre>D-Bus property
</pre>
</td>
</tr>
<tr>
<td align="center" valign="top">
<pre>VINI record (applies to all FRUs, general FRU information such as serial number, part number)
</pre>
</td>
<td align="center" valign="top">
<pre>See Asset.interface, Item.interface
</pre>
</td>
</tr>
<tr>
<td align="center" valign="top">
<pre>OPFR record (applies to all FRUs, more general FRU information such as vendor name, build date)
</pre>
</td>
<td align="center" valign="top">
<pre>See Asset.interface, Item.interface
</pre>
</td>
</tr>
<tr>
<td align="center" valign="top">
<pre>MEMD record (direct-attached memory specific keywords)
</pre>
</td>
<td align="center" valign="top">
<pre>See Dimm.DirectAttached.interface
</pre>
</td>
</tr>
<tr>
<td align="center" valign="top">
<pre>Processor specific keywords coming from various records
</pre>
</td>
<td align="center" valign="top">
<pre>See Cpu.interface
</pre>
</td>
</tr>
<tr>
<td align="center" valign="top">
<pre>VNDR record (applies to multiple FRUs, custom information that can be added by the FRU vendor)
</pre>
</td>
<td align="center" valign="top">
<pre>See VendorInformation.interface
</pre>
</td>
</tr>
<tr>
<td align="center" valign="top">
<pre>MER0, VER0 records (applies to multiple FRUs, FRU repair information)
</pre>
</td>
<td align="center" valign="top">
<pre>See RepairData.interface
</pre>
</td>
</tr>
<tr>
<td align="center" valign="top">
<pre>VRTN record (applied to all FRUs, information to enable FRU replacement)
</pre>
</td>
<td align="center" valign="top">
<pre>See Replaceable.interface
</pre>
</td>
</tr>
<tr>
<td align="center" valign="top">
<pre>OSYS record (information specific to a system as a whole)
</pre>
</td>
<td align="center" valign="top">
<pre>See Motherboard.interface
</pre>
</td>
</tr>
</tbody>
</table>
<pre wrap="">
Thanks,
Deepak
</pre>
</body>
</html>