summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/include/usr/devicefw/userif.H26
-rw-r--r--src/include/usr/vpd/memd_vpdenums.H180
-rw-r--r--src/usr/fapi2/plat_vpd_access.C5
-rw-r--r--src/usr/vpd/ipvpd.H22
-rw-r--r--src/usr/vpd/memd_vpd.C228
-rw-r--r--src/usr/vpd/memd_vpd.H227
-rw-r--r--src/usr/vpd/vpd.H3
-rw-r--r--src/usr/vpd/vpd.mk3
8 files changed, 688 insertions, 6 deletions
diff --git a/src/include/usr/devicefw/userif.H b/src/include/usr/devicefw/userif.H
index 5f42ff8f4..286deabb1 100644
--- a/src/include/usr/devicefw/userif.H
+++ b/src/include/usr/devicefw/userif.H
@@ -67,6 +67,7 @@ namespace DeviceFW
SIO,
AHB_SIO,
DVPD, // Direct access memory VPD
+ MEMD_VPD,
LAST_ACCESS_TYPE,
};
@@ -252,6 +253,31 @@ namespace DeviceFW
DeviceFW::DVPD, static_cast<uint64_t>(( i_record )),\
static_cast<uint64_t>(( i_keyword )),\
static_cast<uint64_t>(( i_location ))
+
+ /**
+ * Construct the device addressing parameters for the DVPD (Direct access
+ * memory VPD) device ops.
+ * @param[in] i_record - The enumeration of the DVPD record to access.
+ * @param[in] i_keyword - The enumeration of the DVPD keyword, located
+ * within the i_record Record to access.
+ */
+ #define DEVICE_MEMD_VPD_ADDRESS( i_record, i_keyword )\
+ DEVICE_MEMD_VPD_FORCE_ADDRESS( i_record, i_keyword, VPD::PNOR )
+
+ /**
+ * Construct the device addressing parameters for the DVPD device ops.
+ * @param[in] i_record - The enumeration of the DVPD record to access.
+ * @param[in] i_keyword - The enumeration of the DVPD keyword, located
+ * within the i_record Record to access.
+ * @param[in] i_location - The location of the data (PNOR/SEEPROM)
+ see vpd_if.H
+ */
+ #define DEVICE_MEMD_VPD_FORCE_ADDRESS( i_record, i_keyword, i_location )\
+ DeviceFW::MEMD_VPD, static_cast<uint64_t>(( i_record )),\
+ static_cast<uint64_t>(( i_keyword )),\
+ static_cast<uint64_t>(( i_location ))
+
+
/**
* Construct the device addressing parameters for the SCAN device ops.
* @param[in] i_ring - The ring address to scan
diff --git a/src/include/usr/vpd/memd_vpdenums.H b/src/include/usr/vpd/memd_vpdenums.H
new file mode 100644
index 000000000..345d77d60
--- /dev/null
+++ b/src/include/usr/vpd/memd_vpdenums.H
@@ -0,0 +1,180 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/include/usr/vpd/memd_vpdenums.H $ */
+/* */
+/* OpenPOWER HostBoot Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2013,2017 */
+/* [+] International Business Machines Corp. */
+/* */
+/* */
+/* Licensed under the Apache License, Version 2.0 (the "License"); */
+/* you may not use this file except in compliance with the License. */
+/* You may obtain a copy of the License at */
+/* */
+/* http://www.apache.org/licenses/LICENSE-2.0 */
+/* */
+/* Unless required by applicable law or agreed to in writing, software */
+/* distributed under the License is distributed on an "AS IS" BASIS, */
+/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */
+/* implied. See the License for the specific language governing */
+/* permissions and limitations under the License. */
+/* */
+/* IBM_PROLOG_END_TAG */
+#ifndef __MEMD_VPDENUMS_H
+#define __MEMD_VPDENUMS_H
+
+#include <vpd/ipvpdenums.H>
+
+namespace MEMD_VPD
+{
+
+ /**
+ * @brief Enumeration for the MEMD_VPD Records that contain
+ * the keyword enumerations below.
+ */
+ enum MEMD_VPDRecord
+ {
+ MEMD_VPD_FIRST_RECORD = 0x00,
+ VINI = MEMD_VPD_FIRST_RECORD,
+ MEMD = 0x01,
+
+ // Last Record
+ MEMD_VPD_LAST_RECORD,
+ MEMD_VPD_TEST_RECORD, // Test purposes ONLY!
+
+ //Start common IPVPD enums
+ MEMD_VPD_INVALID_RECORD = IPVPD::INVALID_RECORD,
+ };
+
+ /**
+ * @brief Enumerations for MEMD_VPD keywords that can be
+ * accessed in the MEMD_VPD.
+ */
+ enum MEMD_VPDKeyword
+ {
+ MEMD_VPD_FIRST_KEYWORD = 0x00,
+ B3 = MEMD_VPD_FIRST_KEYWORD,
+ B4 = 0x01,
+ B7 = 0x02,
+ CC = 0x03,
+ CE = 0x04,
+ CT = 0x05,
+ DR = 0x06,
+ FC = 0x07,
+ FN = 0x08,
+ HE = 0x09,
+ HW = 0x0a,
+ I2 = 0x0b,
+ IN = 0x0c,
+ J0 = 0x0d,
+ J1 = 0x0e,
+ J2 = 0x0f,
+ J3 = 0x10,
+ J4 = 0x11,
+ J5 = 0x12,
+ J6 = 0x13,
+ J7 = 0x14,
+ J8 = 0x15,
+ J9 = 0x16,
+ JA = 0x17,
+ JB = 0x18,
+ JC = 0x19,
+ JD = 0x1a,
+ JE = 0x1b,
+ JF = 0x1c,
+ JG = 0x1d,
+ JH = 0x1e,
+ JI = 0x1f,
+ JJ = 0x20,
+ JK = 0x21,
+ JL = 0x22,
+ JM = 0x23,
+ JN = 0x24,
+ JO = 0x25,
+ JP = 0x26,
+ JQ = 0x27,
+ JR = 0x28,
+ JS = 0x29,
+ JT = 0x2a,
+ JU = 0x2b,
+ JV = 0x2c,
+ JW = 0x2d,
+ JX = 0x2e,
+ JY = 0x2f,
+ JZ = 0x30,
+ LX = 0x31,
+ MR = 0x32,
+ MT = 0x33,
+ PF = 0x34,
+ PN = 0x35,
+ PR = 0x36,
+ RB = 0x37,
+ RG = 0x38,
+ RT = 0x39,
+ SE = 0x3a,
+ SN = 0x3b,
+ SO = 0x3c,
+ TM = 0x3d,
+ VM = 0x3e,
+ VZ = 0x3f,
+ X0 = 0x40,
+ X1 = 0x41,
+ X2 = 0x42,
+ X3 = 0x43,
+ X4 = 0x44,
+ X5 = 0x45,
+ X6 = 0x46,
+ X7 = 0x47,
+ X8 = 0x48,
+ X9 = 0x49,
+ XA = 0x4a,
+ XB = 0x4b,
+ XC = 0x4c,
+ XD = 0x4d,
+ XE = 0x4e,
+ XF = 0x4f,
+ XG = 0x50,
+ XH = 0x51,
+ XI = 0x52,
+ XJ = 0x53,
+ XK = 0x54,
+ XL = 0x55,
+ XM = 0x56,
+ XN = 0x57,
+ XO = 0x58,
+ XP = 0x59,
+ XQ = 0x5a,
+ XR = 0x5b,
+ XS = 0x5c,
+ XT = 0x5d,
+ XU = 0x5e,
+ XV = 0x5f,
+ XW = 0x60,
+ XX = 0x61,
+ XY = 0x62,
+ XZ = 0x63,
+ Q0 = 0x64,
+ Q1 = 0x65,
+ Q2 = 0x66,
+ Q3 = 0x67,
+ Q4 = 0x68,
+ Q5 = 0x69,
+ Q6 = 0x6A,
+ Q7 = 0x6B,
+ Q8 = 0x6C,
+ CK = 0X6D,
+
+ // Last Keyword
+ MEMD_VPD_LAST_KEYWORD,
+ MEMD_VPD_TEST_KEYWORD, // Test purposes ONLY!
+
+ //Start common IPVPD enums
+ FULL_RECORD = IPVPD::FULL_RECORD,
+ MEMD_VPD_INVALID_KEYWORD = IPVPD::INVALID_KEYWORD,
+ };
+
+}; // end MEMD_VPD
+
+#endif
diff --git a/src/usr/fapi2/plat_vpd_access.C b/src/usr/fapi2/plat_vpd_access.C
index 878441898..3adc5b514 100644
--- a/src/usr/fapi2/plat_vpd_access.C
+++ b/src/usr/fapi2/plat_vpd_access.C
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2012,2016 */
+/* Contributors Listed Below - COPYRIGHT 2012,2017 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -35,7 +35,8 @@
#include <p9_get_mem_vpd_keyword.H>
#include <attribute_service.H>
#include <vpd/dvpdenums.H>
-
+#include <vpd/memd_vpdenums.H>
+#include <pnor/pnorif.H>
//The following can be uncommented for unit testing
//#undef FAPI_DBG
diff --git a/src/usr/vpd/ipvpd.H b/src/usr/vpd/ipvpd.H
index e4c416238..299233eac 100644
--- a/src/usr/vpd/ipvpd.H
+++ b/src/usr/vpd/ipvpd.H
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2013,2015 */
+/* Contributors Listed Below - COPYRIGHT 2013,2017 */
/* [+] Google Inc. */
/* [+] International Business Machines Corp. */
/* */
@@ -378,7 +378,7 @@ class IpVpdFacade
*
* @return bool - True if the record is found, False otherwise.
*/
- bool recordPresent( const char * i_record,
+ virtual bool recordPresent( const char * i_record,
uint16_t & offset,
TARGETING::Target * i_target,
VPD::vpdCmdTarget i_location );
@@ -719,6 +719,24 @@ class IpVpdFacade
const recordInfo* iv_vpdRecords;
/**
+ * @brief Returns the cached pnor address
+ *
+ */
+ inline static uint64_t getPnorAddr(const IpVpdFacade& x)
+ {
+ return x.iv_cachePnorAddr;
+ }
+
+ /**
+ * @brief Set the cached pnor address to the given value
+ *
+ */
+ inline void setPnorAddr(uint64_t i_pnorAddr)
+ {
+ this->iv_cachePnorAddr = i_pnorAddr;
+ }
+
+ /**
* @brief Number of VPD Records for current chip
*
*/
diff --git a/src/usr/vpd/memd_vpd.C b/src/usr/vpd/memd_vpd.C
new file mode 100644
index 000000000..22147100e
--- /dev/null
+++ b/src/usr/vpd/memd_vpd.C
@@ -0,0 +1,228 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/vpd/memd_vpd.C $ */
+/* */
+/* OpenPOWER HostBoot Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2013,2017 */
+/* [+] International Business Machines Corp. */
+/* */
+/* */
+/* Licensed under the Apache License, Version 2.0 (the "License"); */
+/* you may not use this file except in compliance with the License. */
+/* You may obtain a copy of the License at */
+/* */
+/* http://www.apache.org/licenses/LICENSE-2.0 */
+/* */
+/* Unless required by applicable law or agreed to in writing, software */
+/* distributed under the License is distributed on an "AS IS" BASIS, */
+/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */
+/* implied. See the License for the specific language governing */
+/* permissions and limitations under the License. */
+/* */
+/* IBM_PROLOG_END_TAG */
+// ----------------------------------------------
+// Includes
+// ----------------------------------------------
+#include <string.h>
+#include <endian.h>
+#include <trace/interface.H>
+#include <errl/errlentry.H>
+#include <errl/errlmanager.H>
+#include <targeting/common/targetservice.H>
+#include <targeting/common/util.H>
+#include <targeting/common/utilFilter.H>
+#include <devicefw/driverif.H>
+#include <vfs/vfs.H>
+#include <vpd/vpdreasoncodes.H>
+#include <vpd/memd_vpdenums.H>
+#include <vpd/vpd_if.H>
+#include <i2c/eepromif.H>
+#include <config.h>
+#include "memd_vpd.H"
+#include "cvpd.H"
+#include "vpd.H"
+#include "pvpd.H"
+#include <initservice/initserviceif.H>
+
+// ----------------------------------------------
+// Trace definitions
+// ----------------------------------------------
+extern trace_desc_t* g_trac_vpd;
+
+
+// ------------------------
+// Macros for unit testing
+//#define TRACUCOMP(args...) TRACFCOMP(args)
+#define TRACUCOMP(args...)
+//#define TRACSSCOMP(args...) TRACFCOMP(args)
+#define TRACSSCOMP(args...)
+
+namespace MEMD_VPD
+{
+ // ----------------------------------------------
+ // Globals
+ // ----------------------------------------------
+ mutex_t g_mutex = MUTEX_INITIALIZER;
+
+
+ /**
+ * @brief This function will perform the steps required to do a read from
+ * the Hostboot MEMD_VPD data.
+ *
+ * @param[in] i_opType - Operation Type - See DeviceFW::OperationType in
+ * driververif.H
+ *
+ * @param[in] i_target - Processor Target device
+ *
+ * @param [in/out] io_buffer - Pointer to the data that was read from
+ * the target device. This parameter, when set to NULL, will return
+ * the keyword size value in io_buflen.
+ *
+ * @param [in/out] io_buflen - Length of the buffer to be read or written
+ * to/from the target. This value should indicate the size of the
+ * io_buffer parameter that has been allocated. Being returned it
+ * will indicate the number of valid bytes in the buffer being
+ * returned. This parameter will contain the size of a keyword when
+ * the io_buffer parameter is passed in NULL.
+ *
+ * @param [in] i_accessType - Access Type - See DeviceFW::AccessType in
+ * usrif.H
+ *
+ * @param [in] i_args - This is an argument list for the device driver
+ * framework.
+ *
+ * @return errlHndl_t - NULL if successful, otherwise a pointer to the
+ * error log.
+ */
+ errlHndl_t MEMD_VPDRead ( DeviceFW::OperationType i_opType,
+ TARGETING::Target * i_target,
+ void * io_buffer,
+ size_t & io_buflen,
+ int64_t i_accessType,
+ va_list i_args )
+ {
+ errlHndl_t err = NULL;
+ IpVpdFacade::input_args_t args;
+ args.record = ((MEMD_VPDRecord)va_arg( i_args, uint64_t ));
+ args.keyword = ((MEMD_VPDKeyword)va_arg( i_args, uint64_t ));
+ args.location = ((VPD::vpdCmdTarget)va_arg( i_args, uint64_t ));
+
+ TRACSSCOMP( g_trac_vpd,
+ ENTER_MRK"MEMD_VPDRead()" );
+
+ err = Singleton<MEMD_VpdFacade>::instance().read(i_target,
+ io_buffer,
+ io_buflen,
+ args);
+
+ return err;
+ }
+
+
+ /**
+ * @brief This function will perform the steps required to do a write to
+ * the Hostboot MEMD_VPD data.
+ *
+ * @param[in] i_opType - Operation Type - See DeviceFW::OperationType in
+ * driververif.H
+ *
+ * @param[in] i_target - Processor Target device
+ *
+ * @param [in/out] io_buffer - Pointer to the data that was read from
+ * the target device. It will also be used to contain data to
+ * be written to the device.
+ *
+ * @param [in/out] io_buflen - Length of the buffer to be read or written
+ * to/from the target. This value should indicate the size of the
+ * io_buffer parameter that has been allocated. Being returned it
+ * will indicate the number of valid bytes in the buffer being
+ * returned.
+ *
+ * @param [in] i_accessType - Access Type - See DeviceFW::AccessType in
+ * usrif.H
+ *
+ * @param [in] i_args - This is an argument list for the device driver
+ * framework.
+ *
+ * @return errlHndl_t - NULL if successful, otherwise a pointer to the
+ * error log.
+ */
+ errlHndl_t MEMD_VPDWrite ( DeviceFW::OperationType i_opType,
+ TARGETING::Target * i_target,
+ void * io_buffer,
+ size_t & io_buflen,
+ int64_t i_accessType,
+ va_list i_args )
+ {
+ errlHndl_t err = NULL;
+ IpVpdFacade::input_args_t args;
+ args.record = ((MEMD_VPDRecord)va_arg( i_args, uint64_t ));
+ args.keyword = ((MEMD_VPDKeyword)va_arg( i_args, uint64_t ));
+ args.location = ((VPD::vpdCmdTarget)va_arg( i_args, uint64_t ));
+
+ TRACSSCOMP( g_trac_vpd,
+ ENTER_MRK"MEMD_VPDWrite()" );
+
+
+ err = Singleton<MEMD_VpdFacade>::instance().write(i_target,
+ io_buffer,
+ io_buflen,
+ args);
+
+ return err;
+ }
+
+ // Register with the routing code
+ DEVICE_REGISTER_ROUTE( DeviceFW::READ,
+ DeviceFW::MEMD_VPD,
+ TARGETING::TYPE_MCS,
+ MEMD_VPDRead );
+ DEVICE_REGISTER_ROUTE( DeviceFW::WRITE,
+ DeviceFW::MEMD_VPD,
+ TARGETING::TYPE_MCS,
+ MEMD_VPDWrite );
+
+}; // end namespace MEMD_VPD
+
+
+//MEMD_VpdFacade Class Functions
+/**
+ * @brief Constructor
+ * Planar VPD is included in the Centaur PNOR section.
+ * Including with Centaur vpd minimizes the number of PNOR sections.
+ */
+MEMD_VpdFacade::MEMD_VpdFacade() :
+IpVpdFacade(MEMD_VPD::SECTION_SIZE,
+ MEMD_VPD::MAX_SECTIONS,
+ MEMD_VPD::MEMD_VPDRecords,
+ (sizeof(MEMD_VPD::MEMD_VPDRecords)/sizeof(
+ MEMD_VPD::MEMD_VPDRecords[0])),
+ MEMD_VPD::MEMD_VPDKeywords,
+ (sizeof(MEMD_VPD::MEMD_VPDKeywords)/sizeof(
+ MEMD_VPD::MEMD_VPDKeywords[0])),
+ PNOR::MEMD, // note use of MEMD
+ MEMD_VPD::g_mutex,
+ VPD::VPD_INVALID) // Direct access memory
+{
+ TRACUCOMP(g_trac_vpd, "MEMD_VpdFacade::MEMD_VpdFacade> " );
+
+ iv_configInfo.vpdReadPNOR = true;
+ iv_configInfo.vpdReadHW = false;
+ iv_configInfo.vpdWritePNOR = false;
+ iv_configInfo.vpdWriteHW = false;
+}
+
+/**
+ * @brief returns true if the record is present in this facade.
+ * this will always return true in this function
+ */
+bool MEMD_VpdFacade::recordPresent( const char * i_record,
+ uint16_t & offset,
+ TARGETING::Target * i_target,
+ VPD::vpdCmdTarget i_location )
+{
+ offset = 0;
+ return true;
+}
diff --git a/src/usr/vpd/memd_vpd.H b/src/usr/vpd/memd_vpd.H
new file mode 100644
index 000000000..d94532b4a
--- /dev/null
+++ b/src/usr/vpd/memd_vpd.H
@@ -0,0 +1,227 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/vpd/memd_vpd.H $ */
+/* */
+/* OpenPOWER HostBoot Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2013,2017 */
+/* [+] International Business Machines Corp. */
+/* */
+/* */
+/* Licensed under the Apache License, Version 2.0 (the "License"); */
+/* you may not use this file except in compliance with the License. */
+/* You may obtain a copy of the License at */
+/* */
+/* http://www.apache.org/licenses/LICENSE-2.0 */
+/* */
+/* Unless required by applicable law or agreed to in writing, software */
+/* distributed under the License is distributed on an "AS IS" BASIS, */
+/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */
+/* implied. See the License for the specific language governing */
+/* permissions and limitations under the License. */
+/* */
+/* IBM_PROLOG_END_TAG */
+#ifndef __MEMD_VPD_H
+#define __MEMD_VPD_H
+
+
+/**
+ * @file MEMD_VPD.H
+ *
+ * @brief Provides the interfaces for the MEMD_VPD device driver
+ *
+ */
+
+// ----------------------------------------------
+// Includes
+// ----------------------------------------------
+#include <errl/errlentry.H>
+#include <vpd/memd_vpdenums.H>
+
+#include "ipvpd.H"
+#include <config.h>
+
+namespace MEMD_VPD
+{
+
+ enum
+ {
+ MAX_SECTIONS = 1,
+ SECTION_SIZE = 0x6000,
+ };
+
+
+ /**
+ * @brief Conversion of MEMD_VPD Records to corresponding character
+ * representation.
+ */
+ const IpVpdFacade::recordInfo MEMD_VPDRecords[] =
+ {
+ // -------------------------------------------------------------------
+ // NOTE: This list must remain an ordered list! There is a
+ // testcase that checks this. When adding new entries to the
+ // list, be sure that the keyword in each entry (value 0)
+ // are in ascending order.
+ // -------------------------------------------------------------------
+ { MEMD, "MEMD" },
+
+ // -------------------------------------------------------------------
+ // DO NOT USE!! This is for test purposes ONLY!
+ { MEMD_VPD_TEST_RECORD, "TEST" },
+ // -------------------------------------------------------------------
+ };
+
+ /**
+ * @brief Conversion of MEMD_VPD Keywords to corresponding character
+ * representation.
+ */
+ const IpVpdFacade::keywordInfo MEMD_VPDKeywords[] =
+ {
+ // -------------------------------------------------------------------
+ // NOTE: This list must remain an ordered list! There is a
+ // testcase that checks this. When adding new entries to
+ // the list, be sure that the keyword in each entry (value 0)
+ // are in ascending order.
+ // -------------------------------------------------------------------
+ { B3, "B3" },
+ { B4, "B4" },
+ { B7, "B7" },
+ { CC, "CC" },
+ { CE, "CE" },
+ { CT, "CT" },
+ { DR, "DR" },
+ { FC, "FC" },
+ { FN, "FN" },
+ { HE, "HE" },
+ { HW, "HW" },
+ { I2, "I2" },
+ { IN, "IN" },
+ { J0, "J0" },
+ { J1, "J1" },
+ { J2, "J2" },
+ { J3, "J3" },
+ { J4, "J4" },
+ { J5, "J5" },
+ { J6, "J6" },
+ { J7, "J7" },
+ { J8, "J8" },
+ { J9, "J9" },
+ { JA, "JA" },
+ { JB, "JB" },
+ { JC, "JC" },
+ { JD, "JD" },
+ { JE, "JE" },
+ { JF, "JF" },
+ { JG, "JG" },
+ { JH, "JH" },
+ { JI, "JI" },
+ { JJ, "JJ" },
+ { JK, "JK" },
+ { JL, "JL" },
+ { JM, "JM" },
+ { JN, "JN" },
+ { JO, "JO" },
+ { JP, "JP" },
+ { JQ, "JQ" },
+ { JR, "JR" },
+ { JS, "JS" },
+ { JT, "JT" },
+ { JU, "JU" },
+ { JV, "JV" },
+ { JW, "JW" },
+ { JX, "JX" },
+ { JY, "JY" },
+ { JZ, "JZ" },
+ { LX, "LX" },
+ { MR, "MR" },
+ { MT, "MT" },
+ { PF, "PF" },
+ { PN, "PN" },
+ { PR, "PR" },
+ { RB, "RB" },
+ { RG, "RG" },
+ { RT, "RT" },
+ { SE, "SE" },
+ { SN, "SN" },
+ { SO, "SO" },
+ { TM, "TM" },
+ { VM, "VM" },
+ { VZ, "VZ" },
+ { X0, "X0" },
+ { X1, "X1" },
+ { X2, "X2" },
+ { X3, "X3" },
+ { X4, "X4" },
+ { X5, "X5" },
+ { X6, "X6" },
+ { X7, "X7" },
+ { X8, "X8" },
+ { X9, "X9" },
+ { XA, "XA" },
+ { XB, "XB" },
+ { XC, "XC" },
+ { XD, "XD" },
+ { XE, "XE" },
+ { XF, "XF" },
+ { XG, "XG" },
+ { XH, "XH" },
+ { XI, "XI" },
+ { XJ, "XJ" },
+ { XK, "XK" },
+ { XL, "XL" },
+ { XM, "XM" },
+ { XN, "XN" },
+ { XO, "XO" },
+ { XP, "XP" },
+ { XQ, "XQ" },
+ { XR, "XR" },
+ { XS, "XS" },
+ { XT, "XT" },
+ { XU, "XU" },
+ { XV, "XV" },
+ { XW, "XW" },
+ { XX, "XX" },
+ { XY, "XY" },
+ { XZ, "XZ" },
+ { Q0, "Q0" },
+ { Q1, "Q1" },
+ { Q2, "Q2" },
+ { Q3, "Q3" },
+ { Q4, "Q4" },
+ { Q5, "Q5" },
+ { Q6, "Q6" },
+ { Q7, "Q7" },
+ { Q8, "Q8" },
+ { CK, "CK" },
+
+ // -------------------------------------------------------------------
+ // DO NOT USE!! This is for test purposes ONLY!
+ { MEMD_VPD_TEST_KEYWORD, "ZZ" },
+ // -------------------------------------------------------------------
+
+ //Common ipvpd
+ { FULL_RECORD, "FL"},
+ };
+
+}; // end MEMD_VPD namespace
+
+class MEMD_VpdFacade: public IpVpdFacade
+{
+ public:
+
+ /**
+ * @brief Constructor
+ */
+ MEMD_VpdFacade( );
+
+
+ protected:
+ virtual bool recordPresent( const char * i_record,
+ uint16_t & offset,
+ TARGETING::Target * i_target,
+ VPD::vpdCmdTarget i_location );
+
+
+};
+#endif // __MEMD_VPD_H
diff --git a/src/usr/vpd/vpd.H b/src/usr/vpd/vpd.H
index 99340c0cd..c7fb329ae 100644
--- a/src/usr/vpd/vpd.H
+++ b/src/usr/vpd/vpd.H
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2013,2016 */
+/* Contributors Listed Below - COPYRIGHT 2013,2017 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -47,6 +47,7 @@ struct pnorInformation
*/
enum VPD_MSG_TYPE
{
+ VPD_INVALID = 0x0000,
VPD_WRITE_DIMM = 0x00C1, //< DIMM SPD
VPD_WRITE_PROC = 0x00C2, //< Processor MVPD
VPD_WRITE_MEMBUF = 0x00C3, //< Centaur FRU VPD
diff --git a/src/usr/vpd/vpd.mk b/src/usr/vpd/vpd.mk
index 58702127e..d07a2bbea 100644
--- a/src/usr/vpd/vpd.mk
+++ b/src/usr/vpd/vpd.mk
@@ -5,7 +5,7 @@
#
# OpenPOWER HostBoot Project
#
-# Contributors Listed Below - COPYRIGHT 2013,2016
+# Contributors Listed Below - COPYRIGHT 2013,2017
# [+] International Business Machines Corp.
#
#
@@ -29,5 +29,6 @@ OBJS += mvpd.o
OBJS += cvpd.o
OBJS += pvpd.o
OBJS += dvpd.o
+OBJS += memd_vpd.o
OBJS += spd.o
OBJS += errlud_vpd.o
OpenPOWER on IntegriCloud