summaryrefslogtreecommitdiffstats
path: root/src/usr/hwpf/hwp
diff options
context:
space:
mode:
authorThi Tran <thi@us.ibm.com>2014-07-03 08:29:30 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2014-07-14 13:37:10 -0500
commitc4e258df1ea469c16de5e0347bc6898a171d151d (patch)
tree0ef997e1d71159853dbf88cf1f250b77b5ec1526 /src/usr/hwpf/hwp
parenta7b87425064656ef3e81c17202b9a075ed1cabe8 (diff)
downloadtalos-hostboot-c4e258df1ea469c16de5e0347bc6898a171d151d.tar.gz
talos-hostboot-c4e258df1ea469c16de5e0347bc6898a171d151d.zip
SW267912: INITPROC: FSP&Hostboot - opt_memmap.C and .H updates
Change-Id: I6409ed585c14d5c1d0c3848ec92ed6525ecc5f26 CQ:SW267912 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/11969 Reviewed-by: Thi N. Tran <thi@us.ibm.com> Tested-by: Thi N. Tran <thi@us.ibm.com> Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/11972 Tested-by: Jenkins Server Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/hwpf/hwp')
-rw-r--r--src/usr/hwpf/hwp/mc_config/mss_eff_config/opt_memmap.C61
-rw-r--r--src/usr/hwpf/hwp/mc_config/mss_eff_config/opt_memmap.H4
2 files changed, 45 insertions, 20 deletions
diff --git a/src/usr/hwpf/hwp/mc_config/mss_eff_config/opt_memmap.C b/src/usr/hwpf/hwp/mc_config/mss_eff_config/opt_memmap.C
index 74662e238..c1bb4ca74 100644
--- a/src/usr/hwpf/hwp/mc_config/mss_eff_config/opt_memmap.C
+++ b/src/usr/hwpf/hwp/mc_config/mss_eff_config/opt_memmap.C
@@ -22,7 +22,7 @@
/* permissions and limitations under the License. */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: opt_memmap.C,v 1.18 2014-06-19 14:06:34 dcrowell Exp $
+// $Id: opt_memmap.C,v 1.19 2014/06/20 20:23:44 jmcgill Exp $
// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/opt_memmap.C,v $
@@ -30,7 +30,7 @@
// *|
// *! (C) Copyright International Business Machines Corp. 2011
// *! All Rights Reserved -- Property of IBM
-// *! *** ***
+// *! *** IBM Confidential ***
// *|
// *! TITLE : opt_memmap.C
// *! DESCRIPTION : Layout non-mirrored/mirrored address map (FAPI)
@@ -45,6 +45,7 @@
//------------------------------------------------------------------------------
// Version:| Author: | Date: | Comment:
//---------|----------|---------|-----------------------------------------------
+// 1.18 | jmcgill | 06/20/14| Add logic for flipped drawer enum
// 1.17 | dcrowell | 06/19/14| Switch from #define to attr for mirror origin
// 1.16 | jmcgill | 10/28/13| Offset drawers by 32TB rather than 1TB
// 1.15 | jmcgill | 09/17/13| Add logic to offset memory map based on
@@ -83,6 +84,9 @@
//
// This provides a basis for mss_eff_grouping() to stack all on-chip
// groups.
+//
+// NOTE: offset/mirrored origin (512TB above/below) is controlled by
+// value of ATTR_MIRROR_BASE_ADDRESS
//
// 2) mss_eff_grouping() call
// - The HWP updates each proc's ATTR_PROC_[MEM|MIRROR]_[BASES|SIZES]
@@ -102,8 +106,9 @@
// policy sort criteria origin origin
// -------- ------------- ------------ --------
// NORMAL nm 0TB 512TB
-// DRAWER nm 1TB*drawer 512TB+(1TB*drawer/2)
+// DRAWER nm 32TB*drawer 512TB+(32TB*drawer)/2
// FLIPPED m 512TB 0TB
+// FLIPPED_DRAWER m 512TB+(32TB*drawer) 32TB*drawer
// SELECTIVE nm+m 0TB 8TB
//
// - Write ATTR_PROC_[MEM|MIRROR]_BASE attributes to their final
@@ -245,8 +250,10 @@ public:
l_rhs_eff_size = rhs.iv_nm_eff_size;
}
// sort by mirrored size
- else if ((iv_mirror_policy == ENUM_ATTR_MEM_MIRROR_PLACEMENT_POLICY_FLIPPED) &&
- (rhs.iv_mirror_policy == ENUM_ATTR_MEM_MIRROR_PLACEMENT_POLICY_FLIPPED))
+ else if (((iv_mirror_policy == ENUM_ATTR_MEM_MIRROR_PLACEMENT_POLICY_FLIPPED) &&
+ (rhs.iv_mirror_policy == ENUM_ATTR_MEM_MIRROR_PLACEMENT_POLICY_FLIPPED)) ||
+ ((iv_mirror_policy == ENUM_ATTR_MEM_MIRROR_PLACEMENT_POLICY_FLIPPED_DRAWER) &&
+ (rhs.iv_mirror_policy == ENUM_ATTR_MEM_MIRROR_PLACEMENT_POLICY_FLIPPED_DRAWER)))
{
l_this_eff_size = iv_m_eff_size;
l_rhs_eff_size = rhs.iv_m_eff_size;
@@ -504,7 +511,7 @@ ReturnCode opt_memmap(std::vector<fapi::Target> & i_procs, bool i_init)
break;
}
- FAPI_INF("opt_memmap called with i_init = %d, mirror_policy: %d, origin=%llX",
+ FAPI_INF("opt_memmap called with i_init: %d, mirror_policy: %d, mirror_origin: %016llX",
(i_init)?(1):(0), l_mirror_policy, l_mirror_origin);
// first pass of execution
@@ -539,9 +546,9 @@ ReturnCode opt_memmap(std::vector<fapi::Target> & i_procs, bool i_init)
l_iter != i_procs.end();
++l_iter)
{
- if ((l_mirror_policy ==
- ENUM_ATTR_MEM_MIRROR_PLACEMENT_POLICY_DRAWER) &&
- (l_iter == i_procs.begin()))
+ if ((l_iter == i_procs.begin()) &&
+ ((l_mirror_policy == ENUM_ATTR_MEM_MIRROR_PLACEMENT_POLICY_DRAWER) ||
+ (l_mirror_policy == ENUM_ATTR_MEM_MIRROR_PLACEMENT_POLICY_FLIPPED_DRAWER)))
{
uint8_t drawer_id;
rc = FAPI_ATTR_GET(ATTR_FABRIC_NODE_ID,
@@ -553,8 +560,16 @@ ReturnCode opt_memmap(std::vector<fapi::Target> & i_procs, bool i_init)
break;
}
- mem_base = drawer_id * 32 * OPT_MEMMAP_TB;
- mirror_base = l_mirror_origin + (mem_base / 2);
+ if (l_mirror_policy == ENUM_ATTR_MEM_MIRROR_PLACEMENT_POLICY_DRAWER)
+ {
+ mem_base = drawer_id * 32 * OPT_MEMMAP_TB;
+ mirror_base = l_mirror_origin + (mem_base / 2);
+ }
+ else
+ {
+ mirror_base = drawer_id * 32 * OPT_MEMMAP_TB;
+ mem_base = l_mirror_origin + mirror_base;
+ }
}
rc = FAPI_ATTR_SET(ATTR_PROC_MEM_BASE,
@@ -615,9 +630,9 @@ ReturnCode opt_memmap(std::vector<fapi::Target> & i_procs, bool i_init)
l_iter != i_procs.end();
++l_iter)
{
- if ((l_mirror_policy ==
- ENUM_ATTR_MEM_MIRROR_PLACEMENT_POLICY_DRAWER) &&
- (l_iter == i_procs.begin()))
+ if ((l_iter == i_procs.begin()) &&
+ ((l_mirror_policy == ENUM_ATTR_MEM_MIRROR_PLACEMENT_POLICY_DRAWER) ||
+ (l_mirror_policy == ENUM_ATTR_MEM_MIRROR_PLACEMENT_POLICY_FLIPPED_DRAWER)))
{
uint8_t drawer_id;
rc = FAPI_ATTR_GET(ATTR_FABRIC_NODE_ID,
@@ -629,8 +644,16 @@ ReturnCode opt_memmap(std::vector<fapi::Target> & i_procs, bool i_init)
break;
}
- l_nm_base_curr = drawer_id * 32 * OPT_MEMMAP_TB;
- l_m_base_curr = l_mirror_origin + (l_nm_base_curr / 2);
+ if (l_mirror_policy == ENUM_ATTR_MEM_MIRROR_PLACEMENT_POLICY_DRAWER)
+ {
+ l_nm_base_curr = drawer_id * 32 * OPT_MEMMAP_TB;
+ l_m_base_curr = l_mirror_origin + (l_nm_base_curr / 2);
+ }
+ else
+ {
+ l_m_base_curr = drawer_id * 32 * OPT_MEMMAP_TB;
+ l_nm_base_curr = l_mirror_origin + l_m_base_curr;
+ }
}
ProcChipMemmap p(&(*l_iter), l_mirror_policy);
@@ -682,8 +705,10 @@ ReturnCode opt_memmap(std::vector<fapi::Target> & i_procs, bool i_init)
l_nm_base_curr += l_drawer_memmap[i-1].iv_nm_eff_size;
l_m_base_curr += l_drawer_memmap[i-1].iv_nm_eff_size / 2;
}
- else if (l_mirror_policy ==
- ENUM_ATTR_MEM_MIRROR_PLACEMENT_POLICY_FLIPPED)
+ else if ((l_mirror_policy ==
+ ENUM_ATTR_MEM_MIRROR_PLACEMENT_POLICY_FLIPPED) ||
+ (l_mirror_policy ==
+ ENUM_ATTR_MEM_MIRROR_PLACEMENT_POLICY_FLIPPED_DRAWER))
{
l_nm_base_curr += l_drawer_memmap[i-1].iv_nm_eff_size;
l_m_base_curr += l_drawer_memmap[i-1].iv_m_eff_size;
diff --git a/src/usr/hwpf/hwp/mc_config/mss_eff_config/opt_memmap.H b/src/usr/hwpf/hwp/mc_config/mss_eff_config/opt_memmap.H
index ffbe64b2d..f6a152ff9 100644
--- a/src/usr/hwpf/hwp/mc_config/mss_eff_config/opt_memmap.H
+++ b/src/usr/hwpf/hwp/mc_config/mss_eff_config/opt_memmap.H
@@ -22,7 +22,7 @@
/* permissions and limitations under the License. */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: opt_memmap.H,v 1.9 2014-06-19 14:06:35 dcrowell Exp $
+// $Id: opt_memmap.H,v 1.9 2014/06/19 14:06:35 dcrowell Exp $
// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/opt_memmap.H,v $ */
@@ -30,7 +30,7 @@
// *|
// *! (C) Copyright International Business Machines Corp. 2011
// *! All Rights Reserved -- Property of IBM
-// *! *** ***
+// *! *** IBM Confidential ***
// *|
// *! TITLE : opt_memmap.H
// *! DESCRIPTION : Layout non-mirrored/mirrored address map (FAPI)
OpenPOWER on IntegriCloud