[Skiboot] [PATCH 2/2] hmi: Print CAPP FIR information when handling CAPP malfunction alerts

Frederic Barrat fbarrat at linux.vnet.ibm.com
Thu Mar 16 04:15:21 AEDT 2017



Le 01/03/2017 à 00:58, Andrew Donnellan a écrit :
> When diagnosing or debugging CAPP errors, it's rather useful to have the
> CAPP FIR, which often provides very helpful information.
>
> Print the CAPP FIR to the log when we handle a Malfunction Alert HMI for a
> CAPP error.
>
> Cc: Frederic Barrat <fbarrat at linux.vnet.ibm.com>
> Signed-off-by: Andrew Donnellan <andrew.donnellan at au1.ibm.com>
> ---

Reviewed-by: Frederic Barrat <fbarrat at linux.vnet.ibm.com>
(and tested on Garrison..)

   Fred


>  core/hmi.c     | 29 +++++++++++++++++++++++++++++
>  include/capp.h |  7 +++++--
>  2 files changed, 34 insertions(+), 2 deletions(-)
>
> diff --git a/core/hmi.c b/core/hmi.c
> index 31a23ec7..e55a85b2 100644
> --- a/core/hmi.c
> +++ b/core/hmi.c
> @@ -25,6 +25,7 @@
>  #include <chip.h>
>  #include <npu-regs.h>
>  #include <npu.h>
> +#include <capp.h>
>
>  /*
>   * HMER register layout:
> @@ -387,8 +388,36 @@ static void find_capp_checkstop_reason(int flat_chip_id,
>  	int capp_index;
>  	struct proc_chip *chip = get_chip(flat_chip_id);
>  	int capp_num = CHIP_IS_NAPLES(chip) ? 2 : 1;
> +	uint32_t reg_offset;
> +	uint64_t capp_fir;
> +	uint64_t capp_fir_mask;
> +	uint64_t capp_fir_action0;
> +	uint64_t capp_fir_action1;
>
>  	for (capp_index = 0; capp_index < capp_num; capp_index++) {
> +		reg_offset = capp_index ? CAPP1_REG_OFFSET : 0x0;
> +
> +		if (xscom_read(flat_chip_id,
> +			       CAPP_FIR + reg_offset, &capp_fir) ||
> +		    xscom_read(flat_chip_id,
> +			       CAPP_FIR_MASK + reg_offset, &capp_fir_mask) ||
> +		    xscom_read(flat_chip_id,
> +			       CAPP_FIR_ACTION0 + reg_offset, &capp_fir_action0) ||
> +		    xscom_read(flat_chip_id,
> +			       CAPP_FIR_ACTION1 + reg_offset, &capp_fir_action1)) {
> +			prerror("CAPP: Couldn't read CAPP#%d FIR registers by XSCOM!\n",
> +				capp_index);
> +			continue;
> +		}
> +
> +		if (!(capp_fir & ~capp_fir_mask))
> +			continue;
> +
> +		prlog(PR_DEBUG, "HMI: CAPP#%d: FIR 0x%016llx mask 0x%016llx\n",
> +		      capp_index, capp_fir, capp_fir_mask);
> +		prlog(PR_DEBUG, "HMI: CAPP#%d: ACTION0 0x%016llx, ACTION1 0x%016llx\n",
> +		      capp_index, capp_fir_action0, capp_fir_action1);
> +
>  		if (is_capp_recoverable(flat_chip_id, capp_index)) {
>  			if (handle_capp_recoverable(flat_chip_id, capp_index)) {
>  				hmi_evt->severity = OpalHMI_SEV_NO_ERROR;
> diff --git a/include/capp.h b/include/capp.h
> index c76258b3..14f65be6 100644
> --- a/include/capp.h
> +++ b/include/capp.h
> @@ -67,8 +67,11 @@ enum capp_reg {
>  #define CAPP_SNP_ARRAY_WRITE_REG		0x2013801
>  #define CAPP_APC_MASTER_ARRAY_WRITE_REG		0x2013802
>
> -#define CAPP_FIR                                0x2013000
> -#define CAPP_ERR_RPT_CLR                        0x2013013
> +#define CAPP_FIR				0x2013000
> +#define CAPP_FIR_MASK				0x2013003
> +#define CAPP_FIR_ACTION0			0x2013006
> +#define CAPP_FIR_ACTION1			0x2013007
> +#define CAPP_ERR_RPT_CLR			0x2013013
>  #define APC_MASTER_PB_CTRL			0x2013018
>  #define APC_MASTER_CAPI_CTRL			0x2013019
>  #define TRANSPORT_CONTROL			0x201301C
>



More information about the Skiboot mailing list