From 716de15c7be6f32174e0e92ff75823a83545445f Mon Sep 17 00:00:00 2001 From: Joe McGill Date: Sun, 19 Mar 2017 21:50:01 -0500 Subject: support customization of Nimbus DD1 PCI reference clock speed rename existing EC feature attribute, now serves as DD1N enable qualifying application of MRW-sourced ATTR_DD1_SLOW_PCI_REF_CLOCK: 0 = NORMAL = 100 MHz 1 = SLOW = 94 MHz MRW attribute is plumbed through SBE mailbox (scratch 5 bit 5, value inverted) and added to XIP customize CMVC-Prereq:1020384 Change-Id: I376f06d0d49ab3d39c965e3131d484cbe9535566 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/38129 Tested-by: PPE CI Tested-by: Jenkins Server Tested-by: Hostboot CI Reviewed-by: Thi N. Tran Reviewed-by: Joseph J. McGill Reviewed-by: Jennifer A. Stofer Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/38134 Tested-by: FSP CI Jenkins Reviewed-by: Sachin Gupta --- .../p9/procedures/hwp/perv/p9_sbe_attr_setup.C | 24 ++++++++++++++++++++++ .../p9/procedures/hwp/perv/p9_sbe_chiplet_reset.C | 14 +++++++++++++ 2 files changed, 38 insertions(+) (limited to 'src/import') diff --git a/src/import/chips/p9/procedures/hwp/perv/p9_sbe_attr_setup.C b/src/import/chips/p9/procedures/hwp/perv/p9_sbe_attr_setup.C index 41941df0..8ea0bb77 100644 --- a/src/import/chips/p9/procedures/hwp/perv/p9_sbe_attr_setup.C +++ b/src/import/chips/p9/procedures/hwp/perv/p9_sbe_attr_setup.C @@ -79,6 +79,7 @@ enum P9_SETUP_SBE_CONFIG_scratch4 ATTR_RISK_LEVEL_BIT = 2, ATTR_DISABLE_HBBL_VECTORS_BIT = 3, ATTR_MC_SYNC_MODE_BIT = 4, + ATTR_SLOW_PCI_REF_CLOCK_BIT = 5, // Scratch_reg_6 ATTR_PUMP_CHIP_IS_GROUP = 23, @@ -352,6 +353,7 @@ fapi2::ReturnCode p9_sbe_attr_setup(const uint8_t l_disable_hbbl_vectors = 0; uint32_t l_pll_mux = 0; uint8_t l_mc_sync_mode = 0; + uint8_t l_slow_pci_ref_clock = 0; if ( l_read_scratch8.getBit<4>() ) { @@ -390,6 +392,16 @@ fapi2::ReturnCode p9_sbe_attr_setup(const } l_read_scratch_reg.extract<4, 1, 7>(l_mc_sync_mode); + + if (l_read_scratch_reg.getBit()) + { + l_slow_pci_ref_clock = fapi2::ENUM_ATTR_DD1_SLOW_PCI_REF_CLOCK_NORMAL; + } + else + { + l_slow_pci_ref_clock = fapi2::ENUM_ATTR_DD1_SLOW_PCI_REF_CLOCK_SLOW; + } + l_read_scratch_reg.extract<12, 20, 0>(l_pll_mux); FAPI_DBG("Setting up SYSTEM_IPL_PHASE, RISK_LEVEL, SYS_FORCE_ALL_CORES"); @@ -398,6 +410,7 @@ fapi2::ReturnCode p9_sbe_attr_setup(const FAPI_TRY(FAPI_ATTR_SET(fapi2::ATTR_RISK_LEVEL, FAPI_SYSTEM, l_risk_level)); FAPI_TRY(FAPI_ATTR_SET(fapi2::ATTR_DISABLE_HBBL_VECTORS, FAPI_SYSTEM, l_disable_hbbl_vectors)); FAPI_TRY(FAPI_ATTR_SET(fapi2::ATTR_MC_SYNC_MODE, i_target_chip, l_mc_sync_mode)); + FAPI_TRY(FAPI_ATTR_SET(fapi2::ATTR_DD1_SLOW_PCI_REF_CLOCK, FAPI_SYSTEM, l_slow_pci_ref_clock)); FAPI_TRY(FAPI_ATTR_SET(fapi2::ATTR_CLOCK_PLL_MUX, i_target_chip, l_pll_mux)); } else @@ -410,6 +423,7 @@ fapi2::ReturnCode p9_sbe_attr_setup(const FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_RISK_LEVEL, FAPI_SYSTEM, l_risk_level)); FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_DISABLE_HBBL_VECTORS, FAPI_SYSTEM, l_disable_hbbl_vectors)); FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_MC_SYNC_MODE, i_target_chip, l_mc_sync_mode)); + FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_DD1_SLOW_PCI_REF_CLOCK, FAPI_SYSTEM, l_slow_pci_ref_clock)); // set cache contained flag if (l_system_ipl_phase == fapi2::ENUM_ATTR_SYSTEM_IPL_PHASE_CACHE_CONTAINED) @@ -461,6 +475,16 @@ fapi2::ReturnCode p9_sbe_attr_setup(const l_read_scratch_reg.clearBit(); } + // set slow PCI ref clock bit + if (l_slow_pci_ref_clock == fapi2::ENUM_ATTR_DD1_SLOW_PCI_REF_CLOCK_SLOW) + { + l_read_scratch_reg.clearBit(); + } + else + { + l_read_scratch_reg.setBit(); + } + FAPI_DBG("Reading PLL mux attributes"); FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_CLOCK_PLL_MUX, i_target_chip, l_pll_mux)); // set PLL MUX bits 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 39286a8d..02850609 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 @@ -891,6 +891,20 @@ static fapi2::ReturnCode p9_sbe_chiplet_reset_clk_mux_pcie( l_use_ss_pll), "Error from FAPI_ATTR_GET (ATTR_CHIP_EC_FEATURE_SLOW_PCI_REF_CLOCK_ENABLE)"); + if (l_use_ss_pll) + { + fapi2::ATTR_DD1_SLOW_PCI_REF_CLOCK_Type l_slow_ref_clock; + FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_DD1_SLOW_PCI_REF_CLOCK, + fapi2::Target(), + l_slow_ref_clock), + "Error from FAPI_ATTR_GET (ATTR_DD1_SLOW_PCI_REF_CLOCK)"); + + if (l_slow_ref_clock != fapi2::ENUM_ATTR_DD1_SLOW_PCI_REF_CLOCK_SLOW) + { + l_use_ss_pll = 0; + } + } + if ( l_attr_unit_pos != 0x0E ) { //Setting NET_CTRL1 register value -- cgit v1.2.1