diff options
author | LiuYangFan <shliuyf@cn.ibm.com> | 2016-04-01 03:25:41 -0500 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2016-08-01 11:56:29 -0400 |
commit | 47845536df2e76c019b1289fd72d443498b9c102 (patch) | |
tree | 4b2d9b3e1791d67ed90dd14c762ebbf490b1f853 /src/import/chips/p9/procedures/hwp/perv/p9_spr_name_map.C | |
parent | 28d4903c629357bca036b0fecb3cf3fb8a6e16a9 (diff) | |
download | talos-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.C | 92 |
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; } + |