summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoachim Fenkes <fenkes@de.ibm.com>2017-08-25 10:39:04 -0400
committerSachin Gupta <sgupta2m@in.ibm.com>2017-08-29 23:22:57 -0400
commitc7277c971b4d35b1d5de6aee8df0d7ce63225ba9 (patch)
tree5500af24646dec97074c19c54c5215132300f722
parent7fb7f3bee6772903deb9c28685d77a0da8984a4a (diff)
downloadtalos-sbe-c7277c971b4d35b1d5de6aee8df0d7ce63225ba9.tar.gz
talos-sbe-c7277c971b4d35b1d5de6aee8df0d7ce63225ba9.zip
p9_sbe_tracearray: Add chip type detection to support changed p9c MC 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>
-rw-r--r--src/import/chips/p9/procedures/hwp/perv/p9_sbe_tracearray.C135
1 files changed, 88 insertions, 47 deletions
diff --git a/src/import/chips/p9/procedures/hwp/perv/p9_sbe_tracearray.C b/src/import/chips/p9/procedures/hwp/perv/p9_sbe_tracearray.C
index 4fe7e6e5..30e7b152 100644
--- a/src/import/chips/p9/procedures/hwp/perv/p9_sbe_tracearray.C
+++ b/src/import/chips/p9/procedures/hwp/perv/p9_sbe_tracearray.C
@@ -99,6 +99,14 @@ 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 */
@@ -106,65 +114,69 @@ struct ta_def
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
@@ -176,7 +188,7 @@ 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)
{
@@ -184,7 +196,8 @@ class TraceArrayFinder
{
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;
@@ -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,
@@ -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 =
OpenPOWER on IntegriCloud