diff chipsetsw/drivers/drv_core/memif/sys_memif.c @ 0:509db1a7b7b8

initial import: leo2moko-r1
author Space Falcon <falcon@ivan.Harhan.ORG>
date Mon, 01 Jun 2015 03:24:05 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/chipsetsw/drivers/drv_core/memif/sys_memif.c	Mon Jun 01 03:24:05 2015 +0000
@@ -0,0 +1,364 @@
+/*                @(#) nom : sys_memif.c SID: 1.2 date : 05/23/03             */
+/* Filename:      sys_memif.c                                                 */
+/* Version:       1.2                                                         */
+/******************************************************************************
+ *                   WIRELESS COMMUNICATION SYSTEM DEVELOPMENT
+ *
+ *             (C) 2002 Texas Instruments France. All rights reserved
+ *
+ *                          Author : Francois AMAND
+ *
+ *
+ *  Important Note
+ *  --------------
+ *
+ *  This S/W is a preliminary version. It contains information on a product 
+ *  under development and is issued for evaluation purposes only. Features 
+ *  characteristics, data and other information are subject to change.
+ *
+ *  The S/W is furnished under Non Disclosure Agreement and may be used or
+ *  copied only in accordance with the terms of the agreement. It is an offence
+ *  to copy the software in any way except as specifically set out in the 
+ *  agreement. No part of this document may be reproduced or transmitted in any
+ *  form or by any means, electronic or mechanical, including photocopying and
+ *  recording, for any purpose without the express written permission of Texas
+ *  Instruments Inc.
+ *
+ ******************************************************************************
+ *
+ *  FILE NAME: sys_memif.c
+ *
+ *
+ *  PURPOSE:  Drivers to be used for ARM memory interface configuration and
+ *            control for CALYPSO PLUS.
+ *
+ *
+ *  FILE REFERENCES:
+ *
+ *  Name                  IO      Description
+ *  -------------         --      ---------------------------------------------
+ *  
+ *
+ *
+ *  EXTERNAL VARIABLES:
+ *
+ *  Source:
+ *
+ *  Name                  Type              IO   Description
+ *  -------------         ---------------   --   ------------------------------
+ *
+ *
+ *
+ *  EXTERNAL REFERENCES:
+ *
+ *  Name                Description
+ *  ------------------  -------------------------------------------------------
+ *
+ *
+ *
+ *  ABNORMAL TERMINATION CONDITIONS, ERROR AND WARNING MESSAGES:
+ *  
+ *
+ *
+ *  ASSUMPTION, CONSTRAINTS, RESTRICTIONS:
+ *  
+ *
+ *
+ *  NOTES:
+ *  
+ *
+ *
+ *  REQUIREMENTS/FUNCTIONAL SPECIFICATION REFERENCES:
+ *
+ *
+ *
+ *
+ *  DEVELOPMENT HISTORY:
+ *
+ *  Date         Name(s)         Version  Description
+ *  -----------  --------------  -------  -------------------------------------
+ *  11-Oct-2002  Francois AMAND  0.0.1    First implementation
+ *  25-Feb-2003  G.Leterrier     0.0.2    Modification for reserved bit management 
+ *                                        f_memif_init_cs
+ *                                        f_memif_init_api_rhea_ctrl
+ *  26-Feb-2003 G.Leterrier               Disable page mode before re-configuration
+ *
+ *  ALGORITHM: 
+ *
+ *
+ *****************************************************************************/
+
+#include "l1sw.cfg"
+#include "chipset.cfg"
+
+#if (CHIPSET == 12)
+
+  #include "board.cfg"
+
+  #if (OP_L1_STANDALONE == 0)
+    #include "main/sys_types.h"
+  #else
+    #include "sys_types.h"
+  #endif
+  #include "sys_memif.h"
+  
+  
+  /******************************************************************************
+   *
+   *  FUNCTION NAME: f_memif_init_cs
+   *      Configure the memory features connected on the chip-select cs.
+   *
+   *
+   *  ARGUMENT LIST:
+   *
+   *  Argument       Type                   IO  Description
+   *  ------------   -------------------    --  ---------------------------------
+   *  d_cs           SYS_UWORD8             I   Chip-select number
+   *  p_cs_config    T_MEMIF_CS_CONFIG *    I   Configuration to apply to the
+   *                                            chip-select.
+   *
+   * RETURN VALUE: None
+   *
+   *****************************************************************************/
+  
+  void f_memif_init_cs(SYS_UWORD8 d_cs, T_MEMIF_CS_CONFIG *p_cs_config) {
+  
+    SYS_UWORD16 d_conf_csx_reg,d_exws_csx_reg;
+
+    /* save value of reserved bit */
+
+    d_conf_csx_reg = C_MEMIF_CONF_CSX_REG(d_cs);
+    d_conf_csx_reg &= C_MEMIF_CONF_CSX_MASK;
+
+    d_exws_csx_reg = C_MEMIF_EXWS_CSX_REG(d_cs);
+    d_exws_csx_reg &= C_MEMIF_EXWS_MASK;
+
+
+    /* disable page mode before change of configuration */
+    C_MEMIF_EXWS_CSX_REG(d_cs) &= ~(C_MEMIF_PAGE_MODE_EN);
+
+
+    /*
+     *  Configure CONF_CSx register
+     */
+    C_MEMIF_CONF_CSX_REG(d_cs) = (p_cs_config->d_ws   << C_MEMIF_CONF_WS_POS)   | 
+                                 (p_cs_config->d_dvs  << C_MEMIF_CONF_DVS_POS)  | 
+                                 (p_cs_config->d_we   << C_MEMIF_CONF_WE_POS)   | 
+                                 (p_cs_config->d_dc   << C_MEMIF_CONF_DC_POS)   | 
+                                 (p_cs_config->d_rodc << C_MEMIF_CONF_RODC_POS) | 
+                                 (p_cs_config->d_wrdc << C_MEMIF_CONF_WRDC_POS) | 
+                                 (p_cs_config->d_wws  << C_MEMIF_CONF_WWS_POS)  | d_conf_csx_reg;
+  
+    /*
+     *  Configure EXWS_CSx register
+     */
+    C_MEMIF_EXWS_CSX_REG(d_cs) = (p_cs_config->d_pme  << C_MEMIF_EXWS_PME_POS)  | 
+                                 (p_cs_config->d_pms  << C_MEMIF_EXWS_PMS_POS)  | 
+                                 (p_cs_config->d_pmws << C_MEMIF_EXWS_PMWS_POS) | 
+                                 (p_cs_config->d_wrws << C_MEMIF_EXWS_WRWS_POS) | d_exws_csx_reg;
+  
+    /*
+     *  Configure DCCTRL_CSx register
+     */
+    C_MEMIF_DCCTRL_CSX_REG(d_cs) = (p_cs_config->d_dcecs0 << C_MEMIF_DCCTRL_DCECS0_POS) |
+                                   (p_cs_config->d_dcecs1 << C_MEMIF_DCCTRL_DCECS1_POS) |
+                                   (p_cs_config->d_dcecs2 << C_MEMIF_DCCTRL_DCECS2_POS) |
+                                   (p_cs_config->d_dcecs3 << C_MEMIF_DCCTRL_DCECS3_POS) |
+                                   (p_cs_config->d_dcecs4 << C_MEMIF_DCCTRL_DCECS4_POS) |
+                                   (p_cs_config->d_dcecs5 << C_MEMIF_DCCTRL_DCECS5_POS); 
+  } /* f_memif_init_cs() */
+  
+  
+  
+  /******************************************************************************
+   *
+   *  FUNCTION NAME: f_memif_init_api_rhea_ctrl
+   *    Configure the API_RHEA_CTRL register.
+   *
+   *
+   *  ARGUMENT LIST:
+   *
+   *  Argument     Type         IO  Description
+   *  ----------   ----------   --  -------------------------------------------
+   *  d_adap0      SYS_UWORD8   I   Rhea strobe 0 access size adaptation enable
+   *  d_adap1      SYS_UWORD8   I   Rhea strobe 1 access size adaptation enable
+   *  d_adap_api   SYS_UWORD8   I   API access size adaptation enable
+   *  d_debug      SYS_UWORD8   I   ARM address debug enable/disable
+   *
+   *
+   * RETURN VALUE: None
+   *
+   *****************************************************************************/
+  
+  void f_memif_init_api_rhea_ctrl(SYS_UWORD8 d_adap0,
+                                  SYS_UWORD8 d_adap1,
+                                  SYS_UWORD8 d_adap_api,
+                                  SYS_UWORD8 d_debug) {
+    SYS_UWORD16 d_api_rhea_ctrl;
+
+    d_api_rhea_ctrl = C_MEMIF_API_RHEA_CTRL_REG;
+    d_api_rhea_ctrl &= C_MEMIF_API_RHEA_CTRL_MASK;
+
+  
+    C_MEMIF_API_RHEA_CTRL_REG = (d_adap0    << C_MEMIF_API_RHEA_CTRL_ADAPT0_POS)   | 
+                                (d_adap1    << C_MEMIF_API_RHEA_CTRL_ADAPT1_POS)   | 
+                                (d_adap_api << C_MEMIF_API_RHEA_CTRL_ADAPTAPI_POS) | 
+                                (d_debug    << C_MEMIF_API_RHEA_CTRL_DEBUG_POS)    | d_api_rhea_ctrl;
+  
+  } /* f_memif_init_api_rhea_ctrl() */
+  
+  
+/******************************************************************************
+   *
+   *  FUNCTION NAME: f_memif_debug_freeze
+   *    Freeze externa memory interface during internal access
+   *
+   *
+   *  ARGUMENT LIST:
+   *
+   *  Argument     Type         IO  Description
+   *  ----------   ----------   --  -------------------------------------------
+   *
+   *
+   * RETURN VALUE: None
+   *
+   *****************************************************************************/
+  
+  void f_memif_debug_freeze(void) {
+  
+    F_MEMIF_DEBUG_FREEZE;
+  
+  } /* f_memif_debug_freeze() */
+  
+
+  
+  /******************************************************************************
+   *
+   *  FUNCTION NAME: f_memif_du_enable
+   *    Enable Debug Unit capture.
+   *
+   *
+   *  ARGUMENT LIST:
+   *
+   *  Argument     Type         IO  Description
+   *  ----------   ----------   --  -------------------------------------------
+   *
+   *
+   * RETURN VALUE: None
+   *
+   *****************************************************************************/
+  
+  void f_memif_du_enable(void) {
+  
+    F_MEMIF_DU_ENABLE;
+  
+  } /* f_memif_du_enable() */
+  
+  
+  
+  /******************************************************************************
+   *
+   *  FUNCTION NAME: f_memif_du_disable
+   *    Disable Debug Unit capture.
+   *
+   *
+   *  ARGUMENT LIST:
+   *
+   *  Argument     Type         IO  Description
+   *  ----------   ----------   --  -------------------------------------------
+   *
+   *
+   * RETURN VALUE: None
+   *
+   *****************************************************************************/
+  
+  void f_memif_du_disable(void) {
+  
+    F_MEMIF_DU_DISABLE;
+  
+  } /* f_memif_du_disable() */
+  
+  
+  
+  /******************************************************************************
+   *
+   *  FUNCTION NAME: f_memif_extended_page_mode_enable
+   *    Enable Extended Page Mode feature, which locks the CS in active state
+   *    when accessing internal memory bus.
+   *
+   *
+   *  ARGUMENT LIST:
+   *
+   *  Argument     Type         IO  Description
+   *  ----------   ----------   --  -------------------------------------------
+   *
+   *
+   * RETURN VALUE: None
+   *
+   *****************************************************************************/
+  
+  void f_memif_extended_page_mode_enable(void) {
+  
+    F_MEMIF_ENABLE_EXTENDED_PAGE_MODE;
+  
+  } /* f_memif_extended_page_mode_enable() */
+  
+  
+  
+  /******************************************************************************
+   *
+   *  FUNCTION NAME: f_memif_shared_sram_allocation
+   *    Configure the Shared SRAM allocation.
+   *
+   *
+   *  ARGUMENT LIST:
+   *
+   *  Argument           Type          IO  Description
+   *  ----------------   -----------   --  ------------------------------------
+   *  d_allocation_cfg   SYS_UWORD16   I   Shared SRAM allocation configuration
+   *
+   * RETURN VALUE: None
+   *
+   *****************************************************************************/
+  
+  void f_memif_shared_sram_allocation(SYS_UWORD16 d_allocation_cfg) {
+    SYS_UWORD16 d_dspms_reg = C_MEMIF_DSPMS_REG;
+
+    d_dspms_reg &= ~C_MEMIF_DSPMS_MASK;
+    
+    d_dspms_reg |= (d_allocation_cfg & C_MEMIF_DSPMS_MASK) << C_MEMIF_DSPMS_POS;
+
+    C_MEMIF_DSPMS_REG = d_dspms_reg;
+  } /* f_memif_shared_sram_allocation() */
+
+
+
+  /******************************************************************************
+   *
+   *  FUNCTION NAME: f_memif_cs_mode
+   *    Configure the chip-select size.
+   *
+   *
+   *  ARGUMENT LIST:
+   *
+   *  Argument           Type          IO  Description
+   *  ----------------   -----------   --  ------------------------------------
+   *  d_cs_mode_cfg      SYS_UWORD16   I   Chip-select size configuration
+   *
+   * RETURN VALUE: None
+   *
+   *****************************************************************************/
+  
+  void f_memif_cs_mode(SYS_UWORD16 d_cs_mode_cfg) {
+    SYS_UWORD16 d_ex_ctrl_reg = C_MEMIF_EX_CTRL_REG;
+
+    d_ex_ctrl_reg &= ~(C_MEMIF_EX_CTRL_CS_MODE_MASK << C_MEMIF_EX_CTRL_CS_MODE_POS);
+    
+    d_ex_ctrl_reg |= (d_cs_mode_cfg & C_MEMIF_EX_CTRL_CS_MODE_MASK) << C_MEMIF_EX_CTRL_CS_MODE_POS;
+
+    C_MEMIF_EX_CTRL_REG = d_ex_ctrl_reg;
+  } /* f_memif_cs_mode() */
+
+
+
+#endif /* (CHIPSET == 12) */