1 #pragma once 2 3 #include <libpdbg.h> 4 5 #include <string> 6 #include <vector> 7 8 // Forward reference to avoid pulling the libhei library into everything that 9 // includes this header. 10 namespace libhei 11 { 12 class Chip; 13 } 14 15 namespace util 16 { 17 18 namespace pdbg 19 { 20 21 /** Chip target types. */ 22 enum TargetType_t : uint8_t 23 { 24 TYPE_PROC = 0x05, 25 TYPE_IOLINK = 0x47, 26 TYPE_OMI = 0x48, 27 TYPE_OCMB = 0x4b, 28 TYPE_IOHS = 0x51, 29 }; 30 31 /** @return The target associated with the given chip. */ 32 pdbg_target* getTrgt(const libhei::Chip& i_chip); 33 34 /** @return The target associated with the given devtree path. */ 35 pdbg_target* getTrgt(const std::string& i_path); 36 37 /** @return A string representing the given target's devtree path. */ 38 const char* getPath(pdbg_target* i_trgt); 39 40 /** @return A string representing the given chip's devtree path. */ 41 const char* getPath(const libhei::Chip& i_chip); 42 43 /** @return The absolute position of the given target. */ 44 uint32_t getChipPos(pdbg_target* i_trgt); 45 46 /** @return The absolute position of the given chip. */ 47 uint32_t getChipPos(const libhei::Chip& i_chip); 48 49 /** @return The target type of the given target. */ 50 uint8_t getTrgtType(pdbg_target* i_trgt); 51 52 /** @return The target type of the given chip. */ 53 uint8_t getTrgtType(const libhei::Chip& i_chip); 54 55 /** 56 * @return The pib target associated with the given proc target. 57 * @note Will assert the given target is a proc target. 58 * @note Will assert the returned pib target it not nullptr. 59 */ 60 pdbg_target* getPibTrgt(pdbg_target* i_procTrgt); 61 62 /** 63 * @return The fsi target associated with the given proc target. 64 * @note Will assert the given target is a proc target. 65 * @note Will assert the returned fsi target it not nullptr. 66 */ 67 pdbg_target* getFsiTrgt(pdbg_target* i_procTrgt); 68 69 /** 70 * @brief Reads a CFAM FSI register. 71 * @param i_trgt Given target. 72 * @param i_addr Given address. 73 * @param o_val The returned value of the register. 74 * @return 0 if successful, non-0 otherwise. 75 * @note Will assert the given target is a proc target. 76 */ 77 int getCfam(pdbg_target* i_trgt, uint32_t i_addr, uint32_t& o_val); 78 79 /** 80 * @brief Returns the list of all active chips in the system. 81 * @param o_chips The returned list of chips. 82 */ 83 void getActiveChips(std::vector<libhei::Chip>& o_chips); 84 85 /** 86 * @return True, if hardware analysis is supported on this system. False, 87 * otherwise. 88 * @note Support for hardware analysis from the BMC started with P10 systems 89 * and is not supported on any older chip generations. 90 */ 91 bool queryHardwareAnalysisSupported(); 92 93 /** 94 * @return A string containing the FRU location code of the given chip. An empty 95 * string indicates the target was null or the attribute does not exist 96 * for this target. 97 * @note This function requires PHAL APIs that are only available in certain 98 * environments. If they do not exist the devtree path of the target is 99 * returned. 100 */ 101 std::string getLocationCode(pdbg_target* trgt); 102 103 /** 104 * @return A string containing the physical device path (entity path) of the 105 * given chip. An empty string indicates the target was null or the 106 * attribute does not exist for this target. 107 * @note This function requires PHAL APIs that are only available in certain 108 * environments. If they do not exist the devtree path of the target is 109 * returned. 110 */ 111 std::string getPhysDevPath(pdbg_target* trgt); 112 113 } // namespace pdbg 114 115 } // namespace util 116