<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>