123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490 |
- /*==================================================================================================
- * Project : RTD AUTOSAR 4.4
- * Platform : CORTEXM
- * Peripheral :
- * Dependencies : none
- *
- * Autosar Version : 4.4.0
- * Autosar Revision : ASR_REL_4_4_REV_0000
- * Autosar Conf.Variant :
- * SW Version : 1.0.0
- * Build Version : S32K1_RTD_1_0_0_HF01_D2109_ASR_REL_4_4_REV_0000_20210907
- *
- * (c) Copyright 2020-2021 NXP Semiconductors
- * All Rights Reserved.
- *
- * NXP Confidential. This software is owned or controlled by NXP and may only be
- * used strictly in accordance with the applicable license terms. By expressly
- * accepting such terms or by downloading, installing, activating and/or otherwise
- * using the software, you are agreeing that you have read, and that you agree to
- * comply with and are bound by, such license terms. If you do not agree to be
- * bound by the applicable license terms, then you may not retain, install,
- * activate or otherwise use the software.
- ==================================================================================================*/
- /**
- * @file Ram_Ip.c
- * @version 1.0.0
- *
- * @brief RAM driver implementations.
- * @details RAM driver implementations.
- *
- * @addtogroup RAM_DRIVER Ram Ip Driver
- * @{
- */
- #ifdef __cplusplus
- extern "C"{
- #endif
- /*==================================================================================================
- * INCLUDE FILES
- * 1) system and project includes
- * 2) needed interfaces from external units
- * 3) internal and external interfaces from this unit
- ==================================================================================================*/
- #include "Ram_Ip.h"
- #include "OsIf.h"
- #if defined(S32K3XX)
- /* Todo remove it */
- #include "S32K344_MC_ME.h"
- #if (defined(RAM_IP_ENABLE_USER_MODE_SUPPORT) && (STD_ON == RAM_IP_ENABLE_USER_MODE_SUPPORT))
- #if (defined(MCAL_MC_ME_REG_PROT_AVAILABLE))
- #if (STD_ON == MCAL_MC_ME_REG_PROT_AVAILABLE)
- #define USER_MODE_REG_PROT_ENABLED (STD_ON)
- #include "RegLockMacros.h"
- #endif /* (STD_ON == MCAL_MC_ME_REG_PROT_AVAILABLE) */
- #endif
- #endif /* (STD_ON == RAM_IP_ENABLE_USER_MODE_SUPPORT) */
- #endif
- /*==================================================================================================
- SOURCE FILE VERSION INFORMATION
- ==================================================================================================*/
- #define RAM_IP_VENDOR_ID_C 43
- #define RAM_IP_AR_RELEASE_MAJOR_VERSION_C 4
- #define RAM_IP_AR_RELEASE_MINOR_VERSION_C 4
- #define RAM_IP_AR_RELEASE_REVISION_VERSION_C 0
- #define RAM_IP_SW_MAJOR_VERSION_C 1
- #define RAM_IP_SW_MINOR_VERSION_C 0
- #define RAM_IP_SW_PATCH_VERSION_C 0
- /*==================================================================================================
- * FILE VERSION CHECKS
- ==================================================================================================*/
- /* Check if Ram_Ip.c file and Ram_Ip.h file are of the same vendor */
- #if (RAM_IP_VENDOR_ID_C != RAM_IP_VENDOR_ID)
- #error "Ram_Ip.c and Ram_Ip.h have different vendor ids"
- #endif
- /* Check if Ram_Ip.c file and Ram_Ip.h file are of the same Autosar version */
- #if ((RAM_IP_AR_RELEASE_MAJOR_VERSION_C != RAM_IP_AR_RELEASE_MAJOR_VERSION) || \
- (RAM_IP_AR_RELEASE_MINOR_VERSION_C != RAM_IP_AR_RELEASE_MINOR_VERSION) || \
- (RAM_IP_AR_RELEASE_REVISION_VERSION_C != RAM_IP_AR_RELEASE_REVISION_VERSION) \
- )
- #error "AutoSar Version Numbers of Ram_Ip.c and Ram_Ip.h are different"
- #endif
- /* Check if Ram_Ip.c file and Ram_Ip.h file are of the same Software version */
- #if ((RAM_IP_SW_MAJOR_VERSION_C != RAM_IP_SW_MAJOR_VERSION) || \
- (RAM_IP_SW_MINOR_VERSION_C != RAM_IP_SW_MINOR_VERSION) || \
- (RAM_IP_SW_PATCH_VERSION_C != RAM_IP_SW_PATCH_VERSION) \
- )
- #error "Software Version Numbers of Ram_Ip.c and Ram_Ip.h are different"
- #endif
- #ifndef DISABLE_MCAL_INTERMODULE_ASR_CHECK
- /* Check if Ram_Ip.c file and OsIf.h file are of the same Autosar version */
- #if ((RAM_IP_AR_RELEASE_MAJOR_VERSION_C != OSIF_AR_RELEASE_MAJOR_VERSION) || \
- (RAM_IP_AR_RELEASE_MINOR_VERSION_C != OSIF_AR_RELEASE_MINOR_VERSION))
- #error "AutoSar Version Numbers of Ram_Ip.c and OsIf.h are different"
- #endif
- #endif
- #if defined(S32K3XX)
- #if (defined(RAM_IP_ENABLE_USER_MODE_SUPPORT) && (STD_ON == RAM_IP_ENABLE_USER_MODE_SUPPORT))
- #if (defined(MCAL_MC_ME_REG_PROT_AVAILABLE))
- #if (STD_ON == MCAL_MC_ME_REG_PROT_AVAILABLE)
- #ifndef DISABLE_MCAL_INTERMODULE_ASR_CHECK
- /* Check if Ram_Ip_S32K3XX.c file and RegLockMacros.h file are of the same Autosar version */
- #if ((RAM_IP_AR_RELEASE_MAJOR_VERSION_C != REGLOCKMACROS_AR_RELEASE_MAJOR_VERSION) || \
- (RAM_IP_AR_RELEASE_MINOR_VERSION_C != REGLOCKMACROS_AR_RELEASE_MINOR_VERSION))
- #error "AutoSar Version Numbers of Ram_Ip_S32K3XX.c and RegLockMacros.h are different"
- #endif
- #endif
- #endif /* (STD_ON == MCAL_MC_ME_REG_PROT_AVAILABLE) */
- #endif
- #endif /* RAM_IP_ENABLE_USER_MODE_SUPPORT */
- #endif
- /*==================================================================================================
- LOCAL TYPEDEFS (STRUCTURES, UNIONS, ENUMS)
- ==================================================================================================*/
- /*==================================================================================================
- LOCAL FUNCTION PROTOTYPES
- ==================================================================================================*/
- #define MCU_START_SEC_CODE
- #include "Mcu_MemMap.h"
- #if (RAM_IP_GET_RAM_STATE_API == STD_ON)
- static void RamStartTimeout(uint32 *startTimeOut,
- uint32 *elapsedTimeOut,
- uint32 *timeoutTicksOut,
- uint32 timeoutUs);
- static boolean RamTimeoutExpired(uint32 *startTimeInOut,
- uint32 *elapsedTimeInOut,
- uint32 TimeoutTicks);
- static void ReportRamErrorsEmptyCallback(Ram_Ip_RamReportErrorType error, uint8 u8ErrorCode);
- static void ReportRamErrors(Ram_Ip_RamReportErrorType error, uint8 u8ErrorCode);
- #endif
- #define MCU_STOP_SEC_CODE
- #include "Mcu_MemMap.h"
- /*==================================================================================================
- LOCAL MACROS
- ==================================================================================================*/
- /*==================================================================================================
- LOCAL CONSTANTS
- ==================================================================================================*/
- /*==================================================================================================
- LOCAL VARIABLES
- ==================================================================================================*/
- #if (RAM_IP_GET_RAM_STATE_API == STD_ON)
- #define MCU_START_SEC_VAR_INIT_UNSPECIFIED
- #include "Mcu_MemMap.h"
- /* Ram Report Error Callback */
- static Ram_Ip_ReportErrorsCallbackType RamReportErrorsCallback = ReportRamErrorsEmptyCallback;
- #define MCU_STOP_SEC_VAR_INIT_UNSPECIFIED
- #include "Mcu_MemMap.h"
- #endif /* (RAM_IP_GET_RAM_STATE_API == STD_ON) */
- /*==================================================================================================
- GLOBAL CONSTANTS
- ==================================================================================================*/
- /*==================================================================================================
- GLOBAL VARIABLES
- ==================================================================================================*/
- /*==================================================================================================
- LOCAL FUNCTIONS
- ==================================================================================================*/
-
- #define MCU_START_SEC_CODE
- #include "Mcu_MemMap.h"
- #if (RAM_IP_GET_RAM_STATE_API == STD_ON)
- /*FUNCTION**********************************************************************
- *
- * Function Name : RamStartTimeout
- * Description : Checks for timeout condition
- *
- *END**************************************************************************/
- static void RamStartTimeout(uint32 *startTimeOut,
- uint32 *elapsedTimeOut,
- uint32 *timeoutTicksOut,
- uint32 timeoutUs)
- {
- *startTimeOut = OsIf_GetCounter(RAM_TIMEOUT_TYPE);
- *elapsedTimeOut = 0U;
- *timeoutTicksOut = OsIf_MicrosToTicks(timeoutUs, RAM_TIMEOUT_TYPE);
- }
- /*FUNCTION**********************************************************************
- *
- * Function Name : RamTimeoutExpired
- * Description : Checks for timeout expiration condition
- *
- *END**************************************************************************/
- static boolean RamTimeoutExpired(uint32 *startTimeInOut,
- uint32 *elapsedTimeInOut,
- uint32 TimeoutTicks)
- {
- *elapsedTimeInOut += OsIf_GetElapsed(startTimeInOut, RAM_TIMEOUT_TYPE);
- return ((*elapsedTimeInOut >= TimeoutTicks)? TRUE : FALSE);
- }
- #endif
- #if (RAM_IP_GET_RAM_STATE_API == STD_ON)
- static void ReportRamErrorsEmptyCallback(Ram_Ip_RamReportErrorType error, uint8 u8ErrorCode)
- {
- /* No implementation */
- (void)error;
- (void)u8ErrorCode;
- }
- static void ReportRamErrors(Ram_Ip_RamReportErrorType error, uint8 u8ErrorCode)
- {
- RamReportErrorsCallback(error, u8ErrorCode);
- }
- #endif
- /*==================================================================================================
- GLOBAL FUNCTIONS
- ==================================================================================================*/
- /**
- * @brief This function initializes a given RAM section of the MCU on the common (main) platform.
- * @details Function initializes the RAM section specified by the pointer to the "Mcu_RamConfigType" parameter.
- * The section's base address, size, value to be written, and write-at-once-size are provided by
- * the configuration structure.
- * The function will write the value specified in the configuration structure.
- * After the write it will read back the RAM to verify that the requested value was
- * written.
- * Called by:
- * - Mcu_InitRamSection() from HLD.
- *
- * @param[in] Mcu_pRamConfigPtr Pointer to RAM section configuration structure
- * (member of 'Mcu_ConfigType' struct).
- *
- * @return Status signaling if the given RAM section has or has not been successfully initialized.
- * @retval RAM_IP_STATUS_OK The RAM section check was successful.
- * @retval RAM_IP_STATUS_NOT_OK The RAM section check was not successful.
- *
- * @implements Ram_Ip_InitRamSection_Activity
- *
- */
- Ram_Ip_StatusType Ram_Ip_InitRamSection(const Ram_Ip_RamConfigType * Ram_Ip_pRamConfigPtr)
- {
- /* Result of the operation. */
- Ram_Ip_StatusType RamStatus = RAM_IP_STATUS_OK;
- /* Variable for indexing RAM sections. */
- Ram_Ip_RamIndexType RamCounter;
- /* Limit of RamCounter. */
- Ram_Ip_RamSizeType RamCounterLimit;
- RAM_DEV_ASSERT(NULL_PTR != Ram_Ip_pRamConfigPtr);
- RamCounterLimit = (Ram_Ip_RamSizeType)( ((Ram_Ip_RamSizeType)(Ram_Ip_pRamConfigPtr->RamSize)) / (Ram_Ip_pRamConfigPtr->RamWriteSize) );
- RamStatus = RAM_IP_STATUS_OK;
- RamCounter = (Ram_Ip_RamIndexType)0UL;
- while ((RamCounter < RamCounterLimit) && (RAM_IP_STATUS_OK == RamStatus))
- {
- switch (Ram_Ip_pRamConfigPtr->RamWriteSize)
- {
- case (Ram_Ip_RamWriteSizeType)1U:
- ( *((uint8 (*)[1U]) ((uint32) Ram_Ip_pRamConfigPtr->pu8RamBaseAddr)) )[RamCounter] = (uint8) Ram_Ip_pRamConfigPtr->u64RamDefaultValue;
- break;
- case (Ram_Ip_RamWriteSizeType)2U:
- ( *((uint16 (*)[1U]) ((uint32) Ram_Ip_pRamConfigPtr->pu8RamBaseAddr)) )[RamCounter] = (uint16) Ram_Ip_pRamConfigPtr->u64RamDefaultValue;
- break;
- case (Ram_Ip_RamWriteSizeType)4U:
- ( *((uint32 (*)[1U]) ((uint32) Ram_Ip_pRamConfigPtr->pu8RamBaseAddr)) )[RamCounter] = (uint32) Ram_Ip_pRamConfigPtr->u64RamDefaultValue;
- break;
- case (Ram_Ip_RamWriteSizeType)8U:
- ( *((uint64 (*)[1U]) ((uint32) Ram_Ip_pRamConfigPtr->pu8RamBaseAddr)) )[RamCounter] = (uint64) Ram_Ip_pRamConfigPtr->u64RamDefaultValue;
- break;
- default:
- RamStatus = RAM_IP_STATUS_NOT_OK;
- break;
- }
- RamCounter++;
- }
- if ( RAM_IP_STATUS_OK == RamStatus )
- {
- RamCounter = (Ram_Ip_RamIndexType)0UL;
- /* Check if RAM was initialized correctly. */
- while ((RamCounter < RamCounterLimit) && (RAM_IP_STATUS_OK == RamStatus))
- {
- switch (Ram_Ip_pRamConfigPtr->RamWriteSize)
- {
- case (Ram_Ip_RamWriteSizeType)1U:
- if ( (uint8) Ram_Ip_pRamConfigPtr->u64RamDefaultValue != ( *((uint8 (*)[1U]) ((uint32)Ram_Ip_pRamConfigPtr->pu8RamBaseAddr)) )[RamCounter] )
- {
- RamStatus = RAM_IP_STATUS_NOT_OK;
- }
- break;
- case (Ram_Ip_RamWriteSizeType)2U:
- if ( (uint16) Ram_Ip_pRamConfigPtr->u64RamDefaultValue != ( *((uint16 (*)[1U]) ((uint32)Ram_Ip_pRamConfigPtr->pu8RamBaseAddr)) )[RamCounter] )
- {
- RamStatus = RAM_IP_STATUS_NOT_OK;
- }
- break;
- case (Ram_Ip_RamWriteSizeType)4U:
- if ( (uint32) Ram_Ip_pRamConfigPtr->u64RamDefaultValue != ( *((uint32 (*)[1U]) ((uint32)Ram_Ip_pRamConfigPtr->pu8RamBaseAddr)) )[RamCounter] )
- {
- RamStatus = RAM_IP_STATUS_NOT_OK;
- }
- break;
- case (Ram_Ip_RamWriteSizeType)8U:
- if ( (uint64) Ram_Ip_pRamConfigPtr->u64RamDefaultValue != ( *((uint64 (*)[1U]) ((uint32)Ram_Ip_pRamConfigPtr->pu8RamBaseAddr)) )[RamCounter] )
- {
- RamStatus = RAM_IP_STATUS_NOT_OK;
- }
- break;
- default:
- RamStatus = RAM_IP_STATUS_NOT_OK;
- break;
- }
- RamCounter++;
- }
- }
- return RamStatus;
- }
- #if (RAM_IP_GET_RAM_STATE_API == STD_ON)
- /**
- * @brief This service provides the actual status of the microcontroller Ram. (if supported)
- * @details
- *
- * @param[in] void
- *
- * @return State of RAM
- *
- * @implements Ram_Ip_GetRamState_Activity
- *
- */
- Ram_Ip_RamStateType Ram_Ip_GetRamState(void)
- {
- Ram_Ip_RamStateType eRamState = RAM_IP_RAMSTATE_INVALID;
- uint32 u32TempReg;
- uint32 StartTime;
- uint32 ElapsedTime;
- uint32 TimeoutTicks;
- boolean TimeoutOccurred = FALSE;
- #if defined(S32K3XX)
- /* MC_ME SetUserAccessAllowed */
- #if (defined(RAM_IP_ENABLE_USER_MODE_SUPPORT) && (STD_ON == RAM_IP_ENABLE_USER_MODE_SUPPORT))
- #if (defined(MCAL_MC_ME_REG_PROT_AVAILABLE ))
- #if (STD_ON == MCAL_MC_ME_REG_PROT_AVAILABLE )
- #if (defined(IP_MC_ME_BASE))
- SET_USER_ACCESS_ALLOWED(IP_MC_ME_BASE, MC_ME_PROT_MEM_U32);
- #endif
- #endif
- #endif /* MCAL_MC_ME_REG_PROT_AVAILABLE */
- #endif /* (STD_ON == RAM_IP_ENABLE_USER_MODE_SUPPORT) */
- /* Check clock status for STCU2 */
- if (((IP_MC_ME->PRTN1_COFB3_STAT & MC_ME_PRTN1_COFB3_STAT_BLOCK104_MASK) == 0U))
- {
- /* Enable clock for STCU2 device */
- IP_MC_ME->PRTN1_COFB3_CLKEN |= MC_ME_PRTN1_COFB3_CLKEN_REQ104(1U); /* REQ104: the clock enable control for STCU2 */
- IP_MC_ME->PRTN1_PCONF |= MC_ME_PRTN1_PCONF_PCE_MASK; /* PCE=1: Enable the clock to Partition #1 */
- IP_MC_ME->PRTN1_PUPD |= MC_ME_PRTN1_PUPD_PCUD_MASK; /* PCUD=1: Trigger the hardware process */
- IP_MC_ME->CTL_KEY = 0x5AF0U; /* Enter key */
- IP_MC_ME->CTL_KEY = 0xA50FU;
- /* Wait until STCU2 clock is running */
- RamStartTimeout(&StartTime, &ElapsedTime, &TimeoutTicks, RAM_TIMEOUT_VALUE_US);
- do
- {
- TimeoutOccurred = RamTimeoutExpired(&StartTime, &ElapsedTime, TimeoutTicks);
- }
- while(((IP_MC_ME->PRTN1_COFB3_STAT & MC_ME_PRTN1_COFB3_STAT_BLOCK104_MASK) == 0U) && (FALSE == TimeoutOccurred));
- /* timeout notification */
- if (TRUE == TimeoutOccurred)
- {
- /* Report timeout error */
- ReportRamErrors(RAM_IP_REPORT_TIMEOUT_ERROR,RAM_IP_ERR_CODE_RESERVED);
- }
- }
- #endif
- /* Stay in this loop until these registers are automatically updated following the
- * completion of the MBIST run. */
- RamStartTimeout(&StartTime, &ElapsedTime, &TimeoutTicks, RAM_TIMEOUT_VALUE_US);
- do
- {
- TimeoutOccurred = RamTimeoutExpired(&StartTime, &ElapsedTime, TimeoutTicks);
- #if defined(S32K3XX)
- /* Todo remove it */
- #if 0
- /* Execute WFI */
- u32TempReg = IP_STCU->MBESW0;
- #else
- u32TempReg = 0U;
- #endif
- #else
- u32TempReg = IP_STCU2->MBESW[0];
- #endif
- } while ( (STCU2_MBESW0_RAM_TEST_MASK32 != (u32TempReg & STCU2_MBESW0_RAM_TEST_MASK32)) && (!TimeoutOccurred) );
-
- if (!TimeoutOccurred)
- {
- #if defined(S32K3XX)
- /* Todo remove it */
- #if 0
- u32TempReg = IP_STCU->MBSSW0;
- #else
- u32TempReg = 0U;
- #endif
- #else
- u32TempReg = IP_STCU2->MBSSW[0];
- #endif
- if (STCU2_MBSSW0_RAM_TEST_MASK32 == (u32TempReg & STCU2_MBSSW0_RAM_TEST_MASK32))
- {
- eRamState = RAM_IP_RAMSTATE_VALID;
- }
- }
- else
- {
- /* report callback here */
- ReportRamErrors(RAM_IP_REPORT_TIMEOUT_ERROR,RAM_IP_ERR_CODE_RESERVED);
- }
-
- return eRamState;
- }
- #endif
- #if (RAM_IP_GET_RAM_STATE_API == STD_ON)
- /**
- * @brief This function installs a callback for reporting errors from Ram driver.
- * @details
- *
- * @param[in] reportErrorsCallback Callback to be installed.
- *
- * @return void
- *
- * @implements Ram_Ip_InstallNotificationsCallback_Activity
- */
- void Ram_Ip_InstallNotificationsCallback(Ram_Ip_ReportErrorsCallbackType reportErrorsCallback)
- {
- RAM_DEV_ASSERT(NULL_PTR != reportErrorsCallback);
- RamReportErrorsCallback = reportErrorsCallback;
- }
- #endif
- #define MCU_STOP_SEC_CODE
- #include "Mcu_MemMap.h"
- #ifdef __cplusplus
- }
- #endif
- /** @} */
|