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.C1287
1 files changed, 579 insertions, 708 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
index 991242c5d..125bedb85 100755
--- a/src/usr/hwpf/hwp/occ/occ_procedures/p8_pss_init.C
+++ b/src/usr/hwpf/hwp/occ/occ_procedures/p8_pss_init.C
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: p8_pss_init.C,v 1.4 2013/04/05 12:25:34 pchatnah Exp $
+// $Id: p8_pss_init.C,v 1.6 2013/08/02 19:11:20 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
@@ -30,394 +30,394 @@
// *! TITLE : p8_pss_init.C
// *! DESCRIPTION : Initializes P2S and HWC logic
// *! OWNER NAME : Pradeep CN Email: padeepcn@in.ibm.com
-// *! BACKUP NAME : Email:
+// *! BACKUP NAME : Email:
// #! ADDITIONAL COMMENTS :
//
-//
-///Procedure Summary:
-//--------------------
+//
+/// 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
///
+/// 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
///
-/// *!
-/// *! Procedure Prereq:
-/// *! o System clocks are running
-/// *!
///------------------------------------------------------------------------------
-
-
+
+
// ----------------------------------------------------------------------
// Includes
// ----------------------------------------------------------------------
#include "p8_pm.H"
-#include "p8_scom_addresses.H"
-
-// #ifdef FAPIECMD
- extern "C" {
-// #endif
-
-
- using namespace fapi;
+#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
// ----------------------------------------------------------------------
-// // Transform Platform Attribute for SPI PSS to Feature Attributes
-// fapi::ReturnCode
-// pss_create_spi_settings(const Target& l_pTarget)
-// {
-// fapi::ReturnCode rc;
-
-
-
-
-
-
-
-
-
-
-
-// return rc ;
-// }
-
-
-
-
-
-fapi::ReturnCode
-pss_config_spi_settings(const Target& l_pTarget)
-{
- 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 ;
-
-
-
-
-
-
-
-
- rc = FAPI_ATTR_GET(ATTR_FREQ_PB, NULL , attr_proc_pss_init_nest_frequency); if (rc) return rc;
- ///TODO RTC: 71328 - hack to use system target
- rc = FAPI_ATTR_GET(ATTR_PM_SPIPSS_FREQUENCY, NULL,attr_pm_pss_init_spipss_frequency); if (rc) return rc ;
-
-
-
- // calculation of clock divider
- attr_pm_spipss_clock_divider = ((attr_proc_pss_init_nest_frequency/attr_pm_pss_init_spipss_frequency)/8 )-1 ;
- // printf ("clk_dive = %d ",attr_pm_spipss_clock_divider);
-
- rc = FAPI_ATTR_SET(ATTR_PM_SPIPSS_CLOCK_DIVIDER, &l_pTarget, attr_pm_spipss_clock_divider); if (rc) return rc;
-
-
- return rc;
-}
-
-// function: xxx
-// parameters: none
-// returns: ECMD_SUCCESS if something good happens,
-// BAD_RETURN_CODE otherwise
-
+//------------------------------------------------------------------------------
+/**
+ * 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(Target &i_target, uint32_t mode)
+p8_pss_init(const Target &i_target, uint32_t mode)
{
- 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 ;
-
-
- uint8_t attr_pm_apss_chip_select=1 ;
- uint8_t attr_pm_spipss_frame_size ;
- // uint8_t attr_pm_spipss_out_count ;
- uint8_t attr_pm_spipss_in_delay ;
- // uint8_t attr_pm_spipss_in_count ;
- uint8_t attr_pm_spipss_clock_polarity ;
- uint8_t attr_pm_spipss_clock_phase ;
-
- uint32_t attr_pm_spipss_inter_frame_delay ;
- // attr_pm_spipss_inter_frame_delay_setting ;
- uint32_t e_rc = 0;
- uint32_t pollcount=0;
- uint32_t max_polls = 255;
-
-
-
-
- // size_t i;
-
- //i = args.size();
- ecmdDataBufferBase data(64);
- ecmdDataBufferBase mask(64);
+ fapi::ReturnCode rc;
/// -------------------------------
/// Configuration: perform translation of any Platform Attributes into Feature Attributes
/// that are applied during Initalization
- if (mode == PM_CONFIG)
+ if (mode == PM_CONFIG)
{
-
- FAPI_INF("PSS configuration..");
-
- rc=pss_config_spi_settings(i_target);
-
- }
-
+ 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)
+ /// Initialization: perform order or dynamic operations to initialize
+ /// the PMC using necessary Platform or Feature attributes.
+ else if (mode == PM_INIT)
{
-
-
- FAPI_INF("PSS initialisation...");
- // rc=pss_create_spi_settings(i_target);
-
-
-// rc = FAPI_ATTR_GET(ATTR_PM_SPIPSS_OUT_COUNT, &i_target, attr_pm_spipss_out_count); if (rc) return rc;
-// rc = FAPI_ATTR_GET(ATTR_PM_SPIPSS_IN_COUNT, &i_target, attr_pm_spipss_in_count); if (rc) return rc;
-
- //----------------------------------------------------------
- rc = FAPI_ATTR_GET(ATTR_PM_SPIPSS_FRAME_SIZE, &i_target, attr_pm_spipss_frame_size);
- if (rc) { FAPI_ERR("fapiGetAttribute of ATTR_PM_SPIPSS_FRAME_SIZE with rc = 0x%x", (uint32_t)rc); return rc; }
- else { FAPI_INF (" value read from the attribute attr_pm_spipss_frame_size = 0x%x", attr_pm_spipss_frame_size );}
-
- //----------------------------------------------------------
- rc = FAPI_ATTR_GET(ATTR_PM_SPIPSS_IN_DELAY, &i_target, attr_pm_spipss_in_delay);
-
- if (rc) { FAPI_ERR("fapiGetAttribute of ATTR_PM_SPIPSS_IN_DELAY with rc = 0x%x", (uint32_t)rc); return rc; }
- else { FAPI_INF (" value read from the attribute attr_pm_spipss_in_delay_frame1 = 0x%x", attr_pm_spipss_in_delay);}
-
- //----------------------------------------------------------
- rc = FAPI_ATTR_GET(ATTR_PM_SPIPSS_CLOCK_POLARITY, &i_target, attr_pm_spipss_clock_polarity);
-
- if (rc) { FAPI_ERR("fapiGetAttribute of ATTR_PM_SPIPSS_CLOCK_POLARITY with rc = 0x%x", (uint32_t)rc); return rc; }
- else { FAPI_INF (" value read from the attribute attr_pm_spipss_clock_polarity = 0x%x", attr_pm_spipss_clock_polarity);}
-
- //----------------------------------------------------------
- rc = FAPI_ATTR_GET(ATTR_PM_SPIPSS_CLOCK_PHASE, &i_target, attr_pm_spipss_clock_phase);
+ 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);
+ uint32_t & MODE = mode;
+ FAPI_SET_HWP_ERROR(rc, RC_PROCPM_PSS_CODE_BAD_MODE);
+ }
- if (rc) { FAPI_ERR("fapiGetAttribute of ATTR_PM_SPIPSS_CLOCK_PHASE with rc = 0x%x", (uint32_t)rc); return rc; }
- else { FAPI_INF (" value read from the attribute attr_pm_spipss_clock_phase = 0x%x", attr_pm_spipss_clock_phase);}
+ return rc;
- //----------------------------------------------------------
- rc = FAPI_ATTR_GET(ATTR_PM_SPIPSS_INTER_FRAME_DELAY, &i_target, attr_pm_spipss_inter_frame_delay);
+} // p8_pss_init
- if (rc) { FAPI_ERR("fapiGetAttribute of ATTR_PM_SPIPSS_INTER_FRAME_DELAY with rc = 0x%x", (uint32_t)rc); return rc; }
- else { FAPI_INF (" value read from the attribute attr_pm_spipss_interframe_delay = 0x%x", attr_pm_spipss_inter_frame_delay);}
+//------------------------------------------------------------------------------
+/**
+ * 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 ;
- //----------------------------------------------------------
- rc = FAPI_ATTR_GET(ATTR_PM_APSS_CHIP_SELECT, &i_target, attr_pm_apss_chip_select);
+ const uint32_t default_spipss_frequency = 1; // MHz
+ const uint32_t default_spipss_interframe_delay = 10000; // MHz
- if (rc) { FAPI_ERR("fapiGetAttribute of ATTR_PM_APSS_CHIP_SELECT with rc = 0x%x", (uint32_t)rc); return rc; }
- else { FAPI_INF (" value read from the attribute attr_pm_apss_chip_select = 0x%x", attr_pm_apss_chip_select);}
+ FAPI_INF("PSS config start...");
+ do
+ {
- //----------------------------------------------------------
-// rc = FAPI_ATTR_GET(ATTR_PM_SPIPSS_INTERFRAME_DELAY_WRITE_STATUS_VALUE, &i_target, attr_pm_spipss_interframe_delay_write_status_value);
+ //----------------------------------------------------------
+ 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);
-// if (rc) { FAPI_ERR("fapiGetAttribute of ATTR_PM_SPIPSS_INTERFRAME_DELAY_WRITE_STATUS_VALUE with rc = 0x%x", (uint32_t)rc); return rc; }
-// else { FAPI_INF (" value read from the attribute attr_pm_spipss_interframe_delay_write_status_value = 0x%x", attr_pm_spipss_interframe_delay_write_status_value);}
-
+ // calculation of clock divider
+ attr_pm_spipss_clock_divider = ((attr_proc_pss_init_nest_frequency /
+ attr_pm_pss_init_spipss_frequency)/ 8 )-1 ;
- //----------------------------------------------------------
- rc = FAPI_ATTR_GET(ATTR_PM_SPIPSS_CLOCK_DIVIDER, &i_target, attr_pm_spipss_clock_divider);
- if (rc) { FAPI_ERR("fapiGetAttribute of ATTR_PM_SPIPSS_CLOCK_DIVIDER with rc = 0x%x", (uint32_t)rc); return rc; }
- else { FAPI_INF (" value read from the attribute attr_pm_spipss_clock_divider = 0x%x", attr_pm_spipss_clock_divider);}
+ SETATTR( rc,
+ ATTR_PM_SPIPSS_CLOCK_DIVIDER,
+ "ATTR_PM_SPIPSS_CLOCK_DIVIDER",
+ &i_target,
+ attr_pm_spipss_clock_divider);
+ // ########################### SET INTER_FRAM_DELAY ################################ //
- rc = FAPI_ATTR_GET(ATTR_FREQ_PB, NULL, attr_proc_pss_init_nest_frequency); if (rc) return rc;
+ //----------------------------------------------------------
+ // 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
+ // ------------------------------------------
+ // -- 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 ;
- // modify_data here
-// uint8_t hwctrl_frame_size ;
-// uint8_t hwctrl_device =0 ;
-// uint8_t hwctrl_clk_pol ;
-// uint8_t hwctrl_clk_pha ;
-// uint32_t hwctrl_clk_divider;
-// uint32_t hwctrl_inter_frame_delay;
-// uint16_t nest_freq ;
-// // uint16_t spipss_freq ;
-// uint8_t hwctrl_in_count;
-// uint8_t hwctrl_out_count;
-// uint8_t hwctrl_in_delay;
-
-
- uint8_t hwctrl_target = 0xA;
-
-
-
-
-
- uint8_t hwctrl_frame_size = attr_pm_spipss_frame_size ;
-// uint8_t hwctrl_out_count = attr_pm_spipss_out_count ;
- uint8_t hwctrl_in_delay = attr_pm_spipss_in_delay ;
-// uint8_t hwctrl_in_count = attr_pm_spipss_in_count ;
- 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);
- // spipss_100ns_div_value = (( attr_proc_pss_init_nest_frequency * 1000000 * 100) /4000000000);
-
-
-
-
-
-
+ spipss_100ns_div_value = (( attr_proc_pss_init_nest_frequency ) /40);
// ******************************************************************
-
- // - set SPIPSS_ADC_CTRL_REG0 (24b)
- // adc_frame_size = 16
-
+ // - 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."); return rc;
+ if (rc)
+ {
+ FAPI_ERR("fapiGetScom(SPIPSS_ADC_CTRL_REG0) failed.");
+ break;
}
-
-
- // data.flushTo0();
- // data.setWord(1, 0x41000100);
- e_rc=data.insertFromRight(hwctrl_frame_size,0,6); if (e_rc) { rc.setEcmdError(e_rc); return rc; }
- e_rc=data.insertFromRight(hwctrl_in_delay,12,6); if (e_rc) { rc.setEcmdError(e_rc); return rc; }
+ 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(" -----------------------------------------------------");
FAPI_INF(" SPIPSS ADC CTRL_REG_0 Configuration ");
- // FAPI_INF(" -----------------------------------------------------");
FAPI_INF(" frame size => %d ", hwctrl_frame_size);
- FAPI_INF(" " );
- FAPI_INF(" " );
- // FAPI_INF(" -----------------------------------------------------");
-
-
rc = fapiPutScom(i_target, SPIPSS_ADC_CTRL_REG0_0x00070000, data );
- if (rc) {
- FAPI_ERR("fapiPutScom(SPIPSS_ADC_CTRL_REG0_0x00070000) failed."); return rc;
+ 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)
+ // - 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."); return rc;
+ if (rc)
+ {
+ FAPI_ERR("fapiGetScom(SPIPSS_ADC_CTRL_REG1) failed.");
+ break;
}
- // modify_data here
-
- uint8_t hwctrl_fsm_enable = 0x1 ;
- uint8_t hwctrl_nr_of_frames = 0x10 ;
-
-
- // data.flushTo0();
- // rc=data.setWord(1, 0x41000100); if (rc) return rc;
- e_rc=data.insertFromRight(hwctrl_fsm_enable ,0,1); if (e_rc) { rc.setEcmdError(e_rc); return rc; }
- e_rc=data.insertFromRight(hwctrl_device ,1,1); if (e_rc) { rc.setEcmdError(e_rc); return rc; }
- e_rc=data.insertFromRight(hwctrl_clk_pol ,2,1); if (e_rc) { rc.setEcmdError(e_rc); return rc; }
- e_rc=data.insertFromRight(hwctrl_clk_pha ,3,1); if (e_rc) { rc.setEcmdError(e_rc); return rc; }
- e_rc=data.insertFromRight(hwctrl_clk_divider ,4,10); if (e_rc) { rc.setEcmdError(e_rc); return rc; }
- e_rc=data.insertFromRight(hwctrl_nr_of_frames ,14,4); if (e_rc) { rc.setEcmdError(e_rc); return rc; }
+ 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(" -----------------------------------------------------");
FAPI_INF(" SPIPSS ADC CTRL_REG_1 Configuration ");
- // FAPI_INF(" -----------------------------------------------------");
FAPI_INF(" hwctrl_fsm_enable => %d ", hwctrl_fsm_enable );
FAPI_INF(" nest_freq => %d ", nest_freq );
FAPI_INF(" hwctrl_target => %d ", hwctrl_target );
@@ -426,223 +426,166 @@ p8_pss_init(Target &i_target, uint32_t mode)
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);
- FAPI_INF(" " );
- FAPI_INF(" " );
- // FAPI_INF(" -----------------------------------------------------");
-
-
rc = fapiPutScom(i_target, SPIPSS_ADC_CTRL_REG1_0x00070001, data );
- if (rc) {
- FAPI_ERR("fapiPutScom(SPIPSS_ADC_CTRL_REG1_0x00070001) failed."); return rc;
+ if (rc)
+ {
+ FAPI_ERR("fapiPutScom(SPIPSS_ADC_CTRL_REG1_0x00070001) failed.");
+ break;
}
-
-
// ******************************************************************
- // - set SPIPSS_ADC_CTRL_REG2
- // adc_inter_frame_delay = 0x0
+ // - 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."); return rc;
+ if (rc)
+ {
+ FAPI_ERR("fapiGetScom(SPIPSS_ADC_CTRL_REG2) failed.");
+ break;
}
- // FAPI_INF("sumne data %s " data.genHexLeftStr(0,64) );
-
- // modify_data here
-
- // rc=data.flushTo0(); if (rc) return rc;
- // rc=data.setWord(1, 0x41000100); if (rc) return rc;
- e_rc=data.insertFromRight(hwctrl_inter_frame_delay,0,17); if (e_rc) { rc.setEcmdError(e_rc); return rc; }
+ e_rc = data.insertFromRight(hwctrl_inter_frame_delay,0,17);
+ if (e_rc)
+ {
+ rc.setEcmdError(e_rc);
+ break;
+ }
- // FAPI_INF(" -----------------------------------------------------");
FAPI_INF(" SPIPSS ADC CTRL_REG_2 Configuration ");
- // FAPI_INF(" -----------------------------------------------------");
FAPI_INF(" hwctrl_inter_frm_delay => %d ", hwctrl_inter_frame_delay );
FAPI_INF(" " );
FAPI_INF(" " );
- // FAPI_INF(" -----------------------------------------------------");
-
-
rc = fapiPutScom(i_target, SPIPSS_ADC_CTRL_REG2_0x00070002, data );
- if (rc) {
- FAPI_ERR("fapiPutScom(SPIPSS_ADC_CTRL_REG2_0x00070002) failed."); return rc;
+ if (rc)
+ {
+ FAPI_ERR("fapiPutScom(SPIPSS_ADC_CTRL_REG2_0x00070002) failed.");
+ break;
}
-
// ******************************************************************
- // - clear SPIPSS_ADC_Wdata_REG
+ // - clear SPIPSS_ADC_Wdata_REG
// ******************************************************************
-// rc = fapiGetScom(i_target, SPIPSS_ADC_WDATA_REG_0x00070010, data );
-// if (rc) {
-// FAPI_ERR("fapiGetScom(SPIPSS_ADC_WDATA_REG_0x00070010) failed."); return rc;
-// }
-
- // modify_data here
uint32_t hwctrl_wdata = 0x0;
- e_rc=data.flushTo0(); if (e_rc) { rc.setEcmdError(e_rc); return rc; }
-
- // e_rc=data.setWord(1, 0x41000100); if (e_rc) { rc.setEcmdError(e_rc); return rc; }
- e_rc=data.insertFromRight(hwctrl_wdata ,0,16); if (e_rc) { rc.setEcmdError(e_rc); return rc; }
+ e_rc |= data.flushTo0();
+ e_rc |= data.insertFromRight(hwctrl_wdata ,0,16);
+ if (e_rc)
+ {
+ rc.setEcmdError(e_rc);
+ break;
+ }
- // FAPI_INF(" -----------------------------------------------------");
- FAPI_INF(" SPIPSS_WDATA_REG is cleared ");
- // FAPI_INF(" -----------------------------------------------------");
+ FAPI_INF(" SPIPSS_WDATA_REG is cleared ");
FAPI_INF(" hwctrl_wdata => %d ", hwctrl_wdata );
- FAPI_INF(" " );
- FAPI_INF(" " );
- // FAPI_INF(" -----------------------------------------------------");
-
-
rc = fapiPutScom(i_target, SPIPSS_ADC_WDATA_REG_0x00070010, data );
- if (rc) {
- FAPI_ERR("fapiPutScom(SPIPSS_ADC_WDATA_REG_0x00070010) failed."); return rc;
+ if (rc)
+ {
+ FAPI_ERR("fapiPutScom(SPIPSS_ADC_WDATA_REG_0x00070010) failed.");
+ break;
}
-
// ******************************************************************
- // - set SPIPSS_P2S_CTRL_REG0 (24b)
- // p2s_frame_size = 16
+ // - 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."); return rc;
+ 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;
+ 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_count1;
-// uint8_t p2s_out_count1;
- uint8_t p2s_in_delay;
-// uint8_t p2s_in_count2;
-// uint8_t p2s_out_count2;
-// uint8_t p2s_in_delay2;
-
-
-// if (p2s_target == 13)
-// {
-// p2s_device = 1;
-// FAPI_INF(" p2s_target_DPSS " );
-// }
-// else if (p2s_target == 10)
-// {
-// p2s_device = 0;
-// FAPI_INF(" p2s_target_APSS " );
-// }
-// else
-// { FAPI_INF(" " );
-// FAPI_ERR("wrong device taget : make sure that you use 0xA=APSS and 0XD=DPSS no other value works");
-// FAPI_SET_HWP_ERROR(rc, RC_PROCPM_PSS_WRONG_DEVICE);
-// return rc;
-// }
-
-
-
-
-// p2s_frame_size = 0x10 ;
-// p2s_clk_pol = 0;
-// p2s_clk_pha = 0;
-// p2s_clk_divider= 0x1D;
-// p2s_inter_frame_delay = 0x0;
-
- // calculation of clock divider
-// p2s_clk_divider= nest_freq/spipss_freq/8-1 ;
-
-
- p2s_frame_size = attr_pm_spipss_frame_size ;
- // p2s_out_count = attr_pm_spipss_out_count ;
- p2s_in_delay = attr_pm_spipss_in_delay ;
- // p2s_in_count = attr_pm_spipss_in_count ;
- 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 ;
- // nest_freq = attr_p8_pss_init_nest_frequency ;
- // spipss_freq = attr_pm_pss_init_spipss_frequency;
- p2s_device = attr_pm_apss_chip_select;
-
+ 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
+ // - 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."); return rc;
+ 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;
+ }
- // e_rc=data.flushTo0(); if (e_rc) { rc.setEcmdError(e_rc); return rc; }
- // e_rc=data.setWord(1, 0x41000100); if (e_rc) { rc.setEcmdError(e_rc); return rc; }
- e_rc=data.insertFromRight(p2s_frame_size,0,6); if (e_rc) { rc.setEcmdError(e_rc); return rc; }
- e_rc=data.insertFromRight(p2s_in_delay,12,6); if (e_rc) { rc.setEcmdError(e_rc); return rc; }
-
- // FAPI_INF(" -----------------------------------------------------");
FAPI_INF(" SPIPSS P2S CTRL_REG_0 Configuration ");
- // FAPI_INF(" -----------------------------------------------------");
FAPI_INF(" frame size => %d ", p2s_frame_size);
FAPI_INF(" p2s_in_delay => %d ", p2s_in_delay );
- FAPI_INF(" " );
- // FAPI_INF(" -----------------------------------------------------");
-
-
rc = fapiPutScom(i_target, SPIPSS_P2S_CTRL_REG0_0x00070040, data );
- if (rc) {
- FAPI_ERR("fapiPutScom(SPIPSS_P2S_CTRL_REG0_0x00070040) failed."); return rc;
+ 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)
+ // - 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."); return rc;
+ 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.flushTo0(); if (e_rc) { rc.setEcmdError(e_rc); return rc; }
- // e_rc=data.setWord(1, 0x41000100); if (e_rc) { rc.setEcmdError(e_rc); return rc; }
- e_rc=data.insertFromRight(p2s_fsm_enable ,0,1); if (e_rc) { rc.setEcmdError(e_rc); return rc; }
- e_rc=data.insertFromRight(p2s_device ,1,1); if (e_rc) { rc.setEcmdError(e_rc); return rc; }
- e_rc=data.insertFromRight(p2s_clk_pol ,2,1); if (e_rc) { rc.setEcmdError(e_rc); return rc; }
- e_rc=data.insertFromRight(p2s_clk_pha ,3,1); if (e_rc) { rc.setEcmdError(e_rc); return rc; }
- e_rc=data.insertFromRight(p2s_clk_divider ,4,10); if (e_rc) { rc.setEcmdError(e_rc); return rc; }
- e_rc=data.insertFromRight(p2s_nr_of_frames ,14,4); if (e_rc) { rc.setEcmdError(e_rc); return rc; }
+ 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(" -----------------------------------------------------");
FAPI_INF(" SPIPSS P2S CTRL_REG_1 Configuration ");
- // FAPI_INF(" -----------------------------------------------------");
FAPI_INF(" p2s_fsm_enable => %d ", p2s_fsm_enable );
FAPI_INF(" p2s_target => %d ", p2s_target );
FAPI_INF(" p2s_device => %d ", p2s_device );
@@ -650,322 +593,250 @@ p8_pss_init(Target &i_target, uint32_t mode)
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);
- FAPI_INF(" " );
- FAPI_INF(" " );
- // FAPI_INF(" -----------------------------------------------------");
-
-
rc = fapiPutScom(i_target, SPIPSS_P2S_CTRL_REG1_0x00070041, data );
- if (rc) {
- FAPI_ERR("fapiPutScom(SPIPSS_P2S_CTRL_REG1_0x00070041) failed."); return rc;
+ if (rc)
+ {
+ FAPI_ERR("fapiPutScom(SPIPSS_P2S_CTRL_REG1_0x00070041) failed.");
+ break;
}
-
// ******************************************************************
- // - set SPIPSS_P2S_CTRL_REG2
- // p2s_inter_frame_delay = 0x0
+ // - 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."); return rc;
+ if (rc)
+ {
+ FAPI_ERR("fapiGetScom(SPIPSS_P2S_CTRL_REG2) failed.");
+ break;
}
- // modify_data here
-
- // e_rc=data.flushTo0(); if (e_rc) { rc.setEcmdError(e_rc); return rc; }
- // e_rc=data.setWord(1, 0x41000100); if (e_rc) { rc.setEcmdError(e_rc); return rc; }
- e_rc=data.insertFromRight(p2s_inter_frame_delay,0,17); if (e_rc) { rc.setEcmdError(e_rc); return rc; }
-
+ e_rc |= data.insertFromRight(p2s_inter_frame_delay,0,17);
+ if (e_rc)
+ {
+ rc.setEcmdError(e_rc);
+ break;
+ }
- // FAPI_INF(" -----------------------------------------------------");
FAPI_INF(" SPIPSS P2S CTRL_REG_2 Configuration ");
- // FAPI_INF(" -----------------------------------------------------");
FAPI_INF(" p2s_inter_frm_delay => %d ", p2s_inter_frame_delay );
- FAPI_INF(" " );
- FAPI_INF(" " );
- // FAPI_INF(" -----------------------------------------------------");
-
-
rc = fapiPutScom(i_target, SPIPSS_P2S_CTRL_REG2_0x00070042, data );
- if (rc) {
- FAPI_ERR("fapiPutScom(SPIPSS_P2S_CTRL_REG2_0x00070042) failed."); return rc;
+ if (rc)
+ {
+ FAPI_ERR("fapiPutScom(SPIPSS_P2S_CTRL_REG2_0x00070042) failed.");
+ break;
}
// ******************************************************************
- // - clear SPIPSS_P2S_Wdata_REG
+ // - 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."); return rc;
+ if (rc)
+ {
+ FAPI_ERR("fapiGetScom(SPIPSS_P2S_WDATA_REG_0x00070050) failed.");
+ break;
}
-// modify_data here
-
uint32_t p2s_wdata = 0x0;
- e_rc=data.flushTo0(); if (e_rc) { rc.setEcmdError(e_rc); return rc; }
- e_rc=data.insertFromRight(p2s_wdata ,0,16); if (e_rc) { rc.setEcmdError(e_rc); return rc; }
+ e_rc |= data.flushTo0();
+ e_rc |= data.insertFromRight(p2s_wdata ,0,16);
+ if (e_rc)
+ {
+ rc.setEcmdError(e_rc);
+ break;
+ }
- // FAPI_INF(" -----------------------------------------------------");
FAPI_INF(" SPIPSS_P2S_WDATA_REG is cleared ");
- // FAPI_INF(" -----------------------------------------------------");
FAPI_INF(" p2s_wdata => %d ", p2s_wdata );
FAPI_INF(" " );
- FAPI_INF(" " );
- // FAPI_INF(" -----------------------------------------------------");
-
-
-
rc = fapiPutScom(i_target, SPIPSS_P2S_WDATA_REG_0x00070050, data );
- if (rc) {
- FAPI_ERR("fapiPutScom(SPIPSS_P2Sb_WDATA_REG_0x00070050) failed."); return rc;
+ if (rc)
+ {
+ FAPI_ERR("fapiPutScom(SPIPSS_P2Sb_WDATA_REG_0x00070050) failed.");
+ break;
}
-
- // ******************************************************************
- // - Set 100ns Register for Interframe delay
// ******************************************************************
+ // - 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."); return rc;
+ if (rc)
+ {
+ FAPI_ERR("fapiGetScom(SPIPSS_100NS_REG_0x00070028) failed.");
+ break;
}
- // modify_data here
-
+ e_rc=data.insertFromRight(spipss_100ns_div_value ,0,32);
+ if (e_rc)
+ {
+ rc.setEcmdError(e_rc);
+ break;
+ }
- e_rc=data.insertFromRight(spipss_100ns_div_value ,0,32); if (e_rc) { rc.setEcmdError(e_rc); return rc; }
+ 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;
+ }
- // FAPI_INF(" -----------------------------------------------------");
- FAPI_INF(" SPIPSS_100NS_REG is set the value ");
- // FAPI_INF(" -----------------------------------------------------");
- FAPI_INF(" spipss_100ns_div_value_hi => %d ", spipss_100ns_div_value );
- FAPI_INF(" nest_freq => %d ", nest_freq );
- FAPI_INF(" " );
- // FAPI_INF(" -----------------------------------------------------");
+ } while(0);
- rc = fapiPutScom(i_target, SPIPSS_100NS_REG_0x00070028, data );
- if (rc) {
- FAPI_ERR("fapiPutScom(SPIPSS_100NS_REG_0x00070028) failed."); return rc;
- }
+ 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);
- FAPI_INF("");
- FAPI_INF("Executing p8_pss_init ....");
+ uint32_t attr_proc_pss_init_nest_frequency;
+ float pss_cycle_ns;
+ uint32_t pollcount=0;
+ float max_polls;
+ uint32_t pss_timeout_us = 1000;
- }
- // -------------------------------
- /// Reset: perform reset of PSS
- else if (mode == PM_RESET)
+ FAPI_INF("PSS reset start...");
+ do
{
- FAPI_INF("PSS reset...");
- // FAPI_INF("PSS reset not yet supported!!!!...");
-
-
-// ******************************************************************
-// - POLLing status register for ongoing or errors
+ // Determine the PowerBus frequency to determine the clock speed
+ // of the PSS logic. This determines the number of polls needed
+ // for a given timeout interval.
+ GETATTR( rc,
+ ATTR_FREQ_PB,
+ "ATTR_FREQ_PB",
+ NULL,
+ attr_proc_pss_init_nest_frequency);
+
+ pss_cycle_ns = ((1/(float)attr_proc_pss_init_nest_frequency)*4);
+ FAPI_DBG("pss_cycle_ns = %f; pss_nest_freq = %d",
+ pss_cycle_ns, attr_proc_pss_init_nest_frequency);
+ max_polls = (pss_timeout_us / (pss_cycle_ns / 1000));
+ FAPI_DBG("computed max polls = %f; pss_timeout_us = %d; pss_cycle_ns = %f",
+ max_polls, pss_timeout_us, pss_cycle_ns);
-// ******************************************************************
- rc = fapiGetScom(i_target, SPIPSS_ADC_STATUS_REG_0x00070003, data );
- if (rc) {
- FAPI_ERR("fapiGetScom(SPIPSS_ADC_STATUS_REG_0x00070003) failed."); return rc;
- }
- FAPI_INF("polling for ongoing to go low ... ");
-
- while (data.isBitSet(0) && data.isBitClear(5) && pollcount < max_polls)
- {
- rc = fapiGetScom(i_target, SPIPSS_ADC_STATUS_REG_0x00070003, data );
- if (rc) {
- FAPI_ERR("fapiGetScom(SPIPSS_ADC_STATUS_REG_0x00070003) failed."); return rc;
- }
- FAPI_INF(".");
- pollcount++;
-
- }
-
- FAPI_INF("Send all the frames from ADC to the device.So now resetting it ");
-
- pollcount = 0;
-
-// ******************************************************************
-// - POLLing status register for ongoing or errors
-
-// ******************************************************************
- rc = fapiGetScom(i_target, SPIPSS_P2S_STATUS_REG_0x00070043, data );
- if (rc) {
- FAPI_ERR("fapiGetScom(SPIPSS_P2S_STATUS_REG_0x00070043) failed."); return rc;
- }
- FAPI_INF("polling for ongoing to go low ... ");
-
- while (data.isBitSet(0) && data.isBitClear(5)&& pollcount < max_polls)
- {
- rc = fapiGetScom(i_target, SPIPSS_P2S_STATUS_REG_0x00070043, data );
- if (rc) {
- FAPI_ERR("fapiGetScom(SPIPSS_P2S_STATUS_REG_0x00070043) failed."); return rc;
- }
- FAPI_INF(".");
- pollcount++;
- }
-
- FAPI_INF("Sent all the frames from P2S bridge to the device.");
-
-
-// ******************************************************************
-// - Resetting both ADC and P2S bridge
-// ******************************************************************
-
-
- FAPI_INF("Resetting P2S and ADC bridge.");
+ // ******************************************************************
+ // - Poll status register for ongoing or errors to give the
+ // chance for on-going operations to complete
+ // ******************************************************************
+ FAPI_DBG("Polling for ADC on-going to go low ... ");
+
+ do
+ {
+ rc = fapiGetScom(i_target, SPIPSS_ADC_STATUS_REG_0x00070003, data );
+ if (rc)
+ {
+ FAPI_ERR("fapiGetScom(SPIPSS_ADC_STATUS_REG_0x00070003) failed.");
+ break;
+ }
+ FAPI_INF(".");
+ pollcount++;
+ } while (data.isBitSet(0) && data.isBitClear(5) && pollcount < max_polls);
+ if (!rc.ok())
+ {
+ break;
+ }
+ if (pollcount >= max_polls)
+ {
+ FAPI_INF("WARNING: SPI ADC did not go to idle in %d us. Reset of PSS macro is commencing anyway", pss_timeout_us);
+ break;
+ }
+ else
+ {
+ FAPI_INF("Send all the frames from ADC to the device.So now resetting it ");
+ }
- e_rc=data.flushTo0(); if (e_rc) { rc.setEcmdError(e_rc); return rc; }
- e_rc=data.setBit(1); if (e_rc) { rc.setEcmdError(e_rc); return rc; }
- rc=fapiPutScom(i_target, SPIPSS_ADC_RESET_REGISTER_0x00070005 , data); if(rc) return rc;
- rc=fapiPutScom(i_target, SPIPSS_P2S_RESET_REGISTER_0x00070045 , data); if(rc) return rc;
+ // ******************************************************************
+ // - Poll status register for ongoing or errors to give the
+ // chance for on-going operations to complete
+ // ******************************************************************
- // Reset PMC. However, the bit used means the entire PMC must be reconfigured!
- //e_rc=data.clear(); if (e_rc) { rc.setEcmdError(e_rc); return rc; }
- //e_rc=data.setBit(12); if (e_rc) { rc.setEcmdError(e_rc); return rc; }
- // rc=fapiPutScom(i_target, PMC_MODE_REG_0x00062000 , data); if(rc) return rc;
+ FAPI_INF("Polling for P2S on-going to go low ... ");
+ pollcount = 0;
+ do
+ {
+ rc = fapiGetScom(i_target, SPIPSS_P2S_STATUS_REG_0x00070043, data );
+ if (rc)
+ {
+ FAPI_ERR("fapiGetScom(SPIPSS_P2S_STATUS_REG_0x00070043) failed.");
+ break;
+ }
+ FAPI_INF(".");
+ pollcount++;
+ } while (data.isBitSet(0) && data.isBitClear(5) && pollcount < max_polls);
+ if (!rc.ok())
+ {
+ break;
+ }
+ if (pollcount >= max_polls)
+ {
+ FAPI_INF("WARNING: SPI P2S did not go to idle in %d us. Reset of PSS macro is commencing anyway", pss_timeout_us);
+ break;
+ }
+ else
+ {
+ FAPI_INF("Sent all the frames from P2S bridge to the device.");
+ }
- FAPI_INF("Reset procedure is done .");
+ // ******************************************************************
+ // - Resetting both ADC and P2S bridge
+ // ******************************************************************
- }
+ FAPI_INF("Resetting P2S and ADC bridge.");
- /// -------------------------------
- /// Unsupported Mode
+ e_rc=data.flushTo0();
+ e_rc=data.setBit(1);
+ if (e_rc)
+ {
+ rc.setEcmdError(e_rc);
+ break;
+ }
- else {
+ rc = fapiPutScom(i_target, SPIPSS_ADC_RESET_REGISTER_0x00070005 , data);
+ if (rc)
+ {
+ FAPI_ERR("fapiPutScom(SPIPSS_ADC_RESET_REGISTER_0x00070005) failed.");
+ break;
+ }
- FAPI_ERR("Unknown mode passed to p8_pss_init. Mode %x ....", mode);
- uint32_t & MODE = mode;
- FAPI_SET_HWP_ERROR(rc, RC_PROCPM_PSS_CODE_BAD_MODE);
+ 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
-
-//#ifdef FAPIECMD
} //end extern C
-//#endif
-
-
-
-// Backups
-
-// ----------------------------------------------------------------------
-// Constant definitions
-// ----------------------------------------------------------------------
-// CONST_UINT64_T( SPIPSS_ADC_CTRL_REG0_0x00070000 , ULL(0x00070000) );
-// CONST_UINT64_T( SPIPSS_ADC_CTRL_REG1_0x00070001 , ULL(0x00070001) );
-// CONST_UINT64_T( SPIPSS_ADC_CTRL_REG2_0x00070002 , ULL(0x00070002) );
-// CONST_UINT64_T( SPIPSS_ADC_STATUS_REG_0x00070003 , ULL(0x00070003) );
-// CONST_UINT64_T( SPIPSS_ADC_CMD_REG_0x00070004 , ULL(0x00070004) );
-
-// CONST_UINT64_T( SPIPSS_ADC_WDATA_REG_0x00070010 , ULL(0x00070010) );
-// CONST_UINT64_T( SPIPSS_ADC_RDATA_REG0_0x00070020 , ULL(0x00070020) );
-// CONST_UINT64_T( SPIPSS_ADC_RDATA_REG1_0x00070021 , ULL(0x00070021) );
-// CONST_UINT64_T( SPIPSS_ADC_RDATA_REG2_0x00070022 , ULL(0x00070022) );
-// CONST_UINT64_T( SPIPSS_ADC_RDATA_REG3_0x00070023 , ULL(0x00070023) );
-// CONST_UINT64_T( SPIPSS_100NS_REG_0x00070028 , ULL(0x00070028) );
-// CONST_UINT64_T( SPIPSS_P2S_CTRL_REG0_0x00070040 , ULL(0x00070040) );
-// CONST_UINT64_T( SPIPSS_P2S_CTRL_REG1_0x00070041 , ULL(0x00070041) );
-// CONST_UINT64_T( SPIPSS_P2S_CTRL_REG2_0x00070042 , ULL(0x00070042) );
-// CONST_UINT64_T( SPIPSS_P2S_STATUS_REG_0x00070043 , ULL(0x00070043) );
-// CONST_UINT64_T( SPIPSS_P2S_COMMAND_REG_0x00070044 , ULL(0x00070044) );
-
-// CONST_UINT64_T( SPIPSS_P2S_WDATA_REG_0x00070050 , ULL(0x00070050) );
-// CONST_UINT64_T( SPIPSS_P2S_RDATA_REG_0x00070060 , ULL(0x00070060) );
-// CONST_UINT64_T( SPIPSS_ADC_RESET_REGISTER_0x00070005 , ULL(0x00070005) );
-// CONST_UINT64_T( SPIPSS_P2S_RESET_REGISTER_0x00070045 , ULL(0x00070045) );
-
-
-
-
-
-
-
-// if (hwctrl_target == 13)
-// {
-// hwctrl_device = 1;
-// FAPI_INF(" hwctrl_target_DPSS " );
-// }
-// else if (hwctrl_target == 10)
-// {
-// hwctrl_device = 0;
-// FAPI_INF(" hwctrl_target_APSS " );
-// }
-// else
-// {
-// FAPI_INF(" " );
-// FAPI_ERR("wrong device taget : make sure that you use 0xA=APSS and 0XD=DPSS no other value works");
-// FAPI_SET_HWP_ERROR(rc, RC_PROCPM_PSS_WRONG_DEVICE);
-// return rc;
-// }
-
- // **********************************************
- // Add All Attributes related to hwctrl here
- // **********************************************
-
-
-// hwctrl_frame_size = 0x10 ;
-// hwctrl_clk_pol = 0;
-// hwctrl_clk_pha = 0;
-// hwctrl_clk_divider= 0x1D;
-// hwctrl_inter_frame_delay = 0x0;
-// nest_freq = 600;
-// spipss_freq = 10;
-// hwctrl_in_count=0;
-// hwctrl_out_count=0;
-// hwctrl_in_delay=0;
-
-
-
-
-// uint8_t attr_pm_spipss_frame_size_set = 16 ;
-// uint8_t attr_pm_spipss_out_count_set = 16;
-// uint8_t attr_pm_spipss_in_delay_set = 0;
-// uint8_t attr_pm_spipss_in_count_set = 16;
-// uint8_t attr_pm_spipss_clock_polarity_set =0 ;
-// uint8_t attr_pm_spipss_clock_phase_set = 0;
-// //uint32_t attr_pm_spipss_clock_divider_set = 0;
-// uint32_t attr_pm_spipss_inter_frame_delay_set = 1;
-
-
-
-// rc = FAPI_ATTR_SET(ATTR_PM_SPIPSS_FRAME_SIZE, &l_pTarget, attr_pm_spipss_frame_size_set); if (rc) return rc;
-// rc = FAPI_ATTR_SET(ATTR_PM_SPIPSS_OUT_COUNT, &l_pTarget, attr_pm_spipss_out_count_set); if (rc) return rc;
-// rc = FAPI_ATTR_SET(ATTR_PM_SPIPSS_IN_COUNT, &l_pTarget, attr_pm_spipss_in_count_set); if (rc) return rc;
-// //----------------------------------------------------------
-// rc = FAPI_ATTR_SET(ATTR_PM_SPIPSS_IN_DELAY, &l_pTarget, attr_pm_spipss_in_delay_set); if (rc) return rc;
-
-// //----------------------------------------------------------
-// rc = FAPI_ATTR_SET(ATTR_PM_SPIPSS_CLOCK_POLARITY, &l_pTarget, attr_pm_spipss_clock_polarity_set); if (rc) return rc;
-
-// //----------------------------------------------------------
-// rc = FAPI_ATTR_SET(ATTR_PM_SPIPSS_CLOCK_PHASE, &l_pTarget, attr_pm_spipss_clock_phase_set); if (rc) return rc;
-
-// //----------------------------------------------------------
-// rc = FAPI_ATTR_SET(ATTR_PM_SPIPSS_INTER_FRAME_DELAY, &l_pTarget, attr_pm_spipss_inter_frame_delay_set); if (rc) return rc;
-
-// //----------------------------------------------------------
-// // rc = FAPI_ATTR_SET(ATTR_PM_SPIPSS_INTER_FRAME_DELAY_WRITE_SETTNG, &l_pTarget, attr_pm_spipss_interframe_delay_write_status_value_set);
-
-
-
-// //----------------------------------------------------------
-// // rc = FAPI_ATTR_SET(ATTR_PM_SPIPSS_CLOCK_DIVIDER, &l_pTarget, attr_pm_spipss_clock_divider_set);
-
-
-
-
OpenPOWER on IntegriCloud