summaryrefslogtreecommitdiffstats
path: root/src/usr/devtree
diff options
context:
space:
mode:
authorDean Sanner <dsanner@us.ibm.com>2014-12-11 14:28:33 -0600
committerA. Patrick Williams III <iawillia@us.ibm.com>2014-12-13 10:31:05 -0600
commit212a11e8f24dae439cf9189762546079bbf40fb1 (patch)
treef556a6d941e3ace721066bde5885f16029bd32a4 /src/usr/devtree
parentbdf9a8c834ee8c608f4462e146a2f957c08919c2 (diff)
downloadtalos-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.C55
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;
OpenPOWER on IntegriCloud