1*ee10eadaSJayanth Othayoth #include "registration.hpp" 2*ee10eadaSJayanth Othayoth 3*ee10eadaSJayanth Othayoth extern "C" 4*ee10eadaSJayanth Othayoth { 5*ee10eadaSJayanth Othayoth #include <libpdbg.h> 6*ee10eadaSJayanth Othayoth } 7*ee10eadaSJayanth Othayoth #include <phosphor-logging/log.hpp> 8*ee10eadaSJayanth Othayoth 9*ee10eadaSJayanth Othayoth namespace openpower 10*ee10eadaSJayanth Othayoth { 11*ee10eadaSJayanth Othayoth namespace phal 12*ee10eadaSJayanth Othayoth { 13*ee10eadaSJayanth Othayoth using namespace phosphor::logging; 14*ee10eadaSJayanth Othayoth 15*ee10eadaSJayanth Othayoth /** 16*ee10eadaSJayanth Othayoth * @brief Stop instruction executions on all functional threads in the 17*ee10eadaSJayanth Othayoth * host processors. 18*ee10eadaSJayanth Othayoth * This procedure is used to stop all threads in the system in 19*ee10eadaSJayanth Othayoth * attempt best case approach. Like issue processor level stopall 20*ee10eadaSJayanth Othayoth * chip-op with ignore hardware error mode. Since this function 21*ee10eadaSJayanth Othayoth * is used in power-off/error path, ignore the internal error now. 22*ee10eadaSJayanth Othayoth */ threadStopAll(void)23*ee10eadaSJayanth Othayothvoid threadStopAll(void) 24*ee10eadaSJayanth Othayoth { 25*ee10eadaSJayanth Othayoth // Set pdbg back-end to sbefifo. 26*ee10eadaSJayanth Othayoth pdbg_set_backend(PDBG_BACKEND_SBEFIFO, NULL); 27*ee10eadaSJayanth Othayoth 28*ee10eadaSJayanth Othayoth // initialize the pdbg. 29*ee10eadaSJayanth Othayoth pdbg_targets_init(NULL); 30*ee10eadaSJayanth Othayoth 31*ee10eadaSJayanth Othayoth struct pdbg_target* pibTarget; 32*ee10eadaSJayanth Othayoth 33*ee10eadaSJayanth Othayoth pdbg_for_each_class_target("pib", pibTarget) 34*ee10eadaSJayanth Othayoth { 35*ee10eadaSJayanth Othayoth // probe pib traget. 36*ee10eadaSJayanth Othayoth pdbg_target_probe(pibTarget); 37*ee10eadaSJayanth Othayoth } 38*ee10eadaSJayanth Othayoth 39*ee10eadaSJayanth Othayoth // Issue system level thread stop 40*ee10eadaSJayanth Othayoth if (thread_stop_all() < 0) 41*ee10eadaSJayanth Othayoth { 42*ee10eadaSJayanth Othayoth log<level::ERR>("Failed to stop all threads"); 43*ee10eadaSJayanth Othayoth return; 44*ee10eadaSJayanth Othayoth } 45*ee10eadaSJayanth Othayoth log<level::INFO>("Processor thread stopall completed"); 46*ee10eadaSJayanth Othayoth } 47*ee10eadaSJayanth Othayoth 48*ee10eadaSJayanth Othayoth REGISTER_PROCEDURE("threadStopAll", threadStopAll) 49*ee10eadaSJayanth Othayoth 50*ee10eadaSJayanth Othayoth } // namespace phal 51*ee10eadaSJayanth Othayoth } // namespace openpower 52