summaryrefslogtreecommitdiffstats
path: root/src/usr/hwpf/hwp/occ/occ.C
diff options
context:
space:
mode:
authorAdam Muhle <armuhle@us.ibm.com>2013-03-25 15:54:12 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2013-04-29 10:43:53 -0500
commit8e498eb418ccdb17da292ad0794c68815f343cf4 (patch)
tree2f43de6f6904f36646292e7d979b577859349782 /src/usr/hwpf/hwp/occ/occ.C
parent60f7382c8d36e07234eee36f48c006cfdd0ab402 (diff)
downloadtalos-hostboot-8e498eb418ccdb17da292ad0794c68815f343cf4.tar.gz
talos-hostboot-8e498eb418ccdb17da292ad0794c68815f343cf4.zip
OCC DMA Support
Added support to get LIDs from either PNOR Ext Img or through mailbox DMA from FSP. The Extended Image path is fully tested, however the mailbox DMA code can't be tested until FSP support is available. The OCC function will be enabled with RTC 50987. Change-Id: I798ea19b2ca566288ff4ce64ce7440de20703496 RTC: 51076 Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/3845 Tested-by: Jenkins Server Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com> Reviewed-by: Douglas R. Gilbert <dgilbert@us.ibm.com> Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/hwpf/hwp/occ/occ.C')
-rw-r--r--src/usr/hwpf/hwp/occ/occ.C78
1 files changed, 72 insertions, 6 deletions
diff --git a/src/usr/hwpf/hwp/occ/occ.C b/src/usr/hwpf/hwp/occ/occ.C
index 07a270cbe..2d42091c1 100644
--- a/src/usr/hwpf/hwp/occ/occ.C
+++ b/src/usr/hwpf/hwp/occ/occ.C
@@ -28,7 +28,7 @@
#include <devicefw/userif.H>
#include <sys/misc.h>
-#include <sys/mm.h>
+#include <sys/mmio.h>
#include <vmmconst.h>
// targeting support
@@ -41,6 +41,9 @@
#include <hwpf/plat/fapiPlatTrace.H>
#include <hwpf/hwpf_reasoncodes.H>
+#include <vfs/vfs.H>
+#include <util/utillidmgr.H>
+
// Procedures
#include <p8_pba_init.H>
#include <p8_occ_control.H>
@@ -50,19 +53,81 @@
extern trace_desc_t* g_fapiTd;
+const uint32_t g_OCCLIDID = 0x81e00430;
+
namespace OCC
{
errlHndl_t loadOCCImageToHomer(uint64_t i_homer_addr )
{
errlHndl_t l_errl = NULL;
+ void* mapped_homer = NULL;
+ size_t lidSize = 0;
do {
- //RTC: 51076 - Implement DMA message passing to
- // get OCC image from FSP.
+ UtilLidMgr lidMgr(g_OCCLIDID);
+
+ l_errl = lidMgr.getLidSize(lidSize);
+ if(l_errl)
+ {
+ TRACFCOMP( g_fapiImpTd,
+ ERR_MRK"loadOCCImageToHomer: Error getting lid size. lidId=0x%.8x",
+ g_OCCLIDID);
+ break;
+ }
+
+ //Map homer into virtual memory
+ mapped_homer =
+ mmio_dev_map(reinterpret_cast<void*>(i_homer_addr), THIRTYTWO_MB);
+
+ l_errl = lidMgr.getLid(mapped_homer, lidSize);
+ if(l_errl)
+ {
+ TRACFCOMP( g_fapiImpTd,
+ ERR_MRK"loadOCCImageToHomer: Error getting lid.. lidId=0x%.8x",
+ g_OCCLIDID);
+ break;
+ }
}while(0);
+ if(mapped_homer)
+ {
+ int rc = 0;
+ errlHndl_t l_tmpErrl = NULL;
+ rc = mmio_dev_unmap(mapped_homer);
+ if (rc != 0)
+ {
+ /*@
+ * @errortype
+ * @moduleid fapi::MOD_OCC_LOAD_OCC_IMAGE_TO_HOMER
+ * @reasoncode fapi::RC_MMIO_UNMAP_ERR
+ * @userdata1 Return Code
+ * @userdata2 Unmap address
+ * @devdesc mmio_dev_unmap() returns error
+ */
+ l_tmpErrl =
+ new ERRORLOG::ErrlEntry(
+ ERRORLOG::ERRL_SEV_UNRECOVERABLE,
+ fapi::MOD_OCC_LOAD_OCC_IMAGE_TO_HOMER,
+ fapi::RC_MMIO_UNMAP_ERR,
+ rc,
+ reinterpret_cast<uint64_t>
+ (mapped_homer));
+ if(l_tmpErrl)
+ {
+ if(l_errl)
+ {
+ errlCommit( l_tmpErrl, HWPF_COMP_ID );
+ }
+ else
+ {
+ l_errl = l_tmpErrl;
+ }
+ }
+ }
+ }
+
return l_errl;
}
@@ -79,8 +144,9 @@ namespace OCC
do {
// cast OUR type of target to a FAPI type of target.
- const fapi::Target l_fapiTarg(fapi::TARGET_TYPE_PROC_CHIP,
- (const_cast<TARGETING::Target*>(i_target)));
+ const fapi::Target
+ l_fapiTarg(fapi::TARGET_TYPE_PROC_CHIP,
+ (const_cast<TARGETING::Target*>(i_target)));
//==============================
@@ -129,7 +195,7 @@ namespace OCC
break;
}
- //TODO: This flow needs to be updated along with procedure refresh
+ //TODO: This flow needs to be updated along with procedure refresh
//RTC: 68461
// Config path
// p8_pm_init.C enum: PM_CONFIG
OpenPOWER on IntegriCloud