diff options
author | Ilya Smirnov <ismirno@us.ibm.com> | 2019-08-29 09:59:10 -0500 |
---|---|---|
committer | Christian R Geddes <crgeddes@us.ibm.com> | 2019-09-03 13:41:22 -0500 |
commit | b9cb9f77195cac23421069936d31903043d10d13 (patch) | |
tree | c453b8536582edba71a27de1e5dd892ed61e7ea3 /src/usr/targeting | |
parent | c3d8cfd066998862656706bb00d15ad986470fe5 (diff) | |
download | talos-hostboot-b9cb9f77195cac23421069936d31903043d10d13.tar.gz talos-hostboot-b9cb9f77195cac23421069936d31903043d10d13.zip |
Update SYS's ATTR_XSCOM_BASE_ADDRESS in SMF Paths
The correct value of ATTR_XSCOM_BASE_ADDRESS was not being propagated
to HDAT when SMF is enabled. The problem is that the system target has
a copy of said attribute that needs to be updated with the SMF bit
(bit 15) to reflect the fact that XSCOM BAR is in SMF memory. The
attribute under the system target was not being updated accordingly
(only those attributes under proc targets were). This commit adds a
fix to update ATTR_XSCOM_BASE_ADDRESS under the system target in SMF
mode.
Change-Id: Icac5bb7023ac0ecc521a961681420bfc21a46eac
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/83057
Reviewed-by: Nicholas E Bofferding <bofferdn@us.ibm.com>
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Michael Baiocchi <mbaiocch@us.ibm.com>
Reviewed-by: Christian R Geddes <crgeddes@us.ibm.com>
Diffstat (limited to 'src/usr/targeting')
-rwxr-xr-x | src/usr/targeting/targetservicestart.C | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/usr/targeting/targetservicestart.C b/src/usr/targeting/targetservicestart.C index d16d8b75c..8fe580763 100755 --- a/src/usr/targeting/targetservicestart.C +++ b/src/usr/targeting/targetservicestart.C @@ -847,6 +847,10 @@ static void adjustMemoryMap( TargetService& i_targetService ) ATTR_LPC_BUS_ADDR_type l_lpcBase = l_pTopLevel->getAttr<ATTR_LPC_BUS_ADDR>(); + // Whether to update the SYS's ATTR_XSCOM_BASE_ADDRESS with a new + // BAR before returning from this function + bool l_updateSysXscomBar = false; + // Loop through all the procs to recompute all the BARs // also find the victim to swap with Target* l_swapVictim = nullptr; @@ -874,11 +878,13 @@ static void adjustMemoryMap( TargetService& i_targetService ) if(l_curXscomBAR & IS_SMF_ADDR_BIT) { l_xscomBAR |= IS_SMF_ADDR_BIT; + l_updateSysXscomBar = true; } TARG_INF( " XSCOM=%.16llX", l_xscomBAR ); l_procChip->setAttr<ATTR_XSCOM_BASE_ADDRESS>(l_xscomBAR); + // See if this chip's space now belongs to the master if( l_xscomBAR == l_curXscomBAR ) { @@ -1073,6 +1079,14 @@ static void adjustMemoryMap( TargetService& i_targetService ) XSCOM::get_master_bar() ); TARG_ASSERT( false, "XSCOM BARs are inconsistent" ); } + + if(l_updateSysXscomBar) + { + l_pTopLevel->setAttr<ATTR_XSCOM_BASE_ADDRESS>( + l_xscomBase |= IS_SMF_ADDR_BIT); + TARG_INF("Updating the SYS XSCOM BAR to 0x%.16llX", + l_xscomBase |= IS_SMF_ADDR_BIT); + } } |