diff options
author | William Bryan <wilbryan@us.ibm.com> | 2015-12-09 13:16:53 -0600 |
---|---|---|
committer | William A. Bryan <wilbryan@us.ibm.com> | 2016-01-15 17:42:33 -0600 |
commit | 2860679a6509d0cac8530601c40a94db6a4ef766 (patch) | |
tree | 331ded5de829a76f943c51bbca5d22d3dcc678b3 /src/occ_gpe0/gpe_util.c | |
parent | ff50d1ba87a4affe60b26d581b668f12a355de29 (diff) | |
download | talos-occ-2860679a6509d0cac8530601c40a94db6a4ef766.tar.gz talos-occ-2860679a6509d0cac8530601c40a94db6a4ef766.zip |
Enabled reading CCSR via OCI
RTC: 140187
Change-Id: I3ad92658c18e76f58b3e7c9733e97cff437c7cdc
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/22581
Tested-by: FSP CI Jenkins
Reviewed-by: Martha Broyles <mbroyles@us.ibm.com>
Reviewed-by: Wael Elessawy <welessa@us.ibm.com>
Diffstat (limited to 'src/occ_gpe0/gpe_util.c')
-rw-r--r-- | src/occ_gpe0/gpe_util.c | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/src/occ_gpe0/gpe_util.c b/src/occ_gpe0/gpe_util.c index 10996d4..42125a9 100644 --- a/src/occ_gpe0/gpe_util.c +++ b/src/occ_gpe0/gpe_util.c @@ -172,6 +172,15 @@ void busy_wait(uint32_t t_microseconds) MFDEC(current_decrementer_value); } +/* + * Function Specification + * + * Name: ipc_scom_operation + * + * Description: Does a getscom or putscom for the 405 + * + * End Function Specification + */ void ipc_scom_operation(ipc_msg_t* cmd, void* arg) { int l_rc; @@ -181,16 +190,28 @@ void ipc_scom_operation(ipc_msg_t* cmd, void* arg) if (scom_op->read) { l_rc = getscom_abs(scom_op->addr, &scom_op->data); + if( l_rc ) + { + PK_TRACE("ipc_scom_operation: Error doing getscom! rc: 0x%08X addr: 0x%08X", l_rc, scom_op->addr); + gpe_set_ffdc(&(scom_op->error), scom_op->addr, GPE_RC_SCOM_GET_FAILED, l_rc); + } } else { l_rc = putscom_abs(scom_op->addr, scom_op->data); + if( l_rc ) + { + PK_TRACE("ipc_scom_operation: Error doing putscom! rc: 0x%08X addr: 0x%08X", l_rc, scom_op->addr); + gpe_set_ffdc(&(scom_op->error), scom_op->addr, GPE_RC_SCOM_PUT_FAILED, l_rc); + } } + // send back a response, IPC success even if ffdc/rc are non zeros + l_rc = ipc_send_rsp(cmd, IPC_RC_SUCCESS); if(l_rc) { - scom_op->rc = l_rc; - PK_TRACE("Error doing generic scom! RC: 0x%08X Addr: 0x%08X Read: %d Data: 0x%08X", l_rc, - scom_op->addr, scom_op->read, scom_op->data); + PK_TRACE("ipc_scom_operation: Failed to send response back. Halting GPE0", l_rc); + gpe_set_ffdc(&(scom_op->error), 0x00, GPE_RC_IPC_SEND_FAILED, l_rc); + pk_halt(); } } |