diff options
author | Douglas Gilbert <dgilbert@us.ibm.com> | 2018-04-30 15:00:15 -0500 |
---|---|---|
committer | Martha Broyles <mbroyles@us.ibm.com> | 2018-05-07 12:35:12 -0400 |
commit | 9e004972550ddbe98efbe8c1803bb7ef86aa4f1d (patch) | |
tree | 9cabbb635a4d41a52a9bb86e8316a87bf69a4c38 /src/occ_gpe1/gpe_centaur_scom.c | |
parent | f741c41933c8835c5de75abe8402e3c5d13d417e (diff) | |
download | talos-occ-9e004972550ddbe98efbe8c1803bb7ef86aa4f1d.tar.gz talos-occ-9e004972550ddbe98efbe8c1803bb7ef86aa4f1d.zip |
Centaur SYNC required after changing throttle
Change-Id: I8bccc2a0971728d8d2582ba678de166c2591557a
CQ: SW426949
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/58053
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: William A. Bryan <wilbryan@us.ibm.com>
Reviewed-by: Martha Broyles <mbroyles@us.ibm.com>
Diffstat (limited to 'src/occ_gpe1/gpe_centaur_scom.c')
-rw-r--r-- | src/occ_gpe1/gpe_centaur_scom.c | 96 |
1 files changed, 70 insertions, 26 deletions
diff --git a/src/occ_gpe1/gpe_centaur_scom.c b/src/occ_gpe1/gpe_centaur_scom.c index afe1d3b..4cd4cf5 100644 --- a/src/occ_gpe1/gpe_centaur_scom.c +++ b/src/occ_gpe1/gpe_centaur_scom.c @@ -536,15 +536,50 @@ int centaur_get_mem_data(CentaurConfiguration_t* i_config, } -// CentaurConfiguration needs to be setup before this is called +int centaur_scom_sync(CentaurConfiguration_t* i_config) +{ + uint64_t data; + int rc = 0; + do + { + rc = getscom_abs(i_config->mcSyncAddr,&data); + if (rc) + { + PK_TRACE("centaur_scom_sync: getscom failed. rc = %d",rc); + break; + } + + data &= ~MCS_MCSYNC_SYNC_GO; + + rc = putscom_abs(i_config->mcSyncAddr, data); + if (rc) + { + PK_TRACE("centaur_scom_sync: reset sync putscom failed. rc = %d",rc); + break; + } + + data |= MCS_MCSYNC_SYNC_GO; + + rc = putscom_abs(i_config->mcSyncAddr, data); + if (rc) + { + PK_TRACE("centaur_scom_sync: set sync putscom failed. rc = %d",rc); + break; + } + } while (0); + + return rc; +} + +// CentaurConfiguration needs to be setup before this is called void gpe_scom_centaur(CentaurConfiguration_t* i_config, CentaurScomParms_t* i_parms) { int i; + int rc = 0; mtmsr((mfmsr() & ~(MSR_SIBRC | MSR_SIBRCA)) | MSR_SEM); - // Do reset and pba_setup here? for(i = 0; i < i_parms->entries; ++i) { switch(i_parms->scomList[i].commandType) @@ -553,49 +588,58 @@ void gpe_scom_centaur(CentaurConfiguration_t* i_config, break; case CENTAUR_SCOM_READ: - centaur_get_scom(i_config, - i_parms->scomList[i].instanceNumber, - i_parms->scomList[i].scom, - &(i_parms->scomList[i].data)); + rc =centaur_get_scom(i_config, + i_parms->scomList[i].instanceNumber, + i_parms->scomList[i].scom, + &(i_parms->scomList[i].data)); break; case CENTAUR_SCOM_WRITE: - centaur_put_scom(i_config, - i_parms->scomList[i].instanceNumber, - i_parms->scomList[i].scom, - i_parms->scomList[i].data); + rc = centaur_put_scom(i_config, + i_parms->scomList[i].instanceNumber, + i_parms->scomList[i].scom, + i_parms->scomList[i].data); break; case CENTAUR_SCOM_RMW: - centaur_scom_rmw(i_config, - i_parms->scomList[i].instanceNumber, - i_parms->scomList[i].scom, - i_parms->scomList[i].mask, - &(i_parms->scomList[i].data)); + rc = centaur_scom_rmw(i_config, + i_parms->scomList[i].instanceNumber, + i_parms->scomList[i].scom, + i_parms->scomList[i].mask, + &(i_parms->scomList[i].data)); break; case CENTAUR_SCOM_READ_VECTOR: - centaur_get_scom_vector(i_config, - i_parms->scomList[i].scom, - i_parms->scomList[i].pData - ); + rc = centaur_get_scom_vector(i_config, + i_parms->scomList[i].scom, + i_parms->scomList[i].pData + ); break; case CENTAUR_SCOM_WRITE_ALL: - centaur_put_scom_all(i_config, - i_parms->scomList[i].scom, - i_parms->scomList[i].data); + rc = centaur_put_scom_all(i_config, + i_parms->scomList[i].scom, + i_parms->scomList[i].data); break; case CENTAUR_SCOM_RMW_ALL: - centaur_scom_rmw_all(i_config, - i_parms->scomList[i].scom, - i_parms->scomList[i].mask, - i_parms->scomList[i].data); + rc = centaur_scom_rmw_all(i_config, + i_parms->scomList[i].scom, + i_parms->scomList[i].mask, + i_parms->scomList[i].data); + break; + + case CENTAUR_SCOM_CENTAUR_SYNC: + rc = centaur_scom_sync(i_config); break; default: break; }; + i_parms->error.rc = rc; + if (rc) + { + break; + } } } |