summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJoe McGill <jmcgill@us.ibm.com>2017-03-15 12:52:42 -0500
committerDaniel M. Crowell <dcrowell@us.ibm.com>2017-06-22 22:39:29 -0400
commit3d7d72604b9e63a9d0390043272dc66d5f3a924a (patch)
tree1cb50e63c5a1464aed00eb41da6668ad9d9ab652 /src
parent19b69c316d363e4598f02688691214a8c3dd831f (diff)
downloadtalos-hostboot-3d7d72604b9e63a9d0390043272dc66d5f3a924a.tar.gz
talos-hostboot-3d7d72604b9e63a9d0390043272dc66d5f3a924a.zip
add support for OBUS PLL buckets
p9_frequency_buckets.H p9.obus.pll.scan.initfile document and support base frequencies 1611 MHz - 25.78G, 156.25 MHz ref 1250 MHz - 25G, 156.25 MHz ref 1200 MHz - 19.2G, 133.33 MHz ref pervasive_attributes.xml define ATTR_OB[0123]_PLL_BUCKET to hold encoded ring bucket select value nest_attributes.xml define ATTR_FREQ_O_MHZ array to hold per chiplet OBUS frequency retain ATTR_FREQ_A_MHZ to serve as FBC A link frequency indicator p9_setup_sbe_config.C p9_sbe_attr_setup.C transmit bucket selection through FSP/BMC->SBE mailbox encode OBUS bucket selects in Scratch Reg2 bits 24:31 p9_sbe_chiplet_pll_initf.C p9_sbe_chiplet_pll_initf_errors.xml scan correct ring image based on bucket selector attributes p9_ringId.C p9_ringId.H p9_ring_id.h accomodate three copies of obX_pll_bndy (use ID previously reserved for obX_pll_func, which should not be necessary to scan init) scan_procedures.mk generateWrapper.pl initCompiler infrastructure changes to support build of bucket data p9.fbc.ab_hp.scom.initfile p9.fbc.ioo_tl.scom.initfile p9_tod_setup.C updates to handle A,O frequency attribute changes Change-Id: I42f9bb4037a587f7e3ec8dd9848bdb853ac3d7a0 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/40159 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Reviewed-by: Matt K. Light <mklight@us.ibm.com> Tested-by: PPE CI <ppe-ci+hostboot@us.ibm.com> Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com> Reviewed-by: Dean Sanner <dsanner@us.ibm.com> Reviewed-by: Jennifer A. Stofer <stofer@us.ibm.com> Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/40165 Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src')
-rw-r--r--src/import/chips/p9/common/include/p9_frequency_buckets.H15
-rw-r--r--src/import/chips/p9/procedures/hwp/initfiles/p9_fbc_ioo_tl_scom.C37
-rw-r--r--src/import/chips/p9/procedures/hwp/memory/lib/mss_attribute_accessors.H8
-rw-r--r--src/import/chips/p9/procedures/hwp/nest/p9_tod_setup.C40
-rw-r--r--src/import/chips/p9/procedures/hwp/perv/p9_setup_sbe_config.C29
-rw-r--r--src/import/chips/p9/procedures/xml/attribute_info/nest_attributes.xml18
-rw-r--r--src/import/chips/p9/procedures/xml/attribute_info/pervasive_attributes.xml40
-rwxr-xr-xsrc/import/chips/p9/procedures/xml/error_info/p9_sbe_chiplet_pll_initf_errors.xml13
-rw-r--r--src/import/chips/p9/utils/imageProcs/p9_ringId.C60
-rw-r--r--src/import/chips/p9/utils/imageProcs/p9_ringId.H88
-rw-r--r--src/import/chips/p9/utils/imageProcs/p9_ring_id.h30
-rw-r--r--src/usr/targeting/common/xmltohb/attribute_types.xml90
-rwxr-xr-xsrc/usr/targeting/common/xmltohb/target_types.xml5
13 files changed, 346 insertions, 127 deletions
diff --git a/src/import/chips/p9/common/include/p9_frequency_buckets.H b/src/import/chips/p9/common/include/p9_frequency_buckets.H
index 7083cf766..892cc5f22 100644
--- a/src/import/chips/p9/common/include/p9_frequency_buckets.H
+++ b/src/import/chips/p9/common/include/p9_frequency_buckets.H
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2016 */
+/* Contributors Listed Below - COPYRIGHT 2016,2017 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -64,3 +64,16 @@ const uint32_t MEM_PLL_FREQ_LIST[MEM_PLL_FREQ_BUCKETS] =
2666,
2666
};
+
+// constant definining number of OBUS PLL frequency options ('buckets')
+// to be built into unsigned HW image
+const uint8_t OBUS_PLL_FREQ_BUCKETS = 3;
+
+// OBUS PLL frequency in MHz
+// index is bucket number
+const uint32_t OBUS_PLL_FREQ_LIST[OBUS_PLL_FREQ_BUCKETS] =
+{
+ 1611,
+ 1250,
+ 1200
+};
diff --git a/src/import/chips/p9/procedures/hwp/initfiles/p9_fbc_ioo_tl_scom.C b/src/import/chips/p9/procedures/hwp/initfiles/p9_fbc_ioo_tl_scom.C
index f93da83b0..1e11570ca 100644
--- a/src/import/chips/p9/procedures/hwp/initfiles/p9_fbc_ioo_tl_scom.C
+++ b/src/import/chips/p9/procedures/hwp/initfiles/p9_fbc_ioo_tl_scom.C
@@ -81,18 +81,25 @@ fapi2::ReturnCode p9_fbc_ioo_tl_scom(const fapi2::Target<fapi2::TARGET_TYPE_PROC
|| (l_TGT0_ATTR_PROC_FABRIC_A_ATTACHED_CHIP_CNFG[literal_1] != literal_0));
uint64_t l_def_OBUS0_FBC_ENABLED = ((l_TGT0_ATTR_PROC_FABRIC_X_ATTACHED_CHIP_CNFG[literal_3] != literal_0)
|| (l_TGT0_ATTR_PROC_FABRIC_A_ATTACHED_CHIP_CNFG[literal_0] != literal_0));
- fapi2::ATTR_FREQ_A_MHZ_Type l_TGT1_ATTR_FREQ_A_MHZ;
- FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_FREQ_A_MHZ, TGT1, l_TGT1_ATTR_FREQ_A_MHZ));
+ fapi2::ATTR_FREQ_O_MHZ_Type l_TGT0_ATTR_FREQ_O_MHZ;
+ FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_FREQ_O_MHZ, TGT0, l_TGT0_ATTR_FREQ_O_MHZ));
fapi2::ATTR_FREQ_PB_MHZ_Type l_TGT1_ATTR_FREQ_PB_MHZ;
FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_FREQ_PB_MHZ, TGT1, l_TGT1_ATTR_FREQ_PB_MHZ));
- uint64_t l_def_LO_LIMIT_R = ((l_TGT1_ATTR_FREQ_PB_MHZ * literal_10) > (l_TGT1_ATTR_FREQ_A_MHZ * literal_12));
- uint64_t l_def_OBUS0_LO_LIMIT_D = (l_TGT1_ATTR_FREQ_A_MHZ * literal_10);
+ uint64_t l_def_OBUS0_LO_LIMIT_R = ((l_TGT1_ATTR_FREQ_PB_MHZ * literal_10) > (l_TGT0_ATTR_FREQ_O_MHZ[literal_0] *
+ literal_12));
+ uint64_t l_def_OBUS0_LO_LIMIT_D = (l_TGT0_ATTR_FREQ_O_MHZ[literal_0] * literal_10);
uint64_t l_def_OBUS0_LO_LIMIT_N = (l_TGT1_ATTR_FREQ_PB_MHZ * literal_154);
- uint64_t l_def_OBUS1_LO_LIMIT_D = l_TGT1_ATTR_FREQ_A_MHZ;
+ uint64_t l_def_OBUS1_LO_LIMIT_R = ((l_TGT1_ATTR_FREQ_PB_MHZ * literal_10) > (l_TGT0_ATTR_FREQ_O_MHZ[literal_1] *
+ literal_12));
+ uint64_t l_def_OBUS1_LO_LIMIT_D = l_TGT0_ATTR_FREQ_O_MHZ[literal_1];
uint64_t l_def_OBUS1_LO_LIMIT_N = (l_TGT1_ATTR_FREQ_PB_MHZ * literal_12);
- uint64_t l_def_OBUS2_LO_LIMIT_D = (l_TGT1_ATTR_FREQ_A_MHZ * literal_10);
+ uint64_t l_def_OBUS2_LO_LIMIT_R = ((l_TGT1_ATTR_FREQ_PB_MHZ * literal_10) > (l_TGT0_ATTR_FREQ_O_MHZ[literal_2] *
+ literal_12));
+ uint64_t l_def_OBUS2_LO_LIMIT_D = (l_TGT0_ATTR_FREQ_O_MHZ[literal_2] * literal_10);
uint64_t l_def_OBUS2_LO_LIMIT_N = (l_TGT1_ATTR_FREQ_PB_MHZ * literal_74);
- uint64_t l_def_OBUS3_LO_LIMIT_D = (l_TGT1_ATTR_FREQ_A_MHZ * literal_10);
+ uint64_t l_def_OBUS3_LO_LIMIT_R = ((l_TGT1_ATTR_FREQ_PB_MHZ * literal_10) > (l_TGT0_ATTR_FREQ_O_MHZ[literal_3] *
+ literal_12));
+ uint64_t l_def_OBUS3_LO_LIMIT_D = (l_TGT0_ATTR_FREQ_O_MHZ[literal_3] * literal_10);
uint64_t l_def_OBUS3_LO_LIMIT_N = (l_TGT1_ATTR_FREQ_PB_MHZ * literal_95);
fapi2::ATTR_PROC_FABRIC_SMP_OPTICS_MODE_Type l_TGT1_ATTR_PROC_FABRIC_SMP_OPTICS_MODE;
FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_PROC_FABRIC_SMP_OPTICS_MODE, TGT1, l_TGT1_ATTR_PROC_FABRIC_SMP_OPTICS_MODE));
@@ -129,7 +136,7 @@ fapi2::ReturnCode p9_fbc_ioo_tl_scom(const fapi2::Target<fapi2::TARGET_TYPE_PROC
l_scom_buffer.insert<12, 8, 56, uint64_t>(literal_0x40 );
}
- if ((l_def_OBUS0_FBC_ENABLED && (l_def_LO_LIMIT_R == literal_1)))
+ if ((l_def_OBUS0_FBC_ENABLED && (l_def_OBUS0_LO_LIMIT_R == literal_1)))
{
l_scom_buffer.insert<4, 8, 56, uint64_t>((literal_0x36 - (l_def_OBUS0_LO_LIMIT_N / l_def_OBUS0_LO_LIMIT_D)) );
}
@@ -143,7 +150,7 @@ fapi2::ReturnCode p9_fbc_ioo_tl_scom(const fapi2::Target<fapi2::TARGET_TYPE_PROC
l_scom_buffer.insert<44, 8, 56, uint64_t>(literal_0x40 );
}
- if ((l_def_OBUS0_FBC_ENABLED && (l_def_LO_LIMIT_R == literal_1)))
+ if ((l_def_OBUS0_FBC_ENABLED && (l_def_OBUS0_LO_LIMIT_R == literal_1)))
{
l_scom_buffer.insert<36, 8, 56, uint64_t>((literal_0x36 - (l_def_OBUS0_LO_LIMIT_N / l_def_OBUS0_LO_LIMIT_D)) );
}
@@ -167,7 +174,7 @@ fapi2::ReturnCode p9_fbc_ioo_tl_scom(const fapi2::Target<fapi2::TARGET_TYPE_PROC
l_scom_buffer.insert<12, 8, 56, uint64_t>(literal_0x40 );
}
- if ((l_def_OBUS1_FBC_ENABLED && (l_def_LO_LIMIT_R == literal_1)))
+ if ((l_def_OBUS1_FBC_ENABLED && (l_def_OBUS1_LO_LIMIT_R == literal_1)))
{
l_scom_buffer.insert<4, 8, 56, uint64_t>((literal_0x2A - (l_def_OBUS1_LO_LIMIT_N / l_def_OBUS1_LO_LIMIT_D)) );
}
@@ -181,7 +188,7 @@ fapi2::ReturnCode p9_fbc_ioo_tl_scom(const fapi2::Target<fapi2::TARGET_TYPE_PROC
l_scom_buffer.insert<44, 8, 56, uint64_t>(literal_0x40 );
}
- if ((l_def_OBUS1_FBC_ENABLED && (l_def_LO_LIMIT_R == literal_1)))
+ if ((l_def_OBUS1_FBC_ENABLED && (l_def_OBUS1_LO_LIMIT_R == literal_1)))
{
l_scom_buffer.insert<36, 8, 56, uint64_t>((literal_0x2A - (l_def_OBUS1_LO_LIMIT_N / l_def_OBUS1_LO_LIMIT_D)) );
}
@@ -205,7 +212,7 @@ fapi2::ReturnCode p9_fbc_ioo_tl_scom(const fapi2::Target<fapi2::TARGET_TYPE_PROC
l_scom_buffer.insert<12, 8, 56, uint64_t>(literal_0x40 );
}
- if ((l_def_OBUS2_FBC_ENABLED && (l_def_LO_LIMIT_R == literal_1)))
+ if ((l_def_OBUS2_FBC_ENABLED && (l_def_OBUS2_LO_LIMIT_R == literal_1)))
{
l_scom_buffer.insert<4, 8, 56, uint64_t>((literal_0x1B - (l_def_OBUS2_LO_LIMIT_N / l_def_OBUS2_LO_LIMIT_D)) );
}
@@ -219,7 +226,7 @@ fapi2::ReturnCode p9_fbc_ioo_tl_scom(const fapi2::Target<fapi2::TARGET_TYPE_PROC
l_scom_buffer.insert<44, 8, 56, uint64_t>(literal_0x40 );
}
- if ((l_def_OBUS2_FBC_ENABLED && (l_def_LO_LIMIT_R == literal_1)))
+ if ((l_def_OBUS2_FBC_ENABLED && (l_def_OBUS2_LO_LIMIT_R == literal_1)))
{
l_scom_buffer.insert<36, 8, 56, uint64_t>((literal_0x1B - (l_def_OBUS2_LO_LIMIT_N / l_def_OBUS2_LO_LIMIT_D)) );
}
@@ -243,7 +250,7 @@ fapi2::ReturnCode p9_fbc_ioo_tl_scom(const fapi2::Target<fapi2::TARGET_TYPE_PROC
l_scom_buffer.insert<12, 8, 56, uint64_t>(literal_0x40 );
}
- if ((l_def_OBUS3_FBC_ENABLED && (l_def_LO_LIMIT_R == literal_1)))
+ if ((l_def_OBUS3_FBC_ENABLED && (l_def_OBUS3_LO_LIMIT_R == literal_1)))
{
l_scom_buffer.insert<4, 8, 56, uint64_t>((literal_0x22 - (l_def_OBUS3_LO_LIMIT_N / l_def_OBUS3_LO_LIMIT_D)) );
}
@@ -257,7 +264,7 @@ fapi2::ReturnCode p9_fbc_ioo_tl_scom(const fapi2::Target<fapi2::TARGET_TYPE_PROC
l_scom_buffer.insert<44, 8, 56, uint64_t>(literal_0x40 );
}
- if ((l_def_OBUS3_FBC_ENABLED && (l_def_LO_LIMIT_R == literal_1)))
+ if ((l_def_OBUS3_FBC_ENABLED && (l_def_OBUS3_LO_LIMIT_R == literal_1)))
{
l_scom_buffer.insert<36, 8, 56, uint64_t>((literal_0x22 - (l_def_OBUS3_LO_LIMIT_N / l_def_OBUS3_LO_LIMIT_D)) );
}
diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/mss_attribute_accessors.H b/src/import/chips/p9/procedures/hwp/memory/lib/mss_attribute_accessors.H
index a65c02a44..2378ccbd7 100644
--- a/src/import/chips/p9/procedures/hwp/memory/lib/mss_attribute_accessors.H
+++ b/src/import/chips/p9/procedures/hwp/memory/lib/mss_attribute_accessors.H
@@ -27389,8 +27389,8 @@ fapi_try_exit:
/// @param[out] uint32_t& reference to store the value
/// @note Generated by gen_accessors.pl generateParameters (SYSTEM)
/// @return fapi2::ReturnCode - FAPI2_RC_SUCCESS iff get is OK
-/// @note The frequency of a processor's A link clocks, in MHz. This is the same for all
-/// chips in the system. Provided by the
+/// @note The frequency of a processor's Abus, in MHz. This is the same for all chips in
+/// the system. Provided by the
/// MRW.
///
inline fapi2::ReturnCode freq_a_mhz(uint32_t& o_value)
@@ -27410,8 +27410,8 @@ fapi_try_exit:
/// @param[out] uint32_t& reference to store the value
/// @note Generated by gen_accessors.pl generateParameters (SYSTEM)
/// @return fapi2::ReturnCode - FAPI2_RC_SUCCESS iff get is OK
-/// @note The frequency of a processor's X link clocks, in MHz. This is the same for all
-/// chips in the system. Provided by the
+/// @note The frequency of a processor's Xbus mesh clocks, in MHz. This is the same for
+/// all chips in the system. Provided by the
/// MRW.
///
inline fapi2::ReturnCode freq_x_mhz(uint32_t& o_value)
diff --git a/src/import/chips/p9/procedures/hwp/nest/p9_tod_setup.C b/src/import/chips/p9/procedures/hwp/nest/p9_tod_setup.C
index 4f505e377..8b809dcb4 100644
--- a/src/import/chips/p9/procedures/hwp/nest/p9_tod_setup.C
+++ b/src/import/chips/p9/procedures/hwp/nest/p9_tod_setup.C
@@ -1050,14 +1050,14 @@ fapi_try_exit:
/// @brief Calculates the delay for a node in TOD-grid-cycles
/// @param[in] i_tod_node Reference to TOD topology
/// @param[in] i_freq_x XBUS frequency in MHz
-/// @param[in] i_freq_o OBUS frequency in MHz
+/// @param[in] i_freq_a OBUS frequency in MHz
/// @param[out] o_node_delay => Delay of a single node in TOD-grid-cycles
/// @return FAPI_RC_SUCCESS if TOD node delay is successfully calculated else
/// error
fapi2::ReturnCode calculate_node_link_delay(
tod_topology_node* i_tod_node,
const uint32_t i_freq_x,
- const uint32_t i_freq_o,
+ const uint32_t i_freq_a,
uint32_t& o_node_delay)
{
fapi2::buffer<uint64_t> l_rt_delay_ctl_reg = 0;
@@ -1151,7 +1151,7 @@ fapi2::ReturnCode calculate_node_link_delay(
.set_TARGET(*(i_tod_node->i_target))
.set_RX(OBUS0),
"i_tod_node->i_bus_rx is set to OBUS0 and it is not enabled");
- l_bus_freq = i_freq_o;
+ l_bus_freq = i_freq_a;
l_rt_delay_ctl_reg.setBit<PB_OLINK_RT_DELAY_CTL_SET_LINK_0>()
.setBit<PB_OLINK_RT_DELAY_CTL_SET_LINK_1>();
l_rt_delay_ctl_addr = PU_IOE_PB_OLINK_RT_DELAY_CTL_REG;
@@ -1168,7 +1168,7 @@ fapi2::ReturnCode calculate_node_link_delay(
.set_TARGET(*(i_tod_node->i_target))
.set_RX(OBUS1),
"i_tod_node->i_bus_rx is set to OBUS1 and it is not enabled");
- l_bus_freq = i_freq_o;
+ l_bus_freq = i_freq_a;
l_rt_delay_ctl_reg.setBit<PB_OLINK_RT_DELAY_CTL_SET_LINK_2>()
.setBit<PB_OLINK_RT_DELAY_CTL_SET_LINK_3>();
l_rt_delay_ctl_addr = PU_IOE_PB_OLINK_RT_DELAY_CTL_REG;
@@ -1185,7 +1185,7 @@ fapi2::ReturnCode calculate_node_link_delay(
.set_TARGET(*(i_tod_node->i_target))
.set_RX(OBUS2),
"i_tod_node->i_bus_rx is set to OBUS2 and it is not enabled");
- l_bus_freq = i_freq_o;
+ l_bus_freq = i_freq_a;
l_rt_delay_ctl_reg.setBit<PB_OLINK_RT_DELAY_CTL_SET_LINK_4>()
.setBit<PB_OLINK_RT_DELAY_CTL_SET_LINK_5>();
l_rt_delay_ctl_addr = PU_IOE_PB_OLINK_RT_DELAY_CTL_REG;
@@ -1202,7 +1202,7 @@ fapi2::ReturnCode calculate_node_link_delay(
.set_TARGET(*(i_tod_node->i_target))
.set_RX(OBUS3),
"i_tod_node->i_bus_rx is set to OBUS3 and it is not enabled");
- l_bus_freq = i_freq_o;
+ l_bus_freq = i_freq_a;
l_rt_delay_ctl_reg.setBit<PB_OLINK_RT_DELAY_CTL_SET_LINK_6>()
.setBit<PB_OLINK_RT_DELAY_CTL_SET_LINK_7>();
l_rt_delay_ctl_addr = PU_IOE_PB_OLINK_RT_DELAY_CTL_REG;
@@ -1275,14 +1275,14 @@ fapi_try_exit:
/// node delay)
/// @param[in] i_tod_node Reference to TOD topology
/// @param[in] i_freq_x XBUS frequency in MHz
-/// @param[in] i_freq_o OBUS frequency in MHz
+/// @param[in] i_freq_a OBUS frequency in MHz
/// @param[out] o_longest_delay Longest delay in TOD-grid-cycles
/// @return FAPI_RC_SUCCESS if a longest TOD delay was found in topology
/// else error
fapi2::ReturnCode calculate_longest_topolopy_delay(
tod_topology_node* i_tod_node,
const uint32_t i_freq_x,
- const uint32_t i_freq_o,
+ const uint32_t i_freq_a,
uint32_t& o_longest_delay)
{
uint32_t l_node_delay = 0;
@@ -1292,7 +1292,7 @@ fapi2::ReturnCode calculate_longest_topolopy_delay(
FAPI_TRY(calculate_node_link_delay(i_tod_node,
i_freq_x,
- i_freq_o,
+ i_freq_a,
l_node_delay),
"Error from calculate_node_link_delay!");
o_longest_delay = l_node_delay;
@@ -1304,7 +1304,7 @@ fapi2::ReturnCode calculate_longest_topolopy_delay(
tod_topology_node* l_tod_node = *l_child;
FAPI_TRY(calculate_longest_topolopy_delay(l_tod_node,
i_freq_x,
- i_freq_o,
+ i_freq_a,
l_node_delay),
"Error from calculate_longest_topology_delay!");
@@ -1325,14 +1325,14 @@ fapi_try_exit:
/// @brief Updates the topology struct with the final delay values
/// @param[in] i_tod_node Reference to TOD topology
/// @param[in] i_freq_x XBUS frequency in MHz
-/// @param[in] i_freq_o OBUS frequency in MHz
+/// @param[in] i_freq_a OBUS frequency in MHz
/// @param[in] i_longest_delay Longest delay in the topology
/// @return FAPI_RC_SUCCESS if o_int_path_delay was set for every node in the
/// topology else error
fapi2::ReturnCode set_topology_delays(
tod_topology_node* i_tod_node,
const uint32_t i_freq_x,
- const uint32_t i_freq_o,
+ const uint32_t i_freq_a,
const uint32_t i_longest_delay)
{
FAPI_DBG("Start");
@@ -1350,7 +1350,7 @@ fapi2::ReturnCode set_topology_delays(
.set_PATH_DELAY(i_tod_node->o_int_path_delay)
.set_LONGEST_DELAY(i_longest_delay)
.set_XBUS_FREQ(i_freq_x)
- .set_OBUS_FREQ(i_freq_o),
+ .set_OBUS_FREQ(i_freq_a),
"Invalid delay of %d calculated!");
// Recurse on downstream nodes
@@ -1360,7 +1360,7 @@ fapi2::ReturnCode set_topology_delays(
{
FAPI_TRY(set_topology_delays(*l_child,
i_freq_x,
- i_freq_o,
+ i_freq_a,
i_tod_node->o_int_path_delay),
"Error from set_topology_delays!");
}
@@ -1380,33 +1380,33 @@ fapi2::ReturnCode calculate_node_delays(tod_topology_node* i_tod_node)
const fapi2::Target<fapi2::TARGET_TYPE_SYSTEM> FAPI_SYSTEM;
uint32_t l_longest_delay = 0;
uint32_t l_freq_x = 0;
- uint32_t l_freq_o = 0;
+ uint32_t l_freq_a = 0;
FAPI_DBG("Start");
// retrieve X-bus and A-bus frequencies
FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_FREQ_X_MHZ, FAPI_SYSTEM, l_freq_x),
"Failure reading XBUS frequency attribute!");
- FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_FREQ_A_MHZ, FAPI_SYSTEM, l_freq_o),
+ FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_FREQ_A_MHZ, FAPI_SYSTEM, l_freq_a),
"Failure reading OBUS frequency attribute!");
// multiply attribute (mesh speed) speed by link factor
l_freq_x *= 8;
- l_freq_o *= 16;
+ l_freq_a *= 16;
// Bus frequencies are global for the system (i.e. A0 and A1 will always
// run with the same frequency)
- FAPI_DBG("XBUS=%dMHz OBUS=%dMHz", l_freq_x, l_freq_o);
+ FAPI_DBG("XBUS=%dMHz OBUS=%dMHz", l_freq_x, l_freq_a);
// Find the most-delayed path in the topology; this is the MDMT's delay
FAPI_TRY(calculate_longest_topolopy_delay(i_tod_node,
l_freq_x,
- l_freq_o,
+ l_freq_a,
l_longest_delay),
"Error from calculate_longest_topology_delay!");
FAPI_DBG("The longest delay is %d TOD-grid-cycles.", l_longest_delay);
FAPI_TRY(set_topology_delays(i_tod_node,
l_freq_x,
- l_freq_o,
+ l_freq_a,
l_longest_delay),
"Error from set_topology_delays!");
diff --git a/src/import/chips/p9/procedures/hwp/perv/p9_setup_sbe_config.C b/src/import/chips/p9/procedures/hwp/perv/p9_setup_sbe_config.C
index 62259674c..40790e3a9 100644
--- a/src/import/chips/p9/procedures/hwp/perv/p9_setup_sbe_config.C
+++ b/src/import/chips/p9/procedures/hwp/perv/p9_setup_sbe_config.C
@@ -58,6 +58,14 @@ enum P9_SETUP_SBE_CONFIG_Private_Constants
ATTR_OPTICS_CONFIG_MODE_OBUS1_BIT = 17,
ATTR_OPTICS_CONFIG_MODE_OBUS2_BIT = 18,
ATTR_OPTICS_CONFIG_MODE_OBUS3_BIT = 19,
+ ATTR_OB0_PLL_BUCKET_STARTBIT = 24,
+ ATTR_OB0_PLL_BUCKET_LENGTH = 2,
+ ATTR_OB1_PLL_BUCKET_STARTBIT = 26,
+ ATTR_OB1_PLL_BUCKET_LENGTH = 2,
+ ATTR_OB2_PLL_BUCKET_STARTBIT = 28,
+ ATTR_OB2_PLL_BUCKET_LENGTH = 2,
+ ATTR_OB3_PLL_BUCKET_STARTBIT = 30,
+ ATTR_OB3_PLL_BUCKET_LENGTH = 2,
// Scratch_reg_3
ATTR_BOOT_FLAGS_STARTBIT = 0,
@@ -66,14 +74,14 @@ enum P9_SETUP_SBE_CONFIG_Private_Constants
// Scratch_reg_4
ATTR_BOOT_FREQ_MULT_STARTBIT = 0,
ATTR_BOOT_FREQ_MULT_LENGTH = 16,
- ATTR_NEST_PLL_BUCKET_STARTBIT = 24,
- ATTR_NEST_PLL_BUCKET_LENGTH = 8,
ATTR_CP_FILTER_BYPASS_BIT = 16,
ATTR_SS_FILTER_BYPASS_BIT = 17,
ATTR_IO_FILTER_BYPASS_BIT = 18,
ATTR_DPLL_BYPASS_BIT = 19,
ATTR_NEST_MEM_X_O_PCI_BYPASS_BIT = 20,
ATTR_OBUS_RATIO_VALUE_BIT = 21,
+ ATTR_NEST_PLL_BUCKET_STARTBIT = 29,
+ ATTR_NEST_PLL_BUCKET_LENGTH = 3,
// Scratch_reg_5
ATTR_PLL_MUX_STARTBIT = 12,
@@ -147,6 +155,10 @@ fapi2::ReturnCode p9_setup_sbe_config(const
}
//set_scratch2_reg
{
+ uint8_t l_ob0_pll_bucket;
+ uint8_t l_ob1_pll_bucket;
+ uint8_t l_ob2_pll_bucket;
+ uint8_t l_ob3_pll_bucket;
FAPI_DBG("Reading Scratch_reg2");
//Getting SCRATCH_REGISTER_2 register value
@@ -195,6 +207,17 @@ fapi2::ReturnCode p9_setup_sbe_config(const
}
}
+ FAPI_DBG("Reading OB PLL buckets");
+ FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_OB0_PLL_BUCKET, i_target_chip, l_ob0_pll_bucket));
+ FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_OB1_PLL_BUCKET, i_target_chip, l_ob1_pll_bucket));
+ FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_OB2_PLL_BUCKET, i_target_chip, l_ob2_pll_bucket));
+ FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_OB3_PLL_BUCKET, i_target_chip, l_ob3_pll_bucket));
+
+ l_read_scratch_reg.insertFromRight<ATTR_OB0_PLL_BUCKET_STARTBIT, ATTR_OB0_PLL_BUCKET_LENGTH>(l_ob0_pll_bucket);
+ l_read_scratch_reg.insertFromRight<ATTR_OB1_PLL_BUCKET_STARTBIT, ATTR_OB1_PLL_BUCKET_LENGTH>(l_ob1_pll_bucket);
+ l_read_scratch_reg.insertFromRight<ATTR_OB2_PLL_BUCKET_STARTBIT, ATTR_OB2_PLL_BUCKET_LENGTH>(l_ob2_pll_bucket);
+ l_read_scratch_reg.insertFromRight<ATTR_OB3_PLL_BUCKET_STARTBIT, ATTR_OB3_PLL_BUCKET_LENGTH>(l_ob3_pll_bucket);
+
FAPI_DBG("Setting up value of Scratch_reg2");
//Setting SCRATCH_REGISTER_2 register value
//CFAM.SCRATCH_REGISTER_2 = l_read_scratch_reg
@@ -254,7 +277,7 @@ fapi2::ReturnCode p9_setup_sbe_config(const
FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_NEST_PLL_BUCKET, FAPI_SYSTEM, l_read_1));
l_read_scratch_reg.insertFromRight< ATTR_BOOT_FREQ_MULT_STARTBIT, ATTR_BOOT_FREQ_MULT_LENGTH >(l_read_4);
- l_read_scratch_reg.insertFromRight< ATTR_NEST_PLL_BUCKET_STARTBIT, ATTR_NEST_PLL_BUCKET_LENGTH >(l_read_1);
+ l_read_scratch_reg.insertFromRight< ATTR_NEST_PLL_BUCKET_STARTBIT, ATTR_NEST_PLL_BUCKET_LENGTH >(l_read_1 & 0x7);
l_read_scratch_reg.writeBit<ATTR_CP_FILTER_BYPASS_BIT>(l_cp_filter_bypass & 0x1);
l_read_scratch_reg.writeBit<ATTR_SS_FILTER_BYPASS_BIT>(l_ss_filter_bypass & 0x1);
diff --git a/src/import/chips/p9/procedures/xml/attribute_info/nest_attributes.xml b/src/import/chips/p9/procedures/xml/attribute_info/nest_attributes.xml
index cbd788960..7d6d40b06 100644
--- a/src/import/chips/p9/procedures/xml/attribute_info/nest_attributes.xml
+++ b/src/import/chips/p9/procedures/xml/attribute_info/nest_attributes.xml
@@ -46,22 +46,36 @@
</attribute>
<!-- ********************************************************************** -->
<attribute>
+ <id>ATTR_FREQ_O_MHZ</id>
+ <targetType>TARGET_TYPE_PROC_CHIP</targetType>
+ <description>
+ The frequency of a processor's Obus mesh clocks, in MHz.
+ Provided by the MRW.
+ </description>
+ <valueType>uint32</valueType>
+ <platInit/>
+ <writeable/>
+ <array>4</array>
+</attribute>
+<!-- ********************************************************************** -->
+<attribute>
<id>ATTR_FREQ_A_MHZ</id>
<targetType>TARGET_TYPE_SYSTEM</targetType>
<description>
- The frequency of a processor's A link clocks, in MHz.
+ The frequency of a processor's Abus, in MHz.
This is the same for all chips in the system.
Provided by the MRW.
</description>
<valueType>uint32</valueType>
<platInit/>
+ <writeable/>
</attribute>
<!-- ********************************************************************** -->
<attribute>
<id>ATTR_FREQ_X_MHZ</id>
<targetType>TARGET_TYPE_SYSTEM</targetType>
<description>
- The frequency of a processor's X link clocks, in MHz.
+ The frequency of a processor's Xbus mesh clocks, in MHz.
This is the same for all chips in the system.
Provided by the MRW.
</description>
diff --git a/src/import/chips/p9/procedures/xml/attribute_info/pervasive_attributes.xml b/src/import/chips/p9/procedures/xml/attribute_info/pervasive_attributes.xml
index c3277e5c0..15ce68140 100644
--- a/src/import/chips/p9/procedures/xml/attribute_info/pervasive_attributes.xml
+++ b/src/import/chips/p9/procedures/xml/attribute_info/pervasive_attributes.xml
@@ -141,6 +141,46 @@
</attribute>
<attribute>
+ <id>ATTR_OB0_PLL_BUCKET</id>
+ <targetType>TARGET_TYPE_PROC_CHIP</targetType>
+ <description>Select OBUS0 pll setting from one of the supported frequencies</description>
+ <valueType>uint8</valueType>
+ <persistRuntime/>
+ <platInit/>
+ <writeable/>
+</attribute>
+
+<attribute>
+ <id>ATTR_OB1_PLL_BUCKET</id>
+ <targetType>TARGET_TYPE_PROC_CHIP</targetType>
+ <description>Select OBUS1 pll setting from one of the supported frequencies</description>
+ <valueType>uint8</valueType>
+ <persistRuntime/>
+ <platInit/>
+ <writeable/>
+</attribute>
+
+<attribute>
+ <id>ATTR_OB2_PLL_BUCKET</id>
+ <targetType>TARGET_TYPE_PROC_CHIP</targetType>
+ <description>Select OBUS2 pll setting from one of the supported frequencies</description>
+ <valueType>uint8</valueType>
+ <persistRuntime/>
+ <platInit/>
+ <writeable/>
+</attribute>
+
+<attribute>
+ <id>ATTR_OB3_PLL_BUCKET</id>
+ <targetType>TARGET_TYPE_PROC_CHIP</targetType>
+ <description>Select OBUS3 pll setting from one of the supported frequencies</description>
+ <valueType>uint8</valueType>
+ <persistRuntime/>
+ <platInit/>
+ <writeable/>
+</attribute>
+
+<attribute>
<id>ATTR_BOOT_FREQ_MULT</id>
<targetType>TARGET_TYPE_PROC_CHIP</targetType>
<description>EQ boot frequency multiplier
diff --git a/src/import/chips/p9/procedures/xml/error_info/p9_sbe_chiplet_pll_initf_errors.xml b/src/import/chips/p9/procedures/xml/error_info/p9_sbe_chiplet_pll_initf_errors.xml
index 09d8141b7..aab8eebc3 100755
--- a/src/import/chips/p9/procedures/xml/error_info/p9_sbe_chiplet_pll_initf_errors.xml
+++ b/src/import/chips/p9/procedures/xml/error_info/p9_sbe_chiplet_pll_initf_errors.xml
@@ -5,7 +5,7 @@
<!-- -->
<!-- OpenPOWER HostBoot Project -->
<!-- -->
-<!-- Contributors Listed Below - COPYRIGHT 2016 -->
+<!-- Contributors Listed Below - COPYRIGHT 2016,2017 -->
<!-- [+] International Business Machines Corp. -->
<!-- -->
<!-- -->
@@ -33,4 +33,15 @@
<ffdc>UNIT_POS</ffdc>
</hwpError>
<!-- ******************************************************************** -->
+ <hwpError>
+ <sbeError/>
+ <rc>RC_P9_SBE_CHIPLET_PLL_INITF_UNSUPPORTED_OBUS_BUCKET</rc>
+ <description>Unsupported OBUS PLL bucket select</description>
+ <ffdc>TARGET</ffdc>
+ <ffdc>OB0_BUCKET_INDEX</ffdc>
+ <ffdc>OB1_BUCKET_INDEX</ffdc>
+ <ffdc>OB2_BUCKET_INDEX</ffdc>
+ <ffdc>OB3_BUCKET_INDEX</ffdc>
+ </hwpError>
+ <!-- ******************************************************************** -->
</hwpErrors>
diff --git a/src/import/chips/p9/utils/imageProcs/p9_ringId.C b/src/import/chips/p9/utils/imageProcs/p9_ringId.C
index ccf7281af..1f4537cef 100644
--- a/src/import/chips/p9/utils/imageProcs/p9_ringId.C
+++ b/src/import/chips/p9/utils/imageProcs/p9_ringId.C
@@ -222,16 +222,17 @@ namespace OB0
{
const GenRingIdList RING_ID_LIST_COMMON[] =
{
- {"ob0_fure" , 0x00, 0x09, 0x09, EKB_RING , 0x0903700F},
- {"ob0_gptr" , 0x01, 0x09, 0x09, EKB_RING , 0x09037002},
- {"ob0_time" , 0x02, 0x09, 0x09, VPD_RING , 0x09037007},
- {"ob0_pll_gptr" , 0x03, 0x09, 0x09, EKB_RING , 0x09030012},
- {"ob0_pll_bndy" , 0x04, 0x09, 0x09, EKB_RING , 0x09030018},
- {"ob0_pll_func" , 0x05, 0x09, 0x09, EKB_RING , 0x09030010},
+ {"ob0_fure" , 0x00, 0x09, 0x09, EKB_RING , 0x0903700F},
+ {"ob0_gptr" , 0x01, 0x09, 0x09, EKB_RING , 0x09037002},
+ {"ob0_time" , 0x02, 0x09, 0x09, VPD_RING , 0x09037007},
+ {"ob0_pll_gptr" , 0x03, 0x09, 0x09, EKB_RING , 0x09030012},
+ {"ob0_pll_bndy_bucket_1" , 0x04, 0x09, 0x09, EKB_RING , 0x09030018},
+ {"ob0_pll_bndy_bucket_2" , 0x05, 0x09, 0x09, EKB_RING , 0x09030018},
+ {"ob0_pll_bndy_bucket_3" , 0x06, 0x09, 0x09, EKB_RING , 0x09030018},
};
const GenRingIdList RING_ID_LIST_INSTANCE[] =
{
- {"ob0_repr" , 0x0a, 0x09, 0x09, VPD_RING , 0x09037006},
+ {"ob0_repr" , 0x0a, 0x09, 0x09, VPD_RING , 0x09037006},
};
const RingVariantOrder RING_VARIANT_ORDER[] = { BASE, RL, NOT_VALID };
};
@@ -241,16 +242,17 @@ namespace OB1
{
const GenRingIdList RING_ID_LIST_COMMON[] =
{
- {"ob1_fure" , 0x00, 0x0a, 0x0a, EKB_RING , 0x0A03700F},
- {"ob1_gptr" , 0x01, 0x0a, 0x0a, EKB_RING , 0x0A037002},
- {"ob1_time" , 0x02, 0x0a, 0x0a, VPD_RING , 0x0A037007},
- {"ob1_pll_gptr" , 0x03, 0x0a, 0x0a, EKB_RING , 0x0A030012},
- {"ob1_pll_bndy" , 0x04, 0x0a, 0x0a, EKB_RING , 0x0A030018},
- {"ob1_pll_func" , 0x05, 0x0a, 0x0a, EKB_RING , 0x0A030010},
+ {"ob1_fure" , 0x00, 0x0a, 0x0a, EKB_RING , 0x0A03700F},
+ {"ob1_gptr" , 0x01, 0x0a, 0x0a, EKB_RING , 0x0A037002},
+ {"ob1_time" , 0x02, 0x0a, 0x0a, VPD_RING , 0x0A037007},
+ {"ob1_pll_gptr" , 0x03, 0x0a, 0x0a, EKB_RING , 0x0A030012},
+ {"ob1_pll_bndy_bucket_1" , 0x04, 0x0a, 0x0a, EKB_RING , 0x0A030018},
+ {"ob1_pll_bndy_bucket_2" , 0x05, 0x0a, 0x0a, EKB_RING , 0x0A030018},
+ {"ob1_pll_bndy_bucket_3" , 0x06, 0x0a, 0x0a, EKB_RING , 0x0A030018},
};
const GenRingIdList RING_ID_LIST_INSTANCE[] =
{
- {"ob1_repr" , 0x0a, 0x0a, 0x0a, VPD_RING , 0x0A037006},
+ {"ob1_repr" , 0x0a, 0x0a, 0x0a, VPD_RING , 0x0A037006},
};
const RingVariantOrder RING_VARIANT_ORDER[] = { BASE, RL, NOT_VALID };
};
@@ -260,16 +262,17 @@ namespace OB2
{
const GenRingIdList RING_ID_LIST_COMMON[] =
{
- {"ob2_fure" , 0x00, 0x0b, 0x0b, EKB_RING , 0x0B03700F},
- {"ob2_gptr" , 0x01, 0x0b, 0x0b, EKB_RING , 0x0B037002},
- {"ob2_time" , 0x02, 0x0b, 0x0b, VPD_RING , 0x0B037007},
- {"ob2_pll_gptr" , 0x03, 0x0b, 0x0b, EKB_RING , 0x0B030012},
- {"ob2_pll_bndy" , 0x04, 0x0b, 0x0b, EKB_RING , 0x0B030018},
- {"ob2_pll_func" , 0x05, 0x0b, 0x0b, EKB_RING , 0x0B030010},
+ {"ob2_fure" , 0x00, 0x0b, 0x0b, EKB_RING , 0x0B03700F},
+ {"ob2_gptr" , 0x01, 0x0b, 0x0b, EKB_RING , 0x0B037002},
+ {"ob2_time" , 0x02, 0x0b, 0x0b, VPD_RING , 0x0B037007},
+ {"ob2_pll_gptr" , 0x03, 0x0b, 0x0b, EKB_RING , 0x0B030012},
+ {"ob2_pll_bndy_bucket_1" , 0x04, 0x0b, 0x0b, EKB_RING , 0x0B030018},
+ {"ob2_pll_bndy_bucket_2" , 0x05, 0x0b, 0x0b, EKB_RING , 0x0B030018},
+ {"ob2_pll_bndy_bucket_3" , 0x06, 0x0b, 0x0b, EKB_RING , 0x0B030018},
};
const GenRingIdList RING_ID_LIST_INSTANCE[] =
{
- {"ob2_repr" , 0x0a, 0x0b, 0x0b, VPD_RING , 0x0B037006},
+ {"ob2_repr" , 0x0a, 0x0b, 0x0b, VPD_RING , 0x0B037006},
};
const RingVariantOrder RING_VARIANT_ORDER[] = { BASE, RL, NOT_VALID };
};
@@ -279,16 +282,17 @@ namespace OB3
{
const GenRingIdList RING_ID_LIST_COMMON[] =
{
- {"ob3_fure" , 0x00, 0x0c, 0x0c, EKB_RING , 0x0C03700F},
- {"ob3_gptr" , 0x01, 0x0c, 0x0c, EKB_RING , 0x0C037002},
- {"ob3_time" , 0x02, 0x0c, 0x0c, VPD_RING , 0x0C037007},
- {"ob3_pll_gptr" , 0x03, 0x0c, 0x0c, EKB_RING , 0x0C030012},
- {"ob3_pll_bndy" , 0x04, 0x0c, 0x0c, EKB_RING , 0x0C030018},
- {"ob3_pll_func" , 0x05, 0x0c, 0x0c, EKB_RING , 0x0C030010},
+ {"ob3_fure" , 0x00, 0x0c, 0x0c, EKB_RING , 0x0C03700F},
+ {"ob3_gptr" , 0x01, 0x0c, 0x0c, EKB_RING , 0x0C037002},
+ {"ob3_time" , 0x02, 0x0c, 0x0c, VPD_RING , 0x0C037007},
+ {"ob3_pll_gptr" , 0x03, 0x0c, 0x0c, EKB_RING , 0x0C030012},
+ {"ob3_pll_bndy_bucket_1" , 0x04, 0x0c, 0x0c, EKB_RING , 0x0C030018},
+ {"ob3_pll_bndy_bucket_2" , 0x05, 0x0c, 0x0c, EKB_RING , 0x0C030018},
+ {"ob3_pll_bndy_bucket_3" , 0x06, 0x0c, 0x0c, EKB_RING , 0x0C030018},
};
const GenRingIdList RING_ID_LIST_INSTANCE[] =
{
- {"ob3_repr" , 0x0a, 0x0c, 0x0c, VPD_RING , 0x0C037006},
+ {"ob3_repr" , 0x0a, 0x0c, 0x0c, VPD_RING , 0x0C037006},
};
const RingVariantOrder RING_VARIANT_ORDER[] = { BASE, RL, NOT_VALID };
};
diff --git a/src/import/chips/p9/utils/imageProcs/p9_ringId.H b/src/import/chips/p9/utils/imageProcs/p9_ringId.H
index 93927e483..d3a1ddeaa 100644
--- a/src/import/chips/p9/utils/imageProcs/p9_ringId.H
+++ b/src/import/chips/p9/utils/imageProcs/p9_ringId.H
@@ -533,7 +533,9 @@ enum RingOffset
ob0_time = 2,
ob0_pll_gptr = 3,
ob0_pll_bndy = 4,
- ob0_pll_func = 5,
+ ob0_pll_bndy_bucket_1 = 4,
+ ob0_pll_bndy_bucket_2 = 5,
+ ob0_pll_bndy_bucket_3 = 6,
// Instance Rings
ob0_repr = (0 | INSTANCE_RING_MARK)
};
@@ -541,7 +543,7 @@ enum RingOffset
static const CHIPLET_DATA g_ob0Data =
{
9, // O-Bus Chiplet ID range is 9 - 12. The base ID is 9.
- 6, // 6 common rings for OB Chiplet
+ 7, // 7 common rings for OB Chiplet
1, // 1 instance specific rings for each OB chiplet
1
};
@@ -563,7 +565,9 @@ enum RingOffset
ob1_time = 2,
ob1_pll_gptr = 3,
ob1_pll_bndy = 4,
- ob1_pll_func = 5,
+ ob1_pll_bndy_bucket_1 = 4,
+ ob1_pll_bndy_bucket_2 = 5,
+ ob1_pll_bndy_bucket_3 = 6,
// Instance Rings
ob1_repr = (0 | INSTANCE_RING_MARK)
};
@@ -571,7 +575,7 @@ enum RingOffset
static const CHIPLET_DATA g_ob1Data =
{
10, // O-Bus Chiplet ID range is 9 - 12. The base ID is 9.
- 6, // 6 common rings for OB Chiplet
+ 7, // 7 common rings for OB Chiplet
1, // 1 instance specific rings for each OB chiplet
1
};
@@ -594,7 +598,9 @@ enum RingOffset
ob2_time = 2,
ob2_pll_gptr = 3,
ob2_pll_bndy = 4,
- ob2_pll_func = 5,
+ ob2_pll_bndy_bucket_1 = 4,
+ ob2_pll_bndy_bucket_2 = 5,
+ ob2_pll_bndy_bucket_3 = 6,
// Instance Rings
ob2_repr = (0 | INSTANCE_RING_MARK)
};
@@ -602,7 +608,7 @@ enum RingOffset
static const CHIPLET_DATA g_ob2Data =
{
11, // O-Bus Chiplet ID range is 9 - 12. The base ID is 9.
- 6, // 6 common rings for OB Chiplet
+ 7, // 7 common rings for OB Chiplet
1, // 1 instance specific rings for each OB chiplet
1
};
@@ -624,7 +630,9 @@ enum RingOffset
ob3_time = 2,
ob3_pll_gptr = 3,
ob3_pll_bndy = 4,
- ob3_pll_func = 5,
+ ob3_pll_bndy_bucket_1 = 4,
+ ob3_pll_bndy_bucket_2 = 5,
+ ob3_pll_bndy_bucket_3 = 6,
// Instance Rings
ob3_repr = (0 | INSTANCE_RING_MARK)
};
@@ -632,7 +640,7 @@ enum RingOffset
static const CHIPLET_DATA g_ob3Data =
{
12, // O-Bus Chiplet ID range is 9 - 12. The base ID is 9.
- 6, // 10 common rings for OB Chiplet
+ 7, // 7 common rings for OB Chiplet
1, // 1 instance specific rings for each OB chiplet
1
};
@@ -999,37 +1007,37 @@ static const ringProperties_t RING_PROPERTIES[NUM_RING_IDS] =
{ OB0::ob0_time , "ob0_time" , OB0_TYPE }, // 120
{ OB0::ob0_pll_gptr , "ob0_pll_gptr" , OB0_TYPE }, // 121
{ OB0::ob0_pll_bndy , "ob0_pll_bndy" , OB0_TYPE }, // 122
- { OB0::ob0_pll_func , "ob0_pll_func" , OB0_TYPE }, // 123
- { OB0::ob0_repr , "ob0_repr" , OB0_TYPE }, // 124
- { INVALID_RING , "invalid" , OB0_TYPE }, // 125
- { INVALID_RING , "invalid" , OB0_TYPE }, // 126
+ { OB0::ob0_pll_bndy_bucket_1 , "ob0_pll_bndy_bucket_1" , OB0_TYPE }, // 123
+ { OB0::ob0_pll_bndy_bucket_2 , "ob0_pll_bndy_bucket_2" , OB0_TYPE }, // 124
+ { OB0::ob0_pll_bndy_bucket_3 , "ob0_pll_bndy_bucket_3" , OB0_TYPE }, // 125
+ { OB0::ob0_repr , "ob0_repr" , OB0_TYPE }, // 126
{ OB1::ob1_fure , "ob1_fure" , OB1_TYPE }, // 127
{ OB1::ob1_gptr , "ob1_gptr" , OB1_TYPE }, // 128
{ OB1::ob1_time , "ob1_time" , OB1_TYPE }, // 129
{ OB1::ob1_pll_gptr , "ob1_pll_gptr" , OB1_TYPE }, // 130
{ OB1::ob1_pll_bndy , "ob1_pll_bndy" , OB1_TYPE }, // 131
- { OB1::ob1_pll_func , "ob1_pll_func" , OB1_TYPE }, // 132
- { OB1::ob1_repr , "ob1_repr" , OB1_TYPE }, // 133
- { INVALID_RING , "invalid" , OB1_TYPE }, // 134
- { INVALID_RING , "invalid" , OB1_TYPE }, // 135
+ { OB1::ob1_pll_bndy_bucket_1 , "ob1_pll_bndy_bucket_1" , OB1_TYPE }, // 132
+ { OB1::ob1_pll_bndy_bucket_2 , "ob1_pll_bndy_bucket_2" , OB1_TYPE }, // 133
+ { OB1::ob1_pll_bndy_bucket_3 , "ob1_pll_bndy_bucket_3" , OB1_TYPE }, // 134
+ { OB1::ob1_repr , "ob1_repr" , OB1_TYPE }, // 135
{ OB2::ob2_fure , "ob2_fure" , OB2_TYPE }, // 136
{ OB2::ob2_gptr , "ob2_gptr" , OB2_TYPE }, // 137
{ OB2::ob2_time , "ob2_time" , OB2_TYPE }, // 138
{ OB2::ob2_pll_gptr , "ob2_pll_gptr" , OB2_TYPE }, // 139
{ OB2::ob2_pll_bndy , "ob2_pll_bndy" , OB2_TYPE }, // 140
- { OB2::ob2_pll_func , "ob2_pll_func" , OB2_TYPE }, // 141
- { OB2::ob2_repr , "ob2_repr" , OB2_TYPE }, // 142
- { INVALID_RING , "invalid" , OB2_TYPE }, // 143
- { INVALID_RING , "invalid" , OB2_TYPE }, // 144
+ { OB2::ob2_pll_bndy_bucket_1 , "ob2_pll_bndy_bucket_1" , OB2_TYPE }, // 141
+ { OB2::ob2_pll_bndy_bucket_2 , "ob2_pll_bndy_bucket_2" , OB2_TYPE }, // 142
+ { OB2::ob2_pll_bndy_bucket_3 , "ob2_pll_bndy_bucket_3" , OB2_TYPE }, // 143
+ { OB2::ob2_repr , "ob2_repr" , OB2_TYPE }, // 144
{ OB3::ob3_fure , "ob3_fure" , OB3_TYPE }, // 145
{ OB3::ob3_gptr , "ob3_gptr" , OB3_TYPE }, // 146
{ OB3::ob3_time , "ob3_time" , OB3_TYPE }, // 147
{ OB3::ob3_pll_gptr , "ob3_pll_gptr" , OB3_TYPE }, // 148
{ OB3::ob3_pll_bndy , "ob3_pll_bndy" , OB3_TYPE }, // 149
- { OB3::ob3_pll_func , "ob3_pll_func" , OB3_TYPE }, // 150
- { OB3::ob3_repr , "ob3_repr" , OB3_TYPE }, // 151
- { INVALID_RING , "invalid" , OB3_TYPE }, // 152
- { INVALID_RING , "invalid" , OB3_TYPE }, // 153
+ { OB3::ob3_pll_bndy_bucket_1 , "ob3_pll_bndy_bucket_1" , OB3_TYPE }, // 150
+ { OB3::ob3_pll_bndy_bucket_2 , "ob3_pll_bndy_bucket_2" , OB3_TYPE }, // 151
+ { OB3::ob3_pll_bndy_bucket_3 , "ob3_pll_bndy_bucket_3" , OB3_TYPE }, // 152
+ { OB3::ob3_repr , "ob3_repr" , OB3_TYPE }, // 153
{ PCI0::pci0_fure , "pci0_fure" , PCI0_TYPE }, // 154
{ PCI0::pci0_gptr , "pci0_gptr" , PCI0_TYPE }, // 155
{ PCI0::pci0_time , "pci0_time" , PCI0_TYPE }, // 156
@@ -1257,37 +1265,37 @@ static const ringProperties_t RING_PROPERTIES[NUM_RING_IDS] =
{ OB0::ob0_time , OB0_TYPE }, // 120
{ OB0::ob0_pll_gptr , OB0_TYPE }, // 121
{ OB0::ob0_pll_bndy , OB0_TYPE }, // 122
- { OB0::ob0_pll_func , OB0_TYPE }, // 123
- { OB0::ob0_repr , OB0_TYPE }, // 124
- { INVALID_RING , OB0_TYPE }, // 125
- { INVALID_RING , OB0_TYPE }, // 126
+ { OB0::ob0_pll_bndy_bucket_1 , OB0_TYPE }, // 123
+ { OB0::ob0_pll_bndy_bucket_2 , OB0_TYPE }, // 124
+ { OB0::ob0_pll_bndy_bucket_3 , OB0_TYPE }, // 125
+ { OB0::ob0_repr , OB0_TYPE }, // 126
{ OB1::ob1_fure , OB1_TYPE }, // 127
{ OB1::ob1_gptr , OB1_TYPE }, // 128
{ OB1::ob1_time , OB1_TYPE }, // 129
{ OB1::ob1_pll_gptr , OB1_TYPE }, // 130
{ OB1::ob1_pll_bndy , OB1_TYPE }, // 131
- { OB1::ob1_pll_func , OB1_TYPE }, // 132
- { OB1::ob1_repr , OB1_TYPE }, // 133
- { INVALID_RING , OB1_TYPE }, // 134
- { INVALID_RING , OB1_TYPE }, // 135
+ { OB1::ob1_pll_bndy_bucket_1 , OB1_TYPE }, // 132
+ { OB1::ob1_pll_bndy_bucket_2 , OB1_TYPE }, // 133
+ { OB1::ob1_pll_bndy_bucket_3 , OB1_TYPE }, // 134
+ { OB1::ob1_repr , OB1_TYPE }, // 135
{ OB2::ob2_fure , OB2_TYPE }, // 136
{ OB2::ob2_gptr , OB2_TYPE }, // 137
{ OB2::ob2_time , OB2_TYPE }, // 138
{ OB2::ob2_pll_gptr , OB2_TYPE }, // 139
{ OB2::ob2_pll_bndy , OB2_TYPE }, // 140
- { OB2::ob2_pll_func , OB2_TYPE }, // 141
- { OB2::ob2_repr , OB2_TYPE }, // 142
- { INVALID_RING , OB2_TYPE }, // 143
- { INVALID_RING , OB2_TYPE }, // 144
+ { OB2::ob2_pll_bndy_bucket_1 , OB2_TYPE }, // 141
+ { OB2::ob2_pll_bndy_bucket_2 , OB2_TYPE }, // 142
+ { OB2::ob2_pll_bndy_bucket_3 , OB2_TYPE }, // 143
+ { OB2::ob2_repr , OB2_TYPE }, // 144
{ OB3::ob3_fure , OB3_TYPE }, // 145
{ OB3::ob3_gptr , OB3_TYPE }, // 146
{ OB3::ob3_time , OB3_TYPE }, // 147
{ OB3::ob3_pll_gptr , OB3_TYPE }, // 148
{ OB3::ob3_pll_bndy , OB3_TYPE }, // 149
- { OB3::ob3_pll_func , OB3_TYPE }, // 150
- { OB3::ob3_repr , OB3_TYPE }, // 151
- { INVALID_RING , OB3_TYPE }, // 152
- { INVALID_RING , OB3_TYPE }, // 153
+ { OB3::ob3_pll_bndy_bucket_1 , OB3_TYPE }, // 150
+ { OB3::ob3_pll_bndy_bucket_2 , OB3_TYPE }, // 151
+ { OB3::ob3_pll_bndy_bucket_3 , OB3_TYPE }, // 152
+ { OB3::ob3_repr , OB3_TYPE }, // 153
{ PCI0::pci0_fure , PCI0_TYPE }, // 154
{ PCI0::pci0_gptr , PCI0_TYPE }, // 155
{ PCI0::pci0_time , PCI0_TYPE }, // 156
diff --git a/src/import/chips/p9/utils/imageProcs/p9_ring_id.h b/src/import/chips/p9/utils/imageProcs/p9_ring_id.h
index bcd0b7c59..efd63394e 100644
--- a/src/import/chips/p9/utils/imageProcs/p9_ring_id.h
+++ b/src/import/chips/p9/utils/imageProcs/p9_ring_id.h
@@ -179,49 +179,53 @@ enum RingID
ob0_gptr = 119,
ob0_time = 120,
ob0_pll_gptr = 121,
- ob0_pll_bndy = 122,
- ob0_pll_func = 123,
+ ob0_pll_bndy = 122,
+ ob0_pll_bndy_bucket_1 = 123,
+ ob0_pll_bndy_bucket_2 = 124,
+ ob0_pll_bndy_bucket_3 = 125,
// OB Chiplet Rings
// OB0, OB1, OB2 and OB3 instance specific Ring
- ob0_repr = 124,
- // values 125-126 unused
+ ob0_repr = 126,
ob1_fure = 127,
ob1_gptr = 128,
ob1_time = 129,
ob1_pll_gptr = 130,
ob1_pll_bndy = 131,
- ob1_pll_func = 132,
+ ob1_pll_bndy_bucket_1 = 132,
+ ob1_pll_bndy_bucket_2 = 133,
+ ob1_pll_bndy_bucket_3 = 134,
// OB Chiplet Rings
// OB0, OB1, OB2 and OB3 instance specific Ring
- ob1_repr = 133,
- // values 134-135 unused
+ ob1_repr = 135,
ob2_fure = 136,
ob2_gptr = 137,
ob2_time = 138,
ob2_pll_gptr = 139,
ob2_pll_bndy = 140,
- ob2_pll_func = 141,
+ ob2_pll_bndy_bucket_1 = 141,
+ ob2_pll_bndy_bucket_2 = 142,
+ ob2_pll_bndy_bucket_3 = 143,
// OB Chiplet Rings
// OB0, OB1, OB2 and OB3 instance specific Ring
- ob2_repr = 142,
- // values 143-144 unused
+ ob2_repr = 144,
ob3_fure = 145,
ob3_gptr = 146,
ob3_time = 147,
ob3_pll_gptr = 148,
ob3_pll_bndy = 149,
- ob3_pll_func = 150,
+ ob3_pll_bndy_bucket_1 = 150,
+ ob3_pll_bndy_bucket_2 = 151,
+ ob3_pll_bndy_bucket_3 = 152,
// OB Chiplet Rings
// OB0, OB1, OB2 and OB3 instance specific Ring
- ob3_repr = 151,
- // values 152-153 unused
+ ob3_repr = 153,
// PCI Chiplet Rings
// PCI0 Common Rings
diff --git a/src/usr/targeting/common/xmltohb/attribute_types.xml b/src/usr/targeting/common/xmltohb/attribute_types.xml
index f875ca903..8ee6cb0f4 100644
--- a/src/usr/targeting/common/xmltohb/attribute_types.xml
+++ b/src/usr/targeting/common/xmltohb/attribute_types.xml
@@ -2701,6 +2701,7 @@
</uint32_t></simpleType>
<persistency>non-volatile</persistency>
<readable/>
+ <writeable/><!-- Only because SBE needs it -->
<hwpfToHbAttrMap>
<id>ATTR_FREQ_A_MHZ</id>
<macro>DIRECT</macro>
@@ -2708,6 +2709,95 @@
</attribute>
<attribute>
+ <id>FREQ_O_MHZ</id>
+ <description>
+ The frequency of a processor's Obus mesh clocks, in MHz.
+ Provided by the MRW.
+ </description>
+ <simpleType>
+ <uint32_t>
+ <default>1611</default>
+ </uint32_t>
+ <array>4</array>
+ </simpleType>
+ <persistency>non-volatile</persistency>
+ <readable/>
+ <writeable/><!-- Only because SBE needs it -->
+ <hwpfToHbAttrMap>
+ <id>ATTR_FREQ_O_MHZ</id>
+ <macro>DIRECT</macro>
+ </hwpfToHbAttrMap>
+</attribute>
+
+<attribute>
+ <id>OB0_PLL_BUCKET</id>
+ <description>
+ Select OBUS0 pll setting from one of the supported frequencies
+ </description>
+ <simpleType>
+ <uint8_t><default>1</default></uint8_t>
+ </simpleType>
+ <persistency>non-volatile</persistency>
+ <readable/>
+ <writeable/><!-- Only because SBE needs it -->
+ <hwpfToHbAttrMap>
+ <id>ATTR_OB0_PLL_BUCKET</id>
+ <macro>DIRECT</macro>
+ </hwpfToHbAttrMap>
+</attribute>
+
+<attribute>
+ <id>OB1_PLL_BUCKET</id>
+ <description>
+ Select OBUS1 pll setting from one of the supported frequencies
+ </description>
+ <simpleType>
+ <uint8_t><default>1</default></uint8_t>
+ </simpleType>
+ <persistency>non-volatile</persistency>
+ <readable/>
+ <writeable/><!-- Only because SBE needs it -->
+ <hwpfToHbAttrMap>
+ <id>ATTR_OB1_PLL_BUCKET</id>
+ <macro>DIRECT</macro>
+ </hwpfToHbAttrMap>
+</attribute>
+
+<attribute>
+ <id>OB2_PLL_BUCKET</id>
+ <description>
+ Select OBUS2 pll setting from one of the supported frequencies
+ </description>
+ <simpleType>
+ <uint8_t><default>1</default></uint8_t>
+ </simpleType>
+ <persistency>non-volatile</persistency>
+ <readable/>
+ <writeable/><!-- Only because SBE needs it -->
+ <hwpfToHbAttrMap>
+ <id>ATTR_OB2_PLL_BUCKET</id>
+ <macro>DIRECT</macro>
+ </hwpfToHbAttrMap>
+</attribute>
+
+<attribute>
+ <id>OB3_PLL_BUCKET</id>
+ <description>
+ Select OBUS3 pll setting from one of the supported frequencies
+ </description>
+ <simpleType>
+ <uint8_t><default>1</default></uint8_t>
+ </simpleType>
+ <persistency>non-volatile</persistency>
+ <readable/>
+ <writeable/><!-- Only because SBE needs it -->
+ <hwpfToHbAttrMap>
+ <id>ATTR_OB3_PLL_BUCKET</id>
+ <macro>DIRECT</macro>
+ </hwpfToHbAttrMap>
+</attribute>
+
+<attribute>
<id>FREQ_X_MHZ</id>
<description>
System attribute.
diff --git a/src/usr/targeting/common/xmltohb/target_types.xml b/src/usr/targeting/common/xmltohb/target_types.xml
index 38085de50..0e9ac7d6d 100755
--- a/src/usr/targeting/common/xmltohb/target_types.xml
+++ b/src/usr/targeting/common/xmltohb/target_types.xml
@@ -1100,6 +1100,11 @@
<attribute><id>MC_SYNC_MODE</id></attribute>
<attribute><id>CDM_DOMAIN</id><default>FABRIC</default></attribute>
<attribute><id>OBUS_RATIO_VALUE</id></attribute>
+ <attribute><id>OB0_PLL_BUCKET</id></attribute>
+ <attribute><id>OB1_PLL_BUCKET</id></attribute>
+ <attribute><id>OB2_PLL_BUCKET</id></attribute>
+ <attribute><id>OB3_PLL_BUCKET</id></attribute>
+ <attribute><id>FREQ_O_MHZ</id></attribute>
<attribute><id>FUNCTIONAL_EQ_EC_VALID</id></attribute>
<attribute><id>FW_MODE_FLAGS_VALID</id></attribute>
<attribute><id>ISTEP_MODE</id></attribute>
OpenPOWER on IntegriCloud