Skip to content

Commit

Permalink
P9 L2/L3 cache error extraction
Browse files Browse the repository at this point in the history
Change-Id: Iaf44268029dfd4f87a799112004317f07152e302
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/29945
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Reviewed-by: Thi N. Tran <thi@us.ibm.com>
Reviewed-by: Joseph J. McGill <jmcgill@us.ibm.com>
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/40871
Tested-by: Jenkins OP Build CI <op-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
Chen Qian authored and dcrowell77 committed May 25, 2017
1 parent 3798680 commit 1e01ced
Show file tree
Hide file tree
Showing 9 changed files with 1,289 additions and 0 deletions.
534 changes: 534 additions & 0 deletions src/import/chips/p9/procedures/hwp/cache/p9_l2err_extract.C

Large diffs are not rendered by default.

113 changes: 113 additions & 0 deletions src/import/chips/p9/procedures/hwp/cache/p9_l2err_extract.H
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
/* IBM_PROLOG_BEGIN_TAG */
/* This is an automatically generated prolog. */
/* */
/* $Source: src/import/chips/p9/procedures/hwp/cache/p9_l2err_extract.H $ */
/* */
/* OpenPOWER HostBoot Project */
/* */
/* Contributors Listed Below - COPYRIGHT 2016,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 */
//------------------------------------------------------------------------------
// *|
// *! TITLE : p9_l2err_extract.H
// *! DESCRIPTION : Parse and extract error information from L2 trace array (FAPI)
// *!
// *! OWNER NAME : Chen Qian Email: qianqc@cn.ibm.com
// *!
// *! ADDITIONAL COMMENTS :
// *!
// *! Parses the contents of the L2_T0 trace array for L2 error data.
// *! Will look for occurances of an L2 CE or UE and capture associated data.
// *!
// *! Assume that the L2 trace array is set up to capture CEs/UEs, and
// *! that it is NOT running in banked mode. Also trace must have been set to
// *! stop on error.
// *|
// *! NOTE: Trace entries must be provided within data buffer from oldest->youngest entry.
// *!
// *! NOTE: This procedure only looks for the oldest error in the trace array. Other
// *! errors can be present in the first or second beat of data, or for datawords
// *! greater than the one with the first error.
//------------------------------------------------------------------------------

#ifndef _P9_L2ERR_EXTRACT_H_
#define _P9_L2ERR_EXTRACT_H_

//------------------------------------------------------------------------------
// Includes
//------------------------------------------------------------------------------
#include <fapi2.H>

//------------------------------------------------------------------------------
// Structure definitions
//------------------------------------------------------------------------------

// enum used to denote what type of error occured or which we want to find
enum p9_l2err_extract_err_type
{
L2ERR_CE,
L2ERR_UE,
L2ERR_CE_UE
};

// structure to document control/data registers for each supported trace array
struct p9_l2err_extract_err_data
{
p9_l2err_extract_err_type ce_ue;
uint8_t member; //3-bit
uint8_t dw; //3-bit
uint8_t macro; //2-bit d0-d2
uint8_t bank; //1-bit
uint8_t ow_select;//1-bit
uint8_t bitline; //decimal 0-99
bool is_top_sa; //top or bottom subarray
bool is_left_sa; //left or right subarray
uint16_t address;//10 bits addr48_57
};

// function pointer typedef definition for HWP call support
typedef fapi2::ReturnCode
(*p9_l2err_extract_FP_t) (const fapi2::Target<fapi2::TARGET_TYPE_EX>&,
const fapi2::variable_buffer&,
p9_l2err_extract_err_type,
p9_l2err_extract_err_data&);

extern "C"
{

//------------------------------------------------------------------------------
// Function prototype
//------------------------------------------------------------------------------

// function: FAPI2 p9_l2err_extract HWP entry point
// Parse and extract L2 error information from provided
// L2_T0 trace array that has been stopped on an L2 CE or UE.
// parameters: i_target => chiplet target for callouts
// i_ta_data => ecmdDataBufferBase that contains the trace data
// i_err_type => type of error that is to be extracted (CE,UE,both)
// o_err_data => failing location information for CE or UE

fapi2::ReturnCode p9_l2err_extract(const fapi2::Target<fapi2::TARGET_TYPE_EX>& i_target,
const fapi2::variable_buffer& i_ta_data,
p9_l2err_extract_err_type i_err_type,
p9_l2err_extract_err_data& o_err_data);

} // extern "C"

#endif // _P9_L2ERR_EXTRACT_H_

27 changes: 27 additions & 0 deletions src/import/chips/p9/procedures/hwp/cache/p9_l2err_extract.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# IBM_PROLOG_BEGIN_TAG
# This is an automatically generated prolog.
#
# $Source: src/import/chips/p9/procedures/hwp/cache/p9_l2err_extract.mk $
#
# OpenPOWER HostBoot Project
#
# Contributors Listed Below - COPYRIGHT 2015,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
PROCEDURE=p9_l2err_extract
$(call BUILD_PROCEDURE)

119 changes: 119 additions & 0 deletions src/import/chips/p9/procedures/hwp/cache/p9_l2err_linedelete.C
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
/* IBM_PROLOG_BEGIN_TAG */
/* This is an automatically generated prolog. */
/* */
/* $Source: src/import/chips/p9/procedures/hwp/cache/p9_l2err_linedelete.C $ */
/* */
/* OpenPOWER HostBoot Project */
/* */
/* Contributors Listed Below - COPYRIGHT 2016,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 */
//------------------------------------------------------------------------------
// *|
// *! TITLE : p9_l2err_linedelete.C
// *! DESCRIPTION : Delete the L2 error cache line according to the error extraction information.
// *!
// *! OWNER NAME : Chen Qian Email: qianqc@cn.ibm.com
// *!
// *! ADDITIONAL COMMENTS :
// *! See header file for additional comments.
//------------------------------------------------------------------------------


//------------------------------------------------------------------------------
// Includes
//------------------------------------------------------------------------------
#include <p9_l2err_linedelete.H>
#include <p9_quad_scom_addresses.H>
#include <p9_quad_scom_addresses_fld.H>
//------------------------------------------------------------------------------
// Constant definitions
//------------------------------------------------------------------------------

extern "C"
{

//------------------------------------------------------------------------------
// Function definitions
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
// HWP entry point
//------------------------------------------------------------------------------
fapi2::ReturnCode p9_l2err_linedelete(const fapi2::Target<fapi2::TARGET_TYPE_EX>& i_target,
const p9_l2err_extract_err_data& i_err_data)
{


uint8_t member = 0;
uint8_t bank = 0;
uint16_t cgc = 0;
fapi2::buffer<uint64_t> l_l2_l2cerrs_prd_purge_cmd_reg;

// mark function entry
FAPI_DBG("Entering p9_l2err_linedelete...");

// +---------------------------+
// | L2 Line Delete Scom |
// +---------------------------+
// |Bit(s)| Data |
// +------+--------------------+
// | 0 | Trigger |
// +------+--------------------+
// | 1:4 | Purge type (LD=0x2)|
// +------+--------------------+
// | 5:16 | Don't care |
// +------+--------------------+
// |17:19 | Member |
// +------+--------------------+
// |20:27 | CGC addr 48:55 |
// +------+--------------------+
// | 28 | Bank |
// +------+--------------------+
// |29:30 | Don't care |
// +------+--------------------+

member = i_err_data.member;
bank = i_err_data.bank;
cgc = i_err_data.address;

// Write member, cgc address and bank into PRD Purge Engine Command Register
// SCOM Addr: 0x000000001001080E
// bit 0 is the trigger, the act of writing this bit to 1 sets off the line delete
// bits 1:4 is ttype 0b0010 = line delete
// bits 17:19 is the member
// bits 20:27 is the cgc address
// bit 28 is the bank
FAPI_TRY(fapi2::getScom(i_target, EX_PRD_PURGE_CMD_REG, l_l2_l2cerrs_prd_purge_cmd_reg),
"Error from getScom (l_l2_l2cerrs_prd_purge_cmd_reg)");
FAPI_DBG("l_l2_l2cerrs_prd_purge_cmd_reg_data: %#lx", l_l2_l2cerrs_prd_purge_cmd_reg);

l_l2_l2cerrs_prd_purge_cmd_reg.insertFromRight<EX_PRD_PURGE_CMD_REG_MEM, EX_PRD_PURGE_CMD_REG_MEM_LEN>(member);
l_l2_l2cerrs_prd_purge_cmd_reg.insertFromRight<EX_PRD_PURGE_CMD_REG_CGC, EX_PRD_PURGE_CMD_REG_CGC_LEN>(cgc);
l_l2_l2cerrs_prd_purge_cmd_reg.insertFromRight<EX_PRD_PURGE_CMD_REG_BANK, 1>(bank);

FAPI_DBG("l_l2_l2cerrs_prd_purge_cmd_reg_data: %#lx", l_l2_l2cerrs_prd_purge_cmd_reg);
FAPI_TRY(fapi2::putScom(i_target, EX_PRD_PURGE_CMD_REG, l_l2_l2cerrs_prd_purge_cmd_reg),
"Error from putScom (l_l2_l2cerrs_prd_purge_cmd_reg)");

// mark HWP exit
fapi_try_exit:
FAPI_INF("Exiting p9_l2err_linedelete...");
return fapi2::current_err;
} // p9_l2err_extract

} // extern "C
74 changes: 74 additions & 0 deletions src/import/chips/p9/procedures/hwp/cache/p9_l2err_linedelete.H
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
/* IBM_PROLOG_BEGIN_TAG */
/* This is an automatically generated prolog. */
/* */
/* $Source: src/import/chips/p9/procedures/hwp/cache/p9_l2err_linedelete.H $ */
/* */
/* OpenPOWER HostBoot Project */
/* */
/* Contributors Listed Below - COPYRIGHT 2016,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 */
//------------------------------------------------------------------------------
// *|
// *! TITLE : p9_l2err_linedelete.H
// *! DESCRIPTION : Delete the L2 error cache line according to the error extraction information
// *!
// *! OWNER NAME : Chen Qian Email: qianqc@cn.ibm.com
// *!
// *! ADDITIONAL COMMENTS :
// *!
// *! Write member, cgc address and bank into PRD Purge Engine Command Register
// *! SCOM Addr: 0x000000001001080E
// *! bit 0 is the trigger, the act of writing this bit to 1 sets off the line delete
// *! bits 1:4 is the ttype 0b0010 = line delete
// *! bits 17:19 is the member
// *| bits 20:27 is the cgc address
// *| bit 28 is the bank
// *|
// *! NOTE: The error information is extracted by the HWP p9_l2err_extract.
// *| An output data structure is dumped to this proceder and wrapped
//------------------------------------------------------------------------------

#ifndef _P9_L2ERR_LINEDELETE_H_
#define _P9_L2ERR_LINEDELETE_H_

//------------------------------------------------------------------------------
// Includes
//------------------------------------------------------------------------------
#include <fapi2.H>
#include <p9_l2err_extract.H>

//------------------------------------------------------------------------------
// Structure definitions
//------------------------------------------------------------------------------

// function pointer typedef definition for HWP call support
typedef fapi2::ReturnCode
(*p9_l2err_linedelete_FP_t) (const fapi2::Target<fapi2::TARGET_TYPE_EX>&,
const p9_l2err_extract_err_data& );

extern "C"
{



fapi2::ReturnCode p9_l2err_linedelete(const fapi2::Target<fapi2::TARGET_TYPE_EX>& i_target,
const p9_l2err_extract_err_data& i_err_data);

} // extern "C"

#endif // _P9_L2ERR_LINEDELETE_H_
27 changes: 27 additions & 0 deletions src/import/chips/p9/procedures/hwp/cache/p9_l2err_linedelete.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# IBM_PROLOG_BEGIN_TAG
# This is an automatically generated prolog.
#
# $Source: src/import/chips/p9/procedures/hwp/cache/p9_l2err_linedelete.mk $
#
# OpenPOWER HostBoot Project
#
# Contributors Listed Below - COPYRIGHT 2015,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
PROCEDURE=p9_l2err_linedelete
$(call BUILD_PROCEDURE)

0 comments on commit 1e01ced

Please sign in to comment.