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 SCOM 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 getScom(pdbg_target* i_trgt, uint64_t i_addr, uint64_t& o_val); 78 79 /** 80 * @brief Reads a CFAM FSI register. 81 * @param i_trgt Given target. 82 * @param i_addr Given address. 83 * @param o_val The returned value of the register. 84 * @return 0 if successful, non-0 otherwise. 85 * @note Will assert the given target is a proc target. 86 */ 87 int getCfam(pdbg_target* i_trgt, uint32_t i_addr, uint32_t& o_val); 88 89 /** 90 * @brief Returns the list of all active chips in the system. 91 * @param o_chips The returned list of chips. 92 */ 93 void getActiveChips(std::vector<libhei::Chip>& o_chips); 94 95 /** 96 * @return The primary processor (i.e. the processor connected to the BMC). 97 */ 98 pdbg_target* getPrimaryProcessor(); 99 100 /** 101 * @return True, if hardware analysis is supported on this system. False, 102 * otherwise. 103 * @note Support for hardware analysis from the BMC started with P10 systems 104 * and is not supported on any older chip generations. 105 */ 106 bool queryHardwareAnalysisSupported(); 107 108 /** 109 * @return A string containing the FRU location code of the given chip. An empty 110 * string indicates the target was null or the attribute does not exist 111 * for this target. 112 * @note This function requires PHAL APIs that are only available in certain 113 * environments. If they do not exist the devtree path of the target is 114 * returned. 115 */ 116 std::string getLocationCode(pdbg_target* trgt); 117 118 /** 119 * @return A string containing the physical device path (entity path) of the 120 * given chip. An empty string indicates the target was null or the 121 * attribute does not exist for this target. 122 * @note This function requires PHAL APIs that are only available in certain 123 * environments. If they do not exist the devtree path of the target is 124 * returned. 125 */ 126 std::string getPhysDevPath(pdbg_target* trgt); 127 128 /** 129 * @return A vector of bytes representing the numerical values of the physical 130 * device path (entity path) of the given target. An empty vector 131 * indicates the target was null or the attribute does not exist for 132 * this target or any parent targets along the device tree path. 133 * @note This function requires PHAL APIs that are only available in certain 134 * environments. If they do not exist, an empty vector is returned. 135 */ 136 std::vector<uint8_t> getPhysBinPath(pdbg_target* trgt); 137 138 } // namespace pdbg 139 140 } // namespace util 141