summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRatan Gupta <ratagupt@in.ibm.com>2017-01-17 00:32:32 +0530
committerDeepak Kodihalli <dkodihal@in.ibm.com>2017-01-26 03:28:28 -0600
commita149ba100e90416ba41e9d9205c6f23d27c4249a (patch)
tree31ee4fdff005ba71c9005fbb50933d3430d8614f
parentfa70dc9dcf463c6f29dd8fc5bc85dc4280e38593 (diff)
downloadphosphor-mrw-tools-a149ba100e90416ba41e9d9205c6f23d27c4249a.tar.gz
phosphor-mrw-tools-a149ba100e90416ba41e9d9205c6f23d27c4249a.zip
gen_ipmi_fru.pl: construct FRU metadata
For IPMI FRUs, generate a file to depict which dbus properties are implemented for a FRU, and what IPMI FRU properties those dbus properties map to. This commit defines a YAML file which helps figure out the supported dbus inteface/properties for a FRU, and what the corresponding IPMI FRU properties are. Change-Id: I26de1aa26e3a74fd8cc95bb0d479d9b036eb5683 Signed-off-by: Ratan Gupta <ratagupt@in.ibm.com>
-rw-r--r--fru-types.yaml85
-rwxr-xr-xgen_ipmi_fru.pl69
-rw-r--r--inventory-gen.yaml450
3 files changed, 594 insertions, 10 deletions
diff --git a/fru-types.yaml b/fru-types.yaml
new file mode 100644
index 0000000..bba9fe6
--- /dev/null
+++ b/fru-types.yaml
@@ -0,0 +1,85 @@
+PROC:
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ BuildDate:
+ IPMIFruSection: Board
+ IPMIFruProperty: "Mfg Date"
+ Manufacturer:
+ IPMIFruSection: Board
+ IPMIFruProperty: "Manufacturer"
+ PartNumber:
+ IPMIFruSection: Board
+ IPMIFruProperty: "Part Number"
+ SerialNumber:
+ IPMIFruSection: Board
+ IPMIFruProperty: "Serial Number"
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFruSection: Board
+ IPMIFruProperty: "Product Name"
+
+CORE:
+
+SYS:
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ BuildDate:
+ IPMIFruSection: Product
+ IPMIFruProperty: "Mfg Date"
+ Manufacturer:
+ IPMIFruSection: Product
+ IPMIFruProperty: "Manufacturer"
+ PartNumber:
+ IPMIFruSection: Product
+ IPMIFruProperty: "Part Number"
+ SerialNumber:
+ IPMIFruSection: Product
+ IPMIFruProperty: "Serial Number"
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFruSection: Product
+ IPMIFruProperty: "Product Name"
+ xyz.openbmc_project.Inventory.Revision:
+ Version:
+ IPMIFruSection: Product
+ IPMIFruProperty: "Version"
+
+DIMM:
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ BuildDate:
+ IPMIFruSection: Product
+ IPMIFruProperty: "Mfg Date"
+ Manufacturer:
+ IPMIFruSection: Product
+ IPMIFruProperty: "Manufacturer"
+ PartNumber:
+ IPMIFruSection: Product
+ IPMIFruProperty: "Part Number"
+ SerialNumber:
+ IPMIFruSection: Product
+ IPMIFruProperty: "Serial Number"
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFruSection: Product
+ IPMIFruProperty: "Product Name"
+ xyz.openbmc_project.Inventory.Revision:
+ Version:
+ IPMIFruSection: Product
+ IPMIFruProperty: "Version"
+
+MEMBUFF:
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ BuildDate:
+ IPMIFruSection: Board
+ IPMIFruProperty: "Mfg Date"
+ Manufacturer:
+ IPMIFruSection: Board
+ IPMIFruProperty: "Manufacturer"
+ PartNumber:
+ IPMIFruSection: Board
+ IPMIFruProperty: "Part Number"
+ SerialNumber:
+ IPMIFruSection: Board
+ IPMIFruProperty: "Serial Number"
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFruSection: Board
+ IPMIFruProperty: "Product Name"
diff --git a/gen_ipmi_fru.pl b/gen_ipmi_fru.pl
index 34b19ee..760082f 100755
--- a/gen_ipmi_fru.pl
+++ b/gen_ipmi_fru.pl
@@ -10,15 +10,19 @@ use YAML::XS 'LoadFile'; # For loading and reading of YAML file
# Globals
my $serverwizFile = "";
my $debug = 0;
+my $outputFile = "";
+my $metaDataFile = "";
# Command line argument parsing
GetOptions(
"i=s" => \$serverwizFile, # string
+"m=s" => \$metaDataFile, # string
+"o=s" => \$outputFile, # string
"d" => \$debug,
)
or printUsage();
-if (($serverwizFile eq ""))
+if (($serverwizFile eq "") or ($outputFile eq "") or ($metaDataFile eq ""))
{
printUsage();
}
@@ -26,37 +30,82 @@ if (($serverwizFile eq ""))
my $targetObj = Targets->new;
$targetObj->loadXML($serverwizFile);
-#open the mrw xml Fetch the FRU id,type,object path from the mrw.
+#open the mrw xml and the metaData file for the fru.
+#Fetch the FRU id,type,object path from the mrw.
+#Get the metadata for that fru from the metadata file.
+#Merge the data into the outputfile
+
+open(my $fh, '>', $outputFile) or die "Could not open file '$outputFile' $!";
+my $fruTypeConfig = LoadFile($metaDataFile);
+
+my @interestedTypes = keys %{$fruTypeConfig};
+my %types;
+@types{@interestedTypes} = ();
my @inventory = Inventory::getInventory($targetObj);
for my $item (@inventory) {
my $isFru = 0, my $fruID = 0, my $fruType = "";
- my $isChildFru = 0;
-
- #Fetch the fruid.
+ #Fetch the FRU ID.
if (!$targetObj->isBadAttribute($item->{TARGET}, "FRU_ID")) {
$fruID = $targetObj->getAttribute($item->{TARGET}, "FRU_ID");
$isFru = 1;
}
-
- #Fech the fru type.
+ # Fetch the FRU Type.
if (!$targetObj->isBadAttribute($item->{TARGET}, "TYPE")) {
$fruType = $targetObj->getAttribute($item->{TARGET}, "TYPE");
}
- #skip those entries whose type is NA and is not fru.
- next if ( $fruType eq 'NA' or not($isFru) or $fruType eq 'BMC');
+ #Skip if we're not interested
+ next if (not $isFru or not exists $types{$fruType});
printDebug ("FRUID => $fruID, FRUType => $fruType, ObjectPath => $item->{OBMC_NAME}");
+ print $fh $fruID.":";
+ print $fh "\n";
+
+ writeToFile($fruType,$item->{OBMC_NAME},$fruTypeConfig,$fh);
+
}
+close $fh;
+
#------------------------------------END OF MAIN-----------------------
+#Get the metdata for the incoming frutype from the loaded config file.
+#Write the FRU data into the output file
+
+sub writeToFile
+{
+ my $fruType = $_[0];#fru type
+ my $instancePath = $_[1];#instance Path
+ my $fruTypeConfig = $_[2];#loaded config file (frutypes)
+ my $fh = $_[3];#file Handle
+ #walk over all the fru types and match for the incoming type
+ print $fh " ".$instancePath.":";
+ print $fh "\n";
+ my $interfaces = $fruTypeConfig->{$fruType};
+ #Walk over all the interfaces as it needs to be written
+ while ( my ($interface,$properties) = each %{$interfaces}) {
+ print $fh " ".$interface.":";
+ print $fh "\n";
+ #walk over all the properties as it needs to be written
+ while ( my ($dbusProperty,$metadata) = each %{$properties}) {
+ #will write property named "Property" first then
+ #other properties.
+ print $fh " ".$dbusProperty.":";
+ print $fh "\n";
+ for my $key (sort keys %{$metadata}) {
+ print $fh " $key: "."$metadata->{$key}";
+ print $fh "\n";
+ }
+ }
+ }
+}
+
# Usage
sub printUsage
{
print "
- $0 -i [MRW filename] [OPTIONS]
+ $0 -i [MRW filename] -m [MetaData filename] -o [Output filename] [OPTIONS]
Options:
-d = debug mode
\n";
diff --git a/inventory-gen.yaml b/inventory-gen.yaml
new file mode 100644
index 0000000..c1ddb40
--- /dev/null
+++ b/inventory-gen.yaml
@@ -0,0 +1,450 @@
+0:
+ /system:
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ Manufacturer:
+ IPMIFRUProperty: Manufacturer
+ IPMIFruSection: Product
+ BuildDate:
+ IPMIFRUProperty: Mfg Date
+ IPMIFruSection: Product
+ SerialNumber:
+ IPMIFRUProperty: Serial Number
+ IPMIFruSection: Product
+ PartNumber:
+ IPMIFRUProperty: Part Number
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Revision:
+ Version:
+ IPMIFRUProperty: Version
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Item:
+ Present:
+ PrettyName:
+ IPMIFRUProperty: Product Name
+ IPMIFruSection: Product
+0:
+ /system/chassis:
+0:
+ /system/chassis/motherboard/dimm0:
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ PartNumber:
+ IPMIFRUProperty: Part Number
+ IPMIFruSection: Product
+ SerialNumber:
+ IPMIFRUProperty: Serial Number
+ IPMIFruSection: Product
+ Manufacturer:
+ IPMIFRUProperty: Manufacturer
+ IPMIFruSection: Product
+ BuildDate:
+ IPMIFRUProperty: Mfg Date
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFRUProperty: Product Name
+ IPMIFruSection: Product
+ Present:
+ xyz.openbmc_project.Inventory.Revision:
+ Version:
+ IPMIFRUProperty: Version
+ IPMIFruSection: Product
+0:
+ /system/chassis/motherboard/dimm1:
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ PartNumber:
+ IPMIFRUProperty: Part Number
+ IPMIFruSection: Product
+ SerialNumber:
+ IPMIFRUProperty: Serial Number
+ IPMIFruSection: Product
+ Manufacturer:
+ IPMIFRUProperty: Manufacturer
+ IPMIFruSection: Product
+ BuildDate:
+ IPMIFRUProperty: Mfg Date
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFRUProperty: Product Name
+ IPMIFruSection: Product
+ Present:
+ xyz.openbmc_project.Inventory.Revision:
+ Version:
+ IPMIFRUProperty: Version
+ IPMIFruSection: Product
+0:
+ /system/chassis/motherboard/dimm10:
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ PartNumber:
+ IPMIFRUProperty: Part Number
+ IPMIFruSection: Product
+ SerialNumber:
+ IPMIFRUProperty: Serial Number
+ IPMIFruSection: Product
+ Manufacturer:
+ IPMIFRUProperty: Manufacturer
+ IPMIFruSection: Product
+ BuildDate:
+ IPMIFRUProperty: Mfg Date
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFRUProperty: Product Name
+ IPMIFruSection: Product
+ Present:
+ xyz.openbmc_project.Inventory.Revision:
+ Version:
+ IPMIFRUProperty: Version
+ IPMIFruSection: Product
+0:
+ /system/chassis/motherboard/dimm11:
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ PartNumber:
+ IPMIFRUProperty: Part Number
+ IPMIFruSection: Product
+ SerialNumber:
+ IPMIFRUProperty: Serial Number
+ IPMIFruSection: Product
+ Manufacturer:
+ IPMIFRUProperty: Manufacturer
+ IPMIFruSection: Product
+ BuildDate:
+ IPMIFRUProperty: Mfg Date
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFRUProperty: Product Name
+ IPMIFruSection: Product
+ Present:
+ xyz.openbmc_project.Inventory.Revision:
+ Version:
+ IPMIFRUProperty: Version
+ IPMIFruSection: Product
+0:
+ /system/chassis/motherboard/dimm12:
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ PartNumber:
+ IPMIFRUProperty: Part Number
+ IPMIFruSection: Product
+ SerialNumber:
+ IPMIFRUProperty: Serial Number
+ IPMIFruSection: Product
+ Manufacturer:
+ IPMIFRUProperty: Manufacturer
+ IPMIFruSection: Product
+ BuildDate:
+ IPMIFRUProperty: Mfg Date
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFRUProperty: Product Name
+ IPMIFruSection: Product
+ Present:
+ xyz.openbmc_project.Inventory.Revision:
+ Version:
+ IPMIFRUProperty: Version
+ IPMIFruSection: Product
+0:
+ /system/chassis/motherboard/dimm13:
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ PartNumber:
+ IPMIFRUProperty: Part Number
+ IPMIFruSection: Product
+ SerialNumber:
+ IPMIFRUProperty: Serial Number
+ IPMIFruSection: Product
+ Manufacturer:
+ IPMIFRUProperty: Manufacturer
+ IPMIFruSection: Product
+ BuildDate:
+ IPMIFRUProperty: Mfg Date
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFRUProperty: Product Name
+ IPMIFruSection: Product
+ Present:
+ xyz.openbmc_project.Inventory.Revision:
+ Version:
+ IPMIFRUProperty: Version
+ IPMIFruSection: Product
+0:
+ /system/chassis/motherboard/dimm14:
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ PartNumber:
+ IPMIFRUProperty: Part Number
+ IPMIFruSection: Product
+ SerialNumber:
+ IPMIFRUProperty: Serial Number
+ IPMIFruSection: Product
+ Manufacturer:
+ IPMIFRUProperty: Manufacturer
+ IPMIFruSection: Product
+ BuildDate:
+ IPMIFRUProperty: Mfg Date
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFRUProperty: Product Name
+ IPMIFruSection: Product
+ Present:
+ xyz.openbmc_project.Inventory.Revision:
+ Version:
+ IPMIFRUProperty: Version
+ IPMIFruSection: Product
+0:
+ /system/chassis/motherboard/dimm15:
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ PartNumber:
+ IPMIFRUProperty: Part Number
+ IPMIFruSection: Product
+ SerialNumber:
+ IPMIFRUProperty: Serial Number
+ IPMIFruSection: Product
+ Manufacturer:
+ IPMIFRUProperty: Manufacturer
+ IPMIFruSection: Product
+ BuildDate:
+ IPMIFRUProperty: Mfg Date
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFRUProperty: Product Name
+ IPMIFruSection: Product
+ Present:
+ xyz.openbmc_project.Inventory.Revision:
+ Version:
+ IPMIFRUProperty: Version
+ IPMIFruSection: Product
+0:
+ /system/chassis/motherboard/dimm2:
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ PartNumber:
+ IPMIFRUProperty: Part Number
+ IPMIFruSection: Product
+ SerialNumber:
+ IPMIFRUProperty: Serial Number
+ IPMIFruSection: Product
+ Manufacturer:
+ IPMIFRUProperty: Manufacturer
+ IPMIFruSection: Product
+ BuildDate:
+ IPMIFRUProperty: Mfg Date
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFRUProperty: Product Name
+ IPMIFruSection: Product
+ Present:
+ xyz.openbmc_project.Inventory.Revision:
+ Version:
+ IPMIFRUProperty: Version
+ IPMIFruSection: Product
+0:
+ /system/chassis/motherboard/dimm3:
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ PartNumber:
+ IPMIFRUProperty: Part Number
+ IPMIFruSection: Product
+ SerialNumber:
+ IPMIFRUProperty: Serial Number
+ IPMIFruSection: Product
+ Manufacturer:
+ IPMIFRUProperty: Manufacturer
+ IPMIFruSection: Product
+ BuildDate:
+ IPMIFRUProperty: Mfg Date
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFRUProperty: Product Name
+ IPMIFruSection: Product
+ Present:
+ xyz.openbmc_project.Inventory.Revision:
+ Version:
+ IPMIFRUProperty: Version
+ IPMIFruSection: Product
+0:
+ /system/chassis/motherboard/dimm4:
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ PartNumber:
+ IPMIFRUProperty: Part Number
+ IPMIFruSection: Product
+ SerialNumber:
+ IPMIFRUProperty: Serial Number
+ IPMIFruSection: Product
+ Manufacturer:
+ IPMIFRUProperty: Manufacturer
+ IPMIFruSection: Product
+ BuildDate:
+ IPMIFRUProperty: Mfg Date
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFRUProperty: Product Name
+ IPMIFruSection: Product
+ Present:
+ xyz.openbmc_project.Inventory.Revision:
+ Version:
+ IPMIFRUProperty: Version
+ IPMIFruSection: Product
+0:
+ /system/chassis/motherboard/dimm5:
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ PartNumber:
+ IPMIFRUProperty: Part Number
+ IPMIFruSection: Product
+ SerialNumber:
+ IPMIFRUProperty: Serial Number
+ IPMIFruSection: Product
+ Manufacturer:
+ IPMIFRUProperty: Manufacturer
+ IPMIFruSection: Product
+ BuildDate:
+ IPMIFRUProperty: Mfg Date
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFRUProperty: Product Name
+ IPMIFruSection: Product
+ Present:
+ xyz.openbmc_project.Inventory.Revision:
+ Version:
+ IPMIFRUProperty: Version
+ IPMIFruSection: Product
+0:
+ /system/chassis/motherboard/dimm6:
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ PartNumber:
+ IPMIFRUProperty: Part Number
+ IPMIFruSection: Product
+ SerialNumber:
+ IPMIFRUProperty: Serial Number
+ IPMIFruSection: Product
+ Manufacturer:
+ IPMIFRUProperty: Manufacturer
+ IPMIFruSection: Product
+ BuildDate:
+ IPMIFRUProperty: Mfg Date
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFRUProperty: Product Name
+ IPMIFruSection: Product
+ Present:
+ xyz.openbmc_project.Inventory.Revision:
+ Version:
+ IPMIFRUProperty: Version
+ IPMIFruSection: Product
+0:
+ /system/chassis/motherboard/dimm7:
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ PartNumber:
+ IPMIFRUProperty: Part Number
+ IPMIFruSection: Product
+ SerialNumber:
+ IPMIFRUProperty: Serial Number
+ IPMIFruSection: Product
+ Manufacturer:
+ IPMIFRUProperty: Manufacturer
+ IPMIFruSection: Product
+ BuildDate:
+ IPMIFRUProperty: Mfg Date
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFRUProperty: Product Name
+ IPMIFruSection: Product
+ Present:
+ xyz.openbmc_project.Inventory.Revision:
+ Version:
+ IPMIFRUProperty: Version
+ IPMIFruSection: Product
+0:
+ /system/chassis/motherboard/dimm8:
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ PartNumber:
+ IPMIFRUProperty: Part Number
+ IPMIFruSection: Product
+ SerialNumber:
+ IPMIFRUProperty: Serial Number
+ IPMIFruSection: Product
+ Manufacturer:
+ IPMIFRUProperty: Manufacturer
+ IPMIFruSection: Product
+ BuildDate:
+ IPMIFRUProperty: Mfg Date
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFRUProperty: Product Name
+ IPMIFruSection: Product
+ Present:
+ xyz.openbmc_project.Inventory.Revision:
+ Version:
+ IPMIFRUProperty: Version
+ IPMIFruSection: Product
+0:
+ /system/chassis/motherboard/dimm9:
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ PartNumber:
+ IPMIFRUProperty: Part Number
+ IPMIFruSection: Product
+ SerialNumber:
+ IPMIFRUProperty: Serial Number
+ IPMIFruSection: Product
+ Manufacturer:
+ IPMIFRUProperty: Manufacturer
+ IPMIFruSection: Product
+ BuildDate:
+ IPMIFRUProperty: Mfg Date
+ IPMIFruSection: Product
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFRUProperty: Product Name
+ IPMIFruSection: Product
+ Present:
+ xyz.openbmc_project.Inventory.Revision:
+ Version:
+ IPMIFRUProperty: Version
+ IPMIFruSection: Product
+0:
+ /system/chassis/motherboard/cpu0:
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFRUProperty: Product Name
+ IPMIFruSection: Board
+ Present:
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ SerialNumber:
+ IPMIFRUProperty: Serial Number
+ IPMIFruSection: Board
+ PartNumber:
+ IPMIFRUProperty: Part Number
+ IPMIFruSection: Board
+ BuildDate:
+ IPMIFRUProperty: Mfg Date
+ IPMIFruSection: Board
+ Manufacturer:
+ IPMIFRUProperty: Manufacturer
+ IPMIFruSection: Board
+0:
+ /system/chassis/motherboard/cpu1:
+ xyz.openbmc_project.Inventory.Item:
+ PrettyName:
+ IPMIFRUProperty: Product Name
+ IPMIFruSection: Board
+ Present:
+ xyz.openbmc_project.Inventory.Decorator.Asset:
+ SerialNumber:
+ IPMIFRUProperty: Serial Number
+ IPMIFruSection: Board
+ PartNumber:
+ IPMIFRUProperty: Part Number
+ IPMIFruSection: Board
+ BuildDate:
+ IPMIFRUProperty: Mfg Date
+ IPMIFruSection: Board
+ Manufacturer:
+ IPMIFRUProperty: Manufacturer
+ IPMIFruSection: Board
OpenPOWER on IntegriCloud