summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Crowell <dcrowell@us.ibm.com>2018-05-21 15:37:00 -0500
committerWilliam G. Hoffa <wghoffa@us.ibm.com>2018-05-24 09:36:53 -0400
commitd161474ee597e6242d3ee4a82eb1f8024070834a (patch)
treee98e75252f872fd89b675f329c792efe948cfbeb
parenta1e236a422182e81f7877de85f3cb46dff6fc0cd (diff)
downloadtalos-hostboot-d161474ee597e6242d3ee4a82eb1f8024070834a.tar.gz
talos-hostboot-d161474ee597e6242d3ee4a82eb1f8024070834a.zip
Fix indirect scoms at runtime under Opal
A recent change centralized some error checking code and in the process broke indirect scoms under Opal. There is a difference of behavior between Opal and Phyp for these kinds of addresses. In Phyp, HBRT does all of the translation into physical addresses. In Opal, we send the complete 64-bit address to Opal for them to handle it, therefore we need to allow it through our scom code. Resolves boston-openpower/#1293 Change-Id: I652106ed36dbfa3d2abcffd5fbf0d93f51bb631e Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/59156 Reviewed-by: Martin Gloff <mgloff@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: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com> Reviewed-by: William G. Hoffa <wghoffa@us.ibm.com>
-rw-r--r--src/usr/scom/preopchecks.C14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/usr/scom/preopchecks.C b/src/usr/scom/preopchecks.C
index f5bc9f4a5..2f1a45875 100644
--- a/src/usr/scom/preopchecks.C
+++ b/src/usr/scom/preopchecks.C
@@ -58,8 +58,20 @@ errlHndl_t scomOpSanityCheck(const DeviceFW::OperationType i_opType,
do
{
+ // In HOSTBOOT_RUNTIME we rely on OPAL to perform indirect scoms,
+ // but PHYP wants us to do it ourselves. Therefore we need to
+ // allow 64-bit addresses to flow through in OPAL/Sapphire mode.
+ bool l_allowIndirectScoms = false;
+#ifdef __HOSTBOOT_RUNTIME
+ if( TARGETING::is_sapphire_load() )
+ {
+ l_allowIndirectScoms = true;
+ }
+#endif // __HOSTBOOT_RUNTIME
+
// Verify address is not over 32-bits long
- if(0 != (i_addr & 0xFFFFFFFF00000000))
+ if( (0 != (i_addr & 0xFFFFFFFF00000000))
+ && (!l_allowIndirectScoms) )
{
TRACFCOMP(g_trac_scom, ERR_MRK
"scomOpSanityCheck: Impossible address. i_addr=0x%.16X",
OpenPOWER on IntegriCloud