From d161474ee597e6242d3ee4a82eb1f8024070834a Mon Sep 17 00:00:00 2001 From: Dan Crowell Date: Mon, 21 May 2018 15:37:00 -0500 Subject: 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 Tested-by: Jenkins Server Tested-by: Jenkins OP Build CI Tested-by: FSP CI Jenkins Tested-by: Jenkins OP HW Reviewed-by: William G. Hoffa --- src/usr/scom/preopchecks.C | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'src/usr') 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", -- cgit v1.2.1