-
Notifications
You must be signed in to change notification settings - Fork 97
/
p9_io_erepairAccessorHwpFuncs.H
executable file
·276 lines (261 loc) · 12.6 KB
/
p9_io_erepairAccessorHwpFuncs.H
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
/* IBM_PROLOG_BEGIN_TAG */
/* This is an automatically generated prolog. */
/* */
/* $Source: src/import/chips/p9/procedures/hwp/io/p9_io_erepairAccessorHwpFuncs.H $ */
/* */
/* OpenPOWER HostBoot Project */
/* */
/* Contributors Listed Below - COPYRIGHT 2015,2017 */
/* [+] International Business Machines Corp. */
/* */
/* */
/* Licensed under the Apache License, Version 2.0 (the "License"); */
/* you may not use this file except in compliance with the License. */
/* You may obtain a copy of the License at */
/* */
/* http://www.apache.org/licenses/LICENSE-2.0 */
/* */
/* Unless required by applicable law or agreed to in writing, software */
/* distributed under the License is distributed on an "AS IS" BASIS, */
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */
/* implied. See the License for the specific language governing */
/* permissions and limitations under the License. */
/* */
/* IBM_PROLOG_END_TAG */
///
/// @file p9_io_erepairAccessorHwpFuncs.H
/// @brief FW Team utility functions that access fabric and memory eRepair data.
///
//----------------------------------------------------------------------------
#ifndef P9_IO_EREPAIRACCESSORHWPFUNCS_H_
#define P9_IO_EREPAIRACCESSORHWPFUNCS_H_
#include <fapi2.H>
#include <algorithm>
const uint8_t EREPAIR_MAX_CENTAUR_PER_MCS = 1;
typedef fapi2::ReturnCode (*getLanes_t)(
const fapi2::Target < fapi2::TARGET_TYPE_XBUS |
fapi2::TARGET_TYPE_OBUS |
fapi2::TARGET_TYPE_MEMBUF_CHIP |
fapi2::TARGET_TYPE_MCS_CHIPLET |
fapi2::TARGET_TYPE_MCS > &i_tgtHandle,
const uint8_t i_clkGroup,
std::vector<uint8_t>& o_txFailLanes,
std::vector<uint8_t>& o_rxFailLanes);
typedef fapi2::ReturnCode (*setLanes_t)(
const fapi2::Target < fapi2::TARGET_TYPE_XBUS |
fapi2::TARGET_TYPE_OBUS |
fapi2::TARGET_TYPE_MEMBUF_CHIP |
fapi2::TARGET_TYPE_MCS_CHIPLET |
fapi2::TARGET_TYPE_MCS > &i_tgtHandle,
const uint8_t i_clkGroup,
const std::vector<uint8_t>& i_txFailLanes,
const std::vector<uint8_t>& i_rxFailLanes);
/**
* @brief FW Team Utility function that gets eRepair data from the VPD
* This function gets the eRepair data from both the Field VPD
* and the Manufacturing VPD.
*
* @param[in] i_endp_target Reference to X-Bus or O-Bus or MCS or memBuf Target
* @param[in] i_clkGroup Specifies clock group 0:[XOA, X1A,..] 1:[X0B, X1B,..]
* @param[out] o_txFailLanes Reference to a Vector that will contain the fail
* lanes read from the VPD for Drive side
* @param[out] o_rxFailLanes Reference to a Vector that will contain the fail
* lanes read from the VPD for Receive side
* @return ReturnCode
*
*/
fapi2::ReturnCode erepairGetFailedLanes(
const fapi2::Target < fapi2::TARGET_TYPE_XBUS |
fapi2::TARGET_TYPE_OBUS |
fapi2::TARGET_TYPE_MEMBUF_CHIP |
fapi2::TARGET_TYPE_MCS_CHIPLET |
fapi2::TARGET_TYPE_MCS > &i_endp_target,
const uint8_t i_clkGroup,
std::vector<uint8_t>& o_txFailLanes,
std::vector<uint8_t>& o_rxFailLanes);
/**
* @brief FW Team Utility function that gets eRepair data
*
* This is a wrapper function for the Accessor HWP which reads failed lane
* numbers from the Field VPD
*
* @param[in] i_endp_target Reference to X-Bus or O-Bus or MCS or memBuf Target
* @param[in] i_clkGroup Specifies clock group 0:[XOA, X1A,..] 1:[X0B, X1B,..]
* @param[out] o_txFailLanes Reference to a Vector that will contain the fail
* lanes read from the Field VPD for Drive side
* @param[out] o_rxFailLanes Reference to a Vector that will contain the fail
* lanes read from the Field VPD for Receive side
* @return ReturnCode
*
*/
fapi2::ReturnCode erepairGetFieldFailedLanes(
const fapi2::Target < fapi2::TARGET_TYPE_XBUS |
fapi2::TARGET_TYPE_OBUS |
fapi2::TARGET_TYPE_MEMBUF_CHIP |
fapi2::TARGET_TYPE_MCS_CHIPLET |
fapi2::TARGET_TYPE_MCS > &i_endp_target,
const uint8_t i_clkGroup,
std::vector<uint8_t>& o_txFailLanes,
std::vector<uint8_t>& o_rxFailLanes);
/**
* @brief FW Team Utility function that gets eRepair data
*
* This is a wrapper function for the Accessor HWP which reads failed lane
* numbers from the Manufacturing VPD
*
* @param[in] i_endp_target Reference to X-Bus or O-Bus or MCS or memBuf Target
* @param[in] i_clkGroup Specifies clock group 0:[XOA, X1A,..] 1:[X0B, X1B,..]
* @param[out] o_txFailLanes Reference to a Vector that will contain the fail
* lanes read from the Mnfg VPD for Drive side
* @param[out] o_rxFailLanes Reference to a Vector that will contain the fail
* lanes read from the Mnfg VPD for Receive side
* @return ReturnCode
*
*/
fapi2::ReturnCode erepairGetMnfgFailedLanes(
const fapi2::Target < fapi2::TARGET_TYPE_XBUS |
fapi2::TARGET_TYPE_OBUS |
fapi2::TARGET_TYPE_MEMBUF_CHIP |
fapi2::TARGET_TYPE_MCS_CHIPLET |
fapi2::TARGET_TYPE_MCS > &i_endp_target,
const uint8_t i_clkGroup,
std::vector<uint8_t>& o_txFailLanes,
std::vector<uint8_t>& o_rxFailLanes);
/**
* @brief FW Team Utility function that sets eRepair data in the VPD.
* This functions sets the eRepair data to either the Field VPD
* or the Manufacturing VPD depending on whether the IPL was done
* in normal mode or Manufacturing mode.
* It writes eRepair data to the VPD of both the endpoint targets
* passed as arguments.
*
* @param[in] i_txEndp_target Reference to X-Bus or O-Bus or MCS or memBuf
* Target. This is the peer target of
* i_rxEndp_target
* @param[in] i_rxEndp_target Reference to X-Bus or O-Bus or MCS or memBuf
* Target. This is the target on which the
* badlanes were found
* @param[in] i_rxFailLanes Vector that will contain the fail lanes
* to be written to VPD for Receive side
* @param[in] i_clkGroup Specifies clock group 0:[XOA, X1A,..] 1:[X0B, X1B,..]
* @param[out] o_thresholdExceed If TRUE, indicates that the eRepair threshold
* has exceeded, FALSE otherwise.
*
* @return ReturnCode
*/
fapi2::ReturnCode erepairSetFailedLanes(
const fapi2::Target < fapi2::TARGET_TYPE_XBUS |
fapi2::TARGET_TYPE_OBUS |
fapi2::TARGET_TYPE_MEMBUF_CHIP |
fapi2::TARGET_TYPE_MCS_CHIPLET |
fapi2::TARGET_TYPE_MCS > &i_txEndp_target,
const fapi2::Target < fapi2::TARGET_TYPE_XBUS |
fapi2::TARGET_TYPE_OBUS |
fapi2::TARGET_TYPE_MEMBUF_CHIP |
fapi2::TARGET_TYPE_MCS_CHIPLET |
fapi2::TARGET_TYPE_MCS > &i_rxEndp_target,
const std::vector<uint8_t>& i_rxFailLanes,
const uint8_t i_clkGroup,
bool& o_thresholdExceed);
/**
* @brief FW Team Utility function that sets eRepair data in Field VPD
*
* This is a wrapper function for the Accessor HWP which writes failed lane
* numbers to the Field VPD
*
* @param[in] i_endp_target Reference to X-Bus or O-Bus or MCS or memBuf Target
* @param[in] i_clkGroup Specifies clock group 0:[XOA, X1A,..] 1:[X0B, X1B,..]
* @param[in] i_txFailLanes Vector that will contain the fail lane
* to be written to Field VPD for Drive side
* @param[in] i_rxFailLanes Vector that will contain the fail lanes
* to be written to Field VPD for Receive side
*
* @return ReturnCode
*/
fapi2::ReturnCode erepairSetFieldFailedLanes(
const fapi2::Target < fapi2::TARGET_TYPE_XBUS |
fapi2::TARGET_TYPE_OBUS |
fapi2::TARGET_TYPE_MEMBUF_CHIP |
fapi2::TARGET_TYPE_MCS_CHIPLET |
fapi2::TARGET_TYPE_MCS > &i_endp_target,
const uint8_t i_clkGroup,
const std::vector<uint8_t>& i_txFailLanes,
const std::vector<uint8_t>& i_rxFailLanes);
/**
* @brief FW Team Utility function that sets eRepair data in Manufacturing VPD
*
* This is a wrapper function for the Accessor HWP which writes failed lane
* numbers to the Manufacturing VPD
*
* @param[in] i_endp_target Reference to X-Bus or O-Bus or MCS or memBuf Target
* @param[in] i_clkGroup Specifies clock group 0:[XOA, X1A,..] 1:[X0B, X1B,..]
* @param[in] i_txFailLanes Vector that will contain the fail lane
* to be written to Mnfg VPD for Drive side
* @param[in] i_rxFailLanes Vector that will contain the fail lanes
* to be written to Mnfg VPD for Receive side
*
* @return ReturnCode
*/
fapi2::ReturnCode erepairSetMnfgFailedLanes(
const fapi2::Target < fapi2::TARGET_TYPE_XBUS |
fapi2::TARGET_TYPE_OBUS |
fapi2::TARGET_TYPE_MEMBUF_CHIP |
fapi2::TARGET_TYPE_MCS_CHIPLET |
fapi2::TARGET_TYPE_MCS > &i_endp_target,
const uint8_t i_clkGroup,
const std::vector<uint8_t>& i_txFailLanes,
const std::vector<uint8_t>& i_rxFailLanes);
/**
* @brief Function which retrieves the lanes that need to be restored for the
* given end point targets
*
* This function is called by the iStep dispatcher during the Restore Repair
* iStep for Fabric buses and DMI buses. The caller need to make sure that the
* first and fourth arguments are the endpoint targets of a Fabric bus or
* DMI bus.
* It calls the wrapper functions of Accessor HWP to read the fail lane data
* recorded in the VPD on both the ends and verifies that there are matching
* records on both the ends. If matching fail lanes are not found, the
* corresponding fail lane data is invalidated using the wrapper Accessor HWP
* that writes data to the VPD.
*
* @param [in] i_endp1_target Reference to X-Bus or O-Bus or MCS Target
* @param [in] i_endp2_target Reference to X-Bus or O-Bus or MCS Target
* @param[in] i_clkGroup Specifies clock group 0:[XOA, X1A,..] 1:[X0B, X1B,..]
* @param [out] o_endp1_txFaillanes Reference to vector that will have the
* fail lane numbers that need to be restored
* for the Tx side of the target passed
* as first param
* @param [out] o_endp1_rxFaillanes Reference to vector that will have the
* fail lane numbers that need to be restored
* for the Rx side of the target passed
* as first param
* @param [out] o_endp2_txFaillanes Reference to vector that will have the
* fail lane numbers that need to be restored
* for the Tx side of the target passed
* as fourth param
* @param [out] o_endp2_rxFaillanes Reference to vector that will have the
* fail lane numbers that need to be restored
* for the Rx side of the target passed
* as fourth param
*
* @return ReturnCode
*
*/
fapi2::ReturnCode erepairGetRestoreLanes(
const fapi2::Target < fapi2::TARGET_TYPE_XBUS |
fapi2::TARGET_TYPE_OBUS |
fapi2::TARGET_TYPE_MEMBUF_CHIP |
fapi2::TARGET_TYPE_MCS_CHIPLET |
fapi2::TARGET_TYPE_MCS > &i_endp1_target,
const fapi2::Target < fapi2::TARGET_TYPE_XBUS |
fapi2::TARGET_TYPE_OBUS |
fapi2::TARGET_TYPE_MEMBUF_CHIP |
fapi2::TARGET_TYPE_MCS_CHIPLET |
fapi2::TARGET_TYPE_MCS > &i_endp2_target,
const uint8_t i_clkGroup,
std::vector<uint8_t>& o_endp1_txFaillanes,
std::vector<uint8_t>& o_endp1_rxFaillanes,
std::vector<uint8_t>& o_endp2_txFaillanes,
std::vector<uint8_t>& o_endp2_rxFaillanes);
#endif