[Skiboot] [RFC PATCH skiboot] hmi/npu2: Print register names in HMI dump
Frederic Barrat
fbarrat at linux.ibm.com
Mon Dec 10 19:44:05 AEDT 2018
Le 05/12/2018 à 05:49, Alexey Kardashevskiy a écrit :
> This prints register names and skips zero values which should improve
> readability in 2018. Done by regexps.
>
> Signed-off-by: Alexey Kardashevskiy <aik at ozlabs.ru>
> ---
>
> I am pretty sure there is a better way of doing things and Stack==0x50/block=0x1
> should already be defined somewhere by now but I could not spot them, where are they?
> The offset also seems to be calculatable but I do not see that we do this anywhere.
>
Hi Alexey,
Most NPU registers can be accessed directly through a scom address, or
indirectly through a NPU ring address. The workbook lists both addresses
for each register. Only a select few are only addressable directly.
The NPU2_REG_OFFSET() macro is really meant to compute the indirect NPU
ring address, in which case it starts making sense to programmatically
adjust the stack and block number. The possible stack and block numbers
are already defined at the top of npu2-regs.h
Current code and this patch is using direct scom addresses, and I don't
believe there's any logical way of building those addresses. In which
case, we shouldn't be using NPU2_REG_OFFSET() but can keep using direct
addresses (0x5011000 + scom offset)
FWIW, I'm currently also modifying that part of the code, as we also
want to dump some NPU registers for opencapi in 2 cases: HMI (code would
be common with nvlink) and some opencapi-specific error interrupts. I
had switched to using indirect addresses. Not quite done yet, and the
opencapi error interrupt part has a dependency on another patchset
Andrew is working on, so don't hold your breath.
Fred
> ---
> include/npu2-regs.h | 90 +++++++++++++++++++++++++++
> core/hmi.c | 144 +++++++++++++++++++++++++++++++-------------
> 2 files changed, 193 insertions(+), 41 deletions(-)
>
> diff --git a/include/npu2-regs.h b/include/npu2-regs.h
> index ae5e225..79af701 100644
> --- a/include/npu2-regs.h
> +++ b/include/npu2-regs.h
> @@ -769,4 +769,94 @@ void npu2_scom_write(uint64_t gcid, uint64_t scom_base,
> #define L3_PRD_PURGE_TTYPE_MASK PPC_BIT(1) | PPC_BIT(2) | PPC_BIT(3) | PPC_BIT(4)
> #define L3_FULL_PURGE 0x0
>
> +/* Debug registers for NPU2 HMI */
> +#define NPU_STCK0_CS_SM0_MISC_CERR_FIRST0 NPU2_REG_OFFSET(0x50, 1, 0x1017)
> +#define NPU_STCK0_CS_SM1_MISC_CERR_FIRST0 NPU2_REG_OFFSET(0x50, 1, 0x1047)
> +#define NPU_STCK0_CS_SM2_MISC_CERR_FIRST0 NPU2_REG_OFFSET(0x50, 1, 0x1077)
> +#define NPU_STCK0_CS_SM3_MISC_CERR_FIRST0 NPU2_REG_OFFSET(0x50, 1, 0x10A7)
> +#define NPU_STCK1_CS_SM0_MISC_CERR_FIRST0 NPU2_REG_OFFSET(0x50, 1, 0x1217)
> +#define NPU_STCK1_CS_SM1_MISC_CERR_FIRST0 NPU2_REG_OFFSET(0x50, 1, 0x1247)
> +#define NPU_STCK1_CS_SM2_MISC_CERR_FIRST0 NPU2_REG_OFFSET(0x50, 1, 0x1277)
> +#define NPU_STCK1_CS_SM3_MISC_CERR_FIRST0 NPU2_REG_OFFSET(0x50, 1, 0x12A7)
> +#define NPU_STCK2_CS_SM0_MISC_CERR_FIRST0 NPU2_REG_OFFSET(0x50, 1, 0x1417)
> +#define NPU_STCK2_CS_SM1_MISC_CERR_FIRST0 NPU2_REG_OFFSET(0x50, 1, 0x1447)
> +#define NPU_STCK2_CS_SM2_MISC_CERR_FIRST0 NPU2_REG_OFFSET(0x50, 1, 0x1477)
> +#define NPU_STCK2_CS_SM3_MISC_CERR_FIRST0 NPU2_REG_OFFSET(0x50, 1, 0x14A7)
> +#define NPU_STCK0_CS_CTL_MISC_CERR_FIRST0 NPU2_REG_OFFSET(0x50, 1, 0x10DA)
> +#define NPU_STCK1_CS_CTL_MISC_CERR_FIRST0 NPU2_REG_OFFSET(0x50, 1, 0x12DA)
> +#define NPU_STCK2_CS_CTL_MISC_CERR_FIRST0 NPU2_REG_OFFSET(0x50, 1, 0x14DA)
> +#define NPU_STCK0_CS_CTL_MISC_CERR_FIRST1 NPU2_REG_OFFSET(0x50, 1, 0x10DB)
> +#define NPU_STCK1_CS_CTL_MISC_CERR_FIRST1 NPU2_REG_OFFSET(0x50, 1, 0x12DB)
> +#define NPU_STCK2_CS_CTL_MISC_CERR_FIRST1 NPU2_REG_OFFSET(0x50, 1, 0x14DB)
> +#define NPU_STCK0_CS_SM0_MISC_CERR_MESSAGE0 NPU2_REG_OFFSET(0x50, 1, 0x1011)
> +#define NPU_STCK0_CS_SM1_MISC_CERR_MESSAGE0 NPU2_REG_OFFSET(0x50, 1, 0x1041)
> +#define NPU_STCK0_CS_SM2_MISC_CERR_MESSAGE0 NPU2_REG_OFFSET(0x50, 1, 0x1071)
> +#define NPU_STCK0_CS_SM3_MISC_CERR_MESSAGE0 NPU2_REG_OFFSET(0x50, 1, 0x10A1)
> +#define NPU_STCK1_CS_SM0_MISC_CERR_MESSAGE0 NPU2_REG_OFFSET(0x50, 1, 0x1211)
> +#define NPU_STCK1_CS_SM1_MISC_CERR_MESSAGE0 NPU2_REG_OFFSET(0x50, 1, 0x1241)
> +#define NPU_STCK1_CS_SM2_MISC_CERR_MESSAGE0 NPU2_REG_OFFSET(0x50, 1, 0x1271)
> +#define NPU_STCK1_CS_SM3_MISC_CERR_MESSAGE0 NPU2_REG_OFFSET(0x50, 1, 0x12A1)
> +#define NPU_STCK2_CS_SM0_MISC_CERR_MESSAGE0 NPU2_REG_OFFSET(0x50, 1, 0x1411)
> +#define NPU_STCK2_CS_SM1_MISC_CERR_MESSAGE0 NPU2_REG_OFFSET(0x50, 1, 0x1441)
> +#define NPU_STCK2_CS_SM2_MISC_CERR_MESSAGE0 NPU2_REG_OFFSET(0x50, 1, 0x1471)
> +#define NPU_STCK2_CS_SM3_MISC_CERR_MESSAGE0 NPU2_REG_OFFSET(0x50, 1, 0x14A1)
> +#define NPU_STCK0_CS_SM0_MISC_CERR_FIRST1 NPU2_REG_OFFSET(0x50, 1, 0x1018)
> +#define NPU_STCK0_CS_SM1_MISC_CERR_FIRST1 NPU2_REG_OFFSET(0x50, 1, 0x1048)
> +#define NPU_STCK0_CS_SM2_MISC_CERR_FIRST1 NPU2_REG_OFFSET(0x50, 1, 0x1078)
> +#define NPU_STCK0_CS_SM3_MISC_CERR_FIRST1 NPU2_REG_OFFSET(0x50, 1, 0x10A8)
> +#define NPU_STCK1_CS_SM0_MISC_CERR_FIRST1 NPU2_REG_OFFSET(0x50, 1, 0x1218)
> +#define NPU_STCK1_CS_SM1_MISC_CERR_FIRST1 NPU2_REG_OFFSET(0x50, 1, 0x1248)
> +#define NPU_STCK1_CS_SM2_MISC_CERR_FIRST1 NPU2_REG_OFFSET(0x50, 1, 0x1278)
> +#define NPU_STCK1_CS_SM3_MISC_CERR_FIRST1 NPU2_REG_OFFSET(0x50, 1, 0x12A8)
> +#define NPU_STCK2_CS_SM0_MISC_CERR_FIRST1 NPU2_REG_OFFSET(0x50, 1, 0x1418)
> +#define NPU_STCK2_CS_SM1_MISC_CERR_FIRST1 NPU2_REG_OFFSET(0x50, 1, 0x1448)
> +#define NPU_STCK2_CS_SM2_MISC_CERR_FIRST1 NPU2_REG_OFFSET(0x50, 1, 0x1478)
> +#define NPU_STCK2_CS_SM3_MISC_CERR_FIRST1 NPU2_REG_OFFSET(0x50, 1, 0x14A8)
> +#define NPU_XTS_REG_ERR_HOLD NPU2_REG_OFFSET(0x50, 1, 0x1640)
> +#define NPU_STCK0_NTL0_REGS_CERR_FIRST1 NPU2_REG_OFFSET(0x50, 1, 0x1114)
> +#define NPU_STCK0_NTL1_REGS_CERR_FIRST1 NPU2_REG_OFFSET(0x50, 1, 0x1134)
> +#define NPU_STCK1_NTL0_REGS_CERR_FIRST1 NPU2_REG_OFFSET(0x50, 1, 0x1314)
> +#define NPU_STCK1_NTL1_REGS_CERR_FIRST1 NPU2_REG_OFFSET(0x50, 1, 0x1334)
> +#define NPU_STCK2_NTL0_REGS_CERR_FIRST1 NPU2_REG_OFFSET(0x50, 1, 0x1514)
> +#define NPU_STCK2_NTL1_REGS_CERR_FIRST1 NPU2_REG_OFFSET(0x50, 1, 0x1534)
> +#define NPU_STCK0_NTL0_REGS_CERR_FIRST2 NPU2_REG_OFFSET(0x50, 1, 0x1118)
> +#define NPU_STCK0_NTL1_REGS_CERR_FIRST2 NPU2_REG_OFFSET(0x50, 1, 0x1138)
> +#define NPU_STCK1_NTL0_REGS_CERR_FIRST2 NPU2_REG_OFFSET(0x50, 1, 0x1318)
> +#define NPU_STCK1_NTL1_REGS_CERR_FIRST2 NPU2_REG_OFFSET(0x50, 1, 0x1338)
> +#define NPU_STCK2_NTL0_REGS_CERR_FIRST2 NPU2_REG_OFFSET(0x50, 1, 0x1518)
> +#define NPU_STCK2_NTL1_REGS_CERR_FIRST2 NPU2_REG_OFFSET(0x50, 1, 0x1538)
> +#define NPU_STCK0_CS_CTL_MISC_CERR_MESSAGE0 NPU2_REG_OFFSET(0x50, 1, 0x10D8)
> +#define NPU_STCK1_CS_CTL_MISC_CERR_MESSAGE0 NPU2_REG_OFFSET(0x50, 1, 0x12D8)
> +#define NPU_STCK2_CS_CTL_MISC_CERR_MESSAGE0 NPU2_REG_OFFSET(0x50, 1, 0x14D8)
> +#define NPU_STCK0_CS_CTL_MISC_CERR_MESSAGE1 NPU2_REG_OFFSET(0x50, 1, 0x10D9)
> +#define NPU_STCK1_CS_CTL_MISC_CERR_MESSAGE1 NPU2_REG_OFFSET(0x50, 1, 0x12D9)
> +#define NPU_STCK2_CS_CTL_MISC_CERR_MESSAGE1 NPU2_REG_OFFSET(0x50, 1, 0x14D9)
> +#define NPU_STCK0_CS_SM0_MISC_CERR_FIRST2 NPU2_REG_OFFSET(0x50, 1, 0x1019)
> +#define NPU_STCK0_CS_SM1_MISC_CERR_FIRST2 NPU2_REG_OFFSET(0x50, 1, 0x1049)
> +#define NPU_STCK0_CS_SM2_MISC_CERR_FIRST2 NPU2_REG_OFFSET(0x50, 1, 0x1079)
> +#define NPU_STCK0_CS_SM3_MISC_CERR_FIRST2 NPU2_REG_OFFSET(0x50, 1, 0x10A9)
> +#define NPU_STCK1_CS_SM0_MISC_CERR_FIRST2 NPU2_REG_OFFSET(0x50, 1, 0x1219)
> +#define NPU_STCK1_CS_SM1_MISC_CERR_FIRST2 NPU2_REG_OFFSET(0x50, 1, 0x1249)
> +#define NPU_STCK1_CS_SM2_MISC_CERR_FIRST2 NPU2_REG_OFFSET(0x50, 1, 0x1279)
> +#define NPU_STCK1_CS_SM3_MISC_CERR_FIRST2 NPU2_REG_OFFSET(0x50, 1, 0x12A9)
> +#define NPU_STCK2_CS_SM0_MISC_CERR_FIRST2 NPU2_REG_OFFSET(0x50, 1, 0x1419)
> +#define NPU_STCK2_CS_SM1_MISC_CERR_FIRST2 NPU2_REG_OFFSET(0x50, 1, 0x1449)
> +#define NPU_STCK2_CS_SM2_MISC_CERR_FIRST2 NPU2_REG_OFFSET(0x50, 1, 0x1479)
> +#define NPU_STCK2_CS_SM3_MISC_CERR_FIRST2 NPU2_REG_OFFSET(0x50, 1, 0x14A9)
> +#define NPU_STCK0_DAT_MISC_CERR_ECC_HOLD NPU2_REG_OFFSET(0x50, 1, 0x10F4)
> +#define NPU_STCK1_DAT_MISC_CERR_ECC_HOLD NPU2_REG_OFFSET(0x50, 1, 0x12F4)
> +#define NPU_STCK2_DAT_MISC_CERR_ECC_HOLD NPU2_REG_OFFSET(0x50, 1, 0x14F4)
> +#define NPU_STCK0_DAT_MISC_CERR_ECC_MASK NPU2_REG_OFFSET(0x50, 1, 0x10F5)
> +#define NPU_STCK1_DAT_MISC_CERR_ECC_MASK NPU2_REG_OFFSET(0x50, 1, 0x12F5)
> +#define NPU_STCK2_DAT_MISC_CERR_ECC_MASK NPU2_REG_OFFSET(0x50, 1, 0x14F5)
> +#define NPU_STCK0_DAT_MISC_CERR_ECC_FIRST NPU2_REG_OFFSET(0x50, 1, 0x10F6)
> +#define NPU_STCK1_DAT_MISC_CERR_ECC_FIRST NPU2_REG_OFFSET(0x50, 1, 0x12F6)
> +#define NPU_STCK2_DAT_MISC_CERR_ECC_FIRST NPU2_REG_OFFSET(0x50, 1, 0x14F6)
> +#define NPU_STCK0_DAT_MISC_REM0 NPU2_REG_OFFSET(0x50, 1, 0x10FD)
> +#define NPU_STCK1_DAT_MISC_REM0 NPU2_REG_OFFSET(0x50, 1, 0x12FD)
> +#define NPU_STCK2_DAT_MISC_REM0 NPU2_REG_OFFSET(0x50, 1, 0x14FD)
> +#define NPU_STCK0_DAT_MISC_REM1 NPU2_REG_OFFSET(0x50, 1, 0x10FE)
> +#define NPU_STCK1_DAT_MISC_REM1 NPU2_REG_OFFSET(0x50, 1, 0x12FE)
> +#define NPU_STCK2_DAT_MISC_REM1 NPU2_REG_OFFSET(0x50, 1, 0x14FE)
> +
> #endif /* __NPU2_REGS_H */
> diff --git a/core/hmi.c b/core/hmi.c
> index c01a2c3..ef50e4c 100644
> --- a/core/hmi.c
> +++ b/core/hmi.c
> @@ -594,56 +594,118 @@ static void find_nx_checkstop_reason(int flat_chip_id,
> queue_hmi_event(hmi_evt, 0, out_flags);
> }
>
> -/*
> - * If the year is 2018 and you still see all these hardcoded, you
> - * should really replace this with the neat macros that's in the
> - * NPU2 code rather than this horrible listing of every single
> - * NPU2 register hardcoded for a specific chip.
> - *
> - * I feel dirty having even written it.
> - */
> -static uint32_t npu2_scom_dump[] = {
> - 0x5011017, 0x5011047, 0x5011077, 0x50110A7,
> - 0x5011217, 0x5011247, 0x5011277, 0x50112A7,
> - 0x5011417, 0x5011447, 0x5011477, 0x50114A7,
> - 0x50110DA, 0x50112DA, 0x50114DA,
> - 0x50110DB, 0x50112DB, 0x50114DB,
> - 0x5011011, 0x5011041, 0x5011071, 0x50110A1,
> - 0x5011211, 0x5011241, 0x5011271, 0x50112A1,
> - 0x5011411, 0x5011441, 0x5011471, 0x50114A1,
> - 0x5011018, 0x5011048, 0x5011078, 0x50110A8,
> - 0x5011218, 0x5011248, 0x5011278, 0x50112A8,
> - 0x5011418, 0x5011448, 0x5011478, 0x50114A8,
> - 0x5011640,
> - 0x5011114, 0x5011134, 0x5011314, 0x5011334,
> - 0x5011514, 0x5011534, 0x5011118, 0x5011138,
> - 0x5011318, 0x5011338, 0x5011518, 0x5011538,
> - 0x50110D8, 0x50112D8, 0x50114D8,
> - 0x50110D9, 0x50112D9, 0x50114D9,
> - 0x5011019, 0x5011049, 0x5011079, 0x50110A9,
> - 0x5011219, 0x5011249, 0x5011279, 0x50112A9,
> - 0x5011419, 0x5011449, 0x5011479, 0x50114A9,
> - 0x50110F4, 0x50112F4, 0x50114F4,
> - 0x50110F5, 0x50112F5, 0x50114F5,
> - 0x50110F6, 0x50112F6, 0x50114F6,
> - 0x50110FD, 0x50112FD, 0x50114FD,
> - 0x50110FE, 0x50112FE, 0x50114FE,
> - 0x00
> +typedef struct {
> + uint32_t reg;
> + const char *name;
> +} npu2_scom_dump_t;
> +
> +static npu2_scom_dump_t npu2_scom_dump[] = {
> +#define __NPU2_SCOM_DUMP(x) { x, #x }
> + __NPU2_SCOM_DUMP(NPU_STCK0_CS_SM0_MISC_CERR_FIRST0),
> + __NPU2_SCOM_DUMP(NPU_STCK0_CS_SM1_MISC_CERR_FIRST0),
> + __NPU2_SCOM_DUMP(NPU_STCK0_CS_SM2_MISC_CERR_FIRST0),
> + __NPU2_SCOM_DUMP(NPU_STCK0_CS_SM3_MISC_CERR_FIRST0),
> + __NPU2_SCOM_DUMP(NPU_STCK1_CS_SM0_MISC_CERR_FIRST0),
> + __NPU2_SCOM_DUMP(NPU_STCK1_CS_SM1_MISC_CERR_FIRST0),
> + __NPU2_SCOM_DUMP(NPU_STCK1_CS_SM2_MISC_CERR_FIRST0),
> + __NPU2_SCOM_DUMP(NPU_STCK1_CS_SM3_MISC_CERR_FIRST0),
> + __NPU2_SCOM_DUMP(NPU_STCK2_CS_SM0_MISC_CERR_FIRST0),
> + __NPU2_SCOM_DUMP(NPU_STCK2_CS_SM1_MISC_CERR_FIRST0),
> + __NPU2_SCOM_DUMP(NPU_STCK2_CS_SM2_MISC_CERR_FIRST0),
> + __NPU2_SCOM_DUMP(NPU_STCK2_CS_SM3_MISC_CERR_FIRST0),
> + __NPU2_SCOM_DUMP(NPU_STCK0_CS_CTL_MISC_CERR_FIRST0),
> + __NPU2_SCOM_DUMP(NPU_STCK1_CS_CTL_MISC_CERR_FIRST0),
> + __NPU2_SCOM_DUMP(NPU_STCK2_CS_CTL_MISC_CERR_FIRST0),
> + __NPU2_SCOM_DUMP(NPU_STCK0_CS_CTL_MISC_CERR_FIRST1),
> + __NPU2_SCOM_DUMP(NPU_STCK1_CS_CTL_MISC_CERR_FIRST1),
> + __NPU2_SCOM_DUMP(NPU_STCK2_CS_CTL_MISC_CERR_FIRST1),
> + __NPU2_SCOM_DUMP(NPU_STCK0_CS_SM0_MISC_CERR_MESSAGE0),
> + __NPU2_SCOM_DUMP(NPU_STCK0_CS_SM1_MISC_CERR_MESSAGE0),
> + __NPU2_SCOM_DUMP(NPU_STCK0_CS_SM2_MISC_CERR_MESSAGE0),
> + __NPU2_SCOM_DUMP(NPU_STCK0_CS_SM3_MISC_CERR_MESSAGE0),
> + __NPU2_SCOM_DUMP(NPU_STCK1_CS_SM0_MISC_CERR_MESSAGE0),
> + __NPU2_SCOM_DUMP(NPU_STCK1_CS_SM1_MISC_CERR_MESSAGE0),
> + __NPU2_SCOM_DUMP(NPU_STCK1_CS_SM2_MISC_CERR_MESSAGE0),
> + __NPU2_SCOM_DUMP(NPU_STCK1_CS_SM3_MISC_CERR_MESSAGE0),
> + __NPU2_SCOM_DUMP(NPU_STCK2_CS_SM0_MISC_CERR_MESSAGE0),
> + __NPU2_SCOM_DUMP(NPU_STCK2_CS_SM1_MISC_CERR_MESSAGE0),
> + __NPU2_SCOM_DUMP(NPU_STCK2_CS_SM2_MISC_CERR_MESSAGE0),
> + __NPU2_SCOM_DUMP(NPU_STCK2_CS_SM3_MISC_CERR_MESSAGE0),
> + __NPU2_SCOM_DUMP(NPU_STCK0_CS_SM0_MISC_CERR_FIRST1),
> + __NPU2_SCOM_DUMP(NPU_STCK0_CS_SM1_MISC_CERR_FIRST1),
> + __NPU2_SCOM_DUMP(NPU_STCK0_CS_SM2_MISC_CERR_FIRST1),
> + __NPU2_SCOM_DUMP(NPU_STCK0_CS_SM3_MISC_CERR_FIRST1),
> + __NPU2_SCOM_DUMP(NPU_STCK1_CS_SM0_MISC_CERR_FIRST1),
> + __NPU2_SCOM_DUMP(NPU_STCK1_CS_SM1_MISC_CERR_FIRST1),
> + __NPU2_SCOM_DUMP(NPU_STCK1_CS_SM2_MISC_CERR_FIRST1),
> + __NPU2_SCOM_DUMP(NPU_STCK1_CS_SM3_MISC_CERR_FIRST1),
> + __NPU2_SCOM_DUMP(NPU_STCK2_CS_SM0_MISC_CERR_FIRST1),
> + __NPU2_SCOM_DUMP(NPU_STCK2_CS_SM1_MISC_CERR_FIRST1),
> + __NPU2_SCOM_DUMP(NPU_STCK2_CS_SM2_MISC_CERR_FIRST1),
> + __NPU2_SCOM_DUMP(NPU_STCK2_CS_SM3_MISC_CERR_FIRST1),
> + __NPU2_SCOM_DUMP(NPU_XTS_REG_ERR_HOLD),
> + __NPU2_SCOM_DUMP(NPU_STCK0_NTL0_REGS_CERR_FIRST1),
> + __NPU2_SCOM_DUMP(NPU_STCK0_NTL1_REGS_CERR_FIRST1),
> + __NPU2_SCOM_DUMP(NPU_STCK1_NTL0_REGS_CERR_FIRST1),
> + __NPU2_SCOM_DUMP(NPU_STCK1_NTL1_REGS_CERR_FIRST1),
> + __NPU2_SCOM_DUMP(NPU_STCK2_NTL0_REGS_CERR_FIRST1),
> + __NPU2_SCOM_DUMP(NPU_STCK2_NTL1_REGS_CERR_FIRST1),
> + __NPU2_SCOM_DUMP(NPU_STCK0_NTL0_REGS_CERR_FIRST2),
> + __NPU2_SCOM_DUMP(NPU_STCK0_NTL1_REGS_CERR_FIRST2),
> + __NPU2_SCOM_DUMP(NPU_STCK1_NTL0_REGS_CERR_FIRST2),
> + __NPU2_SCOM_DUMP(NPU_STCK1_NTL1_REGS_CERR_FIRST2),
> + __NPU2_SCOM_DUMP(NPU_STCK2_NTL0_REGS_CERR_FIRST2),
> + __NPU2_SCOM_DUMP(NPU_STCK2_NTL1_REGS_CERR_FIRST2),
> + __NPU2_SCOM_DUMP(NPU_STCK0_CS_CTL_MISC_CERR_MESSAGE0),
> + __NPU2_SCOM_DUMP(NPU_STCK1_CS_CTL_MISC_CERR_MESSAGE0),
> + __NPU2_SCOM_DUMP(NPU_STCK2_CS_CTL_MISC_CERR_MESSAGE0),
> + __NPU2_SCOM_DUMP(NPU_STCK0_CS_CTL_MISC_CERR_MESSAGE1),
> + __NPU2_SCOM_DUMP(NPU_STCK1_CS_CTL_MISC_CERR_MESSAGE1),
> + __NPU2_SCOM_DUMP(NPU_STCK2_CS_CTL_MISC_CERR_MESSAGE1),
> + __NPU2_SCOM_DUMP(NPU_STCK0_CS_SM0_MISC_CERR_FIRST2),
> + __NPU2_SCOM_DUMP(NPU_STCK0_CS_SM1_MISC_CERR_FIRST2),
> + __NPU2_SCOM_DUMP(NPU_STCK0_CS_SM2_MISC_CERR_FIRST2),
> + __NPU2_SCOM_DUMP(NPU_STCK0_CS_SM3_MISC_CERR_FIRST2),
> + __NPU2_SCOM_DUMP(NPU_STCK1_CS_SM0_MISC_CERR_FIRST2),
> + __NPU2_SCOM_DUMP(NPU_STCK1_CS_SM1_MISC_CERR_FIRST2),
> + __NPU2_SCOM_DUMP(NPU_STCK1_CS_SM2_MISC_CERR_FIRST2),
> + __NPU2_SCOM_DUMP(NPU_STCK1_CS_SM3_MISC_CERR_FIRST2),
> + __NPU2_SCOM_DUMP(NPU_STCK2_CS_SM0_MISC_CERR_FIRST2),
> + __NPU2_SCOM_DUMP(NPU_STCK2_CS_SM1_MISC_CERR_FIRST2),
> + __NPU2_SCOM_DUMP(NPU_STCK2_CS_SM2_MISC_CERR_FIRST2),
> + __NPU2_SCOM_DUMP(NPU_STCK2_CS_SM3_MISC_CERR_FIRST2),
> + __NPU2_SCOM_DUMP(NPU_STCK0_DAT_MISC_CERR_ECC_HOLD),
> + __NPU2_SCOM_DUMP(NPU_STCK1_DAT_MISC_CERR_ECC_HOLD),
> + __NPU2_SCOM_DUMP(NPU_STCK2_DAT_MISC_CERR_ECC_HOLD),
> + __NPU2_SCOM_DUMP(NPU_STCK0_DAT_MISC_CERR_ECC_MASK),
> + __NPU2_SCOM_DUMP(NPU_STCK1_DAT_MISC_CERR_ECC_MASK),
> + __NPU2_SCOM_DUMP(NPU_STCK2_DAT_MISC_CERR_ECC_MASK),
> + __NPU2_SCOM_DUMP(NPU_STCK0_DAT_MISC_CERR_ECC_FIRST),
> + __NPU2_SCOM_DUMP(NPU_STCK1_DAT_MISC_CERR_ECC_FIRST),
> + __NPU2_SCOM_DUMP(NPU_STCK2_DAT_MISC_CERR_ECC_FIRST),
> + __NPU2_SCOM_DUMP(NPU_STCK0_DAT_MISC_REM0),
> + __NPU2_SCOM_DUMP(NPU_STCK1_DAT_MISC_REM0),
> + __NPU2_SCOM_DUMP(NPU_STCK2_DAT_MISC_REM0),
> + __NPU2_SCOM_DUMP(NPU_STCK0_DAT_MISC_REM1),
> + __NPU2_SCOM_DUMP(NPU_STCK1_DAT_MISC_REM1),
> + __NPU2_SCOM_DUMP(NPU_STCK2_DAT_MISC_REM1),
> + { 0x00, NULL }
> };
>
> -static void dump_scoms(int flat_chip_id, const char *unit, uint32_t *scoms,
> - const char *loc)
> +static void dump_scoms(int flat_chip_id, const char *unit,
> + npu2_scom_dump_t *scoms, const char *loc)
> {
> uint64_t value;
> int r;
>
> - while (*scoms != 0) {
> + while (scoms->reg) {
> value = 0;
> - r = _xscom_read(flat_chip_id, *scoms, &value, false);
> + r = _xscom_read(flat_chip_id, scoms->reg, &value, false);
> if (r != OPAL_SUCCESS)
> continue;
> - prlog(PR_ERR, "%s: [Loc: %s] P:%d 0x%08x=0x%016llx\n",
> - unit, loc, flat_chip_id, *scoms, value);
> + if (value)
> + prlog(PR_ERR, "%s: [Loc: %s] P:%d %s=0x%016llx\n",
> + unit, loc, flat_chip_id, scoms->name, value);
> scoms++;
> }
> }
>
More information about the Skiboot
mailing list