xref: /openbmc/openpower-debug-collector/dump/dump_collect_main.cpp (revision 540521edd78007b78f8e6df4b38ca71496862f25)
1858d1aafSDhruvaraj Subhashchandran #include "sbe_consts.hpp"
2858d1aafSDhruvaraj Subhashchandran #include "sbe_dump_collector.hpp"
3858d1aafSDhruvaraj Subhashchandran 
462881c53SDhruvaraj Subhashchandran #include <libphal.H>
562881c53SDhruvaraj Subhashchandran 
6858d1aafSDhruvaraj Subhashchandran #include <CLI/App.hpp>
7858d1aafSDhruvaraj Subhashchandran #include <CLI/Config.hpp>
8858d1aafSDhruvaraj Subhashchandran #include <CLI/Formatter.hpp>
9858d1aafSDhruvaraj Subhashchandran 
10858d1aafSDhruvaraj Subhashchandran #include <filesystem>
11858d1aafSDhruvaraj Subhashchandran #include <iostream>
12858d1aafSDhruvaraj Subhashchandran 
main(int argc,char ** argv)13858d1aafSDhruvaraj Subhashchandran int main(int argc, char** argv)
14858d1aafSDhruvaraj Subhashchandran {
15858d1aafSDhruvaraj Subhashchandran     using namespace openpower::dump::sbe_chipop;
16858d1aafSDhruvaraj Subhashchandran     using std::filesystem::path;
17858d1aafSDhruvaraj Subhashchandran     using namespace openpower::dump::SBE;
1862881c53SDhruvaraj Subhashchandran     using namespace openpower::phal::dump;
19858d1aafSDhruvaraj Subhashchandran 
20858d1aafSDhruvaraj Subhashchandran     CLI::App app{"Dump Collector Application", "dump-collect"};
21858d1aafSDhruvaraj Subhashchandran     app.description(
22858d1aafSDhruvaraj Subhashchandran         "Collects dumps from the Self Boot Engine (SBE) based on "
23858d1aafSDhruvaraj Subhashchandran         "provided parameters.\nSupports different types of dumps and requires "
24858d1aafSDhruvaraj Subhashchandran         "specific options based on the dump type.");
25858d1aafSDhruvaraj Subhashchandran 
26858d1aafSDhruvaraj Subhashchandran     int type = 0;
27858d1aafSDhruvaraj Subhashchandran     uint32_t id;
28858d1aafSDhruvaraj Subhashchandran     std::string pathStr;
29858d1aafSDhruvaraj Subhashchandran     std::optional<uint64_t> failingUnit;
30858d1aafSDhruvaraj Subhashchandran 
31858d1aafSDhruvaraj Subhashchandran     app.add_option("--type, -t", type, "Type of the dump")
32858d1aafSDhruvaraj Subhashchandran         ->required()
33*540521edSPatrick Williams         ->check(CLI::IsMember(
34*540521edSPatrick Williams             {SBE_DUMP_TYPE_HARDWARE, SBE_DUMP_TYPE_HOSTBOOT, SBE_DUMP_TYPE_SBE,
35*540521edSPatrick Williams              SBE_DUMP_TYPE_PERFORMANCE, SBE_DUMP_TYPE_MSBE}));
36858d1aafSDhruvaraj Subhashchandran 
37858d1aafSDhruvaraj Subhashchandran     app.add_option("--id, -i", id, "ID of the dump")->required();
38858d1aafSDhruvaraj Subhashchandran 
39858d1aafSDhruvaraj Subhashchandran     app.add_option("--path, -p", pathStr,
40858d1aafSDhruvaraj Subhashchandran                    "Path to store the collected dump files")
41858d1aafSDhruvaraj Subhashchandran         ->required();
42858d1aafSDhruvaraj Subhashchandran 
43858d1aafSDhruvaraj Subhashchandran     app.add_option("--failingunit, -f", failingUnit, "ID of the failing unit");
44858d1aafSDhruvaraj Subhashchandran 
45858d1aafSDhruvaraj Subhashchandran     try
46858d1aafSDhruvaraj Subhashchandran     {
47858d1aafSDhruvaraj Subhashchandran         CLI11_PARSE(app, argc, argv);
48858d1aafSDhruvaraj Subhashchandran     }
49858d1aafSDhruvaraj Subhashchandran     catch (const CLI::ParseError& e)
50858d1aafSDhruvaraj Subhashchandran     {
51858d1aafSDhruvaraj Subhashchandran         return app.exit(e);
52858d1aafSDhruvaraj Subhashchandran     }
53858d1aafSDhruvaraj Subhashchandran 
546f1be979SDhruvaraj Subhashchandran     if (((type == SBE_DUMP_TYPE_HARDWARE) || (type == SBE_DUMP_TYPE_SBE) ||
556f1be979SDhruvaraj Subhashchandran          (type == SBE_DUMP_TYPE_MSBE)) &&
5662881c53SDhruvaraj Subhashchandran         !failingUnit.has_value())
57858d1aafSDhruvaraj Subhashchandran     {
5862881c53SDhruvaraj Subhashchandran         std::cerr
5962881c53SDhruvaraj Subhashchandran             << "Failing unit ID is required for Hardware and SBE type dumps\n";
60858d1aafSDhruvaraj Subhashchandran         return EXIT_FAILURE;
61858d1aafSDhruvaraj Subhashchandran     }
62858d1aafSDhruvaraj Subhashchandran 
63858d1aafSDhruvaraj Subhashchandran     // Directory creation should happen here, after successful parsing
64858d1aafSDhruvaraj Subhashchandran     std::filesystem::path dirPath{pathStr};
65858d1aafSDhruvaraj Subhashchandran     if (!std::filesystem::exists(dirPath))
66858d1aafSDhruvaraj Subhashchandran     {
67858d1aafSDhruvaraj Subhashchandran         std::filesystem::create_directories(dirPath);
68858d1aafSDhruvaraj Subhashchandran     }
69858d1aafSDhruvaraj Subhashchandran 
70858d1aafSDhruvaraj Subhashchandran     SbeDumpCollector dumpCollector;
71858d1aafSDhruvaraj Subhashchandran 
72858d1aafSDhruvaraj Subhashchandran     auto failingUnitId = 0xFFFFFF; // Default or unspecified value
73858d1aafSDhruvaraj Subhashchandran     if (failingUnit.has_value())
74858d1aafSDhruvaraj Subhashchandran     {
75858d1aafSDhruvaraj Subhashchandran         failingUnitId = failingUnit.value();
76858d1aafSDhruvaraj Subhashchandran     }
77858d1aafSDhruvaraj Subhashchandran 
78858d1aafSDhruvaraj Subhashchandran     try
79858d1aafSDhruvaraj Subhashchandran     {
806f1be979SDhruvaraj Subhashchandran         if ((type == SBE_DUMP_TYPE_SBE) || (type == SBE_DUMP_TYPE_MSBE))
8162881c53SDhruvaraj Subhashchandran         {
8262881c53SDhruvaraj Subhashchandran             collectSBEDump(id, failingUnitId, pathStr, type);
8362881c53SDhruvaraj Subhashchandran         }
8462881c53SDhruvaraj Subhashchandran         else
8562881c53SDhruvaraj Subhashchandran         {
86858d1aafSDhruvaraj Subhashchandran             dumpCollector.collectDump(type, id, failingUnitId, pathStr);
87858d1aafSDhruvaraj Subhashchandran         }
8862881c53SDhruvaraj Subhashchandran     }
89858d1aafSDhruvaraj Subhashchandran     catch (const std::exception& e)
90858d1aafSDhruvaraj Subhashchandran     {
91858d1aafSDhruvaraj Subhashchandran         std::cerr << "Failed to collect dump: " << e.what() << std::endl;
92858d1aafSDhruvaraj Subhashchandran         std::exit(EXIT_FAILURE);
93858d1aafSDhruvaraj Subhashchandran     }
94858d1aafSDhruvaraj Subhashchandran 
95858d1aafSDhruvaraj Subhashchandran     return 0;
96858d1aafSDhruvaraj Subhashchandran }
97