blob: c09bf903872c8863644f9041406f2d8735cf9e84 [file] [log] [blame]
Zane Shelley2c228cd2021-12-16 23:45:12 -06001#include <stdio.h>
2
3#include <analyzer/plugins/plugin.hpp>
4#include <hei_util.hpp>
5#include <util/pdbg.hpp>
6#include <util/trace.hpp>
7
8#include "gtest/gtest.h"
9
10using namespace analyzer;
11
12static const auto nodeId =
13 static_cast<libhei::NodeId_t>(libhei::hash<libhei::NodeId_t>("PLL_UNLOCK"));
14
15// Sub-test #1 - single PLL unlock attention on proc 1, clock 1
16TEST(PllUnlock, TestSet1)
17{
18 pdbg_targets_init(nullptr);
19
20 libhei::Chip chip1{util::pdbg::getTrgt("/proc1"), P10_20};
21
22 libhei::Signature sig11{chip1, nodeId, 0, 1, libhei::ATTN_TYPE_CHECKSTOP};
23
24 auto plugin = PluginMap::getSingleton().get(chip1.getType(), "pll_unlock");
25
26 libhei::IsolationData isoData{};
27 isoData.addSignature(sig11);
28 ServiceData sd{sig11, AnalysisType::SYSTEM_CHECKSTOP, isoData};
29
30 // Call the PLL unlock plugin.
31 plugin(1, chip1, sd);
32
33 nlohmann::json j{};
34 std::string s{};
35
36 // Callout list
37 j = sd.getCalloutList();
38 s = R"([
39 {
40 "Deconfigured": false,
41 "Guarded": false,
42 "LocationCode": "P0",
43 "Priority": "M"
44 },
45 {
46 "Deconfigured": false,
47 "Guarded": false,
48 "LocationCode": "/proc1",
49 "Priority": "M"
50 }
51])";
52 EXPECT_EQ(s, j.dump(4));
53
54 // Callout FFDC
55 j = sd.getCalloutFFDC();
56 s = R"([
57 {
58 "Callout Type": "Clock Callout",
59 "Clock Type": "OSC_REF_CLOCK_1",
60 "Priority": "medium"
61 },
62 {
63 "Callout Type": "Hardware Callout",
64 "Guard": false,
65 "Priority": "medium",
66 "Target": "/proc1"
67 }
68])";
69 EXPECT_EQ(s, j.dump(4));
70}
71
72// Sub-test #2 - PLL unlock attention on multiple procs and clocks. Isolating
73// only to proc 1 clock 0 PLL unlock attentions.
74TEST(PllUnlock, TestSet2)
75{
76 pdbg_targets_init(nullptr);
77
78 libhei::Chip chip0{util::pdbg::getTrgt("/proc0"), P10_20};
79 libhei::Chip chip1{util::pdbg::getTrgt("/proc1"), P10_20};
80
81 // PLL unlock signatures for each clock per processor.
82 libhei::Signature sig00{chip0, nodeId, 0, 0, libhei::ATTN_TYPE_CHECKSTOP};
83 libhei::Signature sig01{chip0, nodeId, 0, 1, libhei::ATTN_TYPE_CHECKSTOP};
84 libhei::Signature sig10{chip1, nodeId, 0, 0, libhei::ATTN_TYPE_CHECKSTOP};
85 libhei::Signature sig11{chip1, nodeId, 0, 1, libhei::ATTN_TYPE_CHECKSTOP};
86
87 // Plugins for each processor.
88 auto plugin = PluginMap::getSingleton().get(chip1.getType(), "pll_unlock");
89
90 libhei::IsolationData isoData{};
91 isoData.addSignature(sig00);
92 isoData.addSignature(sig01);
93 isoData.addSignature(sig10);
94 isoData.addSignature(sig11);
95 ServiceData sd{sig10, AnalysisType::SYSTEM_CHECKSTOP, isoData};
96
97 // Call the PLL unlock plugin.
98 plugin(0, chip1, sd);
99
100 nlohmann::json j{};
101 std::string s{};
102
103 // Callout list
104 j = sd.getCalloutList();
105 s = R"([
106 {
107 "Deconfigured": false,
108 "Guarded": false,
109 "LocationCode": "P0",
110 "Priority": "H"
111 },
112 {
113 "Deconfigured": false,
114 "Guarded": false,
115 "LocationCode": "/proc0",
116 "Priority": "M"
117 },
118 {
119 "Deconfigured": false,
120 "Guarded": false,
121 "LocationCode": "/proc1",
122 "Priority": "M"
123 }
124])";
125 EXPECT_EQ(s, j.dump(4));
126
127 // Callout FFDC
128 j = sd.getCalloutFFDC();
129 s = R"([
130 {
131 "Callout Type": "Clock Callout",
132 "Clock Type": "OSC_REF_CLOCK_0",
133 "Priority": "high"
134 },
135 {
136 "Callout Type": "Hardware Callout",
137 "Guard": false,
138 "Priority": "medium",
139 "Target": "/proc0"
140 },
141 {
142 "Callout Type": "Hardware Callout",
143 "Guard": false,
144 "Priority": "medium",
145 "Target": "/proc1"
146 }
147])";
148 EXPECT_EQ(s, j.dump(4));
149}