diff options
author | Zane Shelley <zshelle@us.ibm.com> | 2017-10-21 13:49:55 -0500 |
---|---|---|
committer | Martha Broyles <mbroyles@us.ibm.com> | 2017-10-24 09:23:00 -0400 |
commit | 20879cb32111afd06cc7db6ea1fd0aaf3ef32ee6 (patch) | |
tree | ebb1694ca2d874fc8ec4a46322cffb41c518ffb1 /src/occ_gpe0/firdata/sbe_fifo.c | |
parent | 6404302e1b1eae001edcec4a5c8e4c4ce5cdaaa3 (diff) | |
download | talos-occ-20879cb32111afd06cc7db6ea1fd0aaf3ef32ee6.tar.gz talos-occ-20879cb32111afd06cc7db6ea1fd0aaf3ef32ee6.zip |
FIRDATA: isolation issues due to SCOM errors from 0x50040018
The first change is to reset the SBE FIFO after SCOM failures on
slave processors. This ensures the FIFO is realigned for subsequent
SCOMs.
The second change is to ignore chiplet offline SCOM errors from
0x50040018 on master processors. These are expected if a core is
asleep at the time of the checkstop. The data returned from the
SCOM will still show active attentions from chiplets that are online.
This commit does not fix chiplet offline SCOM errors from 0x50040018
on slave processors. That will come later in another commit.
Change-Id: Ie60329efed169c9f4afa94154fd86fe466384609
CQ: SW404945
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/48666
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Prachi Gupta <pragupta@us.ibm.com>
Reviewed-by: William G. Hoffa <wghoffa@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Reviewed-by: William A. Bryan <wilbryan@us.ibm.com>
Reviewed-by: Brian J. Stegmiller <bjs@us.ibm.com>
Reviewed-by: Martha Broyles <mbroyles@us.ibm.com>
Diffstat (limited to 'src/occ_gpe0/firdata/sbe_fifo.c')
-rw-r--r-- | src/occ_gpe0/firdata/sbe_fifo.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/occ_gpe0/firdata/sbe_fifo.c b/src/occ_gpe0/firdata/sbe_fifo.c index 1cddde5..aac8b15 100644 --- a/src/occ_gpe0/firdata/sbe_fifo.c +++ b/src/occ_gpe0/firdata/sbe_fifo.c @@ -386,6 +386,13 @@ int32_t putFifoScom(SCOM_Trgt_t* i_target, uint64_t i_addr, uint64_t i_data) (uint32_t*)&l_fifoResponse, sizeof(struct fifoPutScomResponse)); + if ( l_rc != SUCCESS ) + { + // Reset the FIFO for subsequent SCOMs + uint32_t l_data = 0xDEAD; + putfsi( i_target, 0x2450, l_data ); + } + return l_rc; } @@ -413,6 +420,13 @@ int32_t getFifoScom(SCOM_Trgt_t* i_target, uint64_t i_addr, uint64_t* o_data) (uint32_t*)&l_fifoResponse, sizeof(struct fifoGetScomResponse)); + if ( l_rc != SUCCESS ) + { + // Reset the FIFO for subsequent SCOMs + uint32_t l_data = 0xDEAD; + putfsi( i_target, 0x2450, l_data ); + } + //Always return data even if there is an error *o_data = l_fifoResponse.data; |