diff options
Diffstat (limited to 'hw')
-rw-r--r-- | hw/npu2-common.c | 27 | ||||
-rw-r--r-- | hw/pau.c | 44 |
2 files changed, 47 insertions, 24 deletions
diff --git a/hw/npu2-common.c b/hw/npu2-common.c index 3bc9bce..b3f500f 100644 --- a/hw/npu2-common.c +++ b/hw/npu2-common.c @@ -296,31 +296,10 @@ static void show_all_regs(struct npu2 *npu, int brick_index) } } -void npu2_dump_scoms(int chip_id) +void npu2_dump_scoms(struct npu2 *npu, int chip_id) { - struct npu2 *npu; - struct phb *phb; - struct npu2_dev *dev; - - /* - * Look for the npu2 structure for that chip ID. We can access it - * through the array of phbs, looking for a nvlink or opencapi - * phb. We can have several entries, but they all point - * to the same npu2 structure - */ - for_each_phb(phb) { - npu = NULL; - if (phb->phb_type == phb_type_npu_v2) { - npu = phb_to_npu2_nvlink(phb); - } else if (phb->phb_type == phb_type_npu_v2_opencapi) { - dev = phb_to_npu2_dev_ocapi(phb); - npu = dev->npu; - } - if (npu && npu->chip_id == chip_id) { - show_all_regs(npu, -1 /* all bricks */); - break; - } - } + if (npu && npu->chip_id == chip_id) + show_all_regs(npu, -1 /* all bricks */); } static uint64_t npu2_ipi_attributes(struct irq_source *is __unused, uint32_t isn __unused) @@ -32,6 +32,50 @@ struct pau_dev *pau_next_dev(struct pau *pau, struct pau_dev *dev, return NULL; } +static void pau_opencapi_dump_scom_reg(struct pau *pau, uint64_t reg) +{ + PAUDBG(pau, "0x%llx = 0x%016llx\n", reg, pau_read(pau, reg)); +} + +void pau_opencapi_dump_scoms(struct pau *pau) +{ + struct pau_dev *dev; + uint64_t cq_sm; + + for (uint32_t i = 1; i < 4; i++) { + cq_sm = PAU_BLOCK_CQ_SM(i); + + pau_opencapi_dump_scom_reg(pau, cq_sm + PAU_REG_OFFSET(PAU_MCP_MISC_CERR_MESSAGE0)); + pau_opencapi_dump_scom_reg(pau, cq_sm + PAU_REG_OFFSET(PAU_MCP_MISC_CERR_MESSAGE1)); + pau_opencapi_dump_scom_reg(pau, cq_sm + PAU_REG_OFFSET(PAU_MCP_MISC_CERR_MESSAGE2)); + pau_opencapi_dump_scom_reg(pau, cq_sm + PAU_REG_OFFSET(PAU_MCP_MISC_CERR_MESSAGE3)); + pau_opencapi_dump_scom_reg(pau, cq_sm + PAU_REG_OFFSET(PAU_MCP_MISC_CERR_MESSAGE4)); + pau_opencapi_dump_scom_reg(pau, cq_sm + PAU_REG_OFFSET(PAU_MCP_MISC_CERR_MESSAGE5)); + pau_opencapi_dump_scom_reg(pau, cq_sm + PAU_REG_OFFSET(PAU_MCP_MISC_CERR_MESSAGE6)); + pau_opencapi_dump_scom_reg(pau, cq_sm + PAU_REG_OFFSET(PAU_MCP_MISC_CERR_MESSAGE7)); + pau_opencapi_dump_scom_reg(pau, cq_sm + PAU_REG_OFFSET(PAU_MCP_MISC_CERR_FIRST0)); + pau_opencapi_dump_scom_reg(pau, cq_sm + PAU_REG_OFFSET(PAU_MCP_MISC_CERR_FIRST1)); + pau_opencapi_dump_scom_reg(pau, cq_sm + PAU_REG_OFFSET(PAU_MCP_MISC_CERR_FIRST2)); + } + + pau_opencapi_dump_scom_reg(pau, PAU_CTL_MISC_CERR_MESSAGE0); + pau_opencapi_dump_scom_reg(pau, PAU_CTL_MISC_CERR_MESSAGE1); + pau_opencapi_dump_scom_reg(pau, PAU_CTL_MISC_CERR_MESSAGE2); + pau_opencapi_dump_scom_reg(pau, PAU_CTL_MISC_CERR_FIRST0); + pau_opencapi_dump_scom_reg(pau, PAU_CTL_MISC_CERR_FIRST1); + pau_opencapi_dump_scom_reg(pau, PAU_DAT_MISC_CERR_ECC_HOLD); + pau_opencapi_dump_scom_reg(pau, PAU_DAT_MISC_CERR_ECC_MASK); + pau_opencapi_dump_scom_reg(pau, PAU_DAT_MISC_CERR_ECC_FIRST); + + pau_for_each_opencapi_dev(dev, pau) { + pau_opencapi_dump_scom_reg(pau, PAU_OTL_MISC_ERR_RPT_HOLD0(dev->index)); + pau_opencapi_dump_scom_reg(pau, PAU_OTL_MISC_OTL_REM0(dev->index)); + pau_opencapi_dump_scom_reg(pau, PAU_OTL_MISC_ERROR_SIG_RXI(dev->index)); + pau_opencapi_dump_scom_reg(pau, PAU_OTL_MISC_ERROR_SIG_RXO(dev->index)); + pau_opencapi_dump_scom_reg(pau, PAU_OTL_MISC_ERR_RPT_HOLD1(dev->index)); + } +} + static void pau_dt_create_link(struct dt_node *pau, uint32_t pau_index, uint32_t dev_index) { |