/* * Copyright 2013-2016 Freescale Semiconductor, Inc. * Copyright 2016-2020 NXP * All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause * */ #ifndef FSL_FTFX_CACHE_H #define FSL_FTFX_CACHE_H #include "fsl_ftfx_controller.h" /*! * @addtogroup ftfx_cache_driver * @{ */ /******************************************************************************* * Definitions ******************************************************************************/ /*! * @name FTFx cache version * @{ */ /*! @brief Flexnvm driver version for SDK*/ #define FSL_FTFX_CACHE_DRIVER_VERSION (MAKE_VERSION(3, 0, 0)) /*!< Version 1.0.0. */ /*@}*/ /*! * @brief FTFx prefetch speculation status. */ typedef struct _flash_prefetch_speculation_status { bool instructionOff; /*!< Instruction speculation.*/ bool dataOff; /*!< Data speculation.*/ } ftfx_prefetch_speculation_status_t; /*! * @brief Constants for execute-in-RAM flash function. */ enum _ftfx_cache_ram_func_constants { kFTFx_CACHE_RamFuncMaxSizeInWords = 16U, /*!< The maximum size of execute-in-RAM function.*/ }; typedef union { uint32_t commadAddr; void (*callFlashCommand)(FTFx_REG32_ACCESS_TYPE base, uint32_t bitMask, uint32_t bitShift, uint32_t bitValue); }function_bit_operation_ptr_t; /*! @brief FTFx cache driver state information. * * An instance of this structure is allocated by the user of the flash driver and * passed into each of the driver APIs. */ typedef struct _ftfx_cache_config { uint8_t flashMemoryIndex; /*!< 0 - primary flash; 1 - secondary flash*/ uint8_t reserved[3]; function_bit_operation_ptr_t bitOperFuncAddr; /*!< An buffer point to the flash execute-in-RAM function. */ } ftfx_cache_config_t; /******************************************************************************* * API ******************************************************************************/ #if defined(__cplusplus) extern "C" { #endif /*! * @brief Initializes the global FTFx cache structure members. * * This function checks and initializes the Flash module for the other FTFx cache APIs. * * @param config Pointer to the storage for the driver runtime state. * * @retval #kStatus_FTFx_Success API was executed successfully. * @retval #kStatus_FTFx_InvalidArgument An invalid argument is provided. * @retval #kStatus_FTFx_ExecuteInRamFunctionNotReady Execute-in-RAM function is not available. */ status_t FTFx_CACHE_Init(ftfx_cache_config_t *config); /*! * @brief Process the cache/prefetch/speculation to the flash. * * @param config A pointer to the storage for the driver runtime state. * @param isPreProcess The possible option used to control flash cache/prefetch/speculation * @retval #kStatus_FTFx_Success API was executed successfully. * @retval #kStatus_FTFx_InvalidArgument Invalid argument is provided. * @retval #kStatus_FTFx_ExecuteInRamFunctionNotReady Execute-in-RAM function is not available. */ status_t FTFx_CACHE_ClearCachePrefetchSpeculation(ftfx_cache_config_t *config, bool isPreProcess); /*! * @brief Sets the PFlash prefetch speculation to the intended speculation status. * * @param speculationStatus The expected protect status to set to the PFlash protection register. Each bit is * @retval #kStatus_FTFx_Success API was executed successfully. * @retval #kStatus_FTFx_InvalidSpeculationOption An invalid speculation option argument is provided. */ status_t FTFx_CACHE_PflashSetPrefetchSpeculation(ftfx_prefetch_speculation_status_t *speculationStatus); /*! * @brief Gets the PFlash prefetch speculation status. * * @param speculationStatus Speculation status returned by the PFlash IP. * @retval #kStatus_FTFx_Success API was executed successfully. */ status_t FTFx_CACHE_PflashGetPrefetchSpeculation(ftfx_prefetch_speculation_status_t *speculationStatus); #if defined(__cplusplus) } #endif /*! @}*/ #endif /* FSL_FTFX_CACHE_H */