1*858d1aafSDhruvaraj Subhashchandran #pragma once 2*858d1aafSDhruvaraj Subhashchandran 3*858d1aafSDhruvaraj Subhashchandran extern "C" 4*858d1aafSDhruvaraj Subhashchandran { 5*858d1aafSDhruvaraj Subhashchandran #include <libpdbg.h> 6*858d1aafSDhruvaraj Subhashchandran #include <libpdbg_sbe.h> 7*858d1aafSDhruvaraj Subhashchandran } 8*858d1aafSDhruvaraj Subhashchandran 9*858d1aafSDhruvaraj Subhashchandran #include <cstdint> 10*858d1aafSDhruvaraj Subhashchandran #include <filesystem> 11*858d1aafSDhruvaraj Subhashchandran #include <future> 12*858d1aafSDhruvaraj Subhashchandran #include <vector> 13*858d1aafSDhruvaraj Subhashchandran 14*858d1aafSDhruvaraj Subhashchandran namespace openpower::dump::sbe_chipop 15*858d1aafSDhruvaraj Subhashchandran { 16*858d1aafSDhruvaraj Subhashchandran 17*858d1aafSDhruvaraj Subhashchandran /** 18*858d1aafSDhruvaraj Subhashchandran * @class SbeDumpCollector 19*858d1aafSDhruvaraj Subhashchandran * @brief Manages the collection of dumps from SBEs on failure. 20*858d1aafSDhruvaraj Subhashchandran * 21*858d1aafSDhruvaraj Subhashchandran * This class provides functionalities to orchestrate the collection of 22*858d1aafSDhruvaraj Subhashchandran * diagnostic dumps from Self Boot Engines across multiple processors 23*858d1aafSDhruvaraj Subhashchandran * in response to failures or for diagnostic purposes. 24*858d1aafSDhruvaraj Subhashchandran */ 25*858d1aafSDhruvaraj Subhashchandran class SbeDumpCollector 26*858d1aafSDhruvaraj Subhashchandran { 27*858d1aafSDhruvaraj Subhashchandran public: 28*858d1aafSDhruvaraj Subhashchandran /** 29*858d1aafSDhruvaraj Subhashchandran * @brief Constructs a new SbeDumpCollector object. 30*858d1aafSDhruvaraj Subhashchandran */ 31*858d1aafSDhruvaraj Subhashchandran SbeDumpCollector() = default; 32*858d1aafSDhruvaraj Subhashchandran 33*858d1aafSDhruvaraj Subhashchandran /** 34*858d1aafSDhruvaraj Subhashchandran * @brief Destroys the SbeDumpCollector object. 35*858d1aafSDhruvaraj Subhashchandran */ 36*858d1aafSDhruvaraj Subhashchandran ~SbeDumpCollector() = default; 37*858d1aafSDhruvaraj Subhashchandran 38*858d1aafSDhruvaraj Subhashchandran /** 39*858d1aafSDhruvaraj Subhashchandran * @brief Orchestrates the collection of dumps from all available SBEs. 40*858d1aafSDhruvaraj Subhashchandran * 41*858d1aafSDhruvaraj Subhashchandran * Initiates the process of collecting diagnostic dumps from SBEs. This 42*858d1aafSDhruvaraj Subhashchandran * involves identifying available processors, initiating the dump 43*858d1aafSDhruvaraj Subhashchandran * collection process, and managing the collected dump files. 44*858d1aafSDhruvaraj Subhashchandran * 45*858d1aafSDhruvaraj Subhashchandran * @param type The type of dump to collect. 46*858d1aafSDhruvaraj Subhashchandran * @param id A unique identifier for the dump collection operation. 47*858d1aafSDhruvaraj Subhashchandran * @param failingUnit The identifier of the failing unit prompting the dump 48*858d1aafSDhruvaraj Subhashchandran * collection. 49*858d1aafSDhruvaraj Subhashchandran * @param path The filesystem path where collected dumps should be stored. 50*858d1aafSDhruvaraj Subhashchandran */ 51*858d1aafSDhruvaraj Subhashchandran void collectDump(uint8_t type, uint32_t id, uint64_t failingUnit, 52*858d1aafSDhruvaraj Subhashchandran const std::filesystem::path& path); 53*858d1aafSDhruvaraj Subhashchandran 54*858d1aafSDhruvaraj Subhashchandran private: 55*858d1aafSDhruvaraj Subhashchandran /** 56*858d1aafSDhruvaraj Subhashchandran * @brief Collects a dump from a single SBE. 57*858d1aafSDhruvaraj Subhashchandran * 58*858d1aafSDhruvaraj Subhashchandran * Executes the low-level operations required to collect a diagnostic 59*858d1aafSDhruvaraj Subhashchandran * dump from the specified SBE. 60*858d1aafSDhruvaraj Subhashchandran * 61*858d1aafSDhruvaraj Subhashchandran * @param chip A pointer to the pdbg_target structure representing the SBE. 62*858d1aafSDhruvaraj Subhashchandran * @param path The filesystem path where the dump should be stored. 63*858d1aafSDhruvaraj Subhashchandran * @param id The unique identifier for this dump collection operation. 64*858d1aafSDhruvaraj Subhashchandran * @param type The type of dump to collect. 65*858d1aafSDhruvaraj Subhashchandran * @param clockState The clock state of the SBE during dump collection. 66*858d1aafSDhruvaraj Subhashchandran * @param failingUnit The identifier of the failing unit. 67*858d1aafSDhruvaraj Subhashchandran */ 68*858d1aafSDhruvaraj Subhashchandran void collectDumpFromSBE(struct pdbg_target* chip, 69*858d1aafSDhruvaraj Subhashchandran const std::filesystem::path& path, uint32_t id, 70*858d1aafSDhruvaraj Subhashchandran uint8_t type, uint8_t clockState, 71*858d1aafSDhruvaraj Subhashchandran uint64_t failingUnit); 72*858d1aafSDhruvaraj Subhashchandran 73*858d1aafSDhruvaraj Subhashchandran /** 74*858d1aafSDhruvaraj Subhashchandran * @brief Initializes the PDBG library. 75*858d1aafSDhruvaraj Subhashchandran * 76*858d1aafSDhruvaraj Subhashchandran * Prepares the PDBG library for interacting with processor targets. This 77*858d1aafSDhruvaraj Subhashchandran * must be called before any PDBG-related operations are performed. 78*858d1aafSDhruvaraj Subhashchandran */ 79*858d1aafSDhruvaraj Subhashchandran void initializePdbg(); 80*858d1aafSDhruvaraj Subhashchandran 81*858d1aafSDhruvaraj Subhashchandran /** 82*858d1aafSDhruvaraj Subhashchandran * @brief Launches asynchronous dump collection tasks for a set of targets. 83*858d1aafSDhruvaraj Subhashchandran * 84*858d1aafSDhruvaraj Subhashchandran * This method initiates the dump collection process asynchronously for each 85*858d1aafSDhruvaraj Subhashchandran * target provided in the `targets` vector. It launches a separate 86*858d1aafSDhruvaraj Subhashchandran * asynchronous task for each target, where each task calls 87*858d1aafSDhruvaraj Subhashchandran * `collectDumpFromSBE` with the specified parameters, including the clock 88*858d1aafSDhruvaraj Subhashchandran * state. 89*858d1aafSDhruvaraj Subhashchandran * 90*858d1aafSDhruvaraj Subhashchandran * @param type The type of the dump to collect. This could be a hardware 91*858d1aafSDhruvaraj Subhashchandran * dump, software dump, etc., as defined by the SBE dump type enumeration. 92*858d1aafSDhruvaraj Subhashchandran * @param id A unique identifier for the dump collection operation. This ID 93*858d1aafSDhruvaraj Subhashchandran * is used to tag the collected dump for identification. 94*858d1aafSDhruvaraj Subhashchandran * @param path The filesystem path where the collected dumps should be 95*858d1aafSDhruvaraj Subhashchandran * stored. Each dump file will be stored under this directory. 96*858d1aafSDhruvaraj Subhashchandran * @param failingUnit The identifier of the unit or component that is 97*858d1aafSDhruvaraj Subhashchandran * failing or suspected to be the cause of the issue prompting the dump 98*858d1aafSDhruvaraj Subhashchandran * collection. This is used for diagnostic purposes. 99*858d1aafSDhruvaraj Subhashchandran * @param cstate The clock state during the dump collection. This parameter 100*858d1aafSDhruvaraj Subhashchandran * dictates whether the dump should be collected with the 101*858d1aafSDhruvaraj Subhashchandran * clocks running (SBE_CLOCK_ON) or with the clocks stopped (SBE_CLOCK_OFF). 102*858d1aafSDhruvaraj Subhashchandran * @param targets A vector of `pdbg_target*` representing the targets from 103*858d1aafSDhruvaraj Subhashchandran * which dumps should be collected. Each target corresponds to a physical or 104*858d1aafSDhruvaraj Subhashchandran * logical component in the system, such as a processor or an SBE. 105*858d1aafSDhruvaraj Subhashchandran * 106*858d1aafSDhruvaraj Subhashchandran * @return A vector of `std::future<void>` objects. Each future represents 107*858d1aafSDhruvaraj Subhashchandran * the completion state of an asynchronous dump collection task. The caller 108*858d1aafSDhruvaraj Subhashchandran * can wait on these futures to determine when all dump collection 109*858d1aafSDhruvaraj Subhashchandran * tasks have completed. Exceptions thrown by the asynchronous tasks are 110*858d1aafSDhruvaraj Subhashchandran * captured by the futures and can be rethrown when the futures are 111*858d1aafSDhruvaraj Subhashchandran * accessed. 112*858d1aafSDhruvaraj Subhashchandran */ 113*858d1aafSDhruvaraj Subhashchandran std::vector<std::future<void>> spawnDumpCollectionProcesses( 114*858d1aafSDhruvaraj Subhashchandran uint8_t type, uint32_t id, const std::filesystem::path& path, 115*858d1aafSDhruvaraj Subhashchandran uint64_t failingUnit, uint8_t cstate, 116*858d1aafSDhruvaraj Subhashchandran const std::vector<struct pdbg_target*>& targets); 117*858d1aafSDhruvaraj Subhashchandran }; 118*858d1aafSDhruvaraj Subhashchandran 119*858d1aafSDhruvaraj Subhashchandran } // namespace openpower::dump::sbe_chipop 120