summaryrefslogtreecommitdiffstats
path: root/src/usr/devtree/bld_devtree.C
diff options
context:
space:
mode:
authorDoug Gilbert <dgilbert@us.ibm.com>2013-10-15 13:55:28 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2013-11-13 14:49:38 -0600
commitdd2a474b7fc3a8937f45d1278e887b370ad81192 (patch)
tree00595698a572529ddcd00fc3c975b588b4ea67dc /src/usr/devtree/bld_devtree.C
parent1aa8f7551005dd48078b91be173e8bcc7e339061 (diff)
downloadtalos-hostboot-dd2a474b7fc3a8937f45d1278e887b370ad81192.tar.gz
talos-hostboot-dd2a474b7fc3a8937f45d1278e887b370ad81192.zip
Add VPD support to HBRT
RTC: 79419 Change-Id: I6d00e52026084a68925691b96d7a491faaffb4ef Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/7004 Tested-by: Jenkins Server 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/bld_devtree.C')
-rw-r--r--src/usr/devtree/bld_devtree.C61
1 files changed, 51 insertions, 10 deletions
diff --git a/src/usr/devtree/bld_devtree.C b/src/usr/devtree/bld_devtree.C
index 3dc7f96d6..a79057680 100644
--- a/src/usr/devtree/bld_devtree.C
+++ b/src/usr/devtree/bld_devtree.C
@@ -44,6 +44,7 @@ $ */
#include "devtree.H"
#include <sys/mmio.h> //THIRTYTWO_GB
#include <intr/interrupt.H>
+#include <vpd/vpd_if.H>
trace_desc_t *g_trac_devtree = NULL;
@@ -428,7 +429,11 @@ uint32_t bld_intr_node(devTree * i_dt, dtOffset_t & i_parentNode,
return i_dt->getPhandle(intNode);
}
-void add_reserved_mem(devTree * i_dt, uint64_t i_homerAddr[], size_t i_num)
+
+void add_reserved_mem(devTree * i_dt,
+ uint64_t i_homerAddr[],
+ size_t i_num,
+ uint64_t i_vpd_addr)
{
/*
* The reserved-names and reserve-names properties work hand in hand.
@@ -454,21 +459,48 @@ void add_reserved_mem(devTree * i_dt, uint64_t i_homerAddr[], size_t i_num)
dtOffset_t rootNode = i_dt->findNode("/");
const char* homerStr = "ibm,slw-occ-image";
- const char* reserve_strs[i_num+1];
- uint64_t homerRanges[i_num][2];
+ const char* vpdStr = "ibm,hbrt-vpd-image";
+ const char* reserve_strs[i_num+2];
+ uint64_t ranges[i_num+1][2];
+ uint64_t cell_count = sizeof(ranges) / sizeof(uint64_t);
+ uint64_t res_mem_addrs[i_num+1];
+ uint64_t res_mem_sizes[i_num+1];
+
for(size_t i = 0; i<i_num; i++)
{
reserve_strs[i] = homerStr;
- homerRanges[i][0] = i_homerAddr[i];
- homerRanges[i][1] = VMM_HOMER_INSTANCE_SIZE;
+ ranges[i][0] = i_homerAddr[i];
+ ranges[i][1] = VMM_HOMER_INSTANCE_SIZE;
+ res_mem_addrs[i] = i_homerAddr[i];
+ res_mem_sizes[i] = VMM_HOMER_INSTANCE_SIZE;
}
- reserve_strs[i_num] = NULL;
+ if(i_vpd_addr)
+ {
+ reserve_strs[i_num] = vpdStr;
+ ranges[i_num][0] = i_vpd_addr;
+ ranges[i_num][1] = VMM_RT_VPD_SIZE;
+
+ res_mem_addrs[i_num] = i_vpd_addr;
+ res_mem_sizes[i_num] = VMM_RT_VPD_SIZE;
+
+ reserve_strs[i_num+1] = NULL;
+ }
+ else
+ {
+ reserve_strs[i_num] = NULL;
+ cell_count -= sizeof(ranges[0]);
+ }
i_dt->addPropertyStrings(rootNode, "reserved-names", reserve_strs);
i_dt->addPropertyCells64(rootNode, "reserved-ranges",
- reinterpret_cast<uint64_t*>(homerRanges),
- sizeof(homerRanges) / sizeof(uint64_t));
+ reinterpret_cast<uint64_t*>(ranges),
+ cell_count);
+
+ // added per comment from Dean Sanner
+ // cell_count has limit of DT_MAX_MEM_RESERVE = 16. Is this enough
+ // for all processors + 1 vpd area?
+ i_dt->populateReservedMem(res_mem_addrs, res_mem_sizes, cell_count);
}
@@ -538,8 +570,17 @@ errlHndl_t bld_fdt_cpu(devTree * i_dt)
}
}
- //Add in reserved memory for HOMER images
- add_reserved_mem(i_dt, l_homerAddr, l_cpuTargetList.size());
+ // VPD
+ uint64_t l_vpd_addr = 0;
+
+ errhdl = VPD::vpd_load_rt_image(l_vpd_addr);
+
+
+ //Add in reserved memory for HOMER images and VPD image
+ add_reserved_mem(i_dt,
+ l_homerAddr,
+ l_cpuTargetList.size(),
+ l_vpd_addr);
return errhdl;
}
OpenPOWER on IntegriCloud