Skip to content

Commit

Permalink
p9_sbe_tracearray: Add chip type detection to support changed p9c MC …
Browse files Browse the repository at this point in the history
…traces

Change-Id: I97800f041b5c4ffd75396014a6089c7e518f0eb9
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/45152
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Dev-Ready: Matt K. Light <mklight@us.ibm.com>
Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com>
Reviewed-by: Shakeeb A. Pasha B K <shakeebbk@in.ibm.com>
Reviewed-by: Joseph J. McGill <jmcgill@us.ibm.com>
Tested-by: PPE CI <ppe-ci+hostboot@us.ibm.com>
Reviewed-by: Jennifer A. Stofer <stofer@us.ibm.com>
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/45154
Reviewed-by: Hostboot Team <hostboot@us.ibm.com>
Reviewed-by: Sachin Gupta <sgupta2m@in.ibm.com>
  • Loading branch information
fenkes-ibm authored and sgupta2m committed Aug 30, 2017
1 parent 7fb7f3b commit c7277c9
Showing 1 changed file with 88 additions and 47 deletions.
135 changes: 88 additions & 47 deletions src/import/chips/p9/procedures/hwp/perv/p9_sbe_tracearray.C
Original file line number Diff line number Diff line change
Expand Up @@ -99,72 +99,84 @@ const uint32_t TA_TRACE_BASE_SCOM = 0x00010400;
// Table of known trace arrays
//------------------------------------------------------------------------------

enum chip_type_and_ec
{
NIMBUS = 1,
CUMULUS = 2,
OTHER = 4,
ANY_CHIP = 0xFF,
};

struct ta_def
{
/* One entry per mux setting; value of 0 means N/A */
p9_tracearray_bus_id bus_ids[TRACE_MUX_POSITIONS];
const uint8_t ex_odd_scom_offset: 2;
const uint8_t chiplet: 6;
const uint8_t base_multiplier;
const uint8_t chip_type_and_ec;
};

static const ta_def ta_defs[] =
{
/* PERV */
{ { PROC_TB_PIB, PROC_TB_OCC, PROC_TB_TOD }, 0x00, 0x01, 0x00},
{ { PROC_TB_SBE, PROC_TB_PIB_ALT }, 0x00, 0x01, 0x01},
{ { PROC_TB_PIB, PROC_TB_OCC, PROC_TB_TOD }, 0x00, 0x01, 0x00, ANY_CHIP },
{ { PROC_TB_SBE, PROC_TB_PIB_ALT }, 0x00, 0x01, 0x01, ANY_CHIP },
/* N0 */
{ { PROC_TB_PBIOE0 }, 0x00, 0x02, 0x00},
{ { PROC_TB_PBIOE1 }, 0x00, 0x02, 0x01},
{ { PROC_TB_CXA0, PROC_TB_NX }, 0x00, 0x02, 0x02},
{ { PROC_TB_PBIOE0 }, 0x00, 0x02, 0x00, ANY_CHIP },
{ { PROC_TB_PBIOE1 }, 0x00, 0x02, 0x01, ANY_CHIP },
{ { PROC_TB_CXA0, PROC_TB_NX }, 0x00, 0x02, 0x02, ANY_CHIP },
/* N1 */
{ { PROC_TB_PB6 }, 0x00, 0x03, 0x00},
{ { PROC_TB_PB7 }, 0x00, 0x03, 0x01},
{ { PROC_TB_PB8 }, 0x00, 0x03, 0x02},
{ { PROC_TB_PB9 }, 0x00, 0x03, 0x03},
{ { PROC_TB_PB10 }, 0x00, 0x03, 0x04},
{ { PROC_TB_PB11 }, 0x00, 0x03, 0x05},
{ { PROC_TB_MCD0, PROC_TB_MCD1, PROC_TB_VAS }, 0x00, 0x03, 0x06},
{ { PROC_TB_MCS2, PROC_TB_MCS3, PROC_TB_PB13 }, 0x00, 0x03, 0x07},
{ { PROC_TB_PBIO0 }, 0x00, 0x03, 0x08},
{ { PROC_TB_PBIO1 }, 0x00, 0x03, 0x09},
{ { PROC_TB_PB6 }, 0x00, 0x03, 0x00, ANY_CHIP },
{ { PROC_TB_PB7 }, 0x00, 0x03, 0x01, ANY_CHIP },
{ { PROC_TB_PB8 }, 0x00, 0x03, 0x02, ANY_CHIP },
{ { PROC_TB_PB9 }, 0x00, 0x03, 0x03, ANY_CHIP },
{ { PROC_TB_PB10 }, 0x00, 0x03, 0x04, ANY_CHIP },
{ { PROC_TB_PB11 }, 0x00, 0x03, 0x05, ANY_CHIP },
{ { PROC_TB_MCD0, PROC_TB_MCD1, PROC_TB_VAS }, 0x00, 0x03, 0x06, ANY_CHIP },
{ { PROC_TB_MCS2, PROC_TB_MCS3, PROC_TB_PB13 }, 0x00, 0x03, 0x07, ANY_CHIP },
{ { PROC_TB_PBIO0 }, 0x00, 0x03, 0x08, ANY_CHIP },
{ { PROC_TB_PBIO1 }, 0x00, 0x03, 0x09, ANY_CHIP },
/* N2 */
{ { PROC_TB_CXA1, PROC_TB_IOPSI }, 0x00, 0x04, 0x00},
{ { PROC_TB_PCIS0, PROC_TB_PCIS1, PROC_TB_PCIS2 }, 0x00, 0x04, 0x01},
{ { PROC_TB_CXA1, PROC_TB_IOPSI }, 0x00, 0x04, 0x00, ANY_CHIP },
{ { PROC_TB_PCIS0, PROC_TB_PCIS1, PROC_TB_PCIS2 }, 0x00, 0x04, 0x01, ANY_CHIP },
/* N3 */
{ { PROC_TB_PB0 }, 0x00, 0x05, 0x00},
{ { PROC_TB_PB1 }, 0x00, 0x05, 0x01},
{ { PROC_TB_PB2 }, 0x00, 0x05, 0x02},
{ { PROC_TB_PB3 }, 0x00, 0x05, 0x03},
{ { PROC_TB_PB4 }, 0x00, 0x05, 0x04},
{ { PROC_TB_PB5 }, 0x00, 0x05, 0x05},
{ { PROC_TB_INT, PROC_TB_NPU1, PROC_TB_NMMU1 }, 0x00, 0x05, 0x06},
{ { PROC_TB_MCS0, PROC_TB_MCS1, PROC_TB_PB12 }, 0x00, 0x05, 0x07},
{ { PROC_TB_BRIDGE }, 0x00, 0x05, 0x08},
{ { PROC_TB_NPU0 }, 0x00, 0x05, 0x0A},
{ { PROC_TB_NMMU0 }, 0x00, 0x05, 0x0B},
{ { PROC_TB_PB0 }, 0x00, 0x05, 0x00, ANY_CHIP },
{ { PROC_TB_PB1 }, 0x00, 0x05, 0x01, ANY_CHIP },
{ { PROC_TB_PB2 }, 0x00, 0x05, 0x02, ANY_CHIP },
{ { PROC_TB_PB3 }, 0x00, 0x05, 0x03, ANY_CHIP },
{ { PROC_TB_PB4 }, 0x00, 0x05, 0x04, ANY_CHIP },
{ { PROC_TB_PB5 }, 0x00, 0x05, 0x05, ANY_CHIP },
{ { PROC_TB_INT, PROC_TB_NPU1, PROC_TB_NMMU1 }, 0x00, 0x05, 0x06, ANY_CHIP },
{ { PROC_TB_MCS0, PROC_TB_MCS1, PROC_TB_PB12 }, 0x00, 0x05, 0x07, ANY_CHIP },
{ { PROC_TB_BRIDGE }, 0x00, 0x05, 0x08, ANY_CHIP },
{ { PROC_TB_NPU0 }, 0x00, 0x05, 0x0A, ANY_CHIP },
{ { PROC_TB_NMMU0 }, 0x00, 0x05, 0x0B, ANY_CHIP },
/* XBUS */
{ { PROC_TB_PBIOX0, PROC_TB_IOX0 }, 0x00, 0x06, 0x00},
{ { PROC_TB_PBIOX1, PROC_TB_IOX1 }, 0x00, 0x06, 0x01},
{ { PROC_TB_PBIOX2, PROC_TB_IOX2 }, 0x00, 0x06, 0x02},
{ { PROC_TB_PBIOX0, PROC_TB_IOX0 }, 0x00, 0x06, 0x00, ANY_CHIP },
{ { PROC_TB_PBIOX1, PROC_TB_IOX1 }, 0x00, 0x06, 0x01, ANY_CHIP },
{ { PROC_TB_PBIOX2, PROC_TB_IOX2 }, 0x00, 0x06, 0x02, ANY_CHIP },
/* PCIx */
{ { PROC_TB_PCI0X, PROC_TB_PCI00 }, 0x00, 0x0D, 0x00},
{ { PROC_TB_PCI1X, PROC_TB_PCI11, PROC_TB_PCI12 }, 0x00, 0x0E, 0x00},
{ { PROC_TB_PCI2X, PROC_TB_PCI23, PROC_TB_PCI24, PROC_TB_PCI25 }, 0x00, 0x0F, 0x00},
{ { PROC_TB_PCI0X, PROC_TB_PCI00 }, 0x00, 0x0D, 0x00, ANY_CHIP },
{ { PROC_TB_PCI1X, PROC_TB_PCI11, PROC_TB_PCI12 }, 0x00, 0x0E, 0x00, ANY_CHIP },
{ { PROC_TB_PCI2X, PROC_TB_PCI23, PROC_TB_PCI24, PROC_TB_PCI25 }, 0x00, 0x0F, 0x00, ANY_CHIP },
/* OBUS */
{ { PROC_TB_PBIOOA, PROC_TB_IOO }, 0x00, 0x09, 0x00},
{ { PROC_TB_PBIOOA, PROC_TB_IOO }, 0x00, 0x09, 0x00, ANY_CHIP },
/* MC */
{ { PROC_TB_MCA0 }, 0x00, 0x07, 0x20},
{ { PROC_TB_MCA1 }, 0x00, 0x07, 0x21},
{ { PROC_TB_IOMC0, PROC_TB_IOMC1, PROC_TB_IOMC2, PROC_TB_IOMC3 }, 0x00, 0x07, 0x00},
{ { PROC_TB_MCA0 }, 0x00, 0x07, 0x20, NIMBUS },
{ { PROC_TB_MCA1 }, 0x00, 0x07, 0x21, NIMBUS },
{ { PROC_TB_IOMC0, PROC_TB_IOMC1, PROC_TB_IOMC2, PROC_TB_IOMC3 }, 0x00, 0x07, 0x00, NIMBUS },
{ { PROC_TB_MCA0 }, 0x00, 0x07, 0x00, (uint8_t)~NIMBUS },
{ { PROC_TB_MCA1 }, 0x00, 0x07, 0x01, (uint8_t)~NIMBUS },
{ { PROC_TB_IOMC0, PROC_TB_IOMC1, PROC_TB_IOMC2, PROC_TB_IOMC3 }, 0x00, 0x07, 0x02, (uint8_t)~NIMBUS },
/* EX */
{ { PROC_TB_L20, NO_TB, NO_TB, PROC_TB_SKIT10 }, 0x01, 0x10, 0x94},
{ { PROC_TB_L21, NO_TB, NO_TB, PROC_TB_SKIT11 }, 0x01, 0x10, 0x95},
{ { PROC_TB_L30, PROC_TB_NCU0, PROC_TB_CME, PROC_TB_EQPB }, 0x02, 0x10, 0x00},
{ { PROC_TB_L31, PROC_TB_NCU1, PROC_TB_IVRM, PROC_TB_SKEWADJ }, 0x02, 0x10, 0x01},
{ { PROC_TB_L20, NO_TB, NO_TB, PROC_TB_SKIT10 }, 0x01, 0x10, 0x94, ANY_CHIP },
{ { PROC_TB_L21, NO_TB, NO_TB, PROC_TB_SKIT11 }, 0x01, 0x10, 0x95, ANY_CHIP },
{ { PROC_TB_L30, PROC_TB_NCU0, PROC_TB_CME, PROC_TB_EQPB }, 0x02, 0x10, 0x00, ANY_CHIP },
{ { PROC_TB_L31, PROC_TB_NCU1, PROC_TB_IVRM, PROC_TB_SKEWADJ }, 0x02, 0x10, 0x01, ANY_CHIP },
/* CORE */
{ { PROC_TB_CORE0 }, 0x00, 0x20, 0x41},
{ { PROC_TB_CORE1 }, 0x00, 0x20, 0x42},
{ { PROC_TB_CORE0 }, 0x00, 0x20, 0x41, ANY_CHIP },
{ { PROC_TB_CORE1 }, 0x00, 0x20, 0x42, ANY_CHIP },
};

class TraceArrayFinder
Expand All @@ -176,15 +188,16 @@ class TraceArrayFinder
uint32_t trace_scom_base;
uint32_t ex_odd_scom_offset;

TraceArrayFinder(p9_tracearray_bus_id i_trace_bus) :
TraceArrayFinder(p9_tracearray_bus_id i_trace_bus, chip_type_and_ec i_chip_type_and_ec) :
valid(false), mux_sel(0), debug_scom_base(0),
trace_scom_base(0), ex_odd_scom_offset(0)
{
for(auto& l_ta_def : ta_defs)
{
for(size_t sel = 0; sel < TRACE_MUX_POSITIONS; sel++)
{
if(l_ta_def.bus_ids[sel] == i_trace_bus)
if((l_ta_def.bus_ids[sel] == i_trace_bus) &&
((l_ta_def.chip_type_and_ec & i_chip_type_and_ec) != 0))
{
uint32_t l_buffer = 0;
l_buffer |= l_ta_def.chiplet << 24;
Expand Down Expand Up @@ -326,6 +339,21 @@ fapi_try_exit:
return fapi2::current_err;
}

static chip_type_and_ec map_chip_type_and_ec(fapi2::ATTR_NAME_Type i_name, fapi2::ATTR_EC_Type i_ec)
{
switch (i_name)
{
case fapi2::ENUM_ATTR_NAME_NIMBUS:
return NIMBUS;

case fapi2::ENUM_ATTR_NAME_CUMULUS:
return CUMULUS;

default:
return OTHER;
}
}

fapi2::ReturnCode p9_sbe_tracearray(
const fapi2::Target<P9_SBE_TRACEARRAY_TARGET_TYPES>& i_target,
const proc_gettracearray_args& i_args,
Expand All @@ -336,7 +364,20 @@ fapi2::ReturnCode p9_sbe_tracearray(
{
fapi2::Target < P9_SBE_TRACEARRAY_TARGET_TYPES | fapi2::TARGET_TYPE_EQ > target = i_target;
FAPI_INF("Start");
const TraceArrayFinder l_ta_finder(i_args.trace_bus);

fapi2::ATTR_NAME_Type l_name;
fapi2::ATTR_EC_Type l_ec;
fapi2::ReturnCode l_rc = fapi2::queryChipEcAndName(i_target.getParent<fapi2::TARGET_TYPE_PROC_CHIP>(), l_name, l_ec);

if (l_rc != fapi2::FAPI2_RC_SUCCESS)
{
FAPI_ERR("Failed to query proc chip name and EC level");
return l_rc;
}

FAPI_INF("Chip type/EC: %d/0x%02x", l_name, l_ec);

const TraceArrayFinder l_ta_finder(i_args.trace_bus, map_chip_type_and_ec(l_name, l_ec));

fapi2::TargetType arg_type = i_target.getType();
fapi2::TargetType ta_type =
Expand Down

0 comments on commit c7277c9

Please sign in to comment.