xref: /openbmc/openpower-hw-diags/util/pdbg.hpp (revision 135793a8)
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