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 Othayoth void 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