|
@@ -459,3 +459,112 @@ marvel_print_po7_err_sum(struct ev7_pal_io_subpacket *io)
|
|
|
* The black hole events.
|
|
|
*/
|
|
|
if (io->po7_error_sum & IO7__PO7_ERRSUM__MAF_TO)
|
|
|
+ printk("%s BLACK HOLE: Timeout for all responses\n",
|
|
|
+ err_print_prefix);
|
|
|
+ if (io->po7_error_sum & IO7__PO7_ERRSUM__BH_CDT_TO)
|
|
|
+ printk("%s BLACK HOLE: Credit Timeout\n", err_print_prefix);
|
|
|
+ if (io->po7_error_sum & IO7__PO7_ERRSUM__BH_CLK_HDR)
|
|
|
+ printk("%s BLACK HOLE: Clock check on header\n",
|
|
|
+ err_print_prefix);
|
|
|
+ if (io->po7_error_sum & IO7__PO7_ERRSUM__BH_DBE_HDR)
|
|
|
+ printk("%s BLACK HOLE: Uncorrectable Error on header\n",
|
|
|
+ err_print_prefix);
|
|
|
+ if (io->po7_error_sum & IO7__PO7_ERRSUM__BH_GBG_HDR)
|
|
|
+ printk("%s BLACK HOLE: Garbage on header\n",
|
|
|
+ err_print_prefix);
|
|
|
+ if (io->po7_error_sum & IO7__PO7_ERRSUM__BH_BAD_CMD)
|
|
|
+ printk("%s BLACK HOLE: Bad EV7 command\n",
|
|
|
+ err_print_prefix);
|
|
|
+
|
|
|
+ if (io->po7_error_sum & IO7__PO7_ERRSUM__ERR_LST)
|
|
|
+ printk("%s Lost Error\n", err_print_prefix);
|
|
|
+
|
|
|
+ printk("%s Failing Packet:\n"
|
|
|
+ "%s Cycle 1: %016llx\n"
|
|
|
+ "%s Cycle 2: %016llx\n",
|
|
|
+ err_print_prefix,
|
|
|
+ err_print_prefix, io->po7_err_pkt0,
|
|
|
+ err_print_prefix, io->po7_err_pkt1);
|
|
|
+ /*
|
|
|
+ * If there are any valid bits in UNCRR sym for this err,
|
|
|
+ * print UNCRR_SYM as well.
|
|
|
+ */
|
|
|
+check_uncrr_sym:
|
|
|
+ if (uncrr_sym_valid)
|
|
|
+ marvel_print_po7_uncrr_sym(io->po7_uncrr_sym, uncrr_sym_valid);
|
|
|
+}
|
|
|
+
|
|
|
+static void
|
|
|
+marvel_print_pox_tlb_err(u64 tlb_err)
|
|
|
+{
|
|
|
+ static char *tlb_errors[] = {
|
|
|
+ "No Error",
|
|
|
+ "North Port Signaled Error fetching TLB entry",
|
|
|
+ "PTE invalid or UCC or GBG error on this entry",
|
|
|
+ "Address did not hit any DMA window"
|
|
|
+ };
|
|
|
+
|
|
|
+#define IO7__POX_TLBERR__ERR_VALID (1UL << 63)
|
|
|
+#define IO7__POX_TLBERR__ERRCODE__S (0)
|
|
|
+#define IO7__POX_TLBERR__ERRCODE__M (0x3)
|
|
|
+#define IO7__POX_TLBERR__ERR_TLB_PTR__S (3)
|
|
|
+#define IO7__POX_TLBERR__ERR_TLB_PTR__M (0x7)
|
|
|
+#define IO7__POX_TLBERR__FADDR__S (6)
|
|
|
+#define IO7__POX_TLBERR__FADDR__M (0x3fffffffffful)
|
|
|
+
|
|
|
+ if (!(tlb_err & IO7__POX_TLBERR__ERR_VALID))
|
|
|
+ return;
|
|
|
+
|
|
|
+ printk("%s TLB Error on index 0x%llx:\n"
|
|
|
+ "%s - %s\n"
|
|
|
+ "%s - Addr: 0x%016llx\n",
|
|
|
+ err_print_prefix,
|
|
|
+ EXTRACT(tlb_err, IO7__POX_TLBERR__ERR_TLB_PTR),
|
|
|
+ err_print_prefix,
|
|
|
+ tlb_errors[EXTRACT(tlb_err, IO7__POX_TLBERR__ERRCODE)],
|
|
|
+ err_print_prefix,
|
|
|
+ EXTRACT(tlb_err, IO7__POX_TLBERR__FADDR) << 6);
|
|
|
+}
|
|
|
+
|
|
|
+static void
|
|
|
+marvel_print_pox_spl_cmplt(u64 spl_cmplt)
|
|
|
+{
|
|
|
+ char message[80];
|
|
|
+
|
|
|
+#define IO7__POX_SPLCMPLT__MESSAGE__S (0)
|
|
|
+#define IO7__POX_SPLCMPLT__MESSAGE__M (0x0fffffffful)
|
|
|
+#define IO7__POX_SPLCMPLT__SOURCE_BUS__S (40)
|
|
|
+#define IO7__POX_SPLCMPLT__SOURCE_BUS__M (0xfful)
|
|
|
+#define IO7__POX_SPLCMPLT__SOURCE_DEV__S (35)
|
|
|
+#define IO7__POX_SPLCMPLT__SOURCE_DEV__M (0x1ful)
|
|
|
+#define IO7__POX_SPLCMPLT__SOURCE_FUNC__S (32)
|
|
|
+#define IO7__POX_SPLCMPLT__SOURCE_FUNC__M (0x07ul)
|
|
|
+
|
|
|
+#define IO7__POX_SPLCMPLT__MSG_CLASS__S (28)
|
|
|
+#define IO7__POX_SPLCMPLT__MSG_CLASS__M (0xf)
|
|
|
+#define IO7__POX_SPLCMPLT__MSG_INDEX__S (20)
|
|
|
+#define IO7__POX_SPLCMPLT__MSG_INDEX__M (0xff)
|
|
|
+#define IO7__POX_SPLCMPLT__MSG_CLASSINDEX__S (20)
|
|
|
+#define IO7__POX_SPLCMPLT__MSG_CLASSINDEX__M (0xfff)
|
|
|
+#define IO7__POX_SPLCMPLT__REM_LOWER_ADDR__S (12)
|
|
|
+#define IO7__POX_SPLCMPLT__REM_LOWER_ADDR__M (0x7f)
|
|
|
+#define IO7__POX_SPLCMPLT__REM_BYTE_COUNT__S (0)
|
|
|
+#define IO7__POX_SPLCMPLT__REM_BYTE_COUNT__M (0xfff)
|
|
|
+
|
|
|
+ printk("%s Split Completion Error:\n"
|
|
|
+ "%s Source (Bus:Dev:Func): %lld:%lld:%lld\n",
|
|
|
+ err_print_prefix,
|
|
|
+ err_print_prefix,
|
|
|
+ EXTRACT(spl_cmplt, IO7__POX_SPLCMPLT__SOURCE_BUS),
|
|
|
+ EXTRACT(spl_cmplt, IO7__POX_SPLCMPLT__SOURCE_DEV),
|
|
|
+ EXTRACT(spl_cmplt, IO7__POX_SPLCMPLT__SOURCE_FUNC));
|
|
|
+
|
|
|
+ switch(EXTRACT(spl_cmplt, IO7__POX_SPLCMPLT__MSG_CLASSINDEX)) {
|
|
|
+ case 0x000:
|
|
|
+ sprintf(message, "Normal completion");
|
|
|
+ break;
|
|
|
+ case 0x100:
|
|
|
+ sprintf(message, "Bridge - Master Abort");
|
|
|
+ break;
|
|
|
+ case 0x101:
|
|
|
+ sprintf(message, "Bridge - Target Abort");
|