diff --git a/config.h.in b/config.h.in
new file mode 100644
index 0000000..078fe81
--- /dev/null
+++ b/config.h.in
@@ -0,0 +1,18 @@
+#pragma once
+
+// clang-format off
+
+// IMPORTANT:
+//   Use constexpr and avoid #define whenever possible. This has the benefit of
+//   compiling as much code as possible, regardless if it is actually used. Thus
+//   ensuring each code path remains buildable. Note that the optimization path
+//   should delete the unused code later.
+
+constexpr const int configPhalApi = @CONFIG_PHAL_API@;
+
+// IMPORTANT:
+//   Avoid using #define whenever possible. See note above for reason.
+
+#mesondefine CONFIG_PHAL_API
+
+// clang-format on
diff --git a/meson.build b/meson.build
index 0bde487..1928783 100644
--- a/meson.build
+++ b/meson.build
@@ -14,6 +14,16 @@
 cmplr = meson.get_compiler('cpp')
 
 #-------------------------------------------------------------------------------
+# Config file
+#-------------------------------------------------------------------------------
+
+conf = configuration_data()
+
+conf.set('CONFIG_PHAL_API', get_option('phal').enabled())
+
+configure_file(input: 'config.h.in', output: 'config.h', configuration: conf)
+
+#-------------------------------------------------------------------------------
 # Include directories
 #-------------------------------------------------------------------------------
 
diff --git a/meson_options.txt b/meson_options.txt
index b1c8b8f..635fb07 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -1,2 +1,7 @@
 option('tests', type: 'feature', description: 'Build tests')
 option('nlmode', type: 'feature', description: 'no run-time control')
+
+option('phal', type: 'feature', value : 'disabled',
+        description : '''Enable PHAL APIs for retrieving data from the POWER
+                         Systems device tree''')
+
diff --git a/util/meson.build b/util/meson.build
index 1258b1f..e4f94c0 100644
--- a/util/meson.build
+++ b/util/meson.build
@@ -11,6 +11,10 @@
     libpdbg_dep,
 ]
 
+if get_option('phal').enabled()
+    util_deps += dependency('libdt-api')
+endif
+
 # Create static library.
 util_lib = static_library(
     'util_lib',
diff --git a/util/pdbg.cpp b/util/pdbg.cpp
index 605df77..03c8037 100644
--- a/util/pdbg.cpp
+++ b/util/pdbg.cpp
@@ -4,6 +4,10 @@
 #include <util/pdbg.hpp>
 #include <util/trace.hpp>
 
+#ifdef CONFIG_PHAL_API
+#include <attribute_info.H>
+#endif
+
 namespace util
 {
 
@@ -226,6 +230,64 @@
 
 //------------------------------------------------------------------------------
 
+std::string getLocationCode(pdbg_target* trgt)
+{
+    if (nullptr == trgt)
+    {
+        // Either the path is wrong or the attribute doesn't exist.
+        return std::string{};
+    }
+
+#ifdef CONFIG_PHAL_API
+
+    ATTR_LOCATION_CODE_Type val;
+    if (DT_GET_PROP(ATTR_LOCATION_CODE, trgt, val))
+    {
+        // Get the immediate parent in the devtree path and try again.
+        return getLocationCode(pdbg_target_parent(nullptr, trgt));
+    }
+
+    // Attribute found.
+    return std::string{val};
+
+#else
+
+    return std::string{getPath(trgt)};
+
+#endif
+}
+
+//------------------------------------------------------------------------------
+
+std::string getPhysDevPath(pdbg_target* trgt)
+{
+    if (nullptr == trgt)
+    {
+        // Either the path is wrong or the attribute doesn't exist.
+        return std::string{};
+    }
+
+#ifdef CONFIG_PHAL_API
+
+    ATTR_PHYS_DEV_PATH_Type val;
+    if (DT_GET_PROP(ATTR_PHYS_DEV_PATH, trgt, val))
+    {
+        // Get the immediate parent in the devtree path and try again.
+        return getPhysDevPath(pdbg_target_parent(nullptr, trgt));
+    }
+
+    // Attribute found.
+    return std::string{val};
+
+#else
+
+    return std::string{getPath(trgt)};
+
+#endif
+}
+
+//------------------------------------------------------------------------------
+
 } // namespace pdbg
 
 } // namespace util
diff --git a/util/pdbg.hpp b/util/pdbg.hpp
index 5d6314d..9ad6d07 100644
--- a/util/pdbg.hpp
+++ b/util/pdbg.hpp
@@ -2,6 +2,7 @@
 
 #include <libpdbg.h>
 
+#include <string>
 #include <vector>
 
 // Forward reference to avoid pulling the libhei library into everything that
@@ -83,6 +84,26 @@
  */
 bool queryHardwareAnalysisSupported();
 
+/**
+ * @return A string containing the FRU location code of the given chip. An empty
+ *         string indicates the target was null or the attribute does not exist
+ *         for this target.
+ * @note   This function requires PHAL APIs that are only available in certain
+ *         environments. If they do not exist the devtree path of the target is
+ *         returned.
+ */
+std::string getLocationCode(pdbg_target* trgt);
+
+/**
+ * @return A string containing the physical device path (entity path) of the
+ *         given chip. An empty string indicates the target was null or the
+ *         attribute does not exist for this target.
+ * @note   This function requires PHAL APIs that are only available in certain
+ *         environments. If they do not exist the devtree path of the target is
+ *         returned.
+ */
+std::string getPhysDevPath(pdbg_target* trgt);
+
 } // namespace pdbg
 
 } // namespace util
