diff options
author | Michael Lim <youhour@us.ibm.com> | 2016-10-04 14:59:13 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-10-04 14:59:13 -0500 |
commit | 90b04d63fb4d236990e2834aeada410619bcee85 (patch) | |
tree | 3224beac82f34353ddf34a34bca731625c676cb4 | |
parent | 00aa62ffd7a0f354b46ba15a67933d0339466a07 (diff) | |
parent | 1ad5b8331b9a3c4b784d70b482d129d807421036 (diff) | |
download | vpdtools-90b04d63fb4d236990e2834aeada410619bcee85.tar.gz vpdtools-90b04d63fb4d236990e2834aeada410619bcee85.zip |
Merge pull request #1 from open-power/master
update
-rw-r--r-- | README | 22 | ||||
-rwxr-xr-x | createVpd.py | 205 | ||||
-rw-r--r-- | docs/xmlformat.md | 193 | ||||
-rw-r--r-- | examples/README | 26 | ||||
-rw-r--r-- | examples/comments/comments.tvpd | 32 | ||||
-rw-r--r-- | examples/mixeddata/mixeddata.tvpd | 35 | ||||
-rw-r--r-- | examples/p8/memcard1_ddr3/memcard1_ddr3.tvpd (renamed from examples/memcard1_ddr3/memcard1_ddr3.tvpd) | 0 | ||||
-rw-r--r-- | examples/p8/memcard1_ddr3/openPower_mer0_MCsample.xml (renamed from examples/memcard1_ddr3/openPower_mer0_MCsample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/memcard1_ddr3/openPower_opfr_sample.xml (renamed from examples/memcard1_ddr3/openPower_opfr_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/memcard1_ddr3/openPower_spdx_membuf1_sample.xml (renamed from examples/memcard1_ddr3/openPower_spdx_membuf1_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/memcard1_ddr3/openPower_veir_MCsample.xml (renamed from examples/memcard1_ddr3/openPower_veir_MCsample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/memcard1_ddr3/openPower_ver0_MCsample.xml (renamed from examples/memcard1_ddr3/openPower_ver0_MCsample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/memcard1_ddr3/openPower_vini_sample.xml (renamed from examples/memcard1_ddr3/openPower_vini_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/memcard1_ddr3/openPower_vmsc_sample.xml (renamed from examples/memcard1_ddr3/openPower_vmsc_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/memcard1_ddr3/openPower_vndr_sample.xml (renamed from examples/memcard1_ddr3/openPower_vndr_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/memcard1_ddr3/openPower_vrtn_sample.xml (renamed from examples/memcard1_ddr3/openPower_vrtn_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/memcard1_ddr4/memcard1_ddr4.tvpd (renamed from examples/memcard1_ddr4/memcard1_ddr4.tvpd) | 0 | ||||
-rw-r--r-- | examples/p8/memcard1_ddr4/openPower_mer0_MCsample.xml (renamed from examples/memcard1_ddr4/openPower_mer0_MCsample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/memcard1_ddr4/openPower_opfr_sample.xml (renamed from examples/memcard1_ddr4/openPower_opfr_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/memcard1_ddr4/openPower_spdx_membuf1_ddr4_sample.xml (renamed from examples/memcard1_ddr4/openPower_spdx_membuf1_ddr4_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/memcard1_ddr4/openPower_veir_MCsample.xml (renamed from examples/memcard1_ddr4/openPower_veir_MCsample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/memcard1_ddr4/openPower_ver0_MCsample.xml (renamed from examples/memcard1_ddr4/openPower_ver0_MCsample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/memcard1_ddr4/openPower_vini_sample.xml (renamed from examples/memcard1_ddr4/openPower_vini_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/memcard1_ddr4/openPower_vmsc_sample.xml (renamed from examples/memcard1_ddr4/openPower_vmsc_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/memcard1_ddr4/openPower_vndr_sample.xml (renamed from examples/memcard1_ddr4/openPower_vndr_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/memcard1_ddr4/openPower_vrtn_sample.xml (renamed from examples/memcard1_ddr4/openPower_vrtn_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/memcard4_ddr3/memcard4_ddr3.tvpd (renamed from examples/memcard4_ddr3/memcard4_ddr3.tvpd) | 0 | ||||
-rw-r--r-- | examples/p8/memcard4_ddr3/openPower_mer0_MCsample.xml (renamed from examples/memcard4_ddr3/openPower_mer0_MCsample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/memcard4_ddr3/openPower_opfr_sample.xml (renamed from examples/memcard4_ddr3/openPower_opfr_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/memcard4_ddr3/openPower_spdx_membuf4_sample.xml (renamed from examples/memcard4_ddr3/openPower_spdx_membuf4_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/memcard4_ddr3/openPower_veir_MCsample.xml (renamed from examples/memcard4_ddr3/openPower_veir_MCsample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/memcard4_ddr3/openPower_ver0_MCsample.xml (renamed from examples/memcard4_ddr3/openPower_ver0_MCsample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/memcard4_ddr3/openPower_vini_sample.xml (renamed from examples/memcard4_ddr3/openPower_vini_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/memcard4_ddr3/openPower_vmsc_sample.xml (renamed from examples/memcard4_ddr3/openPower_vmsc_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/memcard4_ddr3/openPower_vndr_sample.xml (renamed from examples/memcard4_ddr3/openPower_vndr_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/memcard4_ddr3/openPower_vrtn_sample.xml (renamed from examples/memcard4_ddr3/openPower_vrtn_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/memcard4_ddr4/memcard4_ddr4.tvpd (renamed from examples/memcard4_ddr4/memcard4_ddr4.tvpd) | 0 | ||||
-rw-r--r-- | examples/p8/memcard4_ddr4/openPower_mer0_MCsample.xml (renamed from examples/memcard4_ddr4/openPower_mer0_MCsample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/memcard4_ddr4/openPower_opfr_sample.xml (renamed from examples/memcard4_ddr4/openPower_opfr_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/memcard4_ddr4/openPower_spdx_membuf4_ddr4_sample.xml (renamed from examples/memcard4_ddr4/openPower_spdx_membuf4_ddr4_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/memcard4_ddr4/openPower_veir_MCsample.xml (renamed from examples/memcard4_ddr4/openPower_veir_MCsample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/memcard4_ddr4/openPower_ver0_MCsample.xml (renamed from examples/memcard4_ddr4/openPower_ver0_MCsample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/memcard4_ddr4/openPower_vini_sample.xml (renamed from examples/memcard4_ddr4/openPower_vini_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/memcard4_ddr4/openPower_vmsc_sample.xml (renamed from examples/memcard4_ddr4/openPower_vmsc_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/memcard4_ddr4/openPower_vndr_sample.xml (renamed from examples/memcard4_ddr4/openPower_vndr_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/memcard4_ddr4/openPower_vrtn_sample.xml (renamed from examples/memcard4_ddr4/openPower_vrtn_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/sysplanar/openPower_mer0_sample.xml (renamed from examples/sysplanar/openPower_mer0_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/sysplanar/openPower_opfr_sample.xml (renamed from examples/sysplanar/openPower_opfr_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/sysplanar/openPower_osys_sample.xml (renamed from examples/sysplanar/openPower_osys_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/sysplanar/openPower_veir_sample.xml (renamed from examples/sysplanar/openPower_veir_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/sysplanar/openPower_ver0_sample.xml (renamed from examples/sysplanar/openPower_ver0_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/sysplanar/openPower_vini_sample.xml (renamed from examples/sysplanar/openPower_vini_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/sysplanar/openPower_vmsc_sample.xml (renamed from examples/sysplanar/openPower_vmsc_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/sysplanar/openPower_vndr_sample.xml (renamed from examples/sysplanar/openPower_vndr_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/sysplanar/openPower_vrtn_sample.xml (renamed from examples/sysplanar/openPower_vrtn_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/sysplanar/sysplanar.tvpd (renamed from examples/sysplanar/sysplanar.tvpd) | 0 | ||||
-rw-r--r-- | examples/p8/sysplanar32_ddr3/openPower_mer0_sample.xml (renamed from examples/sysplanar32_ddr3/openPower_mer0_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/sysplanar32_ddr3/openPower_opfr_sample.xml (renamed from examples/sysplanar32_ddr3/openPower_opfr_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/sysplanar32_ddr3/openPower_osys_sample.xml (renamed from examples/sysplanar32_ddr3/openPower_osys_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/sysplanar32_ddr3/openPower_spdx_membuf32_sample.xml (renamed from examples/sysplanar32_ddr3/openPower_spdx_membuf32_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/sysplanar32_ddr3/openPower_veir_sample.xml (renamed from examples/sysplanar32_ddr3/openPower_veir_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/sysplanar32_ddr3/openPower_ver0_sample.xml (renamed from examples/sysplanar32_ddr3/openPower_ver0_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/sysplanar32_ddr3/openPower_vini_sample.xml (renamed from examples/sysplanar32_ddr3/openPower_vini_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/sysplanar32_ddr3/openPower_vmsc_sample.xml (renamed from examples/sysplanar32_ddr3/openPower_vmsc_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/sysplanar32_ddr3/openPower_vndr_sample.xml (renamed from examples/sysplanar32_ddr3/openPower_vndr_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/sysplanar32_ddr3/openPower_vrtn_sample.xml (renamed from examples/sysplanar32_ddr3/openPower_vrtn_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/sysplanar32_ddr3/sysplanar32_ddr3.tvpd (renamed from examples/sysplanar32_ddr3/sysplanar32_ddr3.tvpd) | 0 | ||||
-rw-r--r-- | examples/p8/sysplanar32_ddr4/openPower_mer0_sample.xml (renamed from examples/sysplanar32_ddr4/openPower_mer0_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/sysplanar32_ddr4/openPower_opfr_sample.xml (renamed from examples/sysplanar32_ddr4/openPower_opfr_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/sysplanar32_ddr4/openPower_osys_sample.xml (renamed from examples/sysplanar32_ddr4/openPower_osys_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/sysplanar32_ddr4/openPower_spdx_membuf32_ddr4_sample.xml (renamed from examples/sysplanar32_ddr4/openPower_spdx_membuf32_ddr4_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/sysplanar32_ddr4/openPower_veir_sample.xml (renamed from examples/sysplanar32_ddr4/openPower_veir_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/sysplanar32_ddr4/openPower_ver0_sample.xml (renamed from examples/sysplanar32_ddr4/openPower_ver0_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/sysplanar32_ddr4/openPower_vini_sample.xml (renamed from examples/sysplanar32_ddr4/openPower_vini_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/sysplanar32_ddr4/openPower_vmsc_sample.xml (renamed from examples/sysplanar32_ddr4/openPower_vmsc_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/sysplanar32_ddr4/openPower_vndr_sample.xml (renamed from examples/sysplanar32_ddr4/openPower_vndr_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/sysplanar32_ddr4/openPower_vrtn_sample.xml (renamed from examples/sysplanar32_ddr4/openPower_vrtn_sample.xml) | 0 | ||||
-rw-r--r-- | examples/p8/sysplanar32_ddr4/sysplanar32_ddr4.tvpd (renamed from examples/sysplanar32_ddr4/sysplanar32_ddr4.tvpd) | 0 | ||||
-rw-r--r-- | examples/p9/sysplanar32_ddr4/openPower_memd_sample.xml | 549 | ||||
-rw-r--r-- | examples/p9/sysplanar32_ddr4/openPower_mer0_sample.xml | 23 | ||||
-rw-r--r-- | examples/p9/sysplanar32_ddr4/openPower_opfr_sample.xml | 58 | ||||
-rw-r--r-- | examples/p9/sysplanar32_ddr4/openPower_osys_sample.xml | 51 | ||||
-rw-r--r-- | examples/p9/sysplanar32_ddr4/openPower_ver0_sample.xml | 22 | ||||
-rw-r--r-- | examples/p9/sysplanar32_ddr4/openPower_vini_sample.xml | 107 | ||||
-rw-r--r-- | examples/p9/sysplanar32_ddr4/openPower_vmsc_sample.xml | 23 | ||||
-rw-r--r-- | examples/p9/sysplanar32_ddr4/openPower_vndr_sample.xml | 30 | ||||
-rw-r--r-- | examples/p9/sysplanar32_ddr4/openPower_vrtn_sample.xml | 37 | ||||
-rw-r--r-- | examples/p9/sysplanar32_ddr4/sysplanar32_ddr4.tvpd | 46 |
88 files changed, 1389 insertions, 70 deletions
@@ -42,18 +42,18 @@ Also included are examples of complete memcard and sysplanar templates sysplanar creation example -------------------------- -$ ~/vpdtools/createVpd.py -m ~/vpdtools/examples/sysplanar/sysplanar.tvpd -i ~/vpdtools/examples/sysplanar -o /tmp/vpdout +$ ~/vpdtools/createVpd.py -m ~/vpdtools/examples/p8/sysplanar/sysplanar.tvpd -i ~/vpdtools/examples/p8/sysplanar -o /tmp/vpdout ==== Stage 1: Parsing tvpd XML - Parsing tvpd ~/vpdtools/examples/sysplanar/sysplanar.tvpd - Parsing tvpd ~/vpdtools/examples/sysplanar/openPower_vini_sample.xml - Parsing tvpd ~/vpdtools/examples/sysplanar/openPower_osys_sample.xml - Parsing tvpd ~/vpdtools/examples/sysplanar/openPower_opfr_sample.xml - Parsing tvpd ~/vpdtools/examples/sysplanar/openPower_vndr_sample.xml - Parsing tvpd ~/vpdtools/examples/sysplanar/openPower_veir_sample.xml - Parsing tvpd ~/vpdtools/examples/sysplanar/openPower_ver0_sample.xml - Parsing tvpd ~/vpdtools/examples/sysplanar/openPower_mer0_sample.xml - Parsing tvpd ~/vpdtools/examples/sysplanar/openPower_vmsc_sample.xml - Parsing tvpd ~/vpdtools/examples/sysplanar/openPower_vrtn_sample.xml + Parsing tvpd ~/vpdtools/examples/p8/sysplanar/sysplanar.tvpd + Parsing tvpd ~/vpdtools/examples/p8/sysplanar/openPower_vini_sample.xml + Parsing tvpd ~/vpdtools/examples/p8/sysplanar/openPower_osys_sample.xml + Parsing tvpd ~/vpdtools/examples/p8/sysplanar/openPower_opfr_sample.xml + Parsing tvpd ~/vpdtools/examples/p8/sysplanar/openPower_vndr_sample.xml + Parsing tvpd ~/vpdtools/examples/p8/sysplanar/openPower_veir_sample.xml + Parsing tvpd ~/vpdtools/examples/p8/sysplanar/openPower_ver0_sample.xml + Parsing tvpd ~/vpdtools/examples/p8/sysplanar/openPower_mer0_sample.xml + Parsing tvpd ~/vpdtools/examples/p8/sysplanar/openPower_vmsc_sample.xml + Parsing tvpd ~/vpdtools/examples/p8/sysplanar/openPower_vrtn_sample.xml ==== Stage 2: Verifying tvpd syntax Checking record VINI Checking record OSYS diff --git a/createVpd.py b/createVpd.py index ad7a564..ec81180 100755 --- a/createVpd.py +++ b/createVpd.py @@ -44,6 +44,20 @@ import os ############################################################ # Classes - Classes - Classes - Classes - Classes - Classes ############################################################ +# This parser extension is necessary to save comments and write them back out in the final file +# By default, element tree doesn't preserve comments +# http://stackoverflow.com/questions/4474754/how-to-keep-comments-while-parsing-xml-using-python-elementtree +class PCParser(ET.XMLTreeBuilder): + def __init__(self): + ET.XMLTreeBuilder.__init__(self) + # assumes ElementTree 1.2.X + self._parser.CommentHandler = self.handle_comment + + def handle_comment(self, data): + self._target.start(ET.Comment, {}) + self._target.data(data) + self._target.end(ET.Comment) + class RecordInfo: """Stores the info about each vpd record""" def __init__(self): @@ -100,7 +114,9 @@ def parseTvpd(tvpdFile, topLevel): # Read in the file # If there are tag mismatch errors or other general gross format problems, it will get caught here # Once we return from this function, then we'll check to make sure only supported tags were given, etc.. - tvpdRoot = ET.parse(tvpdFile).getroot() + # Invoke the extended PCParser, which will handle preserving comments in the output file + parser = PCParser() + tvpdRoot = ET.parse(tvpdFile, parser=parser).getroot() # Print the top level tags from the parsing if (clDebug): @@ -124,10 +140,14 @@ def parseTvpd(tvpdFile, topLevel): # Go thru the tags at this level for vpd in tvpdRoot: + # Comments aren't basestring tags + if not isinstance(vpd.tag, basestring): + continue + # See if this is a tag we even expect if vpd.tag not in vpdTags: out.error("Unsupported tag <%s> found while parsing the <vpd> level" % vpd.tag) - errorsFound+=1 + errorsFound += 1 # We continue here because we don't want to parse down this hierarcy path when we don't know what it is continue # It was a supported tag @@ -143,17 +163,22 @@ def parseTvpd(tvpdFile, topLevel): recordName = vpd.attrib.get("name") if (recordName == None): out.error("A <record> tag is missing the name attribute") - errorsFound+=1 + errorsFound += 1 recordName = "INVALID" # Set the invalid name so the code below can use it without issue # Loop thru the tags defined for this record for record in vpd: + # Comments aren't basestring tags + if not isinstance(record.tag, basestring): + continue + # See if this is a tag we even expect if record.tag not in recordTags: out.error("Unsupported tag <%s> found while parsing the <record> level for record %s" % (record.tag, recordName)) - errorsFound+=1 + errorsFound += 1 # We continue here because we don't want to parse down this hierarcy path when we don't know what it is continue + # It was a supported tag else: recordTags[record.tag]+=1 @@ -167,27 +192,31 @@ def parseTvpd(tvpdFile, topLevel): keywordName = record.attrib.get("name") if (keywordName == None): out.error("<keyword> tag in record %s is missing the name attribute" % (recordName)) - errorsFound+=1 + errorsFound += 1 keywordName = "INVALID" # Set the invalid name so the code below can use it without issue # Loop thru the tags defined for this keyword for keyword in record: + # Comments aren't basestring tags + if not isinstance(keyword.tag, basestring): + continue + # See if this is a tag we even expect if keyword.tag not in keywordTags: out.error("Unsupported tag <%s> found while parsing the <keyword> level for keyword %s in record %s" % (keyword.tag, keywordName, recordName)) - errorsFound+=1 + errorsFound += 1 # We continue here because we don't want to parse down this hierarcy path when we don't know what it is continue # It was a supported tag else: - keywordTags[keyword.tag] +=1 + keywordTags[keyword.tag] += 1 # We've checked for unknown keyword tags, now make sure we have the right number of each # This is a simple one, we can only have 1 of each for tag in keywordTags: if (keywordTags[tag] != 1): out.error("The tag <%s> was expected to have a count of 1, but was found with a count of %d for keyword %s in record %s" % (tag, keywordTags[tag], keywordName, recordName)) - errorsFound+=1 + errorsFound += 1 # We've checked for unknown record tags, now make sure we've got the right number, they don't conflict, etc.. recordTagTotal = bool(recordTags["keyword"]) + bool(recordTags["rbinfile"]) + bool(recordTags["rtvpdfile"]) @@ -195,16 +224,16 @@ def parseTvpd(tvpdFile, topLevel): if (recordTagTotal > 1): out.error("For record %s, more than one tag of type keyword, rbinfile or rtvpdfile was given!" % (recordName)) out.error("Use of only 1 at a time is supported for a given record!") - errorsFound+=1 + errorsFound += 1 # We checked if we had more than 1, let's make sure we have at least 1 if (recordTagTotal < 1): out.error("For record %s, 0 tags of type keyword, rbinfile or rtvpdfile were given!" % (recordName)) out.error("1 tag of the 3 must be in use for the record to be valid!") - errorsFound+=1 + errorsFound += 1 # Make sure the rdesc is available if (recordTags["keyword"] and recordTags["rdesc"] != 1): out.error("The tag <rdesc> was expected to have a count of 1, but was found with a count of %d for record %s" % (recordTags["rdesc"], recordName)) - errorsFound+=1 + errorsFound += 1 # Do some checking of what we found at the vpd level # Top level is the manifest passed in on the command line @@ -217,19 +246,19 @@ def parseTvpd(tvpdFile, topLevel): for tag in ["name", "size", "VD"]: if (vpdTags[tag] != comparer): out.error("The tag <%s> was expected to have a count of %d, but was found with a count of %d" % (tag, comparer, vpdTags[tag])) - errorsFound+=1 + errorsFound += 1 # Make sure at least one record tag was found if (vpdTags["record"] == 0): out.error("At least one <record> must be defined for the file to be valid!") - errorsFound+=1 + errorsFound += 1 # If this is an included tvpd, it can only have 1 record in it # This check is just by convention. If a compelling case to change it was provided, it could be done if (topLevel == False): if (vpdTags["record"] > 1): out.error("More than 1 record entry found in %s. Only 1 record is allowed!" % (tvpdFile)) - errorsFound+=1 + errorsFound += 1 ###### # All done, vary our return based upon the errorsFound @@ -282,8 +311,9 @@ def packKeyword(keyword, length, data, format): # Write it keywordPack += bytearray(data.encode()) elif (format == "hex"): - # fromhex will deal with spacing in the data, but not carriage returns - # Remove those before we get to fromhex + # Remove white space and carriage returns from the data before we get to fromhex + # If we don't, it throws off the ljust logic below to set the field to proper length + data = data.replace(" ","") data = data.replace("\n","") # Pad if necessary (* 2 to convert nibble data to byte length) data = data.ljust((length * 2), '0') @@ -321,6 +351,18 @@ def calcPadFill(record): return pfLength +# Check input hex data for proper formatting +def checkHexDataFormat(kwdata): + # Remove white space and carriage returns from the kwdata + kwdata = kwdata.replace(" ","") + kwdata = kwdata.replace("\n","") + # Now look to see if there are any characters other than 0-9 & a-f + match = re.search("([^0-9a-fA-F]+)", kwdata) + if (match): + out.error("A non hex character \"%s\" was found at %s in the kwdata" % (match.group(), match.span())) + return (match, kwdata) + + ############################################################ # Main - Main - Main - Main - Main - Main - Main - Main ############################################################ @@ -422,7 +464,7 @@ maxSizeBytes = re.match('[0-9]*', vpdSize).group() if (maxSizeBytes == ''): maxSizeBytes = '0' out.error("No number detected in the size string. Format of string must be number first, then units, e.g. 16KB. Remove any characters or white space from in front of the number.") - errorsFound+=1 + errorsFound += 1 # Make a new string with the number removed sizeUnits = vpdSize[len(maxSizeBytes):] # Remove a space, if one was inserted between the number and units @@ -437,10 +479,10 @@ elif (sizeUnits == "Mb" or sizeUnits == "MB"): maxSizeBytes = int(maxSizeBytes) * 1024 * 1024 elif (sizeUnits == ""): out.error("Please specify units at the end of the size string. Acceptable units: B; KB; MB.") - errorsFound+=1 + errorsFound += 1 else: out.error("Unexpected units in the size string. Expected: B; KB; MB. Yours: %s" % sizeUnits) - errorsFound+=1 + errorsFound += 1 # Look for rtvpdfile lines for record in manifest.iter("record"): @@ -453,14 +495,14 @@ for record in manifest.iter("record"): fileName = findFile(rtvpdfile.text, clInputPath) if (fileName == None): out.error("The rtvpdfile %s could not be found! Please check your tvpd or input path" % (rtvpdfile.text)) - errorsFound+=1 + errorsFound += 1 break # Read in the rtvpdfile since it exists (rc, recordTvpd) = parseTvpd(fileName, False) if (rc): out.error("Error occurred reading in %s" % fileName) - errorsFound+=1 + errorsFound += 1 break # Merge the new record into the main manifest @@ -479,7 +521,7 @@ for record in manifest.iter("record"): subRecordName = subRecord.attrib.get("name") if (subRecordName != recordName): out.error("The record (%s) found in %s doesn't match the record name in the manifest (%s)" % (subRecordName, rtvpd.text, recordName)) - errorsFound+=1 + errorsFound += 1 break # Everything looks good, insert/remove @@ -514,7 +556,7 @@ for record in manifest.iter("record"): # Make sure we aren't finding a record we haven't already seen if (recordName in recordNames): out.error("The record \"%s\" has previously been defined in the tvpd" % recordName) - errorsFound+=1 + errorsFound += 1 else: recordNames[recordName] = 1 @@ -522,7 +564,7 @@ for record in manifest.iter("record"): # Make sure the record name is 4 charaters long if (len(recordName) != 4): out.error("The record name entry \"%s\" is not 4 characters long" % recordName) - errorsFound+=1 + errorsFound += 1 # -------- # Do very basic checking on the rbinfile if found @@ -536,7 +578,7 @@ for record in manifest.iter("record"): rbinfile = findFile(rbinfile, clInputPath) if (rbinfile == None): out.error("The rbinfile %s could not be found! Please check your tvpd or input path" % (rbinfile)) - errorsFound+=1 + errorsFound += 1 break # It does, read it in so we can check the record name @@ -562,42 +604,57 @@ for record in manifest.iter("record"): # Setup a dictionary of the supported tags kwTags = {"keyword" : False, "kwdesc" : False, "kwformat" : False, "kwlen" : False, "kwdata" : False} + # Setup a dictionary of the supported tags in the kwdata tag + kwdTags = {"ascii" : False, "hex" : False} # -------- # Make sure we aren't finding a record we haven't already seen if (keywordName in keywordNames): out.error("The keyword \"%s\" has previously been defined in record %s" % (keywordName, recordName)) - errorsFound+=1 + errorsFound += 1 else: keywordNames[keywordName] = 1 # -------- # We'll loop through all the tags found in this keyword and check for all required and any extra ones for kw in keyword.iter(): + # Comments aren't basestring tags + if not isinstance(kw.tag, basestring): + continue + if kw.tag in kwTags: # Mark that we found a required tag kwTags[kw.tag] = True # Save the values we'll need into variables for ease of use if (kw.tag == "kwformat"): kwformat = kw.text.lower() # lower() for ease of compare - + if (kw.tag == "kwlen"): kwlen = int(kw.text) - + if (kw.tag == "kwdata"): - kwdata = kw.text + # If it's mixed format, we want kwdata to actually hold all the xml tags contained in this kwdata + # Otherwise, grab the plain text so we can treat it like data later + if (kwformat == "mixed"): + kwdata = kw + else: + kwdata = kw.text + elif kw.tag in kwdTags: + # Ignore the kwdTags for now, we'll check them later + next + else: # Flag that we found an unsupported tag. This may help catch typos, etc.. out.error("The unsupported tag \"<%s>\" was found in keyword %s in record %s" % (kw.tag, keywordName, recordName)) - errorsFound+=1 + errorsFound += 1 # -------- # Make sure all the required kwTags were found for kw in kwTags: if (kwTags[kw] == False): out.error("Required tag \"<%s>\" was not found in keyword %s in record %s" % (kw, keywordName, recordName)) - errorsFound+=1 + errorsFound += 1 # Now we know the basics of the template are correct, now do more indepth checking of length, etc.. @@ -605,13 +662,13 @@ for record in manifest.iter("record"): # Make sure the keyword is two characters long if (len(keywordName) != 2): out.error("The length of the keyword %s in record %s is not 2 characters long" % (keywordName, recordName)) - errorsFound+=1 + errorsFound += 1 # -------- # A check to make sure the RT keyword kwdata matches the name of the record we are in if ((keywordName == "RT") and (recordName != kwdata)): out.error("The value of the RT keyword \"%s\" does not match the record name \"%s\"" % (kwdata, recordName)) - errorsFound+=1 + errorsFound += 1 # -------- # Check that the length specified isn't longer than the keyword supports @@ -622,7 +679,7 @@ for record in manifest.iter("record"): maxlen = 255 if (kwlen > maxlen): out.error("The specified length %d is bigger than the max length %d for keyword %s in record %s" % (kwlen, maxlen, keywordName, recordName)) - errorsFound+=1 + errorsFound += 1 # -------- # If the input format is bin, make sure the file exists and then read in the data @@ -631,7 +688,7 @@ for record in manifest.iter("record"): databinfile = findFile(kwdata, clInputPath) if (databinfile == None): out.error("The databinfile %s could not be found! Please check your tvpd or input path" % (kwdata)) - errorsFound+=1 + errorsFound += 1 break # It does, read it in so we can check the record name @@ -641,14 +698,47 @@ for record in manifest.iter("record"): # -------- # If the input format is hex, make sure the input data is hex only if (kwformat == "hex"): - # Remove white space and carriage returns from the kwdata - kwdata = kwdata.replace(" ","") - kwdata = kwdata.replace("\n","") - # Now look to see if there are any characters other than 0-9 & a-f - match = re.search("([^0-9a-fA-F]+)", kwdata) - if (match): - out.error("A non hex character \"%s\" was found at %s in the kwdata for keyword %s in record %s" % (match.group(), match.span(), keywordName, recordName)) - errorsFound+=1 + (rc, kwdata) = checkHexDataFormat(kwdata) + if (rc): + out.error("checkHexDataFormat return an error for for keyword %s in record %s" % (keywordName, recordName)) + errorsFound += 1 + + # -------- + # If the input format is mixed, loop over the kwdata and verify it is formatted properly + if (kwformat == "mixed"): + # We can't use the length check code below for the mixed case, so track it here and check below + kwdatalen = 0 + # We need to verify the format and length of the ascii or hex keywords embedded in here + for kwd in kwdata.iter(): + # Comments aren't basestring tags + if not isinstance(kwd.tag, basestring): + continue + + # Make sure it only contains the two keywords we expect + if kwd.tag.lower() in kwdTags: + if (kwd.tag.lower() == "ascii"): + kwdatalen += len(kwd.text) + + if (kwd.tag.lower() == "hex"): + (rc, kwdata) = checkHexDataFormat(kwd.text) + if (rc): + out.error("checkHexDataFormat return an error for for keyword %s in record %s" % (keywordName, recordName)) + errorsFound += 1 + # Nibbles to bytes + kwdatalen += (len(kwdata)/2) + + elif (kwd.tag.lower() == "kwdata"): + next # Ignore this tag at this level + + else: + # Flag that we found an unsupported tag. This may help catch typos, etc.. + out.error("The unsupported tag \"<%s>\" was found in kwdata for keyword %s in record %s" % (kwd.tag, keywordName, recordName)) + errorsFound += 1 + + # Done looping through the tags we found, now check that the length isn't too long + if (kwdatalen > kwlen): + out.error("The total length of the mixed data is longer than the given <kwlen> for keyword %s in record %s" % (keywordName, recordName)) + errorsFound += 1 # -------- # Verify that the data isn't longer than the length given @@ -656,15 +746,18 @@ for record in manifest.iter("record"): if (kwformat == "ascii" or kwformat == "bin"): if (len(kwdata) > kwlen): out.error("The length of the value is longer than the given <kwlen> for keyword %s in record %s" % (keywordName, recordName)) - errorsFound+=1 + errorsFound += 1 elif (kwformat == "hex"): # Convert hex nibbles to bytes for len compare if ((len(kwdata)/2) > kwlen): out.error("The length of the value is longer than the given <kwlen> for keyword %s in record %s" % (keywordName, recordName)) - errorsFound+=1 + errorsFound += 1 + elif (kwformat == "mixed"): + # The mixed tag length checking was handled above + next else: out.error("Unknown keyword format \"%s\" given for keyword %s in record %s" % (kwformat, keywordName, recordName)) - errorsFound+=1 + errorsFound += 1 # Done with the record, reset the output out.setIndent(2) @@ -673,7 +766,7 @@ for record in manifest.iter("record"): if (errorsFound): out.msg("") out.error("%d error%s found in the tvpd data. Please review the above errors and correct them." % (errorsFound, "s" if (errorsFound > 1) else "")) - tvpdFileName = clOutputPath + "/" + vpdName + "-err.tvpd" + tvpdFileName = os.path.join(clOutputPath, vpdName + "-err.tvpd") writeTvpd(manifest, tvpdFileName) out.msg("Wrote tvpd file to help in debug: %s" % tvpdFileName) exit(errorsFound) @@ -683,8 +776,8 @@ out.setIndent(0) out.msg("==== Stage 3: Creating binary VPD image") out.setIndent(2) # Create our output file names -tvpdFileName = clOutputPath + "/" + vpdName + ".tvpd" -vpdFileName = clOutputPath + "/" + vpdName + ".vpd" +tvpdFileName = os.path.join(clOutputPath, vpdName + ".tvpd") +vpdFileName = os.path.join(clOutputPath, vpdName + ".vpd") # This is our easy one, write the XML back out # Write out the full template vpd representing the data contained in our image @@ -865,12 +958,22 @@ for record in manifest.iter("record"): # Get the full path to the file given, error checked before databinfile = findFile(kwdata, clInputPath) kwdata = open(databinfile, mode='rb').read() + # If the input format is mixed, we need to concat the data together before packing + # We'll force all the data to hex and tell it to pack as hex + if (kwformat == "mixed"): + kwdata = "" # Reset + for kwd in keyword.find("kwdata"): + if (kwd.tag == "hex"): + kwdata += kwd.text + if (kwd.tag == "ascii"): + kwdata += kwd.text.encode("hex") + kwformat = "hex" keywordPack = packKeyword(keywordName, kwlen, kwdata, kwformat) recordInfo[recordName].record += keywordPack # If the user wanted discrete binary files for each keyword writen out, we'll do it here if (clBinaryKeywords): - kvpdFileName = clOutputPath + "/" + vpdName + "-" + recordName + "-" + keywordName + ".kvpd" + kvpdFileName = os.path.join(clOutputPath, vpdName + "-" + recordName + "-" + keywordName + ".kvpd") out.msg("Wrote record %s keyword %s kvpd file: %s" % (recordName, keywordName, kvpdFileName)) kvpdFile = open(kvpdFileName, "wb") kvpdFile.write(keywordPack) @@ -957,7 +1060,7 @@ for record in manifest.iter("record"): writeDataToVPD(vpdFile, recordInfo[recordName].record) # If the user wanted discrete binary files for each record writen out, we'll do it here if (clBinaryRecords): - rvpdFileName = clOutputPath + "/" + vpdName + "-" + recordName + ".rvpd" + rvpdFileName = os.path.join(clOutputPath, vpdName + "-" + recordName + ".rvpd") out.msg("Wrote %s record rvpd file: %s" % (recordName, rvpdFileName)) rvpdFile = open(rvpdFileName, "wb") rvpdFile.write(recordInfo[recordName].record) diff --git a/docs/xmlformat.md b/docs/xmlformat.md new file mode 100644 index 0000000..249081e --- /dev/null +++ b/docs/xmlformat.md @@ -0,0 +1,193 @@ +## Introduction + +This file will describe the xml of the vpd template file format used to +describe the contents of a VPD image + +## High Level Description + +The template VPD format is XML, used to describe the contents of a binary VPD image. The template file is fed into createVpd.py. It in turn interprets that XML, error checks it and creates a binary VPD image. + +The template consists of 3 levels +* `<vpd>` - information about the overall VPD image +* `<record>` - information about a record in `<vpd>` +* `<keyword>` - information about a keyword contained in a `<record>` + +The XML Hierarchy looks like the following: +``` xml +<vpd> + <record> + <keyword> + </keyword> + <keyword> + </keyword> + </record> + <record> + <keyword> + .. + </record> + <record> + .. +</vpd> +``` + +## `<vpd>` +This section covers the required tags in the <vpd> section of the template description + +The top level `<vpd>` tag is required in all template files, whether it is a top level manifest description of a full image or simply a record level description. The tag requirements in the <vpd> section depend upon usage. + +### Tags included in the `<vpd>` section +`<name></name>` +Used to define the output name of the files created by the tool. This information is not stuck into the binary VPD image. + +If the special name of FILENAME is given, then the name of the top level manifest file will be used for the name on any output files. + +Can be used only once in the top level description +Cannot be included in single record definitions + +`<size></size>` +Used to define the maximum size of the binary image. If the create image will exceede this size, an error is generated by the tool. + +Can be used only once in the top level description +Cannot be included in single record definitions + +`<VD></VD>` +The hex value to be stuck in for the VD keyword in the VHDR + +Can be used only once in the top level description +Cannot be included in single record definitions + +``` xml +<record> + .. +</record> +``` +Defines the creation of a record within VPD. Please see the section on the `<record>` tag for more information on valid fields and syntax + +When creating a top level VPD template, at least 1 `<record>` must be defined. +When creating a record only template description, only 1 `<record>` tag can be used. It is not allowed to include different records in a record only template. + +A sample `<vpd>` section would look like this: +``` xml +<vpd> + <name>simple</name> + <size>16kb</size> + <VD>01</VD> + <record ..> +</vpd> +``` + +## `<record>` +The record tag is used to describe the information that will go into a VPD record. You can specify this information 3 different ways. + * By defining the keywords to go in the record using the `<keyword>` tag + * By pointing to a different file with the `<rtvpdfile>` tag. That file contains the record definition that uses the `<keyword>` tag + * By pointing to a fully created binary representation of the record using the `<rbinfile>` tag +One 1 of these 3 tags can be given at a time and the creation program checks to make sure that is the case. + +``` xml +<record name=”NAME”> +</record> +``` +The name attribute is required in a ```<record>``` and must be 4 characters long. + +### Tags included in the `<record>` +`<rdesc></rdesc>` +A text description of the contents/purpose of a record. Only 1 `<rdesc>` is allowed per record + +``` xml +<keyword> + .. +</keyword> +``` +Defines a keyword within a record. Please see the `<keyword>` section of the document for further descriptions. + +`<rtvpdfile></rtvpdfile>` +Contains the name or path and name to a file describing the record + +`<rbinfile></rbinfile>` +Contains the name or path and name to the binary version of a record. It is assumed that this file is correctly formatted and only minimally checked to make sure the record names match. + +A sample `<record>` section would look like this: + +``` xml +<record name=”NAME”> + <rdesc> The NAME record</rdesc> + <keyword..> +</record> +``` + +The inclusion of a record tvpd file would look like this: +``` xml +<record name=”NAME”> + <rtvdfile>record-NAME.tvpd</rtvpdfile> +</record> +``` + +The inclusion of a record binary file would look like this: +``` xml +<record name=”NAME”> + <rbinfile>record-NAME.bin</rbinfile> +</record> +``` + +## `<keyword>` +The `<keyword>` tag is used to describe the contents of a keyword within a record. + +``` xml +<keyword NAME=”NM”> + .. +</keyword> +``` +The name attribute is required and only 2 characters long + +### Tags included in the `<keyword>` + +`<kwdesc></kwdesc>` +A description of the contents of the keyword. Only 1 tag allowed per keyword. + +`<kwformat></kwformat>` +The format of the data in the `<kwdata>` tag. It can be three different values + * hex + * ascii + * bin +hex and ascii data are both specified within the `<kwdata>` tag. When using the bin type, the `<kwdata>` tag is a reference to a binary file that contains just data for the keyword + +`<kwlen></kwlen>` +The length of the keyword. If the data given is shorter than the keyword, the data will be right padded with zeros. If the data is longer than the `<kwlen>`, then an error is generated. + +`<kwdata></kwdata>` +The data to go into the keyword. It is checked to make sure it matches the format specified. For example, that hex data has only valid hex characters. + +Sample keyword sections would look like this: + +For hex data: +``` xml +<keyword name="NM"> + <kwdesc>The name keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>4</kwlen> + <kwdata>01AEF78DB</kwdata> +</keyword> +``` + +For ascii data: +``` xml +<keyword name="NM"> + <kwdesc>The name keyword</kwdesc> + <kwformat>ascii</kwformat> + <kwlen>4</kwlen> + <kwdata>NAME</kwdata> +</keyword> +``` + +For bin data: +``` xml +<keyword name="NM"> + <kwdesc>The name keyword</kwdesc> + <kwformat>bin</kwformat> + <kwlen>4</kwlen> + <kwdata>name.bin</kwdata> +</keyword> +``` + +## Examples +Please see the examples dir in this repo for complete representations multiple types of template files
\ No newline at end of file diff --git a/examples/README b/examples/README index 10f7a5a..3822563 100644 --- a/examples/README +++ b/examples/README @@ -1,33 +1,43 @@ Full Image Examples =================== -memcard1_ddr3: This is an example of a VPD template for a DDR3 memory riser +Power8 FRU VPD example: +====================== + +p8/memcard1_ddr3: This is an example of a VPD template for a DDR3 memory riser card with a single memory buffer(Centaur). -memcard4_ddr3: This is an example of a VPD template for a DDR3 memory riser +p8/memcard4_ddr3: This is an example of a VPD template for a DDR3 memory riser card with 2 to 4 memory buffer (Centaurs). -memcard1_ddr4: This is an example of a VPD template for a DDR4 memory riser +p8/memcard1_ddr4: This is an example of a VPD template for a DDR4 memory riser card with a single memory buffer(Centaur). -memcard4_ddr4: This is an example of a VPD template for a DDR4 memory riser +p8/memcard4_ddr4: This is an example of a VPD template for a DDR4 memory riser card with 2 to 4 memory buffer (Centaurs). -sysplanar: This is an example of a VPD template for an OpenPower system +p8/sysplanar: This is an example of a VPD template for an OpenPower system planar (aka mother board) that does not have any memory buffer on the card. A memory riser card will be plugged onto this system planar. -sysplanar32_ddr3: This is an example of a VPD template for an OpenPower system +p8/sysplanar32_ddr3: This is an example of a VPD template for an OpenPower system planar (aka mother board) that has upto 32 memory buffers (Centaurs) on the card. DDR3 ISDIMMs are plugged onto this system planar. -sysplanar32_ddr4: This is an example of a VPD template for an OpenPower system +p8/sysplanar32_ddr4: This is an example of a VPD template for an OpenPower system planar (aka mother board) that has upto 32 memory buffers (Centaurs) on the card. DDR3 ISDIMMs are plugged onto this system planar. +Power9 FRU VPD example: +====================== +p9/sysplanar32_ddr4: This is an example of a VPD template for an OpenPower P9 system + planar (aka mother board) that has DDR4 ISDIMMs direct attach to + the processor on the same card that the ISDIMM are plugged onto. + + Syntax Examples =============== bindatainput: Shows the syntax to have a binary input file for the keyword @@ -41,4 +51,4 @@ rbinfile: Shows how to include a binary file that contains an entire simple: Most basic syntax example tworecords: Shows how to define multiple records within one top level - input file
\ No newline at end of file + input file diff --git a/examples/comments/comments.tvpd b/examples/comments/comments.tvpd new file mode 100644 index 0000000..386911d --- /dev/null +++ b/examples/comments/comments.tvpd @@ -0,0 +1,32 @@ +<?xml version='1.0' encoding='utf-8'?> +<!-- top level comment --> +<vpd> + <!-- vpd level comment --> + <name>FILENAME</name> + <size>16kb</size> + <VD>01</VD> + <record name="VINI"> + <!-- record level comment --> + <rdesc>The VINI record</rdesc> + <keyword name="RT"> + <!-- keyword level comment --> + <kwdesc>The Record Type keyword</kwdesc> + <kwformat>ascii</kwformat> + <kwlen>4</kwlen> + <kwdata>VINI</kwdata> + </keyword> + <keyword name="MX"> + <kwdesc>The Mixed Data keyword</kwdesc> + <kwformat>mixed</kwformat> + <kwlen>128</kwlen> + <kwdata> + <!-- kwdata level comment --> + <hex> + <!-- mixed level comment --> + FEEDB0B0DEADBEEF + </hex> + <ascii>STRING</ascii> + </kwdata> + </keyword> + </record> +</vpd> diff --git a/examples/mixeddata/mixeddata.tvpd b/examples/mixeddata/mixeddata.tvpd new file mode 100644 index 0000000..ae15c69 --- /dev/null +++ b/examples/mixeddata/mixeddata.tvpd @@ -0,0 +1,35 @@ +<?xml version='1.0' encoding='utf-8'?> +<vpd> + <name>FILENAME</name> + <size>16kb</size> + <VD>01</VD> + <record name="VINI"> + <rdesc>The VINI record</rdesc> + <keyword name="MX"> + <kwdesc>Mixed Data Keyword</kwdesc> + <kwformat>mixed</kwformat> + <kwlen>128</kwlen> + <kwdata> + <hex> + 0123456789ABCDEF + </hex> + <ascii>STRING</ascii> + <hex> + FEEDB0B0 DEADBEEF + </hex> + </kwdata> + </keyword> + <keyword name="AS"> + <kwdesc>The ascii keyword</kwdesc> + <kwformat>ascii</kwformat> + <kwlen>20</kwlen> + <kwdata>This is text data</kwdata> + </keyword> + <keyword name="HX"> + <kwdesc>The Hex keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>4</kwlen> + <kwdata>00000000</kwdata> + </keyword> + </record> +</vpd> diff --git a/examples/memcard1_ddr3/memcard1_ddr3.tvpd b/examples/p8/memcard1_ddr3/memcard1_ddr3.tvpd index 0ec2368..0ec2368 100644 --- a/examples/memcard1_ddr3/memcard1_ddr3.tvpd +++ b/examples/p8/memcard1_ddr3/memcard1_ddr3.tvpd diff --git a/examples/memcard1_ddr3/openPower_mer0_MCsample.xml b/examples/p8/memcard1_ddr3/openPower_mer0_MCsample.xml index b139c06..b139c06 100644 --- a/examples/memcard1_ddr3/openPower_mer0_MCsample.xml +++ b/examples/p8/memcard1_ddr3/openPower_mer0_MCsample.xml diff --git a/examples/memcard1_ddr3/openPower_opfr_sample.xml b/examples/p8/memcard1_ddr3/openPower_opfr_sample.xml index ed8b5b2..ed8b5b2 100644 --- a/examples/memcard1_ddr3/openPower_opfr_sample.xml +++ b/examples/p8/memcard1_ddr3/openPower_opfr_sample.xml diff --git a/examples/memcard1_ddr3/openPower_spdx_membuf1_sample.xml b/examples/p8/memcard1_ddr3/openPower_spdx_membuf1_sample.xml index d9e9ff8..d9e9ff8 100644 --- a/examples/memcard1_ddr3/openPower_spdx_membuf1_sample.xml +++ b/examples/p8/memcard1_ddr3/openPower_spdx_membuf1_sample.xml diff --git a/examples/memcard1_ddr3/openPower_veir_MCsample.xml b/examples/p8/memcard1_ddr3/openPower_veir_MCsample.xml index 5948a09..5948a09 100644 --- a/examples/memcard1_ddr3/openPower_veir_MCsample.xml +++ b/examples/p8/memcard1_ddr3/openPower_veir_MCsample.xml diff --git a/examples/memcard1_ddr3/openPower_ver0_MCsample.xml b/examples/p8/memcard1_ddr3/openPower_ver0_MCsample.xml index 933c01c..933c01c 100644 --- a/examples/memcard1_ddr3/openPower_ver0_MCsample.xml +++ b/examples/p8/memcard1_ddr3/openPower_ver0_MCsample.xml diff --git a/examples/memcard1_ddr3/openPower_vini_sample.xml b/examples/p8/memcard1_ddr3/openPower_vini_sample.xml index 72bbaab..72bbaab 100644 --- a/examples/memcard1_ddr3/openPower_vini_sample.xml +++ b/examples/p8/memcard1_ddr3/openPower_vini_sample.xml diff --git a/examples/memcard1_ddr3/openPower_vmsc_sample.xml b/examples/p8/memcard1_ddr3/openPower_vmsc_sample.xml index cc65fbd..cc65fbd 100644 --- a/examples/memcard1_ddr3/openPower_vmsc_sample.xml +++ b/examples/p8/memcard1_ddr3/openPower_vmsc_sample.xml diff --git a/examples/memcard1_ddr3/openPower_vndr_sample.xml b/examples/p8/memcard1_ddr3/openPower_vndr_sample.xml index f8d6438..f8d6438 100644 --- a/examples/memcard1_ddr3/openPower_vndr_sample.xml +++ b/examples/p8/memcard1_ddr3/openPower_vndr_sample.xml diff --git a/examples/memcard1_ddr3/openPower_vrtn_sample.xml b/examples/p8/memcard1_ddr3/openPower_vrtn_sample.xml index 4c2a97e..4c2a97e 100644 --- a/examples/memcard1_ddr3/openPower_vrtn_sample.xml +++ b/examples/p8/memcard1_ddr3/openPower_vrtn_sample.xml diff --git a/examples/memcard1_ddr4/memcard1_ddr4.tvpd b/examples/p8/memcard1_ddr4/memcard1_ddr4.tvpd index 87ab6b0..87ab6b0 100644 --- a/examples/memcard1_ddr4/memcard1_ddr4.tvpd +++ b/examples/p8/memcard1_ddr4/memcard1_ddr4.tvpd diff --git a/examples/memcard1_ddr4/openPower_mer0_MCsample.xml b/examples/p8/memcard1_ddr4/openPower_mer0_MCsample.xml index b139c06..b139c06 100644 --- a/examples/memcard1_ddr4/openPower_mer0_MCsample.xml +++ b/examples/p8/memcard1_ddr4/openPower_mer0_MCsample.xml diff --git a/examples/memcard1_ddr4/openPower_opfr_sample.xml b/examples/p8/memcard1_ddr4/openPower_opfr_sample.xml index efe5d38..efe5d38 100644 --- a/examples/memcard1_ddr4/openPower_opfr_sample.xml +++ b/examples/p8/memcard1_ddr4/openPower_opfr_sample.xml diff --git a/examples/memcard1_ddr4/openPower_spdx_membuf1_ddr4_sample.xml b/examples/p8/memcard1_ddr4/openPower_spdx_membuf1_ddr4_sample.xml index 7408d43..7408d43 100644 --- a/examples/memcard1_ddr4/openPower_spdx_membuf1_ddr4_sample.xml +++ b/examples/p8/memcard1_ddr4/openPower_spdx_membuf1_ddr4_sample.xml diff --git a/examples/memcard1_ddr4/openPower_veir_MCsample.xml b/examples/p8/memcard1_ddr4/openPower_veir_MCsample.xml index 5948a09..5948a09 100644 --- a/examples/memcard1_ddr4/openPower_veir_MCsample.xml +++ b/examples/p8/memcard1_ddr4/openPower_veir_MCsample.xml diff --git a/examples/memcard1_ddr4/openPower_ver0_MCsample.xml b/examples/p8/memcard1_ddr4/openPower_ver0_MCsample.xml index 933c01c..933c01c 100644 --- a/examples/memcard1_ddr4/openPower_ver0_MCsample.xml +++ b/examples/p8/memcard1_ddr4/openPower_ver0_MCsample.xml diff --git a/examples/memcard1_ddr4/openPower_vini_sample.xml b/examples/p8/memcard1_ddr4/openPower_vini_sample.xml index 9245886..9245886 100644 --- a/examples/memcard1_ddr4/openPower_vini_sample.xml +++ b/examples/p8/memcard1_ddr4/openPower_vini_sample.xml diff --git a/examples/memcard1_ddr4/openPower_vmsc_sample.xml b/examples/p8/memcard1_ddr4/openPower_vmsc_sample.xml index cc65fbd..cc65fbd 100644 --- a/examples/memcard1_ddr4/openPower_vmsc_sample.xml +++ b/examples/p8/memcard1_ddr4/openPower_vmsc_sample.xml diff --git a/examples/memcard1_ddr4/openPower_vndr_sample.xml b/examples/p8/memcard1_ddr4/openPower_vndr_sample.xml index f8d6438..f8d6438 100644 --- a/examples/memcard1_ddr4/openPower_vndr_sample.xml +++ b/examples/p8/memcard1_ddr4/openPower_vndr_sample.xml diff --git a/examples/memcard1_ddr4/openPower_vrtn_sample.xml b/examples/p8/memcard1_ddr4/openPower_vrtn_sample.xml index 4c2a97e..4c2a97e 100644 --- a/examples/memcard1_ddr4/openPower_vrtn_sample.xml +++ b/examples/p8/memcard1_ddr4/openPower_vrtn_sample.xml diff --git a/examples/memcard4_ddr3/memcard4_ddr3.tvpd b/examples/p8/memcard4_ddr3/memcard4_ddr3.tvpd index 570dfa8..570dfa8 100644 --- a/examples/memcard4_ddr3/memcard4_ddr3.tvpd +++ b/examples/p8/memcard4_ddr3/memcard4_ddr3.tvpd diff --git a/examples/memcard4_ddr3/openPower_mer0_MCsample.xml b/examples/p8/memcard4_ddr3/openPower_mer0_MCsample.xml index b139c06..b139c06 100644 --- a/examples/memcard4_ddr3/openPower_mer0_MCsample.xml +++ b/examples/p8/memcard4_ddr3/openPower_mer0_MCsample.xml diff --git a/examples/memcard4_ddr3/openPower_opfr_sample.xml b/examples/p8/memcard4_ddr3/openPower_opfr_sample.xml index ed8b5b2..ed8b5b2 100644 --- a/examples/memcard4_ddr3/openPower_opfr_sample.xml +++ b/examples/p8/memcard4_ddr3/openPower_opfr_sample.xml diff --git a/examples/memcard4_ddr3/openPower_spdx_membuf4_sample.xml b/examples/p8/memcard4_ddr3/openPower_spdx_membuf4_sample.xml index e376a2e..e376a2e 100644 --- a/examples/memcard4_ddr3/openPower_spdx_membuf4_sample.xml +++ b/examples/p8/memcard4_ddr3/openPower_spdx_membuf4_sample.xml diff --git a/examples/memcard4_ddr3/openPower_veir_MCsample.xml b/examples/p8/memcard4_ddr3/openPower_veir_MCsample.xml index 5948a09..5948a09 100644 --- a/examples/memcard4_ddr3/openPower_veir_MCsample.xml +++ b/examples/p8/memcard4_ddr3/openPower_veir_MCsample.xml diff --git a/examples/memcard4_ddr3/openPower_ver0_MCsample.xml b/examples/p8/memcard4_ddr3/openPower_ver0_MCsample.xml index 933c01c..933c01c 100644 --- a/examples/memcard4_ddr3/openPower_ver0_MCsample.xml +++ b/examples/p8/memcard4_ddr3/openPower_ver0_MCsample.xml diff --git a/examples/memcard4_ddr3/openPower_vini_sample.xml b/examples/p8/memcard4_ddr3/openPower_vini_sample.xml index 72bbaab..72bbaab 100644 --- a/examples/memcard4_ddr3/openPower_vini_sample.xml +++ b/examples/p8/memcard4_ddr3/openPower_vini_sample.xml diff --git a/examples/memcard4_ddr3/openPower_vmsc_sample.xml b/examples/p8/memcard4_ddr3/openPower_vmsc_sample.xml index cc65fbd..cc65fbd 100644 --- a/examples/memcard4_ddr3/openPower_vmsc_sample.xml +++ b/examples/p8/memcard4_ddr3/openPower_vmsc_sample.xml diff --git a/examples/memcard4_ddr3/openPower_vndr_sample.xml b/examples/p8/memcard4_ddr3/openPower_vndr_sample.xml index f8d6438..f8d6438 100644 --- a/examples/memcard4_ddr3/openPower_vndr_sample.xml +++ b/examples/p8/memcard4_ddr3/openPower_vndr_sample.xml diff --git a/examples/memcard4_ddr3/openPower_vrtn_sample.xml b/examples/p8/memcard4_ddr3/openPower_vrtn_sample.xml index 4c2a97e..4c2a97e 100644 --- a/examples/memcard4_ddr3/openPower_vrtn_sample.xml +++ b/examples/p8/memcard4_ddr3/openPower_vrtn_sample.xml diff --git a/examples/memcard4_ddr4/memcard4_ddr4.tvpd b/examples/p8/memcard4_ddr4/memcard4_ddr4.tvpd index 7e23ef7..7e23ef7 100644 --- a/examples/memcard4_ddr4/memcard4_ddr4.tvpd +++ b/examples/p8/memcard4_ddr4/memcard4_ddr4.tvpd diff --git a/examples/memcard4_ddr4/openPower_mer0_MCsample.xml b/examples/p8/memcard4_ddr4/openPower_mer0_MCsample.xml index b139c06..b139c06 100644 --- a/examples/memcard4_ddr4/openPower_mer0_MCsample.xml +++ b/examples/p8/memcard4_ddr4/openPower_mer0_MCsample.xml diff --git a/examples/memcard4_ddr4/openPower_opfr_sample.xml b/examples/p8/memcard4_ddr4/openPower_opfr_sample.xml index efe5d38..efe5d38 100644 --- a/examples/memcard4_ddr4/openPower_opfr_sample.xml +++ b/examples/p8/memcard4_ddr4/openPower_opfr_sample.xml diff --git a/examples/memcard4_ddr4/openPower_spdx_membuf4_ddr4_sample.xml b/examples/p8/memcard4_ddr4/openPower_spdx_membuf4_ddr4_sample.xml index 7d753d2..7d753d2 100644 --- a/examples/memcard4_ddr4/openPower_spdx_membuf4_ddr4_sample.xml +++ b/examples/p8/memcard4_ddr4/openPower_spdx_membuf4_ddr4_sample.xml diff --git a/examples/memcard4_ddr4/openPower_veir_MCsample.xml b/examples/p8/memcard4_ddr4/openPower_veir_MCsample.xml index 5948a09..5948a09 100644 --- a/examples/memcard4_ddr4/openPower_veir_MCsample.xml +++ b/examples/p8/memcard4_ddr4/openPower_veir_MCsample.xml diff --git a/examples/memcard4_ddr4/openPower_ver0_MCsample.xml b/examples/p8/memcard4_ddr4/openPower_ver0_MCsample.xml index 933c01c..933c01c 100644 --- a/examples/memcard4_ddr4/openPower_ver0_MCsample.xml +++ b/examples/p8/memcard4_ddr4/openPower_ver0_MCsample.xml diff --git a/examples/memcard4_ddr4/openPower_vini_sample.xml b/examples/p8/memcard4_ddr4/openPower_vini_sample.xml index 9245886..9245886 100644 --- a/examples/memcard4_ddr4/openPower_vini_sample.xml +++ b/examples/p8/memcard4_ddr4/openPower_vini_sample.xml diff --git a/examples/memcard4_ddr4/openPower_vmsc_sample.xml b/examples/p8/memcard4_ddr4/openPower_vmsc_sample.xml index cc65fbd..cc65fbd 100644 --- a/examples/memcard4_ddr4/openPower_vmsc_sample.xml +++ b/examples/p8/memcard4_ddr4/openPower_vmsc_sample.xml diff --git a/examples/memcard4_ddr4/openPower_vndr_sample.xml b/examples/p8/memcard4_ddr4/openPower_vndr_sample.xml index f8d6438..f8d6438 100644 --- a/examples/memcard4_ddr4/openPower_vndr_sample.xml +++ b/examples/p8/memcard4_ddr4/openPower_vndr_sample.xml diff --git a/examples/memcard4_ddr4/openPower_vrtn_sample.xml b/examples/p8/memcard4_ddr4/openPower_vrtn_sample.xml index 4c2a97e..4c2a97e 100644 --- a/examples/memcard4_ddr4/openPower_vrtn_sample.xml +++ b/examples/p8/memcard4_ddr4/openPower_vrtn_sample.xml diff --git a/examples/sysplanar/openPower_mer0_sample.xml b/examples/p8/sysplanar/openPower_mer0_sample.xml index b70f1bc..b70f1bc 100644 --- a/examples/sysplanar/openPower_mer0_sample.xml +++ b/examples/p8/sysplanar/openPower_mer0_sample.xml diff --git a/examples/sysplanar/openPower_opfr_sample.xml b/examples/p8/sysplanar/openPower_opfr_sample.xml index 95680a7..95680a7 100644 --- a/examples/sysplanar/openPower_opfr_sample.xml +++ b/examples/p8/sysplanar/openPower_opfr_sample.xml diff --git a/examples/sysplanar/openPower_osys_sample.xml b/examples/p8/sysplanar/openPower_osys_sample.xml index c2c1c62..c2c1c62 100644 --- a/examples/sysplanar/openPower_osys_sample.xml +++ b/examples/p8/sysplanar/openPower_osys_sample.xml diff --git a/examples/sysplanar/openPower_veir_sample.xml b/examples/p8/sysplanar/openPower_veir_sample.xml index 6d16f6d..6d16f6d 100644 --- a/examples/sysplanar/openPower_veir_sample.xml +++ b/examples/p8/sysplanar/openPower_veir_sample.xml diff --git a/examples/sysplanar/openPower_ver0_sample.xml b/examples/p8/sysplanar/openPower_ver0_sample.xml index f4b7a2e..f4b7a2e 100644 --- a/examples/sysplanar/openPower_ver0_sample.xml +++ b/examples/p8/sysplanar/openPower_ver0_sample.xml diff --git a/examples/sysplanar/openPower_vini_sample.xml b/examples/p8/sysplanar/openPower_vini_sample.xml index 5c2265a..5c2265a 100644 --- a/examples/sysplanar/openPower_vini_sample.xml +++ b/examples/p8/sysplanar/openPower_vini_sample.xml diff --git a/examples/sysplanar/openPower_vmsc_sample.xml b/examples/p8/sysplanar/openPower_vmsc_sample.xml index cc65fbd..cc65fbd 100644 --- a/examples/sysplanar/openPower_vmsc_sample.xml +++ b/examples/p8/sysplanar/openPower_vmsc_sample.xml diff --git a/examples/sysplanar/openPower_vndr_sample.xml b/examples/p8/sysplanar/openPower_vndr_sample.xml index f8d6438..f8d6438 100644 --- a/examples/sysplanar/openPower_vndr_sample.xml +++ b/examples/p8/sysplanar/openPower_vndr_sample.xml diff --git a/examples/sysplanar/openPower_vrtn_sample.xml b/examples/p8/sysplanar/openPower_vrtn_sample.xml index 4c2a97e..4c2a97e 100644 --- a/examples/sysplanar/openPower_vrtn_sample.xml +++ b/examples/p8/sysplanar/openPower_vrtn_sample.xml diff --git a/examples/sysplanar/sysplanar.tvpd b/examples/p8/sysplanar/sysplanar.tvpd index 0cbb258..0cbb258 100644 --- a/examples/sysplanar/sysplanar.tvpd +++ b/examples/p8/sysplanar/sysplanar.tvpd diff --git a/examples/sysplanar32_ddr3/openPower_mer0_sample.xml b/examples/p8/sysplanar32_ddr3/openPower_mer0_sample.xml index b70f1bc..b70f1bc 100644 --- a/examples/sysplanar32_ddr3/openPower_mer0_sample.xml +++ b/examples/p8/sysplanar32_ddr3/openPower_mer0_sample.xml diff --git a/examples/sysplanar32_ddr3/openPower_opfr_sample.xml b/examples/p8/sysplanar32_ddr3/openPower_opfr_sample.xml index 95680a7..95680a7 100644 --- a/examples/sysplanar32_ddr3/openPower_opfr_sample.xml +++ b/examples/p8/sysplanar32_ddr3/openPower_opfr_sample.xml diff --git a/examples/sysplanar32_ddr3/openPower_osys_sample.xml b/examples/p8/sysplanar32_ddr3/openPower_osys_sample.xml index c2c1c62..c2c1c62 100644 --- a/examples/sysplanar32_ddr3/openPower_osys_sample.xml +++ b/examples/p8/sysplanar32_ddr3/openPower_osys_sample.xml diff --git a/examples/sysplanar32_ddr3/openPower_spdx_membuf32_sample.xml b/examples/p8/sysplanar32_ddr3/openPower_spdx_membuf32_sample.xml index 5bf9a97..5bf9a97 100644 --- a/examples/sysplanar32_ddr3/openPower_spdx_membuf32_sample.xml +++ b/examples/p8/sysplanar32_ddr3/openPower_spdx_membuf32_sample.xml diff --git a/examples/sysplanar32_ddr3/openPower_veir_sample.xml b/examples/p8/sysplanar32_ddr3/openPower_veir_sample.xml index 6d16f6d..6d16f6d 100644 --- a/examples/sysplanar32_ddr3/openPower_veir_sample.xml +++ b/examples/p8/sysplanar32_ddr3/openPower_veir_sample.xml diff --git a/examples/sysplanar32_ddr3/openPower_ver0_sample.xml b/examples/p8/sysplanar32_ddr3/openPower_ver0_sample.xml index f4b7a2e..f4b7a2e 100644 --- a/examples/sysplanar32_ddr3/openPower_ver0_sample.xml +++ b/examples/p8/sysplanar32_ddr3/openPower_ver0_sample.xml diff --git a/examples/sysplanar32_ddr3/openPower_vini_sample.xml b/examples/p8/sysplanar32_ddr3/openPower_vini_sample.xml index 5c2265a..5c2265a 100644 --- a/examples/sysplanar32_ddr3/openPower_vini_sample.xml +++ b/examples/p8/sysplanar32_ddr3/openPower_vini_sample.xml diff --git a/examples/sysplanar32_ddr3/openPower_vmsc_sample.xml b/examples/p8/sysplanar32_ddr3/openPower_vmsc_sample.xml index cc65fbd..cc65fbd 100644 --- a/examples/sysplanar32_ddr3/openPower_vmsc_sample.xml +++ b/examples/p8/sysplanar32_ddr3/openPower_vmsc_sample.xml diff --git a/examples/sysplanar32_ddr3/openPower_vndr_sample.xml b/examples/p8/sysplanar32_ddr3/openPower_vndr_sample.xml index f8d6438..f8d6438 100644 --- a/examples/sysplanar32_ddr3/openPower_vndr_sample.xml +++ b/examples/p8/sysplanar32_ddr3/openPower_vndr_sample.xml diff --git a/examples/sysplanar32_ddr3/openPower_vrtn_sample.xml b/examples/p8/sysplanar32_ddr3/openPower_vrtn_sample.xml index 4c2a97e..4c2a97e 100644 --- a/examples/sysplanar32_ddr3/openPower_vrtn_sample.xml +++ b/examples/p8/sysplanar32_ddr3/openPower_vrtn_sample.xml diff --git a/examples/sysplanar32_ddr3/sysplanar32_ddr3.tvpd b/examples/p8/sysplanar32_ddr3/sysplanar32_ddr3.tvpd index 9959356..9959356 100644 --- a/examples/sysplanar32_ddr3/sysplanar32_ddr3.tvpd +++ b/examples/p8/sysplanar32_ddr3/sysplanar32_ddr3.tvpd diff --git a/examples/sysplanar32_ddr4/openPower_mer0_sample.xml b/examples/p8/sysplanar32_ddr4/openPower_mer0_sample.xml index b70f1bc..b70f1bc 100644 --- a/examples/sysplanar32_ddr4/openPower_mer0_sample.xml +++ b/examples/p8/sysplanar32_ddr4/openPower_mer0_sample.xml diff --git a/examples/sysplanar32_ddr4/openPower_opfr_sample.xml b/examples/p8/sysplanar32_ddr4/openPower_opfr_sample.xml index 95680a7..95680a7 100644 --- a/examples/sysplanar32_ddr4/openPower_opfr_sample.xml +++ b/examples/p8/sysplanar32_ddr4/openPower_opfr_sample.xml diff --git a/examples/sysplanar32_ddr4/openPower_osys_sample.xml b/examples/p8/sysplanar32_ddr4/openPower_osys_sample.xml index c2c1c62..c2c1c62 100644 --- a/examples/sysplanar32_ddr4/openPower_osys_sample.xml +++ b/examples/p8/sysplanar32_ddr4/openPower_osys_sample.xml diff --git a/examples/sysplanar32_ddr4/openPower_spdx_membuf32_ddr4_sample.xml b/examples/p8/sysplanar32_ddr4/openPower_spdx_membuf32_ddr4_sample.xml index 160a192..160a192 100644 --- a/examples/sysplanar32_ddr4/openPower_spdx_membuf32_ddr4_sample.xml +++ b/examples/p8/sysplanar32_ddr4/openPower_spdx_membuf32_ddr4_sample.xml diff --git a/examples/sysplanar32_ddr4/openPower_veir_sample.xml b/examples/p8/sysplanar32_ddr4/openPower_veir_sample.xml index 6d16f6d..6d16f6d 100644 --- a/examples/sysplanar32_ddr4/openPower_veir_sample.xml +++ b/examples/p8/sysplanar32_ddr4/openPower_veir_sample.xml diff --git a/examples/sysplanar32_ddr4/openPower_ver0_sample.xml b/examples/p8/sysplanar32_ddr4/openPower_ver0_sample.xml index f4b7a2e..f4b7a2e 100644 --- a/examples/sysplanar32_ddr4/openPower_ver0_sample.xml +++ b/examples/p8/sysplanar32_ddr4/openPower_ver0_sample.xml diff --git a/examples/sysplanar32_ddr4/openPower_vini_sample.xml b/examples/p8/sysplanar32_ddr4/openPower_vini_sample.xml index 5c2265a..5c2265a 100644 --- a/examples/sysplanar32_ddr4/openPower_vini_sample.xml +++ b/examples/p8/sysplanar32_ddr4/openPower_vini_sample.xml diff --git a/examples/sysplanar32_ddr4/openPower_vmsc_sample.xml b/examples/p8/sysplanar32_ddr4/openPower_vmsc_sample.xml index cc65fbd..cc65fbd 100644 --- a/examples/sysplanar32_ddr4/openPower_vmsc_sample.xml +++ b/examples/p8/sysplanar32_ddr4/openPower_vmsc_sample.xml diff --git a/examples/sysplanar32_ddr4/openPower_vndr_sample.xml b/examples/p8/sysplanar32_ddr4/openPower_vndr_sample.xml index f8d6438..f8d6438 100644 --- a/examples/sysplanar32_ddr4/openPower_vndr_sample.xml +++ b/examples/p8/sysplanar32_ddr4/openPower_vndr_sample.xml diff --git a/examples/sysplanar32_ddr4/openPower_vrtn_sample.xml b/examples/p8/sysplanar32_ddr4/openPower_vrtn_sample.xml index 4c2a97e..4c2a97e 100644 --- a/examples/sysplanar32_ddr4/openPower_vrtn_sample.xml +++ b/examples/p8/sysplanar32_ddr4/openPower_vrtn_sample.xml diff --git a/examples/sysplanar32_ddr4/sysplanar32_ddr4.tvpd b/examples/p8/sysplanar32_ddr4/sysplanar32_ddr4.tvpd index c48db63..c48db63 100644 --- a/examples/sysplanar32_ddr4/sysplanar32_ddr4.tvpd +++ b/examples/p8/sysplanar32_ddr4/sysplanar32_ddr4.tvpd diff --git a/examples/p9/sysplanar32_ddr4/openPower_memd_sample.xml b/examples/p9/sysplanar32_ddr4/openPower_memd_sample.xml new file mode 100644 index 0000000..8ad1843 --- /dev/null +++ b/examples/p9/sysplanar32_ddr4/openPower_memd_sample.xml @@ -0,0 +1,549 @@ +<?xml version="1.0"?> +<vpd> + + <record name="MEMD"> + <rdesc>Memory data record</rdesc> + + <keyword name="RT"> + <kwdesc>The Record Type keyword</kwdesc> + <kwformat>ascii</kwformat> + <kwlen>4</kwlen> + <kwdata>MEMD</kwdata> + </keyword> + + <keyword name="VD"> + <kwdesc>Record Version keyword</kwdesc> + <kwformat>ascii</kwformat> + <kwlen>2</kwlen> + <kwdata>01</kwdata> + </keyword> + + <keyword name="VM"> + <kwdesc>Memory data version keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>4</kwlen> + <kwdata>00000000</kwdata> + </keyword> + + <keyword name="MR"> + <kwdesc>Memory Rotator Mapper keyword </kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="J0"> + <kwdesc>Memory Rotator Data keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="J1"> + <kwdesc>Memory Rotator Data keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="J2"> + <kwdesc>Memory Rotator Data keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="J3"> + <kwdesc>Memory Rotator Data keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="J4"> + <kwdesc>Memory Rotator Data keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="J5"> + <kwdesc>Memory Rotator Data keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="J6"> + <kwdesc>Memory Rotator Data keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="J7"> + <kwdesc>Memory Rotator Data keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="J8"> + <kwdesc>Memory Rotator Data keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="J9"> + <kwdesc>Memory Rotator Data keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="JA"> + <kwdesc>Memory Rotator Data keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="JB"> + <kwdesc>Memory Rotator Data keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="JC"> + <kwdesc>Memory Rotator Data keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="JD"> + <kwdesc>Memory Rotator Data keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="JE"> + <kwdesc>Memory Rotator Data keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="JF"> + <kwdesc>Memory Rotator Data keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="JG"> + <kwdesc>Memory Rotator Data keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="JH"> + <kwdesc>Memory Rotator Data keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="JI"> + <kwdesc>Memory Rotator Data keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="JJ"> + <kwdesc>Memory Rotator Data keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="JK"> + <kwdesc>Memory Rotator Data keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="JL"> + <kwdesc>Memory Rotator Data keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="JM"> + <kwdesc>Memory Rotator Data keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="JN"> + <kwdesc>Memory Rotator Data keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="JO"> + <kwdesc>Memory Rotator Data keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="JP"> + <kwdesc>Memory Rotator Data keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="JQ"> + <kwdesc>Memory Rotator Data keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="JR"> + <kwdesc>Memory Rotator Data keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="JS"> + <kwdesc>Memory Rotator Data keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="JT"> + <kwdesc>Memory Rotator Data keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="JU"> + <kwdesc>Memory Rotator Data keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="JV"> + <kwdesc>Memory Rotator Data keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="JW"> + <kwdesc>Memory Rotator Data keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="JX"> + <kwdesc>Memory Rotator Data keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="JY"> + <kwdesc>Memory Rotator Data keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="JZ"> + <kwdesc>Memory Rotator Data keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="MT"> + <kwdesc>Memory Terminator Mapper keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="X0"> + <kwdesc>Memory Terminator Mapper keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="X1"> + <kwdesc>Memory Terminator Mapper keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="X2"> + <kwdesc>Memory Terminator Mapper keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="X3"> + <kwdesc>Memory Terminator Mapper keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="X4"> + <kwdesc>Memory Terminator Mapper keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="X5"> + <kwdesc>Memory Terminator Mapper keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="X6"> + <kwdesc>Memory Terminator Mapper keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="X7"> + <kwdesc>Memory Terminator Mapper keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="X8"> + <kwdesc>Memory Terminator Mapper keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="X9"> + <kwdesc>Memory Terminator Mapper keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="XA"> + <kwdesc>Memory Terminator Mapper keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="XB"> + <kwdesc>Memory Terminator Mapper keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="XC"> + <kwdesc>Memory Terminator Mapper keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="XD"> + <kwdesc>Memory Terminator Mapper keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="XE"> + <kwdesc>Memory Terminator Mapper keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="XF"> + <kwdesc>Memory Terminator Mapper keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="XG"> + <kwdesc>Memory Terminator Mapper keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="XH"> + <kwdesc>Memory Terminator Mapper keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="XI"> + <kwdesc>Memory Terminator Mapper keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="XJ"> + <kwdesc>Memory Terminator Mapper keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="XK"> + <kwdesc>Memory Terminator Mapper keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="XL"> + <kwdesc>Memory Terminator Mapper keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="XM"> + <kwdesc>Memory Terminator Mapper keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="XN"> + <kwdesc>Memory Terminator Mapper keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="XO"> + <kwdesc>Memory Terminator Mapper keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="XP"> + <kwdesc>Memory Terminator Mapper keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="XQ"> + <kwdesc>Memory Terminator Mapper keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="XR"> + <kwdesc>Memory Terminator Mapper keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="XS"> + <kwdesc>Memory Terminator Mapper keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="XT"> + <kwdesc>Memory Terminator Mapper keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="XU"> + <kwdesc>Memory Terminator Mapper keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="XV"> + <kwdesc>Memory Terminator Mapper keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="XW"> + <kwdesc>Memory Terminator Mapper keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="XX"> + <kwdesc>Memory Terminator Mapper keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="XY"> + <kwdesc>Memory Terminator Mapper keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="XZ"> + <kwdesc>Memory Terminator Mapper keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>255</kwlen> + <kwdata>00</kwdata> + </keyword> + + </record> + +</vpd> + diff --git a/examples/p9/sysplanar32_ddr4/openPower_mer0_sample.xml b/examples/p9/sysplanar32_ddr4/openPower_mer0_sample.xml new file mode 100644 index 0000000..cdb7c41 --- /dev/null +++ b/examples/p9/sysplanar32_ddr4/openPower_mer0_sample.xml @@ -0,0 +1,23 @@ +<?xml version="1.0"?> +<vpd> + + <record name="MER0"> + <rdesc>The Manufacturing repair data record</rdesc> + + <keyword name="RT"> + <kwdesc>The Record Type keyword</kwdesc> + <kwformat>ascii</kwformat> + <kwlen>4</kwlen> + <kwdata>MER0</kwdata> + </keyword> + + <keyword name="#I"> + <kwdesc>Repair Data </kwdesc> + <kwformat>hex</kwformat> + <kwlen>198</kwlen> + <kwdata>455202062000</kwdata> + </keyword> + + </record> + +</vpd> diff --git a/examples/p9/sysplanar32_ddr4/openPower_opfr_sample.xml b/examples/p9/sysplanar32_ddr4/openPower_opfr_sample.xml new file mode 100644 index 0000000..7416f58 --- /dev/null +++ b/examples/p9/sysplanar32_ddr4/openPower_opfr_sample.xml @@ -0,0 +1,58 @@ +<?xml version="1.0"?> +<vpd> + + <record name="OPFR"> + <rdesc>The OPFR record</rdesc> + + <keyword name="RT"> + <kwdesc>The Record Type keyword</kwdesc> + <kwformat>ascii</kwformat> + <kwlen>4</kwlen> + <kwdata>OPFR</kwdata> + </keyword> + + <keyword name="VD"> + <kwdesc>Record Version</kwdesc> + <kwformat>ascii</kwformat> + <kwlen>2</kwlen> + <kwdata>02</kwdata> + </keyword> + + <keyword name="VN"> + <kwdesc>Vendor Name</kwdesc> + <kwformat>ascii</kwformat> + <kwlen>16</kwlen> + <kwdata>0000000000000000</kwdata> + </keyword> + + <keyword name="DR"> + <kwdesc>FRU Description</kwdesc> + <kwformat>ascii</kwformat> + <kwlen>16</kwlen> + <kwdata>SYSTEM PLANAR </kwdata> + </keyword> + + <keyword name="VP"> + <kwdesc>Card Part Number</kwdesc> + <kwformat>ascii</kwformat> + <kwlen>16</kwlen> + <kwdata>0000000000000000</kwdata> + </keyword> + + <keyword name="VS"> + <kwdesc>Card Serial Number</kwdesc> + <kwformat>ascii</kwformat> + <kwlen>16</kwlen> + <kwdata>0000000000000000</kwdata> + </keyword> + + <keyword name="MB"> + <kwdesc>Manufacturing Build Date</kwdesc> + <kwformat>hex</kwformat> + <kwlen>8</kwlen> + <kwdata>0000000000000000</kwdata> + </keyword> + + </record> + +</vpd> diff --git a/examples/p9/sysplanar32_ddr4/openPower_osys_sample.xml b/examples/p9/sysplanar32_ddr4/openPower_osys_sample.xml new file mode 100644 index 0000000..c2c1c62 --- /dev/null +++ b/examples/p9/sysplanar32_ddr4/openPower_osys_sample.xml @@ -0,0 +1,51 @@ +<?xml version="1.0"?> +<vpd> + + <record name="OSYS"> + <rdesc>The OpenPower System Record</rdesc> + + <keyword name="RT"> + <kwdesc>The Record Type keyword</kwdesc> + <kwformat>ascii</kwformat> + <kwlen>4</kwlen> + <kwdata>OSYS</kwdata> + </keyword> + + <keyword name="VD"> + <kwdesc>Record Version</kwdesc> + <kwformat>ascii</kwformat> + <kwlen>2</kwlen> + <kwdata>01</kwdata> + </keyword> + + <keyword name="DR"> + <kwdesc>FRU Description</kwdesc> + <kwformat>ascii</kwformat> + <kwlen>16</kwlen> + <kwdata>SYSTEM </kwdata> + </keyword> + + <keyword name="MM"> + <kwdesc>Machine Type Model</kwdesc> + <kwformat>ascii</kwformat> + <kwlen>16</kwlen> + <kwdata>0000000000000000</kwdata> + </keyword> + + <keyword name="SS"> + <kwdesc>System Serial Number</kwdesc> + <kwformat>ascii</kwformat> + <kwlen>16</kwlen> + <kwdata>0000000000000000</kwdata> + </keyword> + + <keyword name="ET"> + <kwdesc>Enclosure Type</kwdesc> + <kwformat>hex</kwformat> + <kwlen>1</kwlen> + <kwdata>02</kwdata> + </keyword> + + </record> + +</vpd> diff --git a/examples/p9/sysplanar32_ddr4/openPower_ver0_sample.xml b/examples/p9/sysplanar32_ddr4/openPower_ver0_sample.xml new file mode 100644 index 0000000..a834cc2 --- /dev/null +++ b/examples/p9/sysplanar32_ddr4/openPower_ver0_sample.xml @@ -0,0 +1,22 @@ +<?xml version="1.0"?> +<vpd> + <record name="VER0"> + <rdesc>The Vendor repair data record</rdesc> + + <keyword name="RT"> + <kwdesc>The Record Type keyword</kwdesc> + <kwformat>ascii</kwformat> + <kwlen>4</kwlen> + <kwdata>VER0</kwdata> + </keyword> + + <keyword name="#I"> + <kwdesc>Repair Data </kwdesc> + <kwformat>hex</kwformat> + <kwlen>198</kwlen> + <kwdata>455202062000</kwdata> + </keyword> + + </record> + +</vpd> diff --git a/examples/p9/sysplanar32_ddr4/openPower_vini_sample.xml b/examples/p9/sysplanar32_ddr4/openPower_vini_sample.xml new file mode 100644 index 0000000..7acf3b6 --- /dev/null +++ b/examples/p9/sysplanar32_ddr4/openPower_vini_sample.xml @@ -0,0 +1,107 @@ +<?xml version="1.0"?> +<vpd> + + <record name="VINI"> + <rdesc>Initial VPD Record</rdesc> + + <keyword name="RT"> + <kwdesc>The Record Type keyword</kwdesc> + <kwformat>ascii</kwformat> + <kwlen>4</kwlen> + <kwdata>VINI</kwdata> + </keyword> + + <keyword name="DR"> + <kwdesc>Description</kwdesc> + <kwformat>ascii</kwformat> + <kwlen>16</kwlen> + <kwdata>SYSTEM PLANAR </kwdata> + </keyword> + + <keyword name="CE"> + <kwdesc>CCIN Extension</kwdesc> + <kwformat>ascii</kwformat> + <kwlen>1</kwlen> + <kwdata>1</kwdata> + </keyword> + + <keyword name="VZ"> + <kwdesc>Overall VPD version</kwdesc> + <kwformat>ascii</kwformat> + <kwlen>2</kwlen> + <kwdata>01</kwdata> + </keyword> + + <keyword name="FN"> + <kwdesc>FRU Number</kwdesc> + <kwformat>ascii</kwformat> + <kwlen>7</kwlen> + <kwdata>0000000</kwdata> + </keyword> + + <keyword name="PN"> + <kwdesc>Card Part Number</kwdesc> + <kwformat>ascii</kwformat> + <kwlen>7</kwlen> + <kwdata>0000000</kwdata> + </keyword> + + <keyword name="SN"> + <kwdesc>Card Serial Number</kwdesc> + <kwformat>ascii</kwformat> + <kwlen>12</kwlen> + <kwdata>000000000000</kwdata> + </keyword> + + <keyword name="CC"> + <kwdesc>Card CCIN Number</kwdesc> + <kwformat>ascii</kwformat> + <kwlen>4</kwlen> + <kwdata>P0XX</kwdata> + </keyword> + + <keyword name="HE"> + <kwdesc>Hardware EC</kwdesc> + <kwformat>ascii</kwformat> + <kwlen>4</kwlen> + <kwdata>0001</kwdata> + </keyword> + + <keyword name="CT"> + <kwdesc>Card Type</kwdesc> + <kwformat>hex</kwformat> + <kwlen>4</kwlen> + <kwdata>00000000</kwdata> + </keyword> + + <keyword name="HW"> + <kwdesc>Hardware Level</kwdesc> + <kwformat>hex</kwformat> + <kwlen>2</kwlen> + <kwdata>0001</kwdata> + </keyword> + + <keyword name="B3"> + <kwdesc>Hardware Characteristics</kwdesc> + <kwformat>hex</kwformat> + <kwlen>6</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="B4"> + <kwdesc>Manufacturing FRU Control</kwdesc> + <kwformat>hex</kwformat> + <kwlen>1</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="B7"> + <kwdesc>Hardware Level</kwdesc> + <kwformat>hex</kwformat> + <kwlen>12</kwlen> + <kwdata>00</kwdata> + </keyword> + + </record> + +</vpd> diff --git a/examples/p9/sysplanar32_ddr4/openPower_vmsc_sample.xml b/examples/p9/sysplanar32_ddr4/openPower_vmsc_sample.xml new file mode 100644 index 0000000..cc65fbd --- /dev/null +++ b/examples/p9/sysplanar32_ddr4/openPower_vmsc_sample.xml @@ -0,0 +1,23 @@ +<?xml version="1.0"?> +<vpd> + + <record name="VMSC"> + <rdesc>The VMSC record</rdesc> + + <keyword name="RT"> + <kwdesc>The Record Type keyword</kwdesc> + <kwformat>ascii</kwformat> + <kwlen>4</kwlen> + <kwdata>VMSC</kwdata> + </keyword> + + <keyword name="IN"> + <kwdesc>Free Space for Software Data</kwdesc> + <kwformat>hex</kwformat> + <kwlen>205</kwlen> + <kwdata>00</kwdata> + </keyword> + + </record> + +</vpd> diff --git a/examples/p9/sysplanar32_ddr4/openPower_vndr_sample.xml b/examples/p9/sysplanar32_ddr4/openPower_vndr_sample.xml new file mode 100644 index 0000000..f8d6438 --- /dev/null +++ b/examples/p9/sysplanar32_ddr4/openPower_vndr_sample.xml @@ -0,0 +1,30 @@ +<?xml version="1.0"?> +<vpd> + + <record name="VNDR"> + <rdesc>The VNDR record</rdesc> + + <keyword name="RT"> + <kwdesc>The Record Type keyword</kwdesc> + <kwformat>ascii</kwformat> + <kwlen>4</kwlen> + <kwdata>VNDR</kwdata> + </keyword> + + <keyword name="VD"> + <kwdesc>Record Version</kwdesc> + <kwformat>ascii</kwformat> + <kwlen>2</kwlen> + <kwdata>01</kwdata> + </keyword> + + <keyword name="IN"> + <kwdesc>Vendor Specific Data</kwdesc> + <kwformat>hex</kwformat> + <kwlen>128</kwlen> + <kwdata>00</kwdata> + </keyword> + + </record> + +</vpd> diff --git a/examples/p9/sysplanar32_ddr4/openPower_vrtn_sample.xml b/examples/p9/sysplanar32_ddr4/openPower_vrtn_sample.xml new file mode 100644 index 0000000..4c2a97e --- /dev/null +++ b/examples/p9/sysplanar32_ddr4/openPower_vrtn_sample.xml @@ -0,0 +1,37 @@ +<?xml version="1.0"?> +<vpd> + + <record name="VRTN"> + <rdesc>The VRTN record</rdesc> + + <keyword name="RT"> + <kwdesc>The Record Type keyword</kwdesc> + <kwformat>ascii</kwformat> + <kwlen>4</kwlen> + <kwdata>VRTN</kwdata> + </keyword> + + <keyword name="SO"> + <kwdesc>The SO keyword</kwdesc> + <kwformat>hex</kwformat> + <kwlen>2</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="IN"> + <kwdesc>Free Space for Sofware Data</kwdesc> + <kwformat>hex</kwformat> + <kwlen>254</kwlen> + <kwdata>00</kwdata> + </keyword> + + <keyword name="I2"> + <kwdesc>Additional Free Space for Sofware Data</kwdesc> + <kwformat>hex</kwformat> + <kwlen>254</kwlen> + <kwdata>00</kwdata> + </keyword> + + </record> + +</vpd> diff --git a/examples/p9/sysplanar32_ddr4/sysplanar32_ddr4.tvpd b/examples/p9/sysplanar32_ddr4/sysplanar32_ddr4.tvpd new file mode 100644 index 0000000..edac7a9 --- /dev/null +++ b/examples/p9/sysplanar32_ddr4/sysplanar32_ddr4.tvpd @@ -0,0 +1,46 @@ +<?xml version="1.0"?> +<vpd> + <!-- OpenPower P9 system Planar with direct attached ISDIMM FRU VPD--> + <!-- DDR4 ISDIMMs are plugged onto this system board --> + + <name>FILENAME</name> + <size>64kb</size> + <VD>01</VD> + + <record name="VINI"> + <rtvpdfile>openPower_vini_sample.xml</rtvpdfile> + </record> + + <record name="OSYS"> + <rtvpdfile>openPower_osys_sample.xml</rtvpdfile> + </record> + + <record name="OPFR"> + <rtvpdfile>openPower_opfr_sample.xml</rtvpdfile> + </record> + + <record name="VNDR"> + <rtvpdfile>openPower_vndr_sample.xml</rtvpdfile> + </record> + + <record name="MEMD"> + <rtvpdfile>openPower_memd_sample.xml</rtvpdfile> + </record> + + <record name="VER0"> + <rtvpdfile>openPower_ver0_sample.xml</rtvpdfile> + </record> + + <record name="MER0"> + <rtvpdfile>openPower_mer0_sample.xml</rtvpdfile> + </record> + + <record name="VMSC"> + <rtvpdfile>openPower_vmsc_sample.xml</rtvpdfile> + </record> + + <record name="VRTN"> + <rtvpdfile>openPower_vrtn_sample.xml</rtvpdfile> + </record> + +</vpd> |