From 42d9d2ba5bddec06d5bb2e24909269610e62e661 Mon Sep 17 00:00:00 2001 From: Oliver O'Halloran Date: Thu, 5 Dec 2019 23:42:59 +1100 Subject: 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 Signed-off-by: Oliver O'Halloran Signed-off-by: Vasant Hegde --- core/opal.c | 3 +++ hw/xscom.c | 15 +++++++++++---- 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); -- cgit v1.1