Add pdbg test cases to use test device tree file.
Signed-off-by: austinfcui <austinfcui@gmail.com>
Change-Id: I9a82bb954e0a329691579a10fdf7e71c229d1e73
diff --git a/test/meson.build b/test/meson.build
index b34dda2..662274d 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -38,6 +38,7 @@
'bin_stream_test',
'ffdc_file_test',
'resolution_test',
+ 'pdbg_dts_test',
'test-lpc-timeout',
'test-pll-unlock',
]
diff --git a/test/pdbg_dts_test.cpp b/test/pdbg_dts_test.cpp
new file mode 100644
index 0000000..19ffc28
--- /dev/null
+++ b/test/pdbg_dts_test.cpp
@@ -0,0 +1,108 @@
+#include <fcntl.h>
+
+#include <util/pdbg.hpp>
+#include <util/trace.hpp>
+
+#include <limits>
+
+#include "gtest/gtest.h"
+
+TEST(PDBG, PdbgDtsTest1)
+{
+ const char* perv1_fapi_pos_path = "/proc0/pib/perv1";
+ const char* perv12_fapi_pos_path = "/proc0/pib/perv12";
+ const uint32_t perv1_fapi_pos = 1;
+ const uint32_t perv12_fapi_pos = 12;
+
+ pdbg_targets_init(nullptr);
+
+ trace::inf("retrieving fapi pos.");
+ uint32_t attr = std::numeric_limits<uint32_t>::max();
+ pdbg_target* trgt = pdbg_target_from_path(nullptr, perv1_fapi_pos_path);
+ pdbg_target_get_attribute(trgt, "ATTR_FAPI_POS", 4, 1, &attr);
+ trace::inf("perv1 fapi pos in DTS: %u", attr);
+ EXPECT_EQ(attr, perv1_fapi_pos);
+
+ attr = std::numeric_limits<uint32_t>::max();
+ trgt = pdbg_target_from_path(nullptr, perv12_fapi_pos_path);
+ pdbg_target_get_attribute(trgt, "ATTR_FAPI_POS", 4, 1, &attr);
+ trace::inf("perv12 fapi pos in DTS: %u", attr);
+ EXPECT_EQ(attr, perv12_fapi_pos);
+}
+
+TEST(PDBG, PdbgDtsTest2)
+{
+ const char* dimm0_path =
+ "/proc0/pib/perv12/mc0/mi0/mcc0/omi0/ocmb0/mem_port0/dimm0";
+ const uint32_t index = 0;
+ const uint32_t fapi_pos = 0;
+
+ pdbg_targets_init(nullptr);
+
+ trace::inf("retrieving fapi pos.");
+ uint32_t attr = std::numeric_limits<uint32_t>::max();
+ pdbg_target* trgt = pdbg_target_from_path(nullptr, dimm0_path);
+ pdbg_target_get_attribute(trgt, "index", 4, 1, &attr);
+ trace::inf("index in DTS: %u", attr);
+ EXPECT_EQ(attr, index);
+
+ attr = std::numeric_limits<uint32_t>::max();
+ pdbg_target_get_attribute(trgt, "ATTR_FAPI_POS", 4, 1, &attr);
+ trace::inf("fapi pos in DTS: %u", attr);
+ EXPECT_EQ(attr, fapi_pos);
+}
+
+TEST(PDBG, PdbgDtsTest3)
+{
+ const uint32_t chipId = 0; // ID for proc0.
+ const uint32_t fapiPos = 0; // FAPI Position for proc0.
+
+ pdbg_targets_init(nullptr);
+
+ // Iterate each processor.
+ pdbg_target* procTrgt;
+ pdbg_for_each_class_target("/proc0", procTrgt)
+ {
+ // Active processors only.
+ if (PDBG_TARGET_ENABLED !=
+ pdbg_target_probe(util::pdbg::getPibTrgt(procTrgt)))
+ continue;
+
+ // Process the PROC target.
+ uint32_t attr = std::numeric_limits<uint32_t>::max();
+ pdbg_target_get_attribute(procTrgt, "ATTR_CHIP_ID", 4, 1, &attr);
+ trace::inf("Chip ID: %u", attr);
+ EXPECT_EQ(attr, chipId);
+
+ attr = std::numeric_limits<uint32_t>::max();
+ pdbg_target_get_attribute(procTrgt, "ATTR_FAPI_POS", 4, 1, &attr);
+ trace::inf("ATTR_FAPI_POS: %u", attr);
+ EXPECT_EQ(attr, fapiPos);
+ }
+}
+
+TEST(PDBG, PdbgDtsTest4)
+{
+ const uint32_t index = 1;
+ const uint32_t fapi_pos = 1;
+ const char* perv1_path = "/proc0/pib/perv1";
+
+ pdbg_targets_init(nullptr);
+
+ // Iterate each processor.
+ pdbg_target* trgt;
+ uint32_t attr;
+
+ pdbg_for_each_class_target(perv1_path, trgt)
+ {
+ attr = std::numeric_limits<uint32_t>::max();
+ pdbg_target_get_attribute(trgt, "index", 4, 1, &attr);
+ trace::inf("index in DTS: %u", attr);
+ EXPECT_EQ(attr, index);
+
+ attr = std::numeric_limits<uint32_t>::max();
+ pdbg_target_get_attribute(trgt, "ATTR_FAPI_POS", 4, 1, &attr);
+ trace::inf("fapi pos in DTS: %u", attr);
+ EXPECT_EQ(attr, fapi_pos);
+ }
+}