aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOliver O'Halloran <oohall@gmail.com>2019-12-05 23:42:59 +1100
committerVasant Hegde <hegdevasant@linux.vnet.ibm.com>2020-03-10 14:09:21 +0530
commit42d9d2ba5bddec06d5bb2e24909269610e62e661 (patch)
tree3e95002343fd048e9709044c52decefdffadb467
parente22ac41da61a536fd5cc4e988eda0cbabed0fb8a (diff)
downloadskiboot-42d9d2ba5bddec06d5bb2e24909269610e62e661.zip
skiboot-42d9d2ba5bddec06d5bb2e24909269610e62e661.tar.gz
skiboot-42d9d2ba5bddec06d5bb2e24909269610e62e661.tar.bz2
xscom: Don't log xscom errors caused by OPAL calls
[ Upstream commit 80fd2e963bd4364ee8c3b5a06215d8cbdfe04fcb ] The XSCOM read/write OPAL calls are largely there to support running PRD in the OS. PRD itself handles submitting error logs (if needed) when a XSCOM operation fails so there's no need to send an error log from inside of OPAL. Cc: Gautham R. Shenoy <ego@linux.vnet.ibm.com> Signed-off-by: Oliver O'Halloran <oohall@gmail.com> Signed-off-by: Vasant Hegde <hegdevasant@linux.vnet.ibm.com>
-rw-r--r--core/opal.c3
-rw-r--r--hw/xscom.c15
2 files changed, 14 insertions, 4 deletions
diff --git a/core/opal.c b/core/opal.c
index da746e8..dc9944d 100644
--- a/core/opal.c
+++ b/core/opal.c
@@ -189,6 +189,9 @@ int64_t opal_exit_check(int64_t retval, struct stack_frame *eframe)
"Spent %llu msecs in OPAL call %llu!\n",
call_time, token);
}
+
+ cpu->current_token = 0;
+
return retval;
}
diff --git a/hw/xscom.c b/hw/xscom.c
index 9b28422..9ad20a2 100644
--- a/hw/xscom.c
+++ b/hw/xscom.c
@@ -272,10 +272,17 @@ static int64_t xscom_handle_error(uint64_t hmer, uint32_t gcid, uint32_t pcb_add
break;
}
- /* XXX: Create error log entry ? */
- log_simple_error(&e_info(OPAL_RC_XSCOM_RW),
- "XSCOM: %s error gcid=0x%x pcb_addr=0x%x stat=0x%x\n",
- is_write ? "write" : "read", gcid, pcb_addr, stat);
+ /*
+ * If we're in an XSCOM opal call then squash the error
+ * we assume that the caller (probably opal-prd) will
+ * handle logging it
+ */
+ if (this_cpu()->current_token != OPAL_XSCOM_READ &&
+ this_cpu()->current_token != OPAL_XSCOM_WRITE) {
+ log_simple_error(&e_info(OPAL_RC_XSCOM_RW),
+ "XSCOM: %s error gcid=0x%x pcb_addr=0x%x stat=0x%x\n",
+ is_write ? "write" : "read", gcid, pcb_addr, stat);
+ }
/* We need to reset the XSCOM or we'll hang on the next access */
xscom_reset(gcid, false);