|
@@ -371,3 +371,28 @@ titan_process_logout_frame(struct el_common *mchk_header, int print)
|
|
|
struct el_TITAN_sysdata_mcheck *tmchk =
|
|
|
(struct el_TITAN_sysdata_mcheck *)
|
|
|
((unsigned long)mchk_header + mchk_header->sys_offset);
|
|
|
+ int status = MCHK_DISPOSITION_UNKNOWN_ERROR;
|
|
|
+
|
|
|
+ status |= titan_parse_c_misc(tmchk->c_misc, print);
|
|
|
+ status |= titan_parse_p_chip(0, tmchk->p0_serror, tmchk->p0_gperror,
|
|
|
+ tmchk->p0_aperror, tmchk->p0_agperror,
|
|
|
+ print);
|
|
|
+ status |= titan_parse_p_chip(1, tmchk->p1_serror, tmchk->p1_gperror,
|
|
|
+ tmchk->p1_aperror, tmchk->p1_agperror,
|
|
|
+ print);
|
|
|
+
|
|
|
+ return status;
|
|
|
+}
|
|
|
+
|
|
|
+void
|
|
|
+titan_machine_check(unsigned long vector, unsigned long la_ptr)
|
|
|
+{
|
|
|
+ struct el_common *mchk_header = (struct el_common *)la_ptr;
|
|
|
+ struct el_TITAN_sysdata_mcheck *tmchk =
|
|
|
+ (struct el_TITAN_sysdata_mcheck *)
|
|
|
+ ((unsigned long)mchk_header + mchk_header->sys_offset);
|
|
|
+ u64 irqmask;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Mask of Titan interrupt sources which are reported as machine checks
|
|
|
+ *
|