|
@@ -346,3 +346,116 @@ marvel_print_po7_err_sum(struct ev7_pal_io_subpacket *io)
|
|
|
#define IO7__PO7_ERRSUM__UN_MAF_LOST (1UL << 44)
|
|
|
#define IO7__PO7_ERRSUM__UN_PKT_OVF (1UL << 45)
|
|
|
#define IO7__PO7_ERRSUM__UN_CDT_OVF (1UL << 46)
|
|
|
+#define IO7__PO7_ERRSUM__UN_DEALLOC (1UL << 47)
|
|
|
+#define IO7__PO7_ERRSUM__BH_CDT_TO (1UL << 51)
|
|
|
+#define IO7__PO7_ERRSUM__BH_CLK_HDR (1UL << 52)
|
|
|
+#define IO7__PO7_ERRSUM__BH_DBE_HDR (1UL << 53)
|
|
|
+#define IO7__PO7_ERRSUM__BH_GBG_HDR (1UL << 54)
|
|
|
+#define IO7__PO7_ERRSUM__BH_BAD_CMD (1UL << 55)
|
|
|
+#define IO7__PO7_ERRSUM__HLT_INT (1UL << 56)
|
|
|
+#define IO7__PO7_ERRSUM__HP_INT (1UL << 57)
|
|
|
+#define IO7__PO7_ERRSUM__CRD_INT (1UL << 58)
|
|
|
+#define IO7__PO7_ERRSUM__STV_INT (1UL << 59)
|
|
|
+#define IO7__PO7_ERRSUM__HRD_INT (1UL << 60)
|
|
|
+#define IO7__PO7_ERRSUM__BH_SUM (1UL << 61)
|
|
|
+#define IO7__PO7_ERRSUM__ERR_LST (1UL << 62)
|
|
|
+#define IO7__PO7_ERRSUM__ERR_VALID (1UL << 63)
|
|
|
+
|
|
|
+#define IO7__PO7_ERRSUM__ERR_MASK (IO7__PO7_ERRSUM__ERR_VALID | \
|
|
|
+ IO7__PO7_ERRSUM__CR_SBE)
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Single bit errors aren't covered by ERR_VALID.
|
|
|
+ */
|
|
|
+ if (io->po7_error_sum & IO7__PO7_ERRSUM__CR_SBE) {
|
|
|
+ printk("%s %sSingle Bit Error(s) detected/corrected\n",
|
|
|
+ err_print_prefix,
|
|
|
+ (io->po7_error_sum & IO7__PO7_ERRSUM__CR_SBE2)
|
|
|
+ ? "Multiple " : "");
|
|
|
+ marvel_print_po7_crrct_sym(io->po7_crrct_sym);
|
|
|
+ }
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Neither are the interrupt status bits
|
|
|
+ */
|
|
|
+ if (io->po7_error_sum & IO7__PO7_ERRSUM__HLT_INT)
|
|
|
+ printk("%s Halt Interrupt posted", err_print_prefix);
|
|
|
+ if (io->po7_error_sum & IO7__PO7_ERRSUM__HP_INT) {
|
|
|
+ printk("%s Hot Plug Event Interrupt posted",
|
|
|
+ err_print_prefix);
|
|
|
+ uncrr_sym_valid |= GEN_MASK(IO7__PO7_UNCRR_SYM__DETECT_SP);
|
|
|
+ }
|
|
|
+ if (io->po7_error_sum & IO7__PO7_ERRSUM__CRD_INT)
|
|
|
+ printk("%s Correctable Error Interrupt posted",
|
|
|
+ err_print_prefix);
|
|
|
+ if (io->po7_error_sum & IO7__PO7_ERRSUM__STV_INT) {
|
|
|
+ printk("%s Starvation Interrupt posted", err_print_prefix);
|
|
|
+ uncrr_sym_valid |= GEN_MASK(IO7__PO7_UNCRR_SYM__STRV_VTR);
|
|
|
+ }
|
|
|
+ if (io->po7_error_sum & IO7__PO7_ERRSUM__HRD_INT) {
|
|
|
+ printk("%s Hard Error Interrupt posted", err_print_prefix);
|
|
|
+ uncrr_sym_valid |= GEN_MASK(IO7__PO7_UNCRR_SYM__DETECT_SP);
|
|
|
+ }
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Everything else is valid only with ERR_VALID, so skip to the end
|
|
|
+ * (uncrr_sym check) unless ERR_VALID is set.
|
|
|
+ */
|
|
|
+ if (!(io->po7_error_sum & IO7__PO7_ERRSUM__ERR_VALID))
|
|
|
+ goto check_uncrr_sym;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Since ERR_VALID is set, VICTIM_SP in uncrr_sym is valid.
|
|
|
+ * For bits [29:0] to also be valid, the following bits must
|
|
|
+ * not be set:
|
|
|
+ * CR_PIO_WBYTE CR_CSR_NXM CR_RSP_NXM
|
|
|
+ * CR_ERR_RESP MAF_TO
|
|
|
+ */
|
|
|
+ uncrr_sym_valid |= GEN_MASK(IO7__PO7_UNCRR_SYM__VICTIM_SP);
|
|
|
+ if (!(io->po7_error_sum & (IO7__PO7_ERRSUM__CR_PIO_WBYTE |
|
|
|
+ IO7__PO7_ERRSUM__CR_CSR_NXM |
|
|
|
+ IO7__PO7_ERRSUM__CR_RSP_NXM |
|
|
|
+ IO7__PO7_ERRSUM__CR_ERR_RESP |
|
|
|
+ IO7__PO7_ERRSUM__MAF_TO)))
|
|
|
+ uncrr_sym_valid |= 0x3ffffffful;
|
|
|
+
|
|
|
+ if (io->po7_error_sum & IO7__PO7_ERRSUM__CR_PIO_WBYTE)
|
|
|
+ printk("%s Write byte into IO7 CSR\n", err_print_prefix);
|
|
|
+ if (io->po7_error_sum & IO7__PO7_ERRSUM__CR_CSR_NXM)
|
|
|
+ printk("%s PIO to non-existent CSR\n", err_print_prefix);
|
|
|
+ if (io->po7_error_sum & IO7__PO7_ERRSUM__CR_RPID_ACV)
|
|
|
+ printk("%s Bus Requester PID (Access Violation)\n",
|
|
|
+ err_print_prefix);
|
|
|
+ if (io->po7_error_sum & IO7__PO7_ERRSUM__CR_RSP_NXM)
|
|
|
+ printk("%s Received NXM response from EV7\n",
|
|
|
+ err_print_prefix);
|
|
|
+ if (io->po7_error_sum & IO7__PO7_ERRSUM__CR_ERR_RESP)
|
|
|
+ printk("%s Received ERROR RESPONSE\n", err_print_prefix);
|
|
|
+ if (io->po7_error_sum & IO7__PO7_ERRSUM__CR_CLK_DERR)
|
|
|
+ printk("%s Clock error on data flit\n", err_print_prefix);
|
|
|
+ if (io->po7_error_sum & IO7__PO7_ERRSUM__CR_DAT_DBE)
|
|
|
+ printk("%s Double Bit Error Data Error Detected\n",
|
|
|
+ err_print_prefix);
|
|
|
+ if (io->po7_error_sum & IO7__PO7_ERRSUM__CR_DAT_GRBG)
|
|
|
+ printk("%s Garbage Encoding Detected on the data\n",
|
|
|
+ err_print_prefix);
|
|
|
+ if (io->po7_error_sum & IO7__PO7_ERRSUM__UGBGE) {
|
|
|
+ printk("%s Garbage Encoding sent up hose\n",
|
|
|
+ err_print_prefix);
|
|
|
+ marvel_print_po7_ugbge_sym(io->po7_ugbge_sym);
|
|
|
+ }
|
|
|
+ if (io->po7_error_sum & IO7__PO7_ERRSUM__UN_MAF_LOST)
|
|
|
+ printk("%s Orphan response (unexpected response)\n",
|
|
|
+ err_print_prefix);
|
|
|
+ if (io->po7_error_sum & IO7__PO7_ERRSUM__UN_PKT_OVF)
|
|
|
+ printk("%s Down hose packet overflow\n", err_print_prefix);
|
|
|
+ if (io->po7_error_sum & IO7__PO7_ERRSUM__UN_CDT_OVF)
|
|
|
+ printk("%s Down hose credit overflow\n", err_print_prefix);
|
|
|
+ if (io->po7_error_sum & IO7__PO7_ERRSUM__UN_DEALLOC)
|
|
|
+ printk("%s Unexpected or bad dealloc field\n",
|
|
|
+ err_print_prefix);
|
|
|
+
|
|
|
+ /*
|
|
|
+ * The black hole events.
|
|
|
+ */
|
|
|
+ if (io->po7_error_sum & IO7__PO7_ERRSUM__MAF_TO)
|