summaryrefslogtreecommitdiffstats
path: root/src/import/chips/p9/procedures/hwp/perv/p9_spr_name_map.C
diff options
context:
space:
mode:
authorLiuYangFan <shliuyf@cn.ibm.com>2016-04-01 03:25:41 -0500
committerDaniel M. Crowell <dcrowell@us.ibm.com>2016-08-01 11:56:29 -0400
commit47845536df2e76c019b1289fd72d443498b9c102 (patch)
tree4b2d9b3e1791d67ed90dd14c762ebbf490b1f853 /src/import/chips/p9/procedures/hwp/perv/p9_spr_name_map.C
parent28d4903c629357bca036b0fecb3cf3fb8a6e16a9 (diff)
downloadtalos-hostboot-47845536df2e76c019b1289fd72d443498b9c102.tar.gz
talos-hostboot-47845536df2e76c019b1289fd72d443498b9c102.zip
Update RAM procedures.
Changes included: p9_ram_core: 1. Add special case support for get/put NIA/MSR/CR/FPSCR 2. Add thread stop state check in setup 3. Add error handling when ram_setup/get_reg/put_reg p9_ram_get_all_reg/p9_ram_put_all_reg: Add get/put all registers function for test p9_ram_spr_test: New file to test SPR, verify with SPY read, for Cronus use p9_ram_after_checkstop: New file to test ram after checkstop p9_ram_addr_error_test: New file to test ram after bad address access p9_ram_wrap: Update to support the new tests Change-Id: Ia4da55eae26e9f3a667446bc984b358c064fdd8a Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/22746 Reviewed-by: Joseph J. McGill <jmcgill@us.ibm.com> Tested-by: Jenkins Server Reviewed-by: Thi N. Tran <thi@us.ibm.com> Tested-by: PPE CI Reviewed-by: PARVATHI RACHAKONDA <prachako@in.ibm.com> Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/27696 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/import/chips/p9/procedures/hwp/perv/p9_spr_name_map.C')
-rw-r--r--src/import/chips/p9/procedures/hwp/perv/p9_spr_name_map.C92
1 files changed, 62 insertions, 30 deletions
diff --git a/src/import/chips/p9/procedures/hwp/perv/p9_spr_name_map.C b/src/import/chips/p9/procedures/hwp/perv/p9_spr_name_map.C
index 5f66efa4c..5f9046693 100644
--- a/src/import/chips/p9/procedures/hwp/perv/p9_spr_name_map.C
+++ b/src/import/chips/p9/procedures/hwp/perv/p9_spr_name_map.C
@@ -36,26 +36,28 @@
//-----------------------------------------------------------------------------------
#include <p9_spr_name_map.H>
+std::map<std::string, SPRMapEntry> SPR_MAP;
+bool spr_map_initialized = false;
+
//-----------------------------------------------------------------------------------
// Function definitions
//-----------------------------------------------------------------------------------
-std::map<std::string, SPRMapEntry> spr_map;
-
-fapi2::ReturnCode p9_spr_name_map_init()
+bool p9_spr_name_map_init()
{
- FAPI_INF("Start SPR name map init");
-
- FAPI_ASSERT(spr_map.empty(),
- fapi2::P9_SPR_NAME_MAP_INIT_ERR(),
- "SPR name map is not empty when initialization");
+ if (spr_map_initialized)
+ {
+ return true;
+ }
+ if (!SPR_MAP.empty())
{
- LIST_SPR_REG(DO_SPR_MAP)
+ return false;
}
-fapi_try_exit:
- FAPI_INF("Exiting SPR name map init");
- return fapi2::current_err;
+ LIST_SPR_REG(DO_SPR_MAP)
+ spr_map_initialized = true;
+
+ return true;
}
//-----------------------------------------------------------------------------------
@@ -67,33 +69,63 @@ bool p9_spr_name_map_check_flag(unsigned char i_reg_flag, bool i_write)
}
//-----------------------------------------------------------------------------------
-fapi2::ReturnCode p9_spr_name_map(const std::string i_name, const bool i_write, uint32_t& o_number)
+bool p9_spr_name_map(const std::string i_name, const bool i_write, uint32_t& o_number)
{
- FAPI_INF("Start SPR name map");
bool l_check_flag = false;
- if(spr_map.find(i_name) != spr_map.end())
+ if(SPR_MAP.find(i_name) != SPR_MAP.end())
+ {
+ l_check_flag = p9_spr_name_map_check_flag(SPR_MAP[i_name].flag, i_write);
+
+ if(l_check_flag)
+ {
+ o_number = SPR_MAP[i_name].number;
+ }
+ }
+
+ return l_check_flag;
+}
+
+//-----------------------------------------------------------------------------------
+bool p9_get_share_type(const std::string i_name, Enum_ShareType& o_share_type)
+{
+ bool l_rc = false;
+
+ if(SPR_MAP.find(i_name) != SPR_MAP.end())
{
- l_check_flag = p9_spr_name_map_check_flag(spr_map[i_name].flag, i_write);
+ o_share_type = SPR_MAP[i_name].share_type;
+ l_rc = true;
+ }
- FAPI_ASSERT(l_check_flag,
- fapi2::P9_SPR_INVALID_RW_MODE_ACCESS_ERR()
- .set_REGNAME(i_name)
- .set_RWFLAG(spr_map[i_name].flag),
- "SPR RW mode check failed");
+ return l_rc;
+}
- o_number = spr_map[i_name].number;
+//-----------------------------------------------------------------------------------
+bool p9_get_bit_length(const std::string i_name, uint8_t& o_bit_length)
+{
+ bool l_rc = false;
+
+ if(SPR_MAP.find(i_name) != SPR_MAP.end())
+ {
+ o_bit_length = SPR_MAP[i_name].bit_length;
+ l_rc = true;
}
- else
+
+ return l_rc;
+}
+
+//-----------------------------------------------------------------------------------
+bool p9_get_spr_entry(const std::string i_name, SPRMapEntry& o_spr_entry)
+{
+ bool l_rc = false;
+
+ if(SPR_MAP.find(i_name) != SPR_MAP.end())
{
- FAPI_ASSERT(false,
- fapi2::P9_SPR_INVALID_NAME_ACCESS_ERR()
- .set_REGNAME(i_name),
- "SPR name is invalid");
+ o_spr_entry = SPR_MAP[i_name];
+ l_rc = true;
}
-fapi_try_exit:
- FAPI_INF("Exiting SPR name map");
- return fapi2::current_err;
+ return l_rc;
}
+
OpenPOWER on IntegriCloud