Skip to content

Commit 34514fe

Browse files
LiuYangFansannerd
authored andcommitted
p9_chiplet_scominit - add Cumulus support
requirers ecmd 14-7 Change-Id: I01a4529cc53718dbcd5aabc5157ef027db52418a Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/39697 Tested-by: PPE CI <ppe-ci+hostboot@us.ibm.com> Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com> Reviewed-by: Thi N. Tran <thi@us.ibm.com> Reviewed-by: LENNARD G. STREAT <lstreat@us.ibm.com> Reviewed-by: Benjamin Gass <bgass@us.ibm.com> Reviewed-by: Joseph J. McGill <jmcgill@us.ibm.com> Reviewed-by: Jennifer A. Stofer <stofer@us.ibm.com> Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/39698 Reviewed-by: Hostboot Team <hostboot@us.ibm.com> Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com> Reviewed-by: Dean Sanner <dsanner@us.ibm.com>
1 parent c0cb66e commit 34514fe

File tree

1 file changed

+160
-62
lines changed

1 file changed

+160
-62
lines changed

src/import/chips/p9/procedures/hwp/nest/p9_chiplet_scominit.C

Lines changed: 160 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,14 @@
4343
#include <p9_fbc_ioo_tl_scom.H>
4444
#include <p9_fbc_ioo_dl_scom.H>
4545
#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+
4654
#include <p9_cxa_scom.H>
4755
#include <p9_nx_scom.H>
4856
#include <p9_int_scom.H>
@@ -93,6 +101,14 @@ fapi2::ReturnCode p9_chiplet_scominit(const fapi2::Target<fapi2::TARGET_TYPE_PRO
93101
fapi2::Target<fapi2::TARGET_TYPE_SYSTEM> FAPI_SYSTEM;
94102
std::vector<fapi2::Target<fapi2::TARGET_TYPE_OBUS>> l_obus_chiplets;
95103
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;
96112
std::vector<fapi2::Target<fapi2::TARGET_TYPE_CAPP>> l_capp_targets;
97113
std::vector<fapi2::Target<fapi2::TARGET_TYPE_OBUS_BRICK>> l_obrick_targets;
98114
fapi2::buffer<uint64_t> l_ob0data(0x0);
@@ -110,95 +126,177 @@ fapi2::ReturnCode p9_chiplet_scominit(const fapi2::Target<fapi2::TARGET_TYPE_PRO
110126
// Get proc target string
111127
fapi2::toString(i_target, l_procTargetStr, sizeof(l_procTargetStr));
112128

129+
// invoke IOO (OBUS FBC IO) SCOM initfiles
130+
l_obus_chiplets = i_target.getChildren<fapi2::TARGET_TYPE_OBUS>();
113131

114-
if (!l_no_ndl_iovalid)
132+
for (auto l_obus_target : l_obus_chiplets)
115133
{
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+
{
116145

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>();
118147

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)
137149
{
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+
}
141198

142-
case OBRICK1_POS:
143-
l_ob0data.setBit<PERV_OB_CPLT_CONF1_OBRICKB_IOVALID>();
144-
break;
199+
}
145200

146-
case OBRICK2_POS:
147-
l_ob0data.setBit<PERV_OB_CPLT_CONF1_OBRICKC_IOVALID>();
148-
break;
201+
}
149202

150-
case OBRICK9_POS:
151-
l_ob3data.setBit<PERV_OB_CPLT_CONF1_OBRICKC_IOVALID>();
152-
break;
203+
}
153204

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+
}
157210

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+
}
161215

162-
default:
163-
FAPI_ASSERT(false, fapi2::P9_CHIPLET_SCOMINIT_UNSUPPORTED_OBRICK_POS_ERR().set_TARGET(l_obrick_target),
164-
"ERROR; Unsupported NV position.");
165216

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>();
167220

168-
}
221+
//TODO: RTC 176054
222+
#ifndef __HOSTBOOT_MODULE
223+
l_mc_targets = i_target.getChildren<fapi2::TARGET_TYPE_MC>();
224+
#endif
169225

170-
if (l_ob0data != 0)
226+
if (l_mcs_targets.size())
227+
{
228+
for (auto l_mcs_target : l_mcs_targets)
171229
{
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>());
174234

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+
}
178241
}
179-
180242
}
181243

182-
l_mcs_targets = i_target.getChildren<fapi2::TARGET_TYPE_MCS>();
244+
//TODO: RTC 176054
245+
#ifndef __HOSTBOOT_MODULE
183246

184-
for (auto l_mcs_target : l_mcs_targets)
247+
else if (l_mc_targets.size())
185248
{
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);
190254

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)
192264
{
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+
}
196275
}
197276

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!");
198298
}
199299

200-
// invoke IOO (OBUS FBC IO) SCOM initfiles
201-
l_obus_chiplets = i_target.getChildren<fapi2::TARGET_TYPE_OBUS>();
202300

203301
FAPI_DBG("Invoking p9.fbc.ioo_tl.scom.initfile on target %s...", l_procTargetStr);
204302
FAPI_EXEC_HWP(l_rc, p9_fbc_ioo_tl_scom, i_target, FAPI_SYSTEM);

0 commit comments

Comments
 (0)