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