diff options
author | Santosh Puranik <santosh.puranik@in.ibm.com> | 2016-09-26 03:14:57 -0500 |
---|---|---|
committer | Santosh S. Puranik <santosh.puranik@in.ibm.com> | 2016-09-30 02:34:33 -0400 |
commit | d203132a331691e653aee54b339453b391b5e7a0 (patch) | |
tree | 7613274c63d11a0b113b3232089f0dfcd57366a9 /src/hwpf/src | |
parent | 57475477182adeecc322a4a3852857bd5b997993 (diff) | |
download | talos-sbe-d203132a331691e653aee54b339453b391b5e7a0.tar.gz talos-sbe-d203132a331691e653aee54b339453b391b5e7a0.zip |
Removed PPE specific code for SCOMs
Change-Id: Ib15f7f204d5afdba8ce23eaa2b749383b81ae3bc
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/30280
Reviewed-by: RANGANATHPRASAD G. BRAHMASAMUDRA <prasadbgr@in.ibm.com>
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: PPE CI <ppe-ci+hostboot@us.ibm.com>
Reviewed-by: Sachin Gupta <sgupta2m@in.ibm.com>
Reviewed-by: Gregory S. Still <stillgs@us.ibm.com>
Reviewed-by: PARVATHI RACHAKONDA <prachako@in.ibm.com>
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/30286
Reviewed-by: Hostboot Team <hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Santosh S. Puranik <santosh.puranik@in.ibm.com>
Diffstat (limited to 'src/hwpf/src')
-rw-r--r-- | src/hwpf/src/plat/plat_hw_access.C | 96 |
1 files changed, 68 insertions, 28 deletions
diff --git a/src/hwpf/src/plat/plat_hw_access.C b/src/hwpf/src/plat/plat_hw_access.C index b460946f..a6eaf91c 100644 --- a/src/hwpf/src/plat/plat_hw_access.C +++ b/src/hwpf/src/plat/plat_hw_access.C @@ -41,14 +41,14 @@ uint64_t decodeScanRegionData(const uint32_t i_ringAddress) uint32_t l_scan_type = 0x00008000 >> (i_ringAddress & 0x0000000F); // This is special case if encoded type is 0xF - + if ( (i_ringAddress & 0x0000000F) == 0xF) { l_scan_type = 0x00008000 | (l_scan_type << 12); } uint64_t l_value = l_scan_region; l_value = (l_value << 32) | l_scan_type; - + return l_value; } @@ -73,7 +73,7 @@ ReturnCode getRing_setup(const uint32_t i_ringAddress, break; } - l_rc = setupScanRegionForSetPulse(l_proc, l_scanRegion, + l_rc = setupScanRegionForSetPulse(l_proc, l_scanRegion, i_ringMode,l_chipletId); if(l_rc != fapi2::FAPI2_RC_SUCCESS) { @@ -162,41 +162,81 @@ ReturnCode getRing_verifyAndcleanup(const uint32_t i_ringAddress, break; } } - + }while(0); return l_rc; } - uint32_t getscom_abs_wrap(const uint32_t i_addr, uint64_t *o_data) +static uint32_t getEffectiveAddress(const plat_target_handle_t &i_target, const uint32_t i_addr) +{ + ScomAddr l_addr(i_addr); + switch(i_target.getTargetType()) { - uint32_t l_rc = 0; - FAPI_INF("getScom: address: 0x%08X", i_addr); - l_rc = getscom_abs(i_addr, o_data); - if( PIB_NO_ERROR != l_rc ) - { - l_rc = p9_pibErrRetry( i_addr, o_data, l_rc, true); - } - FAPI_INF("getScom: returned rc: 0x%08X, data HI: 0x%08X, " - "data LO: 0x%08X", l_rc, (*o_data >> 32), - static_cast<uint32_t>(*o_data & 0xFFFFFFFF)); - return l_rc; + case PPE_TARGET_TYPE_EX: + if((EQ_CHIPLET_OFFSET <= l_addr.iv_chiplet) && + ((EQ_CHIPLET_OFFSET + EQ_TARGET_COUNT) > l_addr.iv_chiplet)) + { + l_addr.iv_chiplet = i_target.fields.chiplet_num; + l_addr.iv_ring = (l_addr.iv_ring - (l_addr.iv_ring % 2)) + + (i_target.getTargetInstance() % 2); + } + else if ((CORE_CHIPLET_OFFSET <= l_addr.iv_chiplet) && + ((CORE_CHIPLET_OFFSET + CORE_TARGET_COUNT) > l_addr.iv_chiplet)) + { + l_addr.iv_chiplet = CORE_CHIPLET_OFFSET + (l_addr.iv_chiplet % 2) + + (i_target.getTargetInstance() * 2); + } + else + { + assert(false); + } + break; + case PPE_TARGET_TYPE_MCS: + l_addr.iv_chiplet = i_target.fields.chiplet_num; + l_addr.iv_satId = (2 * (i_target.getTargetInstance() % 2)); + break; + default: + if(0 != i_target.getAddressOverlay()) + { + l_addr.iv_chiplet = i_target.fields.chiplet_num; + } + break; } + return l_addr; +} - uint32_t putscom_abs_wrap(const uint32_t i_addr, uint64_t i_data) +uint32_t getscom_abs_wrap(const void *i_target, const uint32_t i_addr, uint64_t *o_data) +{ + uint32_t l_rc = 0; + uint32_t l_addr = getEffectiveAddress(*(plat_target_handle_t*)i_target, i_addr); + FAPI_INF("getScom: address: 0x%08X", l_addr); + l_rc = getscom_abs(l_addr, o_data); + if( PIB_NO_ERROR != l_rc ) { - uint32_t l_rc = 0; - FAPI_INF("putScom: address: 0x%08X, data HI: 0x%08X, data LO: 0x%08X", - i_addr, (i_data >> 32), - static_cast<uint32_t>(i_data & 0xFFFFFFFF)); - l_rc = putscom_abs(i_addr, i_data); - if( PIB_NO_ERROR != l_rc ) - { - l_rc = p9_pibErrRetry( i_addr, &i_data, l_rc, false); - } - FAPI_INF("putScom: returned rc: 0x%08X", l_rc); - return l_rc; + l_rc = p9_pibErrRetry( l_addr, o_data, l_rc, true); } + FAPI_INF("getScom: returned rc: 0x%08X, data HI: 0x%08X, " + "data LO: 0x%08X", l_rc, (*o_data >> 32), + static_cast<uint32_t>(*o_data & 0xFFFFFFFF)); + return l_rc; +} + +uint32_t putscom_abs_wrap(const void *i_target, const uint32_t i_addr, uint64_t i_data) +{ + uint32_t l_rc = 0; + uint32_t l_addr = getEffectiveAddress(*(plat_target_handle_t*)i_target, i_addr); + FAPI_INF("putScom: address: 0x%08X, data HI: 0x%08X, data LO: 0x%08X", + l_addr, (i_data >> 32), + static_cast<uint32_t>(i_data & 0xFFFFFFFF)); + l_rc = putscom_abs(l_addr, i_data); + if( PIB_NO_ERROR != l_rc ) + { + l_rc = p9_pibErrRetry( l_addr, &i_data, l_rc, false); + } + FAPI_INF("putScom: returned rc: 0x%08X", l_rc); + return l_rc; +} uint32_t p9_pibErrRetry( const uint32_t i_addr, uint64_t *io_data, const uint8_t i_pibErr, const bool i_isRead) |