-
Notifications
You must be signed in to change notification settings - Fork 97
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Support EXP_FW_LOG command to get Explorer FW logs
Framework to send inband command and a proof of concept adding explorer error log data via collectFfdc RC. Change-Id: I41be5598eb6fb3239fd933e0a0563d1a99ed2fa0 RTC:205128 Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/82372 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>
- Loading branch information
1 parent
b236326
commit 56574b6
Showing
9 changed files
with
794 additions
and
5 deletions.
There are no files selected for viewing
109 changes: 109 additions & 0 deletions
109
src/import/chips/ocmb/explorer/procedures/hwp/memory/exp_fw_log_data.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,109 @@ | ||
/* IBM_PROLOG_BEGIN_TAG */ | ||
/* This is an automatically generated prolog. */ | ||
/* */ | ||
/* $Source: src/import/chips/ocmb/explorer/procedures/hwp/memory/exp_fw_log_data.C $ */ | ||
/* */ | ||
/* OpenPOWER HostBoot Project */ | ||
/* */ | ||
/* Contributors Listed Below - COPYRIGHT 2019 */ | ||
/* [+] 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 exp_fw_log_data.C | ||
/// | ||
/// @brief Collects Explorer firmware log data | ||
// ---------------------------------------- | ||
// *HWP HWP Owner: Matt Derksen <mderkse1@us.ibm.com> | ||
// *HWP HWP Backup: Louis Stermole <stermole@us.ibm.com> | ||
// *HWP Team: Memory | ||
// *HWP Level: 2 | ||
// *HWP Consumed by: HB | ||
// ---------------------------------------- | ||
#include <exp_fw_log_data.H> | ||
#include <fapi2.H> | ||
#include <lib/inband/exp_inband.H> | ||
#include <lib/inband/exp_fw_log.H> | ||
#include <lib/shared/exp_consts.H> | ||
#include <exp_data_structs.H> | ||
#include <generic/memory/lib/utils/c_str.H> | ||
|
||
|
||
extern "C" | ||
{ | ||
/// See header | ||
fapi2::ReturnCode exp_active_log( | ||
const fapi2::Target<fapi2::TARGET_TYPE_OCMB_CHIP>& i_ocmbTarget, | ||
std::vector<uint8_t>& o_data) | ||
{ | ||
host_fw_command_struct l_active_errl_cmd; | ||
host_fw_response_struct l_response; | ||
|
||
// Set up the command packet | ||
mss::exp::ib::build_log_cmd(i_ocmbTarget, | ||
mss::exp::ib::SUB_CMD_READ_ACTIVE_LOG, | ||
l_active_errl_cmd); | ||
|
||
// Send the command packet | ||
FAPI_TRY(mss::exp::ib::putCMD(i_ocmbTarget, l_active_errl_cmd), | ||
"exp_active_error_log: Failed putCMD() for %s!", | ||
mss::c_str(i_ocmbTarget)); | ||
|
||
// Get the response | ||
FAPI_TRY(mss::exp::ib::getRSP(i_ocmbTarget, l_response, o_data), | ||
"exp_active_error_log: Failed getRSP() cmd " | ||
"for %s!", mss::c_str(i_ocmbTarget)); | ||
|
||
// Check if cmd was successful | ||
FAPI_TRY(mss::exp::ib::check_log_cmd_response(i_ocmbTarget, l_response), | ||
"exp_active_error_log: Failed check_log_cmd_response()" | ||
" for %s!", mss::c_str(i_ocmbTarget)); | ||
|
||
fapi_try_exit: | ||
return fapi2::current_err; | ||
} | ||
|
||
|
||
/// See header | ||
fapi2::ReturnCode exp_saved_log( | ||
const fapi2::Target<fapi2::TARGET_TYPE_OCMB_CHIP>& i_ocmbTarget, | ||
std::vector<uint8_t>& o_data) | ||
{ | ||
host_fw_command_struct l_saved_log_cmd; | ||
host_fw_response_struct l_response; | ||
|
||
// Set up the command packet | ||
mss::exp::ib::build_log_cmd(i_ocmbTarget, | ||
mss::exp::ib::SUB_CMD_READ_SAVED_LOG, | ||
l_saved_log_cmd); | ||
|
||
// Send the command packet | ||
FAPI_TRY(mss::exp::ib::putCMD(i_ocmbTarget, l_saved_log_cmd), | ||
"exp_saved_log: Failed putCMD() for %s!", | ||
mss::c_str(i_ocmbTarget)); | ||
|
||
// Get the response | ||
FAPI_TRY(mss::exp::ib::getRSP(i_ocmbTarget, l_response, o_data), | ||
"exp_saved_log: Failed getRSP() for %s!", | ||
mss::c_str(i_ocmbTarget)); | ||
|
||
// Check if cmd was successful | ||
FAPI_TRY(mss::exp::ib::check_log_cmd_response(i_ocmbTarget, l_response), | ||
"exp_saved_log: Failed check_log_cmd_response()" | ||
" for %s!", mss::c_str(i_ocmbTarget)); | ||
fapi_try_exit: | ||
return fapi2::current_err; | ||
} | ||
} |
77 changes: 77 additions & 0 deletions
77
src/import/chips/ocmb/explorer/procedures/hwp/memory/exp_fw_log_data.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,77 @@ | ||
/* IBM_PROLOG_BEGIN_TAG */ | ||
/* This is an automatically generated prolog. */ | ||
/* */ | ||
/* $Source: src/import/chips/ocmb/explorer/procedures/hwp/memory/exp_fw_log_data.H $ */ | ||
/* */ | ||
/* OpenPOWER HostBoot Project */ | ||
/* */ | ||
/* Contributors Listed Below - COPYRIGHT 2019 */ | ||
/* [+] 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 exp_fw_log_data.H | ||
/// @brief Procedure declaration to get Explorer log data | ||
/// | ||
// ---------------------------------------- | ||
// *HWP HWP Owner: Matt Derksen <mderkse1@us.ibm.com> | ||
// *HWP HWP Backup: Louis Stermole <stermole@us.ibm.com> | ||
// *HWP Team: Memory | ||
// *HWP Level: 2 | ||
// *HWP Consumed by: HB | ||
// ---------------------------------------- | ||
#ifndef __EXP_FW_LOG_DATA__ | ||
#define __EXP_FW_LOG_DATA__ | ||
|
||
#include <fapi2.H> | ||
#include <vector> | ||
|
||
// Required for Cronus | ||
typedef fapi2::ReturnCode (*exp_active_log_FP_t) ( | ||
const fapi2::Target<fapi2::TARGET_TYPE_OCMB_CHIP>&, | ||
std::vector<uint8_t>& ); | ||
|
||
typedef fapi2::ReturnCode (*exp_saved_log_FP_t) ( | ||
const fapi2::Target<fapi2::TARGET_TYPE_OCMB_CHIP>&, | ||
std::vector<uint8_t>& ); | ||
|
||
extern "C" | ||
{ | ||
|
||
/// | ||
/// @brief Grab active log entries from Explorer RAM | ||
/// @param[in] i_target the controller | ||
/// @param[out] o_data - where to put error log data | ||
/// | ||
/// @return FAPI2_RC_SUCCESS iff ok | ||
/// | ||
fapi2::ReturnCode exp_active_log( | ||
const fapi2::Target<fapi2::TARGET_TYPE_OCMB_CHIP>& i_ocmbTarget, | ||
std::vector<uint8_t>& o_data ); | ||
|
||
/// | ||
/// @brief Grab saved log entries from Explorer SPI flash | ||
/// @param[in] i_target the controller | ||
/// @param[out] o_data - where to put error log data | ||
/// | ||
/// @return FAPI2_RC_SUCCESS iff ok | ||
/// | ||
fapi2::ReturnCode exp_saved_log( | ||
const fapi2::Target<fapi2::TARGET_TYPE_OCMB_CHIP>& i_ocmbTarget, | ||
std::vector<uint8_t>& o_data ); | ||
|
||
}// extern C | ||
#endif |
139 changes: 139 additions & 0 deletions
139
src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/inband/exp_fw_log.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,139 @@ | ||
/* IBM_PROLOG_BEGIN_TAG */ | ||
/* This is an automatically generated prolog. */ | ||
/* */ | ||
/* $Source: src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/inband/exp_fw_log.C $ */ | ||
/* */ | ||
/* OpenPOWER HostBoot Project */ | ||
/* */ | ||
/* Contributors Listed Below - COPYRIGHT 2019 */ | ||
/* [+] 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 exp_fw_log.C | ||
/// | ||
/// @brief Helpers to access explorer firmware logs | ||
|
||
// | ||
// *HWP HWP Owner: Louis Stermole <stermole@us.ibm.com> | ||
// *HWP FW Owner: Matt Derksen <mderkse1@us.ibm.com> | ||
// *HWP Team: | ||
// *HWP Level: 2 | ||
// *HWP Consumed by: HB | ||
|
||
#include <exp_fw_log.H> | ||
#include <fapi2.H> | ||
#include <exp_inband.H> | ||
#include <lib/shared/exp_consts.H> | ||
#include <exp_data_structs.H> | ||
#include <generic/memory/lib/utils/c_str.H> | ||
|
||
|
||
namespace mss | ||
{ | ||
namespace exp | ||
{ | ||
namespace ib | ||
{ | ||
|
||
/// | ||
/// @brief Response parameters of Explorer Log commands | ||
/// This is found in the response_argument field | ||
typedef struct | ||
{ | ||
uint8_t op; /**< Firmware error log sub-cmd operation */ | ||
uint8_t status; /**< Operation status */ | ||
uint32_t err_code; /**< Specific error code if operation failed */ | ||
uint32_t num_bytes_returned; /**< Number of bytes returned */ | ||
} exp_fw_log_rsp_parms_struct_t; | ||
|
||
/// | ||
/// @brief Operation status values | ||
/// | ||
enum | ||
{ | ||
STATUS_OP_FAILED = 0x00, | ||
STATUS_OP_SUCCESSFUL = 0x01, | ||
}; | ||
|
||
/// See header | ||
void build_log_cmd( const fapi2::Target<fapi2::TARGET_TYPE_OCMB_CHIP>& i_target, | ||
const exp_log_sub_cmd_op i_sub_op, | ||
host_fw_command_struct& o_cmd ) | ||
{ | ||
// Issue EXP_FW_LOG cmd though EXP-FW REQ buffer | ||
o_cmd.cmd_id = mss::exp::omi::EXP_FW_LOG; | ||
o_cmd.cmd_flags = 0; | ||
|
||
// Host generated id number (returned in response packet) | ||
// @todo RTC 210371 | ||
//uint32_t l_counter = 0; | ||
//FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_OCMB_COUNTER, i_target, l_counter)); | ||
o_cmd.request_identifier = 0xabcd; | ||
|
||
if (i_sub_op == SUB_CMD_READ_SAVED_LOG) | ||
{ | ||
o_cmd.request_identifier = 0xabce; | ||
} | ||
|
||
o_cmd.cmd_length = 0; | ||
|
||
o_cmd.cmd_crc = 0xffffffff; | ||
o_cmd.host_work_area = 0; | ||
o_cmd.cmd_work_area = 0; | ||
memset(o_cmd.padding, 0, sizeof(o_cmd.padding)); | ||
|
||
// Set the sub-command ID in the command argument field | ||
o_cmd.command_argument[0] = i_sub_op; | ||
} | ||
|
||
/// See header | ||
fapi2::ReturnCode check_log_cmd_response( | ||
const fapi2::Target<fapi2::TARGET_TYPE_OCMB_CHIP>& i_target, | ||
const host_fw_response_struct& i_rsp ) | ||
{ | ||
std::vector<uint8_t> resp_arg; | ||
uint32_t index = 0; | ||
exp_fw_log_rsp_parms_struct_t l_rsp_args; | ||
|
||
//copy response_argument field into a vector that can be | ||
//used by readCrctEndian() | ||
resp_arg.assign(i_rsp.response_argument, | ||
i_rsp.response_argument + ARGUMENT_SIZE); | ||
|
||
//convert fields to native endianness | ||
FAPI_TRY(mss::exp::ib::readCrctEndian(resp_arg, index, l_rsp_args.op)); | ||
FAPI_TRY(mss::exp::ib::readCrctEndian(resp_arg, index, l_rsp_args.status)); | ||
FAPI_TRY(mss::exp::ib::readCrctEndian(resp_arg, index, l_rsp_args.err_code)); | ||
FAPI_TRY(mss::exp::ib::readCrctEndian(resp_arg, index, l_rsp_args.num_bytes_returned)); | ||
|
||
// check if command was successful | ||
FAPI_ASSERT(l_rsp_args.status == STATUS_OP_SUCCESSFUL, | ||
fapi2::MSS_EXP_RSP_ARG_FAILED(). | ||
set_TARGET(i_target). | ||
set_RSP_ID(i_rsp.response_id). | ||
set_ERROR_CODE(l_rsp_args.err_code), | ||
"EXP_FW_LOG command 0x%02X failed for %s. " | ||
"Status: 0x%02X, err_code 0x%04X, num_bytes_returned 0x%04X", | ||
l_rsp_args.op, mss::c_str(i_target), l_rsp_args.status, | ||
l_rsp_args.err_code, l_rsp_args.num_bytes_returned); | ||
|
||
fapi_try_exit: | ||
return fapi2::current_err; | ||
} | ||
|
||
}//ib namespace | ||
}//exp namespace | ||
}//mss namespace |
Oops, something went wrong.