summaryrefslogtreecommitdiffstats
path: root/src/import
diff options
context:
space:
mode:
Diffstat (limited to 'src/import')
-rw-r--r--src/import/chips/p9/procedures/hwp/perv/p9_sbe_chiplet_reset.C12
-rw-r--r--src/import/chips/p9/procedures/hwp/perv/p9_sbe_startclock_chiplets.C93
-rw-r--r--src/import/chips/p9/procedures/xml/attribute_info/chip_ec_attributes.xml43
-rw-r--r--src/import/chips/p9/procedures/xml/attribute_info/p9_sbe_attributes.xml4
4 files changed, 111 insertions, 41 deletions
diff --git a/src/import/chips/p9/procedures/hwp/perv/p9_sbe_chiplet_reset.C b/src/import/chips/p9/procedures/hwp/perv/p9_sbe_chiplet_reset.C
index faac257b..db977093 100644
--- a/src/import/chips/p9/procedures/hwp/perv/p9_sbe_chiplet_reset.C
+++ b/src/import/chips/p9/procedures/hwp/perv/p9_sbe_chiplet_reset.C
@@ -346,18 +346,6 @@ fapi2::ReturnCode p9_sbe_chiplet_reset(const
for (auto& targ : l_perv_func)
{
- // OBUS
- uint32_t l_chipletID = targ.getChipletNumber();
-
- if(l_chipletID >= OB0_CHIPLET_ID && l_chipletID <= OB3_CHIPLET_ID)
- {
- FAPI_DBG("Drop clk async reset for N3, Mc and Obus chiplets");
- FAPI_TRY(p9_sbe_chiplet_reset_nest_ob_async_reset(targ));
- }
- }
-
- for (auto& targ : l_perv_func)
- {
//MC
uint32_t l_chipletID = targ.getChipletNumber();
diff --git a/src/import/chips/p9/procedures/hwp/perv/p9_sbe_startclock_chiplets.C b/src/import/chips/p9/procedures/hwp/perv/p9_sbe_startclock_chiplets.C
index d522b811..6b42814f 100644
--- a/src/import/chips/p9/procedures/hwp/perv/p9_sbe_startclock_chiplets.C
+++ b/src/import/chips/p9/procedures/hwp/perv/p9_sbe_startclock_chiplets.C
@@ -66,6 +66,9 @@ static fapi2::ReturnCode p9_sbe_startclock_chiplets_meshctrl_setup(
const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet,
const bool value);
+static fapi2::ReturnCode p9_sbe_startclock_chiplets_ob_async_reset(
+ const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet);
+
static fapi2::ReturnCode p9_sbe_startclock_chiplets_set_ob_ratio(
const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet,
const uint8_t i_attr);
@@ -91,6 +94,7 @@ fapi2::ReturnCode p9_sbe_startclock_chiplets(const
fapi2::buffer<uint8_t> l_attr_obus_ratio;
fapi2::buffer<uint16_t> l_attr_pg;
bool l_obus_chiplets = false;
+ uint8_t l_hw404391_scom = false;
FAPI_DBG("p9_sbe_startclock_chiplets: Entering ...");
@@ -105,6 +109,9 @@ fapi2::ReturnCode p9_sbe_startclock_chiplets(const
FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_OBUS_RATIO_VALUE, i_target_chip,
l_attr_obus_ratio));
+ FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_CHIP_EC_FEATURE_HW404391_SCOM, i_target_chip,
+ l_hw404391_scom));
+
FAPI_TRY(p9_sbe_common_get_pg_vector(i_target_chip, l_pg_vector));
FAPI_DBG("partial good targets vector: %#018lX", l_pg_vector);
@@ -156,39 +163,44 @@ fapi2::ReturnCode p9_sbe_startclock_chiplets(const
// OBUS
if(l_obus_chiplets)
{
-
- FAPI_TRY(p9_perv_sbe_cmn_regions_setup_64(targ, REGION1_PBIOOA, l_regions));
- FAPI_DBG("Regions value: %#018lX", l_regions);
-
- FAPI_DBG("Set nv2 iovalid");
- l_data64.flush<0>();
- l_data64.setBit<PERV_1_CPLT_CONF1_IOVALID_6D>();
- l_data64.setBit<PERV_1_CPLT_CONF1_IOVALID_7D>();
- l_data64.setBit<PERV_1_CPLT_CONF1_IOVALID_8D>();
- FAPI_TRY(fapi2::putScom(targ, PERV_CPLT_CONF1_OR, l_data64));
-
- FAPI_DBG("drop chiplet fence for OB");
- FAPI_TRY(p9_sbe_startclock_chiplets_fence_drop(targ));
-
- FAPI_DBG("Clock start : region 1 pbiooa to propagate the clock select for nv logic");
- FAPI_TRY(p9_sbe_common_clock_start_stop(targ, CLOCK_CMD_START,
- DONT_STARTSLAVE, DONT_STARTMASTER, l_regions, CLOCK_TYPES));
-
- FAPI_DBG("Clock stop : region 1 pbiooa ");
- FAPI_TRY(p9_sbe_common_clock_start_stop(targ, CLOCK_CMD_STOP,
- DONT_STARTSLAVE, DONT_STARTMASTER, l_regions, CLOCK_TYPES));
-
- FAPI_DBG("raise chiplet fence for OB");
- l_data_cplt_fence.flush<0>();
- l_data_cplt_fence.setBit<PERV_1_NET_CTRL0_FENCE_EN>();
- FAPI_TRY(fapi2::putScom(targ, PERV_NET_CTRL0_WOR, l_data_cplt_fence));
-
- FAPI_DBG("Clear nv2 iovalid");
- FAPI_TRY(fapi2::putScom(targ, PERV_CPLT_CONF1_CLEAR, l_data64));
+ if (l_hw404391_scom)
+ {
+ FAPI_TRY(p9_perv_sbe_cmn_regions_setup_64(targ, REGION1_PBIOOA, l_regions));
+ FAPI_DBG("Regions value: %#018lX", l_regions);
+
+ FAPI_DBG("Set nv2 iovalid");
+ l_data64.flush<0>();
+ l_data64.setBit<PERV_1_CPLT_CONF1_IOVALID_6D>();
+ l_data64.setBit<PERV_1_CPLT_CONF1_IOVALID_7D>();
+ l_data64.setBit<PERV_1_CPLT_CONF1_IOVALID_8D>();
+ FAPI_TRY(fapi2::putScom(targ, PERV_CPLT_CONF1_OR, l_data64));
+
+ FAPI_DBG("drop chiplet fence for OB");
+ FAPI_TRY(p9_sbe_startclock_chiplets_fence_drop(targ));
+
+ FAPI_DBG("Clock start : region 1 pbiooa to propagate the clock select for nv logic");
+ FAPI_TRY(p9_sbe_common_clock_start_stop(targ, CLOCK_CMD_START,
+ DONT_STARTSLAVE, DONT_STARTMASTER, l_regions, CLOCK_TYPES));
+
+ FAPI_DBG("Clock stop : region 1 pbiooa ");
+ FAPI_TRY(p9_sbe_common_clock_start_stop(targ, CLOCK_CMD_STOP,
+ DONT_STARTSLAVE, DONT_STARTMASTER, l_regions, CLOCK_TYPES));
+
+ FAPI_DBG("raise chiplet fence for OB");
+ l_data_cplt_fence.flush<0>();
+ l_data_cplt_fence.setBit<PERV_1_NET_CTRL0_FENCE_EN>();
+ FAPI_TRY(fapi2::putScom(targ, PERV_NET_CTRL0_WOR, l_data_cplt_fence));
+
+ FAPI_DBG("Clear nv2 iovalid");
+ FAPI_TRY(fapi2::putScom(targ, PERV_CPLT_CONF1_CLEAR, l_data64));
+ }
FAPI_DBG("Meshctrl setup");
FAPI_TRY(p9_sbe_startclock_chiplets_meshctrl_setup(targ, ((l_ndl_meshctrl_setup >> (12 - l_chipletID)) & 1)));
+ FAPI_DBG("Drop clk async reset for Obus chiplets");
+ FAPI_TRY(p9_sbe_startclock_chiplets_ob_async_reset(targ));
+
FAPI_DBG("Reset syncclk muxsel for obus chiplets");
FAPI_TRY(p9_sbe_startclock_chiplets_reset_syncclk_muxsel(targ));
@@ -283,6 +295,29 @@ fapi_try_exit:
return fapi2::current_err;
}
+/// @brief Dropping the net_ctrl0 clock_async_reset
+///
+/// @param[in] i_target_chiplet Reference to TARGET_TYPE_PERV target
+/// @return FAPI2_RC_SUCCESS if success, else error code.
+static fapi2::ReturnCode p9_sbe_startclock_chiplets_ob_async_reset(
+ const fapi2::Target<fapi2::TARGET_TYPE_PERV>& i_target_chiplet)
+{
+ fapi2::buffer<uint64_t> l_data64;
+ FAPI_INF("p9_sbe_startclock_chiplets_ob_async_reset: Entering ...");
+
+ //Setting NET_CTRL0 register value
+ l_data64.flush<1>();
+ //NET_CTRL0.CLK_ASYNC_RESET = 0
+ l_data64.clearBit<PERV_1_NET_CTRL0_CLK_ASYNC_RESET>();
+ FAPI_TRY(fapi2::putScom(i_target_chiplet, PERV_NET_CTRL0_WAND, l_data64));
+
+ FAPI_INF("p9_sbe_startclock_chiplets_ob_async_reset: Exiting ...");
+
+fapi_try_exit:
+ return fapi2::current_err;
+
+}
+
/// @brief set obus ratio
///
/// @param[in] i_target_chiplet Reference to TARGET_TYPE_PERV target
diff --git a/src/import/chips/p9/procedures/xml/attribute_info/chip_ec_attributes.xml b/src/import/chips/p9/procedures/xml/attribute_info/chip_ec_attributes.xml
index 94e172bc..5dfe5336 100644
--- a/src/import/chips/p9/procedures/xml/attribute_info/chip_ec_attributes.xml
+++ b/src/import/chips/p9/procedures/xml/attribute_info/chip_ec_attributes.xml
@@ -5671,4 +5671,47 @@
</chipEcFeature>
</attribute>
<!-- ******************************************************************** -->
+ <attribute>
+ <id>ATTR_CHIP_EC_FEATURE_HW404391_SCAN</id>>
+ <targetType>TARGET_TYPE_PROC_CHIP</targetType>
+ <description>
+ Nimbus DD2.1+: Workaround glxmux xstate issue by adjusting scan flush
+ state of selected latches in NVDL and PHY logic
+ </description>
+ <chipEcFeature>
+ <chip>
+ <name>ENUM_ATTR_NAME_NIMBUS</name>
+ <ec>
+ <value>0x21</value>
+ <test>GREATER_THAN_OR_EQUAL</test>
+ </ec>
+ </chip>
+ </chipEcFeature>
+ </attribute>
+ <!-- ******************************************************************** -->
+ <attribute>
+ <id>ATTR_CHIP_EC_FEATURE_HW404391_SCOM</id>>
+ <targetType>TARGET_TYPE_PROC_CHIP,TARGET_TYPE_PROC_CHIP</targetType>
+ <description>
+ Nimbus DD2.0 + Cumulus: Workaround glxmux xstate issue by applying SCOM
+ sequence
+ </description>
+ <chipEcFeature>
+ <chip>
+ <name>ENUM_ATTR_NAME_NIMBUS</name>
+ <ec>
+ <value>0x20</value>
+ <test>EQUAL</test>
+ </ec>
+ </chip>
+ <chip>
+ <name>ENUM_ATTR_NAME_CUMULUS</name>
+ <ec>
+ <value>0x10</value>
+ <test>GREATER_THAN_OR_EQUAL</test>
+ </ec>
+ </chip>
+ </chipEcFeature>
+ </attribute>
+ <!-- ******************************************************************** -->
</attributes>
diff --git a/src/import/chips/p9/procedures/xml/attribute_info/p9_sbe_attributes.xml b/src/import/chips/p9/procedures/xml/attribute_info/p9_sbe_attributes.xml
index ac308682..15de2e47 100644
--- a/src/import/chips/p9/procedures/xml/attribute_info/p9_sbe_attributes.xml
+++ b/src/import/chips/p9/procedures/xml/attribute_info/p9_sbe_attributes.xml
@@ -534,6 +534,10 @@ attribute tank
<virtual/>
</entry>
<entry>
+ <name>ATTR_CHIP_EC_FEATURE_HW404391_SCOM</name>
+ <virtual/>
+ </entry>
+ <entry>
<name>ATTR_SBE_ADDR_KEY_STASH_ADDR</name>
<value>0x0000000000000000</value>
</entry>
OpenPOWER on IntegriCloud