43
43
#include <p9_fbc_ioo_tl_scom.H>
44
44
#include <p9_fbc_ioo_dl_scom.H>
45
45
#include <p9n_mcs_scom.H>
46
+
47
+ //TODO: RTC 176054
48
+ #ifndef __HOSTBOOT_MODULE
49
+ #include <p9c_dmi_scom.H>
50
+ #include <p9c_mi_scom.H>
51
+ #include <p9c_mc_scom.H>
52
+ #endif
53
+
46
54
#include <p9_cxa_scom.H>
47
55
#include <p9_nx_scom.H>
48
56
#include <p9_int_scom.H>
@@ -93,6 +101,14 @@ fapi2::ReturnCode p9_chiplet_scominit(const fapi2::Target<fapi2::TARGET_TYPE_PRO
93
101
fapi2 ::Target < fapi2 ::TARGET_TYPE_SYSTEM > FAPI_SYSTEM ;
94
102
std ::vector < fapi2 ::Target < fapi2 ::TARGET_TYPE_OBUS >> l_obus_chiplets ;
95
103
std ::vector < fapi2 ::Target < fapi2 ::TARGET_TYPE_MCS >> l_mcs_targets ;
104
+ std ::vector < fapi2 ::Target < fapi2 ::TARGET_TYPE_MI >> l_mi_targets ;
105
+
106
+ //TODO: RTC 176054
107
+ #ifndef __HOSTBOOT_MODULE
108
+ std ::vector < fapi2 ::Target < fapi2 ::TARGET_TYPE_MC >> l_mc_targets ;
109
+ #endif
110
+
111
+ std ::vector < fapi2 ::Target < fapi2 ::TARGET_TYPE_DMI >> l_dmi_targets ;
96
112
std ::vector < fapi2 ::Target < fapi2 ::TARGET_TYPE_CAPP >> l_capp_targets ;
97
113
std ::vector < fapi2 ::Target < fapi2 ::TARGET_TYPE_OBUS_BRICK >> l_obrick_targets ;
98
114
fapi2 ::buffer < uint64_t > l_ob0data (0x0 );
@@ -110,95 +126,177 @@ fapi2::ReturnCode p9_chiplet_scominit(const fapi2::Target<fapi2::TARGET_TYPE_PRO
110
126
// Get proc target string
111
127
fapi2 ::toString (i_target , l_procTargetStr , sizeof (l_procTargetStr ));
112
128
129
+ // invoke IOO (OBUS FBC IO) SCOM initfiles
130
+ l_obus_chiplets = i_target .getChildren < fapi2 ::TARGET_TYPE_OBUS > ();
113
131
114
- if (! l_no_ndl_iovalid )
132
+ for (auto l_obus_target : l_obus_chiplets )
115
133
{
134
+ uint8_t l_unit_pos ;
135
+ uint8_t l_obus_mode ;
136
+ FAPI_TRY (FAPI_ATTR_GET (fapi2 ::ATTR_CHIP_UNIT_POS , l_obus_target , l_unit_pos ),
137
+ "Error from FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS)" );
138
+ FAPI_TRY (FAPI_ATTR_GET (fapi2 ::ATTR_OPTICS_CONFIG_MODE , l_obus_target , l_obus_mode ),
139
+ "Error from FAPI_ATTR_GET(ATTR_OPTICS_CONFIG_MODE)" );
140
+
141
+ //Update NDL IOValid data as needed
142
+ if (!l_no_ndl_iovalid && (l_unit_pos == 0 || l_unit_pos == 3 ) && //NDL only exists on obus 0 and 3
143
+ l_obus_mode == fapi2 ::ENUM_ATTR_OPTICS_CONFIG_MODE_NV )
144
+ {
116
145
117
- l_obrick_targets = i_target .getChildren < fapi2 ::TARGET_TYPE_OBUS_BRICK > ();
146
+ l_obrick_targets = l_obus_target .getChildren < fapi2 ::TARGET_TYPE_OBUS_BRICK > ();
118
147
119
- for (auto l_obrick_target : l_obrick_targets )
120
- {
121
- fapi2 ::toString (l_obrick_target , l_chipletTargetStr , sizeof (l_chipletTargetStr ));
122
- FAPI_DBG ("Setting NDL IOValid for %s..." , l_chipletTargetStr );
123
-
124
- uint8_t l_unit_pos ;
125
- FAPI_TRY (FAPI_ATTR_GET (fapi2 ::ATTR_CHIP_UNIT_POS , l_obrick_target , l_unit_pos ),
126
- "Error from FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS)" );
127
-
128
- //Mapping from John Irish (jdirish@us.ibm.com)
129
- //OBus Register bit NV instance NV pos
130
- //OB0 NV0 io_valid(A) STK0.NTL0.. 0
131
- //OB0 NV1 io_valid(B) STK0.NTL1.. 1
132
- //OB0 NV2 io_valid(C) STK1.NTL0.. 2
133
- //OB3 NV2 io_valid(C) STK1.NTL1.. 3
134
- //OB3 NV1 io_valid(B) STK2.NTL0.. 4
135
- //OB3 NV0 io_valid(A) STK2.NTL1.. 5
136
- switch (l_unit_pos )
148
+ for (auto l_obrick_target : l_obrick_targets )
137
149
{
138
- case OBRICK0_POS :
139
- l_ob0data .setBit < PERV_OB_CPLT_CONF1_OBRICKA_IOVALID > ( );
140
- break ;
150
+ fapi2 ::toString (l_obrick_target , l_chipletTargetStr , sizeof (l_chipletTargetStr ));
151
+ FAPI_DBG ("Setting NDL IOValid for %s..." , l_chipletTargetStr );
152
+
153
+ uint8_t l_unit_pos ;
154
+ FAPI_TRY (FAPI_ATTR_GET (fapi2 ::ATTR_CHIP_UNIT_POS , l_obrick_target , l_unit_pos ),
155
+ "Error from FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS)" );
156
+
157
+ //Mapping from John Irish (jdirish@us.ibm.com)
158
+ //OBus Register bit NV instance NV pos
159
+ //OB0 NV0 io_valid(A) STK0.NTL0.. 0
160
+ //OB0 NV1 io_valid(B) STK0.NTL1.. 1
161
+ //OB0 NV2 io_valid(C) STK1.NTL0.. 2
162
+ //OB3 NV2 io_valid(C) STK1.NTL1.. 3
163
+ //OB3 NV1 io_valid(B) STK2.NTL0.. 4
164
+ //OB3 NV0 io_valid(A) STK2.NTL1.. 5
165
+ switch (l_unit_pos )
166
+ {
167
+ case OBRICK0_POS :
168
+ l_ob0data .setBit < PERV_OB_CPLT_CONF1_OBRICKA_IOVALID > ( );
169
+ break ;
170
+
171
+ case OBRICK1_POS :
172
+ l_ob0data .setBit < PERV_OB_CPLT_CONF1_OBRICKB_IOVALID > ();
173
+ break ;
174
+
175
+ case OBRICK2_POS :
176
+ l_ob0data .setBit < PERV_OB_CPLT_CONF1_OBRICKC_IOVALID > ( );
177
+ break ;
178
+
179
+ //OBRICK3..8 associated with OBUS 1 & 2 do not have NDL
180
+
181
+ case OBRICK9_POS :
182
+ l_ob3data .setBit < PERV_OB_CPLT_CONF1_OBRICKC_IOVALID > ( );
183
+ break ;
184
+
185
+ case OBRICK10_POS :
186
+ l_ob3data .setBit < PERV_OB_CPLT_CONF1_OBRICKB_IOVALID > ( );
187
+ break ;
188
+
189
+ case OBRICK11_POS :
190
+ l_ob3data .setBit < PERV_OB_CPLT_CONF1_OBRICKA_IOVALID > ( );
191
+ break ;
192
+
193
+ default :
194
+ FAPI_ASSERT (false, fapi2 ::P9_CHIPLET_SCOMINIT_UNSUPPORTED_OBRICK_POS_ERR ().set_TARGET (l_obrick_target ),
195
+ "ERROR; Unsupported NV position." );
196
+
197
+ }
141
198
142
- case OBRICK1_POS :
143
- l_ob0data .setBit < PERV_OB_CPLT_CONF1_OBRICKB_IOVALID > ();
144
- break ;
199
+ }
145
200
146
- case OBRICK2_POS :
147
- l_ob0data .setBit < PERV_OB_CPLT_CONF1_OBRICKC_IOVALID > ( );
148
- break ;
201
+ }
149
202
150
- case OBRICK9_POS :
151
- l_ob3data .setBit < PERV_OB_CPLT_CONF1_OBRICKC_IOVALID > ( );
152
- break ;
203
+ }
153
204
154
- case OBRICK10_POS :
155
- l_ob3data .setBit < PERV_OB_CPLT_CONF1_OBRICKB_IOVALID > ( );
156
- break ;
205
+ //Write the NDL IOValid registers as needed.
206
+ if (l_ob0data != 0 )
207
+ {
208
+ FAPI_TRY (putScom (i_target , PERV_OB0_CPLT_CONF1_OR , l_ob0data ));
209
+ }
157
210
158
- case OBRICK11_POS :
159
- l_ob3data .setBit < PERV_OB_CPLT_CONF1_OBRICKA_IOVALID > ( );
160
- break ;
211
+ if (l_ob3data != 0 )
212
+ {
213
+ FAPI_TRY (putScom (i_target , PERV_OB3_CPLT_CONF1_OR , l_ob3data ));
214
+ }
161
215
162
- default :
163
- FAPI_ASSERT (false, fapi2 ::P9_CHIPLET_SCOMINIT_UNSUPPORTED_OBRICK_POS_ERR ().set_TARGET (l_obrick_target ),
164
- "ERROR; Unsupported NV position." );
165
216
166
- }
217
+ l_mcs_targets = i_target .getChildren < fapi2 ::TARGET_TYPE_MCS > ();
218
+ l_mi_targets = i_target .getChildren < fapi2 ::TARGET_TYPE_MI > ();
219
+ l_dmi_targets = i_target .getChildren < fapi2 ::TARGET_TYPE_DMI > ();
167
220
168
- }
221
+ //TODO: RTC 176054
222
+ #ifndef __HOSTBOOT_MODULE
223
+ l_mc_targets = i_target .getChildren < fapi2 ::TARGET_TYPE_MC > ();
224
+ #endif
169
225
170
- if (l_ob0data != 0 )
226
+ if (l_mcs_targets .size ())
227
+ {
228
+ for (auto l_mcs_target : l_mcs_targets )
171
229
{
172
- FAPI_TRY (putScom (i_target , PERV_OB0_CPLT_CONF1_OR , l_ob0data ));
173
- }
230
+ fapi2 ::toString (l_mcs_target , l_chipletTargetStr , sizeof (l_chipletTargetStr ));
231
+ FAPI_DBG ("Invoking p9n.mcs.scom.initfile on target %s..." , l_chipletTargetStr );
232
+ FAPI_EXEC_HWP (l_rc , p9n_mcs_scom , l_mcs_target , FAPI_SYSTEM , i_target ,
233
+ l_mcs_target .getParent < fapi2 ::TARGET_TYPE_MCBIST > ());
174
234
175
- if (l_ob3data != 0 )
176
- {
177
- FAPI_TRY (putScom (i_target , PERV_OB3_CPLT_CONF1_OR , l_ob3data ));
235
+ if (l_rc )
236
+ {
237
+ FAPI_ERR ("Error from p9.mcs.scom.initfile" );
238
+ fapi2 ::current_err = l_rc ;
239
+ goto fapi_try_exit ;
240
+ }
178
241
}
179
-
180
242
}
181
243
182
- l_mcs_targets = i_target .getChildren < fapi2 ::TARGET_TYPE_MCS > ();
244
+ //TODO: RTC 176054
245
+ #ifndef __HOSTBOOT_MODULE
183
246
184
- for (auto l_mcs_target : l_mcs_targets )
247
+ else if ( l_mc_targets . size () )
185
248
{
186
- fapi2 ::toString (l_mcs_target , l_chipletTargetStr , sizeof (l_chipletTargetStr ));
187
- FAPI_DBG ("Invoking p9.mcs.scom.initfile on target %s..." , l_chipletTargetStr );
188
- FAPI_EXEC_HWP (l_rc , p9n_mcs_scom , l_mcs_target , FAPI_SYSTEM , i_target ,
189
- l_mcs_target .getParent < fapi2 ::TARGET_TYPE_MCBIST > ());
249
+ for (auto l_mc_target : l_mc_targets )
250
+ {
251
+ fapi2 ::toString (l_mc_target , l_chipletTargetStr , sizeof (l_chipletTargetStr ));
252
+ FAPI_DBG ("Invoking p9c.mc.scom.initfile on target %s..." , l_chipletTargetStr );
253
+ FAPI_EXEC_HWP (l_rc , p9c_mc_scom , l_mc_target , FAPI_SYSTEM );
190
254
191
- if (l_rc )
255
+ if (l_rc )
256
+ {
257
+ FAPI_ERR ("Error from p9c.mc.scom.initfile" );
258
+ fapi2 ::current_err = l_rc ;
259
+ goto fapi_try_exit ;
260
+ }
261
+ }
262
+
263
+ for (auto l_mi_target : l_mi_targets )
192
264
{
193
- FAPI_ERR ("Error from p9.mcs.scom.initfile" );
194
- fapi2 ::current_err = l_rc ;
195
- goto fapi_try_exit ;
265
+ fapi2 ::toString (l_mi_target , l_chipletTargetStr , sizeof (l_chipletTargetStr ));
266
+ FAPI_DBG ("Invoking p9c.mi.scom.initfile on target %s..." , l_chipletTargetStr );
267
+ FAPI_EXEC_HWP (l_rc , p9c_mi_scom , l_mi_target , FAPI_SYSTEM );
268
+
269
+ if (l_rc )
270
+ {
271
+ FAPI_ERR ("Error from p9c.mi.scom.initfile" );
272
+ fapi2 ::current_err = l_rc ;
273
+ goto fapi_try_exit ;
274
+ }
196
275
}
197
276
277
+ for (auto l_dmi_target : l_dmi_targets )
278
+ {
279
+ fapi2 ::toString (l_dmi_target , l_chipletTargetStr , sizeof (l_chipletTargetStr ));
280
+ FAPI_DBG ("Invoking p9c.dmi.scom.initfile on target %s..." , l_chipletTargetStr );
281
+ FAPI_EXEC_HWP (l_rc , p9c_dmi_scom , l_dmi_target , FAPI_SYSTEM );
282
+
283
+ if (l_rc )
284
+ {
285
+ FAPI_ERR ("Error from p9c.dmi.scom.initfile" );
286
+ fapi2 ::current_err = l_rc ;
287
+ goto fapi_try_exit ;
288
+ }
289
+ }
290
+ }
291
+
292
+ //TODO: RTC 176054
293
+ #endif // __HOSTBOOT_MODULE
294
+
295
+ else
296
+ {
297
+ FAPI_INF ("No MCS/MI targets found! Do nothing!" );
198
298
}
199
299
200
- // invoke IOO (OBUS FBC IO) SCOM initfiles
201
- l_obus_chiplets = i_target .getChildren < fapi2 ::TARGET_TYPE_OBUS > ();
202
300
203
301
FAPI_DBG ("Invoking p9.fbc.ioo_tl.scom.initfile on target %s..." , l_procTargetStr );
204
302
FAPI_EXEC_HWP (l_rc , p9_fbc_ioo_tl_scom , i_target , FAPI_SYSTEM );
0 commit comments