Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Temp commit to enable manual mirror of new files to ppe
For https://ralgit01.raleigh.ibm.com/gerrit1/#/c/43122 as part of p9_suspend_powman L3 work Change-Id: I410482219a3d0b9a1fb81b54e87267d4b6586267 RTC:177136 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/44289 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Reviewed-by: AMIT J. TENDOLKAR <amit.tendolkar@in.ibm.com> Reviewed-by: Brian T. Vanderpool <vanderp@us.ibm.com> Reviewed-by: Gregory S. Still <stillgs@us.ibm.com> Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/44349 Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Sachin Gupta <sgupta2m@in.ibm.com>
- Loading branch information
1 parent
5692229
commit d9bce6e
Showing
2 changed files
with
304 additions
and
0 deletions.
There are no files selected for viewing
236 changes: 236 additions & 0 deletions
236
src/import/chips/p9/procedures/hwp/lib/p9_collect_suspend_ffdc.C
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,236 @@ | ||
/* IBM_PROLOG_BEGIN_TAG */ | ||
/* This is an automatically generated prolog. */ | ||
/* */ | ||
/* $Source: src/import/chips/p9/procedures/hwp/lib/p9_collect_suspend_ffdc.C $ */ | ||
/* */ | ||
/* OpenPOWER sbe Project */ | ||
/* */ | ||
/* Contributors Listed Below - COPYRIGHT 2017 */ | ||
/* [+] International Business Machines Corp. */ | ||
/* */ | ||
/* */ | ||
/* Licensed under the Apache License, Version 2.0 (the "License"); */ | ||
/* you may not use this file except in compliance with the License. */ | ||
/* You may obtain a copy of the License at */ | ||
/* */ | ||
/* http://www.apache.org/licenses/LICENSE-2.0 */ | ||
/* */ | ||
/* Unless required by applicable law or agreed to in writing, software */ | ||
/* distributed under the License is distributed on an "AS IS" BASIS, */ | ||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ | ||
/* implied. See the License for the specific language governing */ | ||
/* permissions and limitations under the License. */ | ||
/* */ | ||
/* IBM_PROLOG_END_TAG */ | ||
#if 0 // tmp dummy file to enable ppe manual mirror | ||
#include <fapi2.H> | ||
#include <p9_collect_suspend_ffdc.H> | ||
#include <p9_sbe_ppe_ffdc.H> | ||
#include <p9_ppe_defs.H> | ||
|
||
#define NUM_SCOMS 28 | ||
#define NUM_LOC_VARS 19 | ||
#define NUM_BYTE_RANGES 52 | ||
#define CME_OFF 0x00000000BADCE0FF | ||
|
||
uint32_t g_scom = 0; | ||
uint32_t g_byte = 8; | ||
uint64_t g_ffdcScoms[NUM_LOC_VARS]; | ||
uint32_t g_index = 0; | ||
|
||
const uint32_t g_byteranges[NUM_BYTE_RANGES] = | ||
{ | ||
0x07, //PGPE XIR | ||
0x07, //PGPE XIR | ||
0x07, //PGPE XIR | ||
0x03, //PGPE SPR | ||
0x03, //PGPE SPR | ||
0x03, //PGPE SPR | ||
0x07, //SGPE XIR | ||
0x07, //SGPE XIR | ||
0x07, //SGPE XIR | ||
0x03, //SGPE SPR | ||
0x03, //SGPE SPR | ||
0x03, //SGPE SPR | ||
0x03, //OCCS2 | ||
0x03, //OCCFLG | ||
0x00, 0x00, 0x00, 0x00, //OPIT2 C[0-3] | ||
0x00, 0x00, 0x00, 0x00, //OPIT2 C[4-7] | ||
0x00, 0x00, 0x00, 0x00, //OPIT2 C[8-11] | ||
0x00, 0x00, 0x00, 0x00, //OPIT2 C[12-15] | ||
0x00, 0x00, 0x00, 0x00, //OPIT2 C[16-19] | ||
0x00, 0x00, 0x00, 0x00, //OPIT2 C[20-23] | ||
0x01, //QCSR | ||
0x02, //CCSR | ||
0x47, 0x47, 0x47, 0x47, 0x47, 0x47, //CME[0-5] IAR | ||
0x47, 0x47, 0x47, 0x47, 0x47, 0x47 //CME[6-11] IAR | ||
}; // | ||
const uint64_t masks[8] = | ||
{ | ||
0xFF, | ||
0xFFFF, | ||
0xFFFFFF, | ||
0xFFFFFFFF, | ||
0xFFFFFFFFFF, | ||
0xFFFFFFFFFFFF, | ||
0xFFFFFFFFFFFFFF, | ||
0xFFFFFFFFFFFFFFFF | ||
}; | ||
uint64_t extract(uint64_t data, uint32_t low, uint32_t high) | ||
{ | ||
return ((data >> (56 - (high << 3))) & masks[(high - low)]); | ||
} | ||
void add_data(uint64_t l_data64) | ||
{ | ||
//first nibble hold2 low g_byte | ||
uint32_t low = g_byteranges[g_index] >> 4; | ||
//second nibble holds high g_byte | ||
uint32_t high = g_byteranges[g_index] & 0xFF; | ||
g_index++; | ||
uint32_t length = (high - low) + 1; | ||
//gets data between low and high g_byte inclusive | ||
uint64_t data = extract(l_data64, low, high); | ||
|
||
if(g_byte - length < 0)//if length of data greater than remaining space in current local variable | ||
{ | ||
length -= g_byte; | ||
g_ffdcScoms[g_scom] |= (data >> (length << 3)); //stores what will fit in current variable | ||
data &= masks[length]; //sets up remaining data to be stored in next variable | ||
g_scom++; | ||
g_byte = 8; | ||
} | ||
|
||
g_ffdcScoms[g_scom] |= (data << ((length - g_byte) << 3)); //stores data in current variable | ||
g_byte -= length; | ||
|
||
if(!g_byte) //if no space left in current local variable move to next | ||
{ | ||
g_scom++; | ||
g_byte = 8; | ||
} | ||
} | ||
|
||
fapi2::ReturnCode | ||
p9_collect_suspend_ffdc (const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target) | ||
{ | ||
FAPI_INF (">> p9_collect_suspend_ffdc.exe"); | ||
|
||
fapi2::buffer<uint64_t> l_data64; | ||
std::vector<uint64_t> ppe_regs; | ||
uint32_t sbe_index; | ||
|
||
for(sbe_index = 0; sbe_index < NUM_LOC_VARS; sbe_index++) | ||
{ | ||
g_ffdcScoms[sbe_index] = 0; | ||
} | ||
|
||
///Collect PGPE Data | ||
p9_sbe_ppe_ffdc ( i_target, | ||
PGPE_BASE_ADDRESS, | ||
ppe_regs ); | ||
|
||
for(sbe_index = 0; sbe_index < ppe_regs.size(); sbe_index++) | ||
{ | ||
add_data(ppe_regs[sbe_index]); | ||
} | ||
|
||
//Collect SGPE Data | ||
p9_sbe_ppe_ffdc ( i_target, | ||
SGPE_BASE_ADDRESS, | ||
ppe_regs ); | ||
|
||
for(sbe_index = 0; sbe_index < ppe_regs.size(); sbe_index++) | ||
{ | ||
add_data(ppe_regs[sbe_index]); | ||
} | ||
|
||
//Collect All other SCOMs | ||
uint32_t scoms[NUM_SCOMS] = | ||
{ | ||
PU_OCB_OCI_OCCS2_SCOM, | ||
PU_OCB_OCI_OCCFLG_SCOM, | ||
PU_OCB_OCI_OPIT2C0_SCOM, PU_OCB_OCI_OPIT2C1_SCOM, PU_OCB_OCI_OPIT2C2_SCOM, PU_OCB_OCI_OPIT2C3_SCOM, | ||
PU_OCB_OCI_OPIT2C4_SCOM, PU_OCB_OCI_OPIT2C5_SCOM, PU_OCB_OCI_OPIT2C6_SCOM, PU_OCB_OCI_OPIT2C7_SCOM, | ||
PU_OCB_OCI_OPIT2C8_SCOM, PU_OCB_OCI_OPIT2C9_SCOM, PU_OCB_OCI_OPIT2C10_SCOM, PU_OCB_OCI_OPIT2C11_SCOM, | ||
PU_OCB_OCI_OPIT2C12_SCOM, PU_OCB_OCI_OPIT2C13_SCOM, PU_OCB_OCI_OPIT2C14_SCOM, PU_OCB_OCI_OPIT2C15_SCOM, | ||
PU_OCB_OCI_OPIT2C16_SCOM, PU_OCB_OCI_OPIT2C17_SCOM, PU_OCB_OCI_OPIT2C18_SCOM, PU_OCB_OCI_OPIT2C19_SCOM, | ||
PU_OCB_OCI_OPIT2C20_SCOM, PU_OCB_OCI_OPIT2C21_SCOM, PU_OCB_OCI_OPIT2C22_SCOM, PU_OCB_OCI_OPIT2C23_SCOM, | ||
PU_OCB_OCI_QCSR_SCOM, | ||
PU_OCB_OCI_CCSR_SCOM | ||
}; | ||
|
||
uint32_t getscom_index; | ||
|
||
for(getscom_index = 0; getscom_index < NUM_SCOMS; getscom_index++) | ||
{ | ||
fapi2::getScom ( i_target, | ||
scoms[getscom_index], | ||
l_data64 ); | ||
add_data(l_data64); | ||
|
||
} | ||
|
||
//Collect CME IARs | ||
const uint32_t SSHSRC[12] = | ||
{ | ||
EX_0_PPM_SSHSRC, EX_1_PPM_SSHSRC, EX_2_PPM_SSHSRC, EX_3_PPM_SSHSRC, EX_4_PPM_SSHSRC, EX_5_PPM_SSHSRC, | ||
EX_6_PPM_SSHSRC, EX_7_PPM_SSHSRC, EX_8_PPM_SSHSRC, EX_9_PPM_SSHSRC, EX_10_PPM_SSHSRC, EX_11_PPM_SSHSRC | ||
}; | ||
const uint32_t DBGPRO[12] = | ||
{ | ||
EX_0_PPE_XIDBGPRO, EX_1_PPE_XIDBGPRO, EX_2_PPE_XIDBGPRO, EX_3_PPE_XIDBGPRO, EX_4_PPE_XIDBGPRO, EX_5_PPE_XIDBGPRO, | ||
EX_6_PPE_XIDBGPRO, EX_7_PPE_XIDBGPRO, EX_8_PPE_XIDBGPRO, EX_9_PPE_XIDBGPRO, EX_10_PPE_XIDBGPRO, EX_11_PPE_XIDBGPRO | ||
}; | ||
|
||
uint32_t ex; | ||
|
||
for(ex = 0; ex < 12; ex++) | ||
{ | ||
fapi2::getScom( i_target, | ||
SSHSRC[ex], | ||
l_data64 ); | ||
|
||
if(!(l_data64 >> 63))//is this ex stop gated? | ||
{ | ||
fapi2::getScom( i_target, | ||
DBGPRO[ex], | ||
l_data64 ); | ||
add_data(l_data64); | ||
} | ||
else | ||
{ | ||
add_data(CME_OFF); //inject data which informs cme is offline | ||
} | ||
} | ||
|
||
//Write out compacted SCOM data | ||
FAPI_ASSERT ( false, | ||
fapi2::SUSPEND_FFDC() | ||
.set_PROC_CHIP_TARGET (i_target) | ||
.set_PGPE_XSR_AND_IAR (g_ffdcScoms[0]) | ||
.set_PGPE_IR_AND_EDR (g_ffdcScoms[1]) | ||
.set_PGPE_LR_AND_SPRG0 (g_ffdcScoms[2]) | ||
.set_PGPE_SRR0_AND_SRR1 (g_ffdcScoms[3]) | ||
.set_SGPE_XSR_AND_IAR (g_ffdcScoms[4]) | ||
.set_SGPE_IR_AND_EDR (g_ffdcScoms[5]) | ||
.set_SGPE_LR_AND_SPRG0 (g_ffdcScoms[6]) | ||
.set_SGPE_SRR0_AND_SRR1 (g_ffdcScoms[7]) | ||
.set_OCCS2_AND_OCCFLG (g_ffdcScoms[8]) | ||
.set_OPIT2C_0_THROUGH_7_B0 (g_ffdcScoms[9]) | ||
.set_OPIT2C_8_THROUGH_15_B0 (g_ffdcScoms[10]) | ||
.set_OPIT2C_16_THROUGH_23_B0 (g_ffdcScoms[11]) | ||
.set_QCSR_B0_TO_B1_AND_CCSR_B0_TO_B2_AND_3B_EMPTY (g_ffdcScoms[12]) | ||
.set_CME0_IAR_AND_CME1_IAR (g_ffdcScoms[13]) | ||
.set_CME2_IAR_AND_CME3_IAR (g_ffdcScoms[14]) | ||
.set_CME4_IAR_AND_CME5_IAR (g_ffdcScoms[15]) | ||
.set_CME6_IAR_AND_CME7_IAR (g_ffdcScoms[16]) | ||
.set_CME8_IAR_AND_CME9_IAR (g_ffdcScoms[17]) | ||
.set_CME10_IAR_AND_CME11_IAR (g_ffdcScoms[18]), | ||
"Suspend FFDC"); | ||
|
||
fapi_try_exit: | ||
FAPI_INF ("<< p9_collect_suspend_ffdc"); | ||
return fapi2::current_err; | ||
} | ||
|
||
#endif |
68 changes: 68 additions & 0 deletions
68
src/import/chips/p9/procedures/hwp/lib/p9_collect_suspend_ffdc.H
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
/* IBM_PROLOG_BEGIN_TAG */ | ||
/* This is an automatically generated prolog. */ | ||
/* */ | ||
/* $Source: src/import/chips/p9/procedures/hwp/lib/p9_collect_suspend_ffdc.H $ */ | ||
/* */ | ||
/* OpenPOWER sbe Project */ | ||
/* */ | ||
/* Contributors Listed Below - COPYRIGHT 2017 */ | ||
/* [+] International Business Machines Corp. */ | ||
/* */ | ||
/* */ | ||
/* Licensed under the Apache License, Version 2.0 (the "License"); */ | ||
/* you may not use this file except in compliance with the License. */ | ||
/* You may obtain a copy of the License at */ | ||
/* */ | ||
/* http://www.apache.org/licenses/LICENSE-2.0 */ | ||
/* */ | ||
/* Unless required by applicable law or agreed to in writing, software */ | ||
/* distributed under the License is distributed on an "AS IS" BASIS, */ | ||
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */ | ||
/* implied. See the License for the specific language governing */ | ||
/* permissions and limitations under the License. */ | ||
/* */ | ||
/* IBM_PROLOG_END_TAG */ | ||
/// @file p9_collect_suspend_ffdc.H | ||
/// @brief Dumps a minimal and critical state of a PPE from SBE | ||
/// | ||
/// *HWP HW Owner : Adam Hale <Adam.Samuel.Hale@ibm.com> | ||
/// *HWP HW Backup Owner : Brian Vanderpool <vanderp@us.ibm.com> | ||
/// *HWP FW Owner : Raja Das | ||
/// *HWP Team : PM | ||
/// *HWP Level : 3 | ||
/// *HWP Consumed by : SBE | ||
#if 0 // tmp change to enable manual mirror to ppe | ||
#ifndef __P9_COLLECT_SUSPEND_FFDC_H__ | ||
#define __P9_COLLECT_SUSPEND_FFDC_H__ | ||
|
||
#include <error_info_defs.H> | ||
#include <return_code.H> | ||
|
||
//------------------------------------------------------------------------------ | ||
// Includes | ||
//------------------------------------------------------------------------------ | ||
|
||
/// @typedef p9_collect_suspend_ffdc_FP_t | ||
/// function pointer typedef definition for HWP call support | ||
typedef fapi2::ReturnCode (*p9_collect_suspend_ffdc_FP_t) ( | ||
const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& | ||
); | ||
|
||
//------------------------------------------------------------------------------ | ||
// Function prototypes | ||
//------------------------------------------------------------------------------ | ||
|
||
/// @brief Collects FFDC related to the Complex Suspend failure | ||
/// @param [in] i_target Master Chip target which failed entering Complex Suspend | ||
/// @return On success, a ReturnCode object with the input HWP return code | ||
/// and relevant FFDC added to it | ||
/// On failure, a ReturnCode object with the input HWP return code | ||
/// and partial or default FFDC added to it | ||
/// | ||
fapi2::ReturnCode | ||
p9_collect_suspend_ffdc ( | ||
const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target | ||
); | ||
|
||
#endif // __P9_COLLECT_SUSPEND_FFDC_H__ | ||
#endif |