|
@@ -552,3 +552,155 @@ el_process_regatta_subpacket(struct el_subpacket *header)
|
|
|
privateer_process_logout_frame((struct el_common *)
|
|
|
header->by_type.regatta_frame.data_start, 1);
|
|
|
break;
|
|
|
+ default:
|
|
|
+ printk("%s ** REGATTA TYPE %d SUBPACKET\n",
|
|
|
+ err_print_prefix, header->type);
|
|
|
+ el_annotate_subpacket(header);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ return (struct el_subpacket *)((unsigned long)header + header->length);
|
|
|
+}
|
|
|
+
|
|
|
+static struct el_subpacket_handler titan_subpacket_handler =
|
|
|
+ SUBPACKET_HANDLER_INIT(EL_CLASS__REGATTA_FAMILY,
|
|
|
+ el_process_regatta_subpacket);
|
|
|
+
|
|
|
+void __init
|
|
|
+titan_register_error_handlers(void)
|
|
|
+{
|
|
|
+ size_t i;
|
|
|
+
|
|
|
+ for (i = 0; i < ARRAY_SIZE (el_titan_annotations); i++)
|
|
|
+ cdl_register_subpacket_annotation(&el_titan_annotations[i]);
|
|
|
+
|
|
|
+ cdl_register_subpacket_handler(&titan_subpacket_handler);
|
|
|
+
|
|
|
+ ev6_register_error_handlers();
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+/*
|
|
|
+ * Privateer
|
|
|
+ */
|
|
|
+
|
|
|
+static int
|
|
|
+privateer_process_680_frame(struct el_common *mchk_header, int print)
|
|
|
+{
|
|
|
+ int status = MCHK_DISPOSITION_UNKNOWN_ERROR;
|
|
|
+#ifdef CONFIG_VERBOSE_MCHECK
|
|
|
+ struct el_PRIVATEER_envdata_mcheck *emchk =
|
|
|
+ (struct el_PRIVATEER_envdata_mcheck *)
|
|
|
+ ((unsigned long)mchk_header + mchk_header->sys_offset);
|
|
|
+
|
|
|
+ /* TODO - categorize errors, for now, no error */
|
|
|
+
|
|
|
+ if (!print)
|
|
|
+ return status;
|
|
|
+
|
|
|
+ /* TODO - decode instead of just dumping... */
|
|
|
+ printk("%s Summary Flags: %016llx\n"
|
|
|
+ " CChip DIRx: %016llx\n"
|
|
|
+ " System Management IR: %016llx\n"
|
|
|
+ " CPU IR: %016llx\n"
|
|
|
+ " Power Supply IR: %016llx\n"
|
|
|
+ " LM78 Fault Status: %016llx\n"
|
|
|
+ " System Doors: %016llx\n"
|
|
|
+ " Temperature Warning: %016llx\n"
|
|
|
+ " Fan Control: %016llx\n"
|
|
|
+ " Fatal Power Down Code: %016llx\n",
|
|
|
+ err_print_prefix,
|
|
|
+ emchk->summary,
|
|
|
+ emchk->c_dirx,
|
|
|
+ emchk->smir,
|
|
|
+ emchk->cpuir,
|
|
|
+ emchk->psir,
|
|
|
+ emchk->fault,
|
|
|
+ emchk->sys_doors,
|
|
|
+ emchk->temp_warn,
|
|
|
+ emchk->fan_ctrl,
|
|
|
+ emchk->code);
|
|
|
+#endif /* CONFIG_VERBOSE_MCHECK */
|
|
|
+
|
|
|
+ return status;
|
|
|
+}
|
|
|
+
|
|
|
+int
|
|
|
+privateer_process_logout_frame(struct el_common *mchk_header, int print)
|
|
|
+{
|
|
|
+ struct el_common_EV6_mcheck *ev6mchk =
|
|
|
+ (struct el_common_EV6_mcheck *)mchk_header;
|
|
|
+ int status = MCHK_DISPOSITION_UNKNOWN_ERROR;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Machine check codes
|
|
|
+ */
|
|
|
+#define PRIVATEER_MCHK__CORR_ECC 0x86 /* 630 */
|
|
|
+#define PRIVATEER_MCHK__DC_TAG_PERR 0x9E /* 630 */
|
|
|
+#define PRIVATEER_MCHK__PAL_BUGCHECK 0x8E /* 670 */
|
|
|
+#define PRIVATEER_MCHK__OS_BUGCHECK 0x90 /* 670 */
|
|
|
+#define PRIVATEER_MCHK__PROC_HRD_ERR 0x98 /* 670 */
|
|
|
+#define PRIVATEER_MCHK__ISTREAM_CMOV_PRX 0xA0 /* 670 */
|
|
|
+#define PRIVATEER_MCHK__ISTREAM_CMOV_FLT 0xA2 /* 670 */
|
|
|
+#define PRIVATEER_MCHK__SYS_HRD_ERR 0x202 /* 660 */
|
|
|
+#define PRIVATEER_MCHK__SYS_CORR_ERR 0x204 /* 620 */
|
|
|
+#define PRIVATEER_MCHK__SYS_ENVIRON 0x206 /* 680 */
|
|
|
+
|
|
|
+ switch(ev6mchk->MCHK_Code) {
|
|
|
+ /*
|
|
|
+ * Vector 630 - Processor, Correctable
|
|
|
+ */
|
|
|
+ case PRIVATEER_MCHK__CORR_ECC:
|
|
|
+ case PRIVATEER_MCHK__DC_TAG_PERR:
|
|
|
+ /*
|
|
|
+ * Fall through to vector 670 for processing...
|
|
|
+ */
|
|
|
+ /*
|
|
|
+ * Vector 670 - Processor, Uncorrectable
|
|
|
+ */
|
|
|
+ case PRIVATEER_MCHK__PAL_BUGCHECK:
|
|
|
+ case PRIVATEER_MCHK__OS_BUGCHECK:
|
|
|
+ case PRIVATEER_MCHK__PROC_HRD_ERR:
|
|
|
+ case PRIVATEER_MCHK__ISTREAM_CMOV_PRX:
|
|
|
+ case PRIVATEER_MCHK__ISTREAM_CMOV_FLT:
|
|
|
+ status |= ev6_process_logout_frame(mchk_header, print);
|
|
|
+ break;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Vector 620 - System, Correctable
|
|
|
+ */
|
|
|
+ case PRIVATEER_MCHK__SYS_CORR_ERR:
|
|
|
+ /*
|
|
|
+ * Fall through to vector 660 for processing...
|
|
|
+ */
|
|
|
+ /*
|
|
|
+ * Vector 660 - System, Uncorrectable
|
|
|
+ */
|
|
|
+ case PRIVATEER_MCHK__SYS_HRD_ERR:
|
|
|
+ status |= titan_process_logout_frame(mchk_header, print);
|
|
|
+ break;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Vector 680 - System, Environmental
|
|
|
+ */
|
|
|
+ case PRIVATEER_MCHK__SYS_ENVIRON: /* System, Environmental */
|
|
|
+ status |= privateer_process_680_frame(mchk_header, print);
|
|
|
+ break;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Unknown
|
|
|
+ */
|
|
|
+ default:
|
|
|
+ status |= MCHK_DISPOSITION_REPORT;
|
|
|
+ if (print) {
|
|
|
+ printk("%s** Unknown Error, frame follows\n",
|
|
|
+ err_print_prefix);
|
|
|
+ mchk_dump_logout_frame(mchk_header);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ return status;
|
|
|
+}
|
|
|
+
|