From 4619901bd09eccbe26d430195c4e8019f6993b0b Mon Sep 17 00:00:00 2001
From: Matt Ploetz <maploetz@us.ibm.com>
Date: Mon, 23 Feb 2015 17:09:14 -0600
Subject: [PATCH] Revert "Set FIR master in HOMER config data"

This reverts commit 84023756531d9c48d2e4939326f4048f2dadbe28.
---
 src/include/usr/hwpf/hwp/occ/occ_common.H | 27 ++----------------
 src/usr/diag/HBconfig                     |  6 ----
 src/usr/hwpf/hwp/occ/occ.C                |  2 +-
 src/usr/hwpf/hwp/occ/occ_common.C         | 46 +++++++++++++++++++------------
 src/usr/hwpf/hwp/occ/runtime/rt_occ.C     |  2 +-
 5 files changed, 33 insertions(+), 50 deletions(-)

diff --git a/src/include/usr/hwpf/hwp/occ/occ_common.H b/src/include/usr/hwpf/hwp/occ/occ_common.H
index 8245539..1886e51 100644
--- a/src/include/usr/hwpf/hwp/occ/occ_common.H
+++ b/src/include/usr/hwpf/hwp/occ/occ_common.H
@@ -36,38 +36,19 @@ namespace HBOCC
     struct occHostConfigDataArea_t
     {
         uint32_t version;
-
-        //For computation of timebase frequency
         uint32_t nestFrequency;
-
-        // For determining the interrupt type to Host
-        //  0x00000000 = Use FSI2HOST Mailbox
-        //  0x00000001 = Use OCC interrupt line through PSIHB complex
         uint32_t interruptType;
-
-        // For informing OCC if it is the FIR master:
-        //  0x00000000 = Default
-        //  0x00000001 = FIR Master
-        uint32_t firMaster;
-
-        // FIR collection configuration data needed by FIR Master
-        //  OCC in the event of a checkstop
-        uint8_t firdataConfig[3072];
     };
 
     enum
     {
-        OccHostDataVersion = 3,
+        OccHostDataVersion = 2,
         OCC_LIDID = 0x81e00430,
         OCC_IBSCOM_RANGE_IN_MB = MEGABYTE,
 
         // Interrupt Types
         USE_FSI2HOST_MAILBOX = 0x00000000,
-        USE_PSIHB_COMPLEX    = 0x00000001,
-
-        // FIR Master
-        NOT_FIR_MASTER = 0x00000000,
-        IS_FIR_MASTER  = 0x00000001
+        USE_PSIHB_COMPLEX    = 0x00000001
     };
 
     enum occAction_t
@@ -78,15 +59,13 @@ namespace HBOCC
     /**
      * @brief Sets up OCC Host data
      *
-     * @param[in] i_proc:         target processor to load
      * @param[in] i_occHostDataVirtAddr Virtual
      *                       address of current
      *                       proc's Host data area.
      *
      * @return errlHndl_t  Error log Host data setup failed
      */
-    errlHndl_t loadHostDataToHomer(TARGETING::Target* i_proc,
-                                   void* i_occHostDataVirtAddr);
+    errlHndl_t loadHostDataToHomer(void* i_occHostDataVirtAddr);
 
     /**
      * @brief Execute procedures and steps required to load
diff --git a/src/usr/diag/HBconfig b/src/usr/diag/HBconfig
index 973cecd..a516133 100644
--- a/src/usr/diag/HBconfig
+++ b/src/usr/diag/HBconfig
@@ -2,9 +2,3 @@ config HBRT_PRD
     default n
     help
         Enable HBRT PRD.
-
-config ENABLE_CHECKSTOP_ANALYSIS
-    default n
-    help
-        Enable collection of FIR data by OCC for checkstops and
-        post-checkstop analysis by PRD on system reboot
diff --git a/src/usr/hwpf/hwp/occ/occ.C b/src/usr/hwpf/hwp/occ/occ.C
index ac2f4b1..f56c909 100644
--- a/src/usr/hwpf/hwp/occ/occ.C
+++ b/src/usr/hwpf/hwp/occ/occ.C
@@ -133,7 +133,7 @@ namespace HBOCC
                                            (i_homerVirtAddrBase) +
                                 tmpOffset + HOMER_OFFSET_TO_OCC_HOST_DATA;
             void* occHostVirt = reinterpret_cast<void*>(i_homerHostVirtAddr);
-            l_errl = HBOCC::loadHostDataToHomer(i_target,occHostVirt);
+            l_errl = HBOCC::loadHostDataToHomer(occHostVirt);
             if( l_errl != NULL )
             {
                 TRACFCOMP( g_fapiImpTd, ERR_MRK"loading Host Data Area failed!" );
diff --git a/src/usr/hwpf/hwp/occ/occ_common.C b/src/usr/hwpf/hwp/occ/occ_common.C
index e444b26..97d36f4 100644
--- a/src/usr/hwpf/hwp/occ/occ_common.C
+++ b/src/usr/hwpf/hwp/occ/occ_common.C
@@ -119,9 +119,14 @@ namespace HBOCC
 
     /**
      * @brief Sets up OCC Host data
+     *
+     * @param[in] i_occHostDataVirtAddr Virtual
+     *                       address of current
+     *                       proc's Host data area.
+     *
+     * @return errlHndl_t  Error log Host data setup failed
      */
-    errlHndl_t loadHostDataToHomer( TARGETING::Target* i_proc,
-                                    void* i_occHostDataVirtAddr)
+    errlHndl_t loadHostDataToHomer(void* i_occHostDataVirtAddr)
     {
         TRACUCOMP( g_fapiTd,
                    ENTER_MRK"loadHostDataToHomer(%p)",
@@ -156,22 +161,6 @@ namespace HBOCC
             config_data->interruptType = USE_PSIHB_COMPLEX;
         }
 
-#ifdef CONFIG_ENABLE_CHECKSTOP_ANALYSIS
-        // Figure out the FIR master
-        TARGETING::Target* masterproc = NULL;
-        tS.masterProcChipTargetHandle( masterproc );
-        if( masterproc == i_proc )
-        {
-            config_data->firMaster = IS_FIR_MASTER;
-        }
-        else
-        {
-            config_data->firMaster = NOT_FIR_MASTER;
-        }
-#else
-        config_data->firMaster = 0;
-#endif
-
         TRACUCOMP( g_fapiTd,
                    EXIT_MRK"loadHostDataToHomer");
 
@@ -181,6 +170,16 @@ namespace HBOCC
     /**
      * @brief Execute procedures and steps necessary
      *        to load OCC data in specified processor
+     *
+     * @param[in] i_target   Target proc to load
+     * @param[in] i_homerVirtAddrBase Virtual
+     *                       address of current
+     *                       proc's HOMER
+     * @param[in] i_homerPhysAddrBase Physical
+     *                       address of current
+     *                       proc's HOMER
+     *
+     * @return errlHndl_t  Error log image load failed
      */
      errlHndl_t loadOCC(TARGETING::Target* i_target,
                     uint64_t i_homerPhysAddr,
@@ -300,6 +299,12 @@ namespace HBOCC
      * @brief Start OCC for specified DCM pair of processors.
      *        If 2nd input is NULL, OCC will be setup on just
      *        one target.
+     *
+     * @param[in] i_target0:    target of first processor in DCM pair
+     * @param[in] i_target1:    target of second processor in DCM pair
+     * @param[out] o_failedTarget failed target in case of an error
+     *
+     * @return errlHndl_t  Error log of startOCC failed
      */
     errlHndl_t startOCC (Target* i_target0,
                          Target* i_target1,
@@ -418,6 +423,11 @@ namespace HBOCC
      * @brief Stop OCC for specified DCM pair of processors.
      *        If 2nd input is NULL, OCC will be setup on just
      *        one target.
+     *
+     * @param[in] i_target0:    target of first processor in DCM pair
+     * @param[in] i_target1:    target of second processor in DCM pair
+     *
+     * @return errlHndl_t  Error log of stopOCC failed
      */
     errlHndl_t stopOCC(TARGETING::Target * i_target0,
                        TARGETING::Target * i_target1)
diff --git a/src/usr/hwpf/hwp/occ/runtime/rt_occ.C b/src/usr/hwpf/hwp/occ/runtime/rt_occ.C
index 1bc02a8..8583801 100644
--- a/src/usr/hwpf/hwp/occ/runtime/rt_occ.C
+++ b/src/usr/hwpf/hwp/occ/runtime/rt_occ.C
@@ -179,7 +179,7 @@ namespace RT_OCC
 
             void* occHostVirt = reinterpret_cast <void *> (i_homer_addr_va +
                                 HOMER_OFFSET_TO_OCC_HOST_DATA);
-            err = HBOCC::loadHostDataToHomer(proc_target,occHostVirt);
+            err = HBOCC::loadHostDataToHomer(occHostVirt);
             if( err != NULL )
             {
                 TRACFCOMP( g_fapiImpTd, ERR_MRK"loading Host Data Area failed!" );
-- 
1.8.2.2

