diff options
Diffstat (limited to 'src/usr/scom')
-rw-r--r-- | src/usr/scom/handleSpecialWakeup.C | 8 | ||||
-rw-r--r-- | src/usr/scom/runtime/rt_scom.C | 18 | ||||
-rw-r--r-- | src/usr/scom/runtime/test/testscom_rt.H | 25 | ||||
-rw-r--r-- | src/usr/scom/scom.C | 3 | ||||
-rw-r--r-- | src/usr/scom/scomtrans.C | 37 | ||||
-rw-r--r-- | src/usr/scom/test/scomtest.H | 9 |
6 files changed, 47 insertions, 53 deletions
diff --git a/src/usr/scom/handleSpecialWakeup.C b/src/usr/scom/handleSpecialWakeup.C index 07bab3a1b..e202e9bdb 100644 --- a/src/usr/scom/handleSpecialWakeup.C +++ b/src/usr/scom/handleSpecialWakeup.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2015,2018 */ +/* Contributors Listed Below - COPYRIGHT 2015,2020 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -37,7 +37,7 @@ #include <initservice/initserviceif.H> #ifdef __HOSTBOOT_RUNTIME -#include <runtime/rt_targeting.H> +#include <targeting/runtime/rt_targeting.H> #include <runtime/interface.h> #endif // __HOSTBOOT_RUNTIME @@ -156,8 +156,8 @@ errlHndl_t callWakeupHyp(TARGETING::Target* i_target, ++pCore_it ) { // Runtime target id - RT_TARG::rtChipId_t rtTargetId = 0; - l_errl = RT_TARG::getRtTarget(*pCore_it, rtTargetId); + TARGETING::rtChipId_t rtTargetId = 0; + l_errl = TARGETING::getRtTarget(*pCore_it, rtTargetId); if(l_errl) { break; diff --git a/src/usr/scom/runtime/rt_scom.C b/src/usr/scom/runtime/rt_scom.C index a27dfe81e..4507b435f 100644 --- a/src/usr/scom/runtime/rt_scom.C +++ b/src/usr/scom/runtime/rt_scom.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2013,2018 */ +/* Contributors Listed Below - COPYRIGHT 2013,2020 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -30,7 +30,7 @@ #include <scom/scomif.H> #include <scom/runtime/rt_scomif.H> #include <runtime/interface.h> -#include <runtime/rt_targeting.H> +#include <targeting/runtime/rt_targeting.H> #include <xscom/piberror.H> #include <runtime/hbrt_utilities.H> @@ -169,9 +169,9 @@ errlHndl_t sendScomToHyp(DeviceFW::OperationType i_opType, do { // Convert target to something Sapphire understands - RT_TARG::rtChipId_t proc_id = 0; - l_err = RT_TARG::getRtTarget(i_target, - proc_id); + TARGETING::rtChipId_t target_id = 0; + l_err = TARGETING::getRtTarget(i_target, + target_id); if(l_err) { break; @@ -185,7 +185,7 @@ errlHndl_t sendScomToHyp(DeviceFW::OperationType i_opType, if(i_opType == DeviceFW::READ) { l_hostRC = - g_hostInterfaces->scom_read(proc_id, + g_hostInterfaces->scom_read(target_id, i_scomAddr, io_buffer ); @@ -193,7 +193,7 @@ errlHndl_t sendScomToHyp(DeviceFW::OperationType i_opType, else if (i_opType == DeviceFW::WRITE) { l_hostRC = - g_hostInterfaces->scom_write(proc_id, + g_hostInterfaces->scom_write(target_id, i_scomAddr, io_buffer ); @@ -203,8 +203,8 @@ errlHndl_t sendScomToHyp(DeviceFW::OperationType i_opType, { TRACFCOMP(g_trac_scom,ERR_MRK "Hypervisor scom read/write failed. " - "rc 0x%X target 0x%llX proc_id 0x%llX addr 0x%llX r/w %d", - l_hostRC, get_huid(i_target), proc_id, i_scomAddr, i_opType); + "rc 0x%X target 0x%llX target_id 0x%llX addr 0x%llX r/w %d", + l_hostRC, get_huid(i_target), target_id, i_scomAddr, i_opType); // Use an unused bit in the 64-bit scom range to indicate // read/write. Cannot use bit0 since that is part of an diff --git a/src/usr/scom/runtime/test/testscom_rt.H b/src/usr/scom/runtime/test/testscom_rt.H index f0a14fe1b..e39d06d96 100644 --- a/src/usr/scom/runtime/test/testscom_rt.H +++ b/src/usr/scom/runtime/test/testscom_rt.H @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2013,2018 */ +/* Contributors Listed Below - COPYRIGHT 2013,2019 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -1242,29 +1242,6 @@ public: TS_FAIL( "ScomTest::test__MultiChipScomWrite_proc> ERROR : Data mismatch between read and expected data" ); fails++; } - - // Read the data back using FSIscom to make sure the data is the same. - l_err = deviceOp( DeviceFW::READ, - test_data[x].target, - &(read_data[x]), - op_size, - DEVICE_FSISCOM_ADDRESS(test_data[x].addr) ); - - - if( l_err ) - { - TRACFCOMP(g_trac_scom, "ScomTest::test__MultiChipScomWrite_proc> [%d] FSISCOM Read: Error from device : addr=0x%X, RC=%X", x, test_data[x].addr, l_err->reasonCode() ); - TS_FAIL( "ScomTest::test__MultiChipScomWrite_proc> ERROR : Unexpected error log from write1" ); - fails++; - errlCommit(l_err,SCOM_COMP_ID); - } - else if(read_data[x] != test_data[x].data) - { - TRACFCOMP(g_trac_scom, "ScomTest::test__MultiChipScomWrite_proc> [%d] FSISCOM Read: Data mismatch : addr=0x%X, read_data=0x%llx, write_data=0x%llx", x, test_data[x].addr, read_data[x], test_data[x].data); - TS_FAIL( "ScomTest::test__MultiChipScomWrite_proc> ERROR : Data mismatch between read and expected data" ); - fails++; - } - } TRACFCOMP( g_trac_scom, "ScomTest::test__MultiChipScomWrite_proc> %d/%d fails", fails, total ); diff --git a/src/usr/scom/scom.C b/src/usr/scom/scom.C index 22567fb49..d8d696c52 100644 --- a/src/usr/scom/scom.C +++ b/src/usr/scom/scom.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2011,2018 */ +/* Contributors Listed Below - COPYRIGHT 2011,2019 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -50,7 +50,6 @@ #include <targeting/common/utilFilter.H> #include <targeting/namedtarget.H> -#include <config.h> #ifndef __HOSTBOOT_RUNTIME #ifdef CONFIG_SECUREBOOT diff --git a/src/usr/scom/scomtrans.C b/src/usr/scom/scomtrans.C index bb5d8b282..6f0275e33 100644 --- a/src/usr/scom/scomtrans.C +++ b/src/usr/scom/scomtrans.C @@ -187,6 +187,16 @@ DEVICE_REGISTER_ROUTE(DeviceFW::WILDCARD, TARGETING::TYPE_OMI, startScomProcess); +DEVICE_REGISTER_ROUTE(DeviceFW::WILDCARD, + DeviceFW::SCOM, + TARGETING::TYPE_NPU, + startScomProcess); + +DEVICE_REGISTER_ROUTE(DeviceFW::WILDCARD, + DeviceFW::SCOM, + TARGETING::TYPE_MEM_PORT, + startScomProcess); + ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// errlHndl_t startScomProcess(DeviceFW::OperationType i_opType, @@ -296,9 +306,10 @@ errlHndl_t scomTranslate(TARGETING::Target * &i_target, // Get the type attribute. TARGETING::TYPE l_type = i_target->getAttr<TARGETING::ATTR_TYPE>(); - centaurChipUnits_t l_chipUnit = CENTAUR_CHIP; + centaurChipUnits_t l_cenChipUnit = CENTAUR_CHIP; + p9ChipUnits_t l_p9ChipUnit = NONE; - if(false == getChipUnitCentaur(l_type,l_chipUnit)) + if(false == getChipUnitCentaur(l_type,l_cenChipUnit)) { l_err = centaur_translation(i_target, l_type, @@ -306,14 +317,21 @@ errlHndl_t scomTranslate(TARGETING::Target * &i_target, i_opMode); o_needsWakeup = false; } - else + else if(false == getChipUnitP9(l_type,l_p9ChipUnit)) { l_err = p9_translation(i_target, - l_type, - io_addr, - o_needsWakeup, - i_opMode); + l_type, + io_addr, + o_needsWakeup, + i_opMode); + } + else + { + // The only type leftover should be mem_port, and there is + // no translation required for that + assert( TARGETING::TYPE_MEM_PORT == l_type ); } + return l_err; } @@ -960,6 +978,11 @@ bool getChipUnitP9 (TARGETING::TYPE i_type, o_chipUnit = PU_OMIC_CHIPUNIT; break; } + case(TARGETING::TYPE_NPU) : + { + o_chipUnit = PU_NPU_CHIPUNIT; + break; + } default: { l_isError = true; diff --git a/src/usr/scom/test/scomtest.H b/src/usr/scom/test/scomtest.H index 87444367b..0ad82d625 100644 --- a/src/usr/scom/test/scomtest.H +++ b/src/usr/scom/test/scomtest.H @@ -39,7 +39,6 @@ #include <targeting/common/util.H> #include <targeting/common/utilFilter.H> #include <scom/scomif.H> -#include <config.h> #include <devicefw/driverif.H> @@ -449,9 +448,7 @@ public: { scom_targets[myPROC0], 0x80000C010D010C3F ,0x1234432112344321, false, TARGETING::MODEL_POWER9 }, { scom_targets[myPROC0], 0x80000C0107011C3F, 0x123443211234ABAB, false, TARGETING::MODEL_NIMBUS }, { scom_targets[myPROC0], 0x80000C0107011C3F, 0x123443211234ABAB, false, TARGETING::MODEL_CUMULUS }, -#ifndef CONFIG_AXONE_BRING_UP { scom_targets[myPROC0], 0x800040000701103F, 0x123443211234ABAB, false, TARGETING::MODEL_AXONE }, -#endif { scom_targets[myPROC0], 0x8FFFFFFFFFFFFFFF, 0x123443211234ABAB, true, TARGETING::MODEL_POWER9 }, }; const uint64_t NUM_ADDRS = sizeof(test_data)/sizeof(test_data[0]); @@ -1190,10 +1187,8 @@ public: { scom_targets[myMC1],0x07010008, 0x08010008, false, TARGETING::MODEL_AXONE}, { scom_targets[myMC0],0x0FFFFFFF, 0x0FFFFFFF, true, TARGETING::MODEL_AXONE}, { scom_targets[myMC1],0x0FFFFFFF, 0x0FFFFFFF, true, TARGETING::MODEL_AXONE}, -#ifndef CONFIG_AXONE_BRING_UP - { scom_targets[myMI0],0x02010803, 0x02010803, false, TARGETING::MODEL_AXONE}, - { scom_targets[myMI3],0x02010803, 0x03010803, false, TARGETING::MODEL_AXONE}, -#endif + { scom_targets[myMI0],0x05010810, 0x05010810, false, TARGETING::MODEL_AXONE}, + { scom_targets[myMI3],0x05010810, 0x06010810, false, TARGETING::MODEL_AXONE}, { scom_targets[myMI0],0x0FFFFFFF, 0x0FFFFFFF, true, TARGETING::MODEL_AXONE}, { scom_targets[myMI3],0x0FFFFFFF, 0x0FFFFFFF, true, TARGETING::MODEL_AXONE}, { scom_targets[myMCC0],0x07010900, 0x07010900, false, TARGETING::MODEL_AXONE}, |