xref: /openbmc/openpower-hw-diags/util/pdbg.hpp (revision 236bb730)
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_OCMB = 0x4b,
26 };
27 
28 /** @return The target associated with the given chip. */
29 pdbg_target* getTrgt(const libhei::Chip& i_chip);
30 
31 /** @return The target associated with the given devtree path. */
32 pdbg_target* getTrgt(const std::string& i_path);
33 
34 /** @return A string representing the given target's devtree path. */
35 const char* getPath(pdbg_target* i_trgt);
36 
37 /** @return A string representing the given chip's devtree path. */
38 const char* getPath(const libhei::Chip& i_chip);
39 
40 /** @return The absolute position of the given target. */
41 uint32_t getChipPos(pdbg_target* i_trgt);
42 
43 /** @return The absolute position of the given chip. */
44 uint32_t getChipPos(const libhei::Chip& i_chip);
45 
46 /** @return The target type of the given target. */
47 uint8_t getTrgtType(pdbg_target* i_trgt);
48 
49 /** @return The target type of the given chip. */
50 uint8_t getTrgtType(const libhei::Chip& i_chip);
51 
52 /**
53  * @return The pib target associated with the given proc target.
54  * @note   Will assert the given target is a proc target.
55  * @note   Will assert the returned pib target it not nullptr.
56  */
57 pdbg_target* getPibTrgt(pdbg_target* i_procTrgt);
58 
59 /**
60  * @return The fsi target associated with the given proc target.
61  * @note   Will assert the given target is a proc target.
62  * @note   Will assert the returned fsi target it not nullptr.
63  */
64 pdbg_target* getFsiTrgt(pdbg_target* i_procTrgt);
65 
66 /**
67  * @brief  Reads a CFAM FSI register.
68  * @param  i_trgt Given target.
69  * @param  i_addr Given address.
70  * @param  o_val  The returned value of the register.
71  * @return 0 if successful, non-0 otherwise.
72  * @note   Will assert the given target is a proc target.
73  */
74 int getCfam(pdbg_target* i_trgt, uint32_t i_addr, uint32_t& o_val);
75 
76 /**
77  * @brief Returns the list of all active chips in the system.
78  * @param o_chips The returned list of chips.
79  */
80 void getActiveChips(std::vector<libhei::Chip>& o_chips);
81 
82 /**
83  * @return True, if hardware analysis is supported on this system. False,
84  *         otherwise.
85  * @note   Support for hardware analysis from the BMC started with P10 systems
86  *         and is not supported on any older chip generations.
87  */
88 bool queryHardwareAnalysisSupported();
89 
90 /**
91  * @return A string containing the FRU location code of the given chip. An empty
92  *         string indicates the target was null or the attribute does not exist
93  *         for this target.
94  * @note   This function requires PHAL APIs that are only available in certain
95  *         environments. If they do not exist the devtree path of the target is
96  *         returned.
97  */
98 std::string getLocationCode(pdbg_target* trgt);
99 
100 /**
101  * @return A string containing the physical device path (entity path) of the
102  *         given chip. An empty string indicates the target was null or the
103  *         attribute does not exist for this target.
104  * @note   This function requires PHAL APIs that are only available in certain
105  *         environments. If they do not exist the devtree path of the target is
106  *         returned.
107  */
108 std::string getPhysDevPath(pdbg_target* trgt);
109 
110 } // namespace pdbg
111 
112 } // namespace util
113