diff options
author | Dean Sanner <dsanner@us.ibm.com> | 2014-12-11 14:28:33 -0600 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2014-12-13 10:31:05 -0600 |
commit | 212a11e8f24dae439cf9189762546079bbf40fb1 (patch) | |
tree | f556a6d941e3ace721066bde5885f16029bd32a4 /src/usr/devtree | |
parent | bdf9a8c834ee8c608f4462e146a2f957c08919c2 (diff) | |
download | talos-hostboot-212a11e8f24dae439cf9189762546079bbf40fb1.tar.gz talos-hostboot-212a11e8f24dae439cf9189762546079bbf40fb1.zip |
Base devtree model on vpd
Change-Id: I6b7f61748b487cb3fadf6ac96d1d052c6314b4d3
RTC: 88056
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/14876
Tested-by: Jenkins Server
Reviewed-by: WILLIAM G. HOFFA <wghoffa@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/devtree')
-rw-r--r-- | src/usr/devtree/bld_devtree.C | 55 |
1 files changed, 53 insertions, 2 deletions
diff --git a/src/usr/devtree/bld_devtree.C b/src/usr/devtree/bld_devtree.C index b28033b5d..ca6d6d296 100644 --- a/src/usr/devtree/bld_devtree.C +++ b/src/usr/devtree/bld_devtree.C @@ -44,6 +44,9 @@ #include <vfs/vfs.H> #include <fsi/fsiif.H> #include <config.h> +#include <devicefw/userif.H> +#include <vpd/cvpdenums.H> + trace_desc_t *g_trac_devtree = NULL; TRAC_INIT(&g_trac_devtree, "DEVTREE", 4096); @@ -603,8 +606,56 @@ errlHndl_t bld_fdt_system(devTree * i_dt, bool i_smallTree) i_dt->addPropertyString(rootNode, "compatible", "ibm,powernv"); /* Add system model node */ - //TODO RTC:88056 - store model type in attributes? - i_dt->addPropertyString(rootNode, "model", "palmetto"); + // Based off of the DR field in the OPFR + // TODO RTC 118373 -- update to account for firestone/memory riser + TARGETING::TargetHandleList l_membTargetList; + getAllChips(l_membTargetList, TYPE_MEMBUF); + + //if can't find a centaur for the CVPD, default to unknown + if (l_membTargetList.size()) + { + TARGETING::Target * l_pMem = l_membTargetList[0]; + size_t vpdSize = 0x0; + + // Note: First read with NULL for o_buffer sets vpdSize to the + // correct length + errhdl = deviceRead( l_pMem, + NULL, + vpdSize, + DEVICE_CVPD_ADDRESS( CVPD::OPFR, + CVPD::DR )); + + if(errhdl) + { + TRACFCOMP(g_trac_devtree,ERR_MRK" Couldn't get DR size for HUID=0x%.8X", + TARGETING::get_huid(l_pMem)); + } + else + { + char drBuf[vpdSize+1]; + memset(&drBuf, 0x0, (vpdSize+1)); //ensure null terminated str + errhdl = deviceRead( l_pMem, + reinterpret_cast<void*>( &drBuf ), + vpdSize, + DEVICE_CVPD_ADDRESS( CVPD::OPFR, + CVPD::DR )); + + if(errhdl) + { + TRACFCOMP(g_trac_devtree,ERR_MRK" Couldn't read DR for HUID=0x%.8X", + TARGETING::get_huid(l_pMem)); + } + else + { + i_dt->addPropertyString(rootNode, "model", drBuf); + } + } + } + else //chassis info not found, default to unknown + { + TRACFCOMP(g_trac_devtree,ERR_MRK" VPD not found, model defaulted to unknown"); + i_dt->addPropertyString(rootNode, "model", "unknown"); + } } return errhdl; |