summaryrefslogtreecommitdiffstats
path: root/src/usr/hwpf/hwp/occ/occ_procedures/p8_pss_init.C
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/hwpf/hwp/occ/occ_procedures/p8_pss_init.C')
-rwxr-xr-xsrc/usr/hwpf/hwp/occ/occ_procedures/p8_pss_init.C885
1 files changed, 0 insertions, 885 deletions
diff --git a/src/usr/hwpf/hwp/occ/occ_procedures/p8_pss_init.C b/src/usr/hwpf/hwp/occ/occ_procedures/p8_pss_init.C
deleted file mode 100755
index 903b396ed..000000000
--- a/src/usr/hwpf/hwp/occ/occ_procedures/p8_pss_init.C
+++ /dev/null
@@ -1,885 +0,0 @@
-/* IBM_PROLOG_BEGIN_TAG */
-/* This is an automatically generated prolog. */
-/* */
-/* $Source: src/usr/hwpf/hwp/occ/occ_procedures/p8_pss_init.C $ */
-/* */
-/* OpenPOWER HostBoot Project */
-/* */
-/* Contributors Listed Below - COPYRIGHT 2013,2014 */
-/* [+] International Business Machines Corp. */
-/* */
-/* */
-/* Licensed under the Apache License, Version 2.0 (the "License"); */
-/* you may not use this file except in compliance with the License. */
-/* You may obtain a copy of the License at */
-/* */
-/* http://www.apache.org/licenses/LICENSE-2.0 */
-/* */
-/* Unless required by applicable law or agreed to in writing, software */
-/* distributed under the License is distributed on an "AS IS" BASIS, */
-/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */
-/* implied. See the License for the specific language governing */
-/* permissions and limitations under the License. */
-/* */
-/* IBM_PROLOG_END_TAG */
-// $Id: p8_pss_init.C,v 1.8 2013/11/08 22:36:48 stillgs Exp $
-// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/p8_pss_init.C,v $
-//------------------------------------------------------------------------------
-// *! (C) Copyright International Business Machines Corp. 2011
-// *! All Rights Reserved -- Property of IBM
-// *! *** ***
-//------------------------------------------------------------------------------
-// *! TITLE : p8_pss_init.C
-// *! DESCRIPTION : Initializes P2S and HWC logic
-// *! OWNER NAME : Pradeep CN Email: padeepcn@in.ibm.com
-// *! BACKUP NAME : Email:
-// #! ADDITIONAL COMMENTS :
-//
-//
-/// Procedure Summary:
-/// --------------------
-/// One procedure to initialize both P2S and HWC SPIPSS registers to
-/// second Procedure is to access APSS or DPSS through P2S Bridge
-/// Third procedure is to access APSS or DPSS through HWC (hardware control)
-///
-/// High-level procedure flow:
-/// ----------------------------------
-/// o INIT PROCEDURE(frame_size,cpol,cpha)
-/// - set SPIPSS_ADC_CTRL_REG0(24b)
-/// hwctrl_frame_size = 16
-/// - set SPIPSS_ADC_CTRL_REG1
-/// hwctrl_fsm_enable = disable
-/// hwctrl_device = APSS
-/// hwctrl_cpol = 0 (set idle state = deasserted)
-/// hwctrl_cpha = 0 (set 1st edge = capture 2nd edge = change)
-/// hwctrl_clock_divider = set to 10Mhz(0x1D)
-/// hwctrl_nr_of_frames (4b) = 16 (for auto 2 mode)
-/// - set SPIPSS_ADC_CTRL_REG2
-/// hwctrl_interframe_delay = 0x0
-/// - clear SPIPSS_ADC_WDATA_REG
-/// - set SPIPSS_P2S_CTRL_REG0 (24b)
-/// p2s_frame_size = 16
-/// - set SPIPSS_P2S_CTRL_REG1
-/// p2s_bridge_enable = disable
-/// p2s_device = DPSS
-/// p2s_cpol = 0
-/// p2s_cpha = 0
-/// p2s_clock_divider = set to 10Mhz
-/// p2s_nr_of_frames (1b) = 0 (means 1 frame operation)
-/// - set SPIPSS_P2S_CTRL_REG2
-/// p2s_interframe_delay = 0x0
-/// - clear SPIPSS_P2S_WDATA_REG
-/// Procedure Prereq:
-/// o System clocks are running
-///
-///------------------------------------------------------------------------------
-
-
-// ----------------------------------------------------------------------
-// Includes
-// ----------------------------------------------------------------------
-
-#include "p8_pm.H"
-#include "p8_pss_init.H"
-
-extern "C" {
-
-using namespace fapi;
-
-// ----------------------------------------------------------------------
-// Global variables
-// ----------------------------------------------------------------------
-
-// ----------------------------------------------------------------------
-// Function prototypes
-// ----------------------------------------------------------------------
-fapi::ReturnCode pss_config_spi_settings(const Target& i_target);
-fapi::ReturnCode pss_init(const Target& i_target);
-fapi::ReturnCode pss_reset(const Target& i_target);
-
-// ----------------------------------------------------------------------
-// Function definitions
-// ----------------------------------------------------------------------
-
-//------------------------------------------------------------------------------
-/**
- * p8_pss_init calls the underlying routine based on mode parameter
- *
- * @param[in] i_target Chip target
- * @param[in] mode Control mode for the procedure
- * PM_INIT, PM_CONFIG, PM_RESET
- *
- * @retval ECMD_SUCCESS
- * @retval ERROR defined in xml
- */
-fapi::ReturnCode
-p8_pss_init(const Target &i_target, uint32_t mode)
-{
- fapi::ReturnCode rc;
-
- /// -------------------------------
- /// Configuration: perform translation of any Platform Attributes into Feature Attributes
- /// that are applied during Initalization
- if (mode == PM_CONFIG)
- {
- rc = pss_config_spi_settings(i_target);
- }
- /// -------------------------------
- /// Initialization: perform order or dynamic operations to initialize
- /// the PMC using necessary Platform or Feature attributes.
- else if (mode == PM_INIT)
- {
- rc = pss_init(i_target);
- }
- /// -------------------------------
- /// Reset: perform reset of PSS
- else if (mode == PM_RESET)
- {
- rc = pss_reset(i_target);
- }
- /// -------------------------------
- /// Unsupported Mode
- else
- {
- FAPI_ERR("Unknown mode passed to p8_pss_init. Mode %x ....", mode);
- const fapi::Target & CHIP = i_target;
- uint32_t & IMODE = mode;
- FAPI_SET_HWP_ERROR(rc, RC_PROCPM_PSS_CODE_BAD_MODE);
- }
-
- return rc;
-
-} // p8_pss_init
-
-//------------------------------------------------------------------------------
-/**
- * pss_config_spi_settings Determines the configuration setting for the SPI
- * bus based on attributes
- *
- * @param[in] i_target Chip target
- *
- *
- * @retval ECMD_SUCCESS
- * @retval ERROR defined in xml
- */
-fapi::ReturnCode
-pss_config_spi_settings(const Target& i_target)
-{
- fapi::ReturnCode rc;
-
- uint32_t attr_proc_pss_init_nest_frequency=2400;
- uint32_t attr_pm_pss_init_spipss_frequency=10;
- uint8_t attr_pm_spipss_clock_divider ;
- uint32_t attr_pm_spipss_interframe_delay_setting=0 ;
- uint32_t attr_pm_spipss_interframe_delay = 0 ;
-
- const uint32_t default_spipss_frequency = 1; // MHz
- const uint32_t default_spipss_interframe_delay = 10000; // MHz
-
- FAPI_INF("PSS config start...");
- do
- {
-
- //----------------------------------------------------------
- GETATTR( rc,
- ATTR_FREQ_PB,
- "ATTR_FREQ_PB",
- NULL,
- attr_proc_pss_init_nest_frequency);
-
- //----------------------------------------------------------
- GETATTR_DEFAULT(rc,
- ATTR_PM_SPIPSS_FREQUENCY,
- "ATTR_PM_SPIPSS_FREQUENCY",
- NULL,
- attr_pm_pss_init_spipss_frequency,
- default_spipss_frequency);
-
- // calculation of clock divider
- attr_pm_spipss_clock_divider = ((attr_proc_pss_init_nest_frequency /
- attr_pm_pss_init_spipss_frequency)/ 8 )-1 ;
-
-
- SETATTR( rc,
- ATTR_PM_SPIPSS_CLOCK_DIVIDER,
- "ATTR_PM_SPIPSS_CLOCK_DIVIDER",
- &i_target,
- attr_pm_spipss_clock_divider);
-
- // ########################### SET INTER_FRAM_DELAY ################################ //
-
- //----------------------------------------------------------
- // Delay between command and status frames of a SPIVID WRITE operation
- // (binary in nanoseconds)ATTR_PM_SPIPSS_INTER_FRAME_DELAY
-
-
- GETATTR_DEFAULT( rc,
- ATTR_PM_SPIPSS_INTER_FRAME_DELAY,
- "ATTR_PM_SPIPSS_INTERFRAME_DELAY",
- &i_target,
- attr_pm_spipss_interframe_delay,
- default_spipss_interframe_delay);
-
- // Delay is computed as: (value * ~100ns_hang_pulse)
- // +0/-~100ns_hang_pulse time
- // Thus, value = delay / 100
- attr_pm_spipss_interframe_delay_setting =
- attr_pm_spipss_interframe_delay/ 100;
-
- SETATTR( rc,
- ATTR_PM_SPIPSS_INTER_FRAME_DELAY_SETTING ,
- "ATTR_PM_SPIPSS_INTER_FRAME_DELAY_SETTING",
- &i_target,
- attr_pm_spipss_interframe_delay_setting);
-
- } while(0);
-
- FAPI_INF("PSS config end...\n");
- return rc;
-
-} // pss_config_spi_settings
-
-//------------------------------------------------------------------------------
-/**
- * pss_init Using configured attributed, performs the initialization of the PSS
- * function
- *
- * @param[in] i_target Chip target
- *
- *
- * @retval ECMD_SUCCESS
- * @retval ERROR defined in xml
- */
-fapi::ReturnCode
-pss_init(const Target& i_target)
-{
- fapi::ReturnCode rc;
- uint32_t e_rc = 0;
- ecmdDataBufferBase data(64);
-
- const uint8_t default_spipss_frame_size = 16 ;
- const uint8_t default_spipss_in_delay = 0 ;
- const uint8_t default_spipss_clock_polarity = 0 ;
- const uint8_t default_spipss_clock_phase = 0 ;
- const uint8_t default_apss_chip_select = 1 ;
-
- uint32_t attr_proc_pss_init_nest_frequency=2400;
- uint8_t attr_pm_spipss_clock_divider ;
-
- uint8_t attr_pm_apss_chip_select=1 ;
-
- uint8_t attr_pm_spipss_frame_size ;
- uint8_t attr_pm_spipss_in_delay ;
- uint8_t attr_pm_spipss_clock_polarity ;
- uint8_t attr_pm_spipss_clock_phase ;
- uint32_t attr_pm_spipss_inter_frame_delay ;
-
- FAPI_INF("PSS initialization start...");
- do
- {
-
- //----------------------------------------------------------
- GETATTR_DEFAULT(rc,
- ATTR_PM_SPIPSS_FRAME_SIZE,
- "ATTR_PM_SPIPSS_FRAME_SIZE",
- &i_target,
- attr_pm_spipss_frame_size,
- default_spipss_frame_size );
-
- //----------------------------------------------------------
- GETATTR_DEFAULT(rc,
- ATTR_PM_SPIPSS_IN_DELAY,
- "ATTR_PM_SPIPSS_IN_DELAY",
- &i_target,
- attr_pm_spipss_in_delay,
- default_spipss_in_delay );
-
- //----------------------------------------------------------
- GETATTR_DEFAULT(rc,
- ATTR_PM_SPIPSS_CLOCK_POLARITY,
- "ATTR_PM_SPIPSS_CLOCK_POLARITY",
- &i_target,
- attr_pm_spipss_clock_polarity,
- default_spipss_clock_polarity );
-
- //----------------------------------------------------------
- GETATTR_DEFAULT(rc,
- ATTR_PM_SPIPSS_CLOCK_PHASE,
- "ATTR_PM_SPIPSS_CLOCK_PHASE",
- &i_target,
- attr_pm_spipss_clock_phase,
- default_spipss_clock_phase );
-
- //----------------------------------------------------------
- GETATTR( rc,
- ATTR_PM_SPIPSS_INTER_FRAME_DELAY_SETTING,
- "ATTR_PM_SPIPSS_INTER_FRAME_DELAY_SETTING",
- &i_target,
- attr_pm_spipss_inter_frame_delay);
-
- //----------------------------------------------------------
- GETATTR_DEFAULT(rc,
- ATTR_PM_APSS_CHIP_SELECT,
- "ATTR_PM_APSS_CHIP_SELECT",
- &i_target,
- attr_pm_apss_chip_select,
- default_apss_chip_select );
-
- //----------------------------------------------------------
- GETATTR( rc,
- ATTR_PM_SPIPSS_CLOCK_DIVIDER,
- "ATTR_PM_SPIPSS_CLOCK_DIVIDER",
- &i_target,
- attr_pm_spipss_clock_divider);
-
-
- //----------------------------------------------------------
- GETATTR( rc,
- ATTR_FREQ_PB,
- "ATTR_FREQ_PB",
- NULL,
- attr_proc_pss_init_nest_frequency);
-
- // ------------------------------------------
- // -- Init procedure
- // ------------------------------------------
-
- uint8_t hwctrl_target = 0xA;
- uint8_t hwctrl_frame_size = attr_pm_spipss_frame_size ;
- uint8_t hwctrl_in_delay = attr_pm_spipss_in_delay ;
- uint8_t hwctrl_clk_pol = attr_pm_spipss_clock_polarity ;
- uint8_t hwctrl_clk_pha = attr_pm_spipss_clock_phase ;
- uint32_t hwctrl_clk_divider = attr_pm_spipss_clock_divider ;
- uint32_t hwctrl_inter_frame_delay = attr_pm_spipss_inter_frame_delay ;
- uint8_t hwctrl_device = attr_pm_apss_chip_select;
- uint32_t nest_freq = attr_proc_pss_init_nest_frequency ;
- uint32_t spipss_100ns_div_value ;
-
-
- spipss_100ns_div_value = (( attr_proc_pss_init_nest_frequency ) /40);
-
- // ******************************************************************
- // - set SPIPSS_ADC_CTRL_REG0 (24b)
- // adc_frame_size = 16
- // ******************************************************************
-
- rc = fapiGetScom(i_target, SPIPSS_ADC_CTRL_REG0_0x00070000, data );
- if (rc)
- {
- FAPI_ERR("fapiGetScom(SPIPSS_ADC_CTRL_REG0) failed.");
- break;
- }
-
- e_rc |= data.insertFromRight(hwctrl_frame_size,0,6);
- e_rc |= data.insertFromRight(hwctrl_in_delay,12,6);
- if (e_rc)
- {
- rc.setEcmdError(e_rc);
- break;
- }
-
- FAPI_INF(" SPIPSS ADC CTRL_REG_0 Configuration ");
- FAPI_INF(" frame size => %d ", hwctrl_frame_size);
-
- rc = fapiPutScom(i_target, SPIPSS_ADC_CTRL_REG0_0x00070000, data );
- if (rc)
- {
- FAPI_ERR("fapiPutScom(SPIPSS_ADC_CTRL_REG0_0x00070000) failed.");
- break;
- }
-
- // ******************************************************************
- // - set SPIPSS_ADC_CTRL_REG1
- // adc_fsm_enable = disable
- // adc_device = APSS
- // adc_cpol = 0
- // adc_cpha = 0
- // adc_clock_divider = set to 10Mhz
- // adc_nr_of_frames (4b) = 16 (for auto 2 mode)
- // ******************************************************************
-
- rc = fapiGetScom(i_target, SPIPSS_ADC_CTRL_REG1_0x00070001, data );
- if (rc)
- {
- FAPI_ERR("fapiGetScom(SPIPSS_ADC_CTRL_REG1) failed.");
- break;
- }
-
- uint8_t hwctrl_fsm_enable = 0x1 ;
- uint8_t hwctrl_nr_of_frames = 0x10 ;
-
- e_rc |= data.insertFromRight(hwctrl_fsm_enable ,0,1);
- e_rc |= data.insertFromRight(hwctrl_device ,1,1);
- e_rc |= data.insertFromRight(hwctrl_clk_pol ,2,1);
- e_rc |= data.insertFromRight(hwctrl_clk_pha ,3,1);
- e_rc |= data.insertFromRight(hwctrl_clk_divider ,4,10);
- e_rc |= data.insertFromRight(hwctrl_nr_of_frames ,14,4);
- if (e_rc)
- {
- rc.setEcmdError(e_rc);
- break;
- }
-
- FAPI_INF(" SPIPSS ADC CTRL_REG_1 Configuration ");
- FAPI_INF(" hwctrl_fsm_enable => %d ", hwctrl_fsm_enable );
- FAPI_INF(" nest_freq => %d ", nest_freq );
- FAPI_INF(" hwctrl_target => %d ", hwctrl_target );
- FAPI_INF(" hwctrl_device => %d ", hwctrl_device );
- FAPI_INF(" hwctrl_clk_pol => %d ", hwctrl_clk_pol );
- FAPI_INF(" hwctrl_clk_pha => %d ", hwctrl_clk_pha );
- FAPI_INF(" hwctrl_clk_divider => %d ", hwctrl_clk_divider );
- FAPI_INF(" hwctrl_nr_of_frames => %d ", hwctrl_nr_of_frames);
-
- rc = fapiPutScom(i_target, SPIPSS_ADC_CTRL_REG1_0x00070001, data );
- if (rc)
- {
- FAPI_ERR("fapiPutScom(SPIPSS_ADC_CTRL_REG1_0x00070001) failed.");
- break;
- }
-
- // ******************************************************************
- // - set SPIPSS_ADC_CTRL_REG2
- // adc_inter_frame_delay = 0x0
- // ******************************************************************
-
- rc = fapiGetScom(i_target, SPIPSS_ADC_CTRL_REG2_0x00070002, data );
- if (rc)
- {
- FAPI_ERR("fapiGetScom(SPIPSS_ADC_CTRL_REG2) failed.");
- break;
- }
-
- e_rc = data.insertFromRight(hwctrl_inter_frame_delay,0,17);
- if (e_rc)
- {
- rc.setEcmdError(e_rc);
- break;
- }
-
-
- FAPI_INF(" SPIPSS ADC CTRL_REG_2 Configuration ");
- FAPI_INF(" hwctrl_inter_frm_delay => %d ", hwctrl_inter_frame_delay );
-
- rc = fapiPutScom(i_target, SPIPSS_ADC_CTRL_REG2_0x00070002, data );
- if (rc)
- {
- FAPI_ERR("fapiPutScom(SPIPSS_ADC_CTRL_REG2_0x00070002) failed.");
- break;
- }
-
- // ******************************************************************
- // - clear SPIPSS_ADC_Wdata_REG
- // ******************************************************************
-
- uint32_t hwctrl_wdata = 0x0;
-
- e_rc |= data.flushTo0();
- e_rc |= data.insertFromRight(hwctrl_wdata ,0,16);
- if (e_rc)
- {
- rc.setEcmdError(e_rc);
- break;
- }
-
- FAPI_INF(" SPIPSS_WDATA_REG is cleared ");
- FAPI_INF(" hwctrl_wdata => %d ", hwctrl_wdata );
-
- rc = fapiPutScom(i_target, SPIPSS_ADC_WDATA_REG_0x00070010, data );
- if (rc)
- {
- FAPI_ERR("fapiPutScom(SPIPSS_ADC_WDATA_REG_0x00070010) failed.");
- break;
- }
-
- // ******************************************************************
- // - set SPIPSS_P2S_CTRL_REG0 (24b)
- // p2s_frame_size = 16
- // ******************************************************************
-
- rc = fapiGetScom(i_target, SPIPSS_P2S_CTRL_REG0_0x00070040, data );
- if (rc)
- {
- FAPI_ERR("fapiGetScom(SPIPSS_P2S_CTRL_REG0) failed.");
- break;
- }
-
- // modify_data here
- uint8_t p2s_frame_size = 0x02 ;
- uint8_t p2s_device = 0;
- uint8_t p2s_clk_pol = 0;
- uint8_t p2s_clk_pha = 0;
- uint16_t p2s_clk_divider= 0x1D;
- uint8_t p2s_target = 0xA;// DPSS
- uint32_t p2s_inter_frame_delay = 0x0;
- uint8_t p2s_in_delay;
-
- p2s_frame_size = attr_pm_spipss_frame_size ;
- p2s_in_delay = attr_pm_spipss_in_delay ;
- p2s_clk_pol = attr_pm_spipss_clock_polarity ;
- p2s_clk_pha = attr_pm_spipss_clock_phase ;
- p2s_clk_divider = attr_pm_spipss_clock_divider ;
- p2s_inter_frame_delay = attr_pm_spipss_inter_frame_delay ;
- p2s_device = attr_pm_apss_chip_select;
-
-
- // ******************************************************************
- // - set SPIPSS_P2S_CTRL_REG0
- // ******************************************************************
-
- rc = fapiGetScom(i_target, SPIPSS_P2S_CTRL_REG0_0x00070040, data );
- if (rc)
- {
- FAPI_ERR("fapiGetScom(SPIPSS_P2S_CTRL_REG0) failed.");
- break;
- }
-
- e_rc |= data.insertFromRight(p2s_frame_size,0,6);
- e_rc |= data.insertFromRight(p2s_in_delay,12,6);
- if (e_rc)
- {
- rc.setEcmdError(e_rc);
- break;
- }
-
- FAPI_INF(" SPIPSS P2S CTRL_REG_0 Configuration ");
- FAPI_INF(" frame size => %d ", p2s_frame_size);
- FAPI_INF(" p2s_in_delay => %d ", p2s_in_delay );
-
- rc = fapiPutScom(i_target, SPIPSS_P2S_CTRL_REG0_0x00070040, data );
- if (rc)
- {
- FAPI_ERR("fapiPutScom(SPIPSS_P2S_CTRL_REG0_0x00070040) failed.");
- break;
- }
-
- // ******************************************************************
- // - set SPIPSS_P2S_CTRL_REG1
- // p2s_fsm_enable = disable
- // p2s_device = APSS
- // p2s_cpol = 0
- // p2s_cpha = 0
- // p2s_clock_divider = set to 10Mhz
- // p2s_nr_of_frames (4b) = 16 (for auto 2 mode)
- // ******************************************************************
-
- rc = fapiGetScom(i_target, SPIPSS_P2S_CTRL_REG1_0x00070041, data );
- if (rc)
- {
- FAPI_ERR("fapiGetScom(SPIPSS_P2S_CTRL_REG1) failed.");
- break;
- }
-
- // modify_data here
-
- uint8_t p2s_fsm_enable = 0x1 ;
- uint8_t p2s_nr_of_frames = 0x10 ;
-
- e_rc |= data.insertFromRight(p2s_fsm_enable ,0,1);
- e_rc |= data.insertFromRight(p2s_device ,1,1);
- e_rc |= data.insertFromRight(p2s_clk_pol ,2,1);
- e_rc |= data.insertFromRight(p2s_clk_pha ,3,1);
- e_rc |= data.insertFromRight(p2s_clk_divider ,4,10);
- e_rc |= data.insertFromRight(p2s_nr_of_frames ,14,4);
- if (e_rc)
- {
- rc.setEcmdError(e_rc);
- break;
- }
-
- FAPI_INF(" SPIPSS P2S CTRL_REG_1 Configuration ");
- FAPI_INF(" p2s_fsm_enable => %d ", p2s_fsm_enable );
- FAPI_INF(" p2s_target => %d ", p2s_target );
- FAPI_INF(" p2s_device => %d ", p2s_device );
- FAPI_INF(" p2s_clk_pol => %d ", p2s_clk_pol );
- FAPI_INF(" p2s_clk_pha => %d ", p2s_clk_pha );
- FAPI_INF(" p2s_clk_divider => %d ", p2s_clk_divider );
- FAPI_INF(" p2s_nr_of_frames => %d ", p2s_nr_of_frames);
-
- rc = fapiPutScom(i_target, SPIPSS_P2S_CTRL_REG1_0x00070041, data );
- if (rc)
- {
- FAPI_ERR("fapiPutScom(SPIPSS_P2S_CTRL_REG1_0x00070041) failed.");
- break;
- }
-
- // ******************************************************************
- // - set SPIPSS_P2S_CTRL_REG2
- // p2s_inter_frame_delay = 0x0
- // ******************************************************************
-
- rc = fapiGetScom(i_target, SPIPSS_P2S_CTRL_REG2_0x00070042, data );
- if (rc)
- {
- FAPI_ERR("fapiGetScom(SPIPSS_P2S_CTRL_REG2) failed.");
- break;
- }
-
- e_rc |= data.insertFromRight(p2s_inter_frame_delay,0,17);
- if (e_rc)
- {
- rc.setEcmdError(e_rc);
- break;
- }
-
- FAPI_INF(" SPIPSS P2S CTRL_REG_2 Configuration ");
- FAPI_INF(" p2s_inter_frm_delay => %d ", p2s_inter_frame_delay );
-
- rc = fapiPutScom(i_target, SPIPSS_P2S_CTRL_REG2_0x00070042, data );
- if (rc)
- {
- FAPI_ERR("fapiPutScom(SPIPSS_P2S_CTRL_REG2_0x00070042) failed.");
- break;
- }
-
-
- // ******************************************************************
- // - clear SPIPSS_P2S_Wdata_REG
- // ******************************************************************
- rc = fapiGetScom(i_target, SPIPSS_P2S_WDATA_REG_0x00070050, data );
- if (rc)
- {
- FAPI_ERR("fapiGetScom(SPIPSS_P2S_WDATA_REG_0x00070050) failed.");
- break;
- }
-
- uint32_t p2s_wdata = 0x0;
- e_rc |= data.flushTo0();
- e_rc |= data.insertFromRight(p2s_wdata ,0,16);
- if (e_rc)
- {
- rc.setEcmdError(e_rc);
- break;
- }
-
- FAPI_INF(" SPIPSS_P2S_WDATA_REG is cleared ");
- FAPI_INF(" p2s_wdata => %d ", p2s_wdata );
- FAPI_INF(" " );
-
- rc = fapiPutScom(i_target, SPIPSS_P2S_WDATA_REG_0x00070050, data );
- if (rc)
- {
- FAPI_ERR("fapiPutScom(SPIPSS_P2Sb_WDATA_REG_0x00070050) failed.");
- break;
- }
-
- // ******************************************************************
- // - Set 100ns Register for Interframe delay
- // ******************************************************************
- rc = fapiGetScom(i_target, SPIPSS_100NS_REG_0x00070028, data );
- if (rc)
- {
- FAPI_ERR("fapiGetScom(SPIPSS_100NS_REG_0x00070028) failed.");
- break;
- }
-
- e_rc=data.insertFromRight(spipss_100ns_div_value ,0,32);
- if (e_rc)
- {
- rc.setEcmdError(e_rc);
- break;
- }
-
- FAPI_INF(" SPIPSS_100NS_REG is set the value ");
- FAPI_INF(" spipss_100ns_div_value_hi => %d ", spipss_100ns_div_value );
- FAPI_INF(" nest_freq => %d ", nest_freq );
- FAPI_INF(" " );
-
- rc = fapiPutScom(i_target, SPIPSS_100NS_REG_0x00070028, data );
- if (rc)
- {
- FAPI_ERR("fapiPutScom(SPIPSS_100NS_REG_0x00070028) failed.");
- break;
- }
-
- } while(0);
-
- FAPI_INF("PSS initialization end...\n");
- return rc;
-} // pss_init
-
-
-//------------------------------------------------------------------------------
-/**
- * pss_reset Performs the reset of the PSS function
- *
- * @param[in] i_target Chip target
- *
- *
- * @retval ECMD_SUCCESS
- * @retval ERROR defined in xml
- */
-fapi::ReturnCode
-pss_reset(const Target& i_target)
-{
- fapi::ReturnCode rc;
- uint32_t e_rc = 0;
- ecmdDataBufferBase data(64);
-
- uint32_t pollcount = 0;
- uint32_t max_polls;
- const uint32_t pss_timeout_us = 10000; // 10 millisecond. Far longer than needed
- const uint32_t pss_poll_interval_us = 10;
-
- FAPI_INF("PSS reset start...");
- do
- {
-
- // ******************************************************************
- // - Poll status register for ongoing or no errors to give the
- // chance for on-going operations to complete
- // ******************************************************************
-
- FAPI_DBG("Polling for ADC on-going to go low ... ");
- max_polls = pss_timeout_us / pss_poll_interval_us;
- for (pollcount = 0; pollcount < max_polls; pollcount++)
- {
- rc = fapiGetScom(i_target, SPIPSS_ADC_STATUS_REG_0x00070003, data );
- if (rc)
- {
- FAPI_ERR("fapiGetScom(SPIPSS_ADC_STATUS_REG_0x00070003) failed.");
- break;
- }
- // Ongoing is not set OR an error
- if (data.isBitClear(0) || data.isBitSet(7))
- {
- break;
- }
- FAPI_DBG("Delay before next poll");
- e_rc = fapiDelay(pss_poll_interval_us*1000, 1000); // ns, sim clocks
- if (e_rc)
- {
- FAPI_ERR("fapiDelay error");
- rc.setEcmdError(e_rc);
- break;
- }
- }
- if (!rc.ok())
- {
- break;
- }
- if (data.isBitSet(7))
- {
- FAPI_ERR("SPIADC error bit asserted waiting for operation to complete.");
- const fapi::Target & CHIP = i_target;
- FAPI_SET_HWP_ERROR(rc, RC_PROCPM_PSS_ADC_ERROR);
- break;
- }
- if (pollcount >= max_polls)
- {
- FAPI_INF("WARNING: SPI ADC did not go to idle in at least %d us. Reset of PSS macro is commencing anyway", pss_timeout_us);
- break;
- }
- else
- {
- FAPI_INF("All frames sent from ADC to the APSS device.");
- }
-
- // ******************************************************************
- // - Poll status register for ongoing or errors to give the
- // chance for on-going operations to complete
- // ******************************************************************
-
- FAPI_INF("Polling for P2S on-going to go low ... ");
- for (pollcount = 0; pollcount < max_polls; pollcount++)
- {
- rc = fapiGetScom(i_target, SPIPSS_P2S_STATUS_REG_0x00070043, data );
- if (rc)
- {
- FAPI_ERR("fapiGetScom(SPIPSS_P2S_STATUS_REG_0x00070043) failed.");
- break;
- }
-
- // Ongoing is not set OR an error
- if (data.isBitClear(0) || data.isBitSet(7))
- {
- break;
- }
- FAPI_DBG("Delay before next poll");
- e_rc = fapiDelay(pss_poll_interval_us*1000, 1000); // ns, sim clocks
- if (e_rc)
- {
- rc.setEcmdError(e_rc);
- break;
- }
- }
- if (!rc.ok())
- {
- break;
- }
- if (data.isBitSet(7))
- {
- FAPI_ERR("SPIP2S FSM error bit asserted waiting for operation to complete.");
- const fapi::Target & CHIP = i_target;
- FAPI_SET_HWP_ERROR(rc, RC_PROCPM_PSS_P2S_ERROR);
- break;
- }
- if (data.isBitSet(5))
- {
- FAPI_INF("SPIP2S Write While Bridge Busy bit asserted. Will be cleared with coming reset");
- }
- if (pollcount >= max_polls)
- {
- FAPI_INF("WARNING: SPI P2S did not go to idle in at least %d us. Reset of PSS macro is commencing anyway", pss_timeout_us);
- }
- else
- {
- FAPI_INF("SAll frames sent from P2S to the APSS device.");
- }
-
- // ******************************************************************
- // - Resetting both ADC and P2S bridge
- // ******************************************************************
-
- FAPI_INF("Resetting P2S and ADC bridges.");
-
- e_rc=data.flushTo0();
- e_rc=data.setBit(1);
- if (e_rc)
- {
- rc.setEcmdError(e_rc);
- break;
- }
-
- rc = fapiPutScom(i_target, SPIPSS_ADC_RESET_REGISTER_0x00070005 , data);
- if (rc)
- {
- FAPI_ERR("fapiPutScom(SPIPSS_ADC_RESET_REGISTER_0x00070005) failed.");
- break;
- }
-
- rc = fapiPutScom(i_target, SPIPSS_P2S_RESET_REGISTER_0x00070045 , data);
- if (rc)
- {
- FAPI_ERR("fapiPutScom(SPIPSS_P2S_RESET_REGISTER_0x00070045) failed.");
- break;
- }
-
- // Clearing reset for cleanliness (SW229669)
- e_rc=data.flushTo0();
- if (e_rc)
- {
- rc.setEcmdError(e_rc);
- break;
- }
-
- rc = fapiPutScom(i_target, SPIPSS_ADC_RESET_REGISTER_0x00070005 , data);
- if (rc)
- {
- FAPI_ERR("fapiPutScom(SPIPSS_ADC_RESET_REGISTER_0x00070005) failed.");
- break;
- }
-
- rc = fapiPutScom(i_target, SPIPSS_P2S_RESET_REGISTER_0x00070045 , data);
- if (rc)
- {
- FAPI_ERR("fapiPutScom(SPIPSS_P2S_RESET_REGISTER_0x00070045) failed.");
- break;
- }
- } while (0);
-
- FAPI_INF("PSS reset end...\n");
- return rc;
-} // pss_reset
-
-
-} //end extern C
OpenPOWER on IntegriCloud