123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439 |
- #ifndef _FSL_SYSMPU_H_
- #define _FSL_SYSMPU_H_
- #include "fsl_common.h"
- #define FSL_SYSMPU_DRIVER_VERSION (MAKE_VERSION(2, 2, 1))
- #define SYSMPU_MASTER_RWATTRIBUTE_START_PORT (4)
- #define SYSMPU_REGION_RWXRIGHTS_MASTER_SHIFT(n) ((n) * 6)
- #define SYSMPU_REGION_RWXRIGHTS_MASTER_MASK(n) (0x1Fu << SYSMPU_REGION_RWXRIGHTS_MASTER_SHIFT(n))
- #define SYSMPU_REGION_RWXRIGHTS_MASTER_WIDTH 5
- #define SYSMPU_REGION_RWXRIGHTS_MASTER(n, x) \
- (((uint32_t)(((uint32_t)(x)) << SYSMPU_REGION_RWXRIGHTS_MASTER_SHIFT(n))) & SYSMPU_REGION_RWXRIGHTS_MASTER_MASK(n))
- #define SYSMPU_REGION_RWXRIGHTS_MASTER_PE_SHIFT(n) ((n) * 6 + SYSMPU_REGION_RWXRIGHTS_MASTER_WIDTH)
- #define SYSMPU_REGION_RWXRIGHTS_MASTER_PE_MASK(n) (0x1u << SYSMPU_REGION_RWXRIGHTS_MASTER_PE_SHIFT(n))
- #define SYSMPU_REGION_RWXRIGHTS_MASTER_PE(n, x) \
- (((uint32_t)(((uint32_t)(x)) << SYSMPU_REGION_RWXRIGHTS_MASTER_PE_SHIFT(n))) & SYSMPU_REGION_RWXRIGHTS_MASTER_PE_MASK(n))
- #define SYSMPU_REGION_RWRIGHTS_MASTER_SHIFT(n) (((n) - SYSMPU_MASTER_RWATTRIBUTE_START_PORT) * 2 + 24)
- #define SYSMPU_REGION_RWRIGHTS_MASTER_MASK(n) (0x3u << SYSMPU_REGION_RWRIGHTS_MASTER_SHIFT(n))
- #define SYSMPU_REGION_RWRIGHTS_MASTER(n, x) \
- (((uint32_t)(((uint32_t)(x)) << SYSMPU_REGION_RWRIGHTS_MASTER_SHIFT(n))) & SYSMPU_REGION_RWRIGHTS_MASTER_MASK(n))
- typedef enum _sysmpu_region_total_num
- {
- kSYSMPU_8Regions = 0x0U,
- kSYSMPU_12Regions = 0x1U,
- kSYSMPU_16Regions = 0x2U
- } sysmpu_region_total_num_t;
- typedef enum _sysmpu_slave
- {
- kSYSMPU_Slave0 = 0U,
- kSYSMPU_Slave1 = 1U,
- kSYSMPU_Slave2 = 2U,
- kSYSMPU_Slave3 = 3U,
- kSYSMPU_Slave4 = 4U,
- #if FSL_FEATURE_SYSMPU_SLAVE_COUNT > 5
- kSYSMPU_Slave5 = 5U,
- #endif
- #if FSL_FEATURE_SYSMPU_SLAVE_COUNT > 6
- kSYSMPU_Slave6 = 6U,
- #endif
- #if FSL_FEATURE_SYSMPU_SLAVE_COUNT > 7
- kSYSMPU_Slave7 = 7U,
- #endif
- } sysmpu_slave_t;
- typedef enum _sysmpu_err_access_control
- {
- kSYSMPU_NoRegionHit = 0U,
- kSYSMPU_NoneOverlappRegion = 1U,
- kSYSMPU_OverlappRegion = 2U
- } sysmpu_err_access_control_t;
- typedef enum _sysmpu_err_access_type
- {
- kSYSMPU_ErrTypeRead = 0U,
- kSYSMPU_ErrTypeWrite = 1U
- } sysmpu_err_access_type_t;
- typedef enum _sysmpu_err_attributes
- {
- kSYSMPU_InstructionAccessInUserMode = 0U,
- kSYSMPU_DataAccessInUserMode = 1U,
- kSYSMPU_InstructionAccessInSupervisorMode = 2U,
- kSYSMPU_DataAccessInSupervisorMode = 3U
- } sysmpu_err_attributes_t;
- typedef enum _sysmpu_supervisor_access_rights
- {
- kSYSMPU_SupervisorReadWriteExecute = 0U,
- kSYSMPU_SupervisorReadExecute = 1U,
- kSYSMPU_SupervisorReadWrite = 2U,
- kSYSMPU_SupervisorEqualToUsermode = 3U
- } sysmpu_supervisor_access_rights_t;
- typedef enum _sysmpu_user_access_rights
- {
- kSYSMPU_UserNoAccessRights = 0U,
- kSYSMPU_UserExecute = 1U,
- kSYSMPU_UserWrite = 2U,
- kSYSMPU_UserWriteExecute = 3U,
- kSYSMPU_UserRead = 4U,
- kSYSMPU_UserReadExecute = 5U,
- kSYSMPU_UserReadWrite = 6U,
- kSYSMPU_UserReadWriteExecute = 7U
- } sysmpu_user_access_rights_t;
- typedef struct _sysmpu_hardware_info
- {
- uint8_t hardwareRevisionLevel;
- uint8_t slavePortsNumbers;
- sysmpu_region_total_num_t regionsNumbers;
- } sysmpu_hardware_info_t;
- typedef struct _sysmpu_access_err_info
- {
- uint32_t master;
- sysmpu_err_attributes_t attributes;
- sysmpu_err_access_type_t accessType;
- sysmpu_err_access_control_t accessControl;
- uint32_t address;
- #if FSL_FEATURE_SYSMPU_HAS_PROCESS_IDENTIFIER
- uint8_t processorIdentification;
- #endif
- } sysmpu_access_err_info_t;
- typedef struct _sysmpu_rwxrights_master_access_control
- {
- sysmpu_supervisor_access_rights_t superAccessRights;
- sysmpu_user_access_rights_t userAccessRights;
- #if FSL_FEATURE_SYSMPU_HAS_PROCESS_IDENTIFIER
- bool processIdentifierEnable;
- #endif
- } sysmpu_rwxrights_master_access_control_t;
- typedef struct _sysmpu_rwrights_master_access_control
- {
- bool writeEnable;
- bool readEnable;
- } sysmpu_rwrights_master_access_control_t;
- typedef struct _sysmpu_region_config
- {
- uint32_t regionNum;
- uint32_t startAddress;
- uint32_t endAddress;
- sysmpu_rwxrights_master_access_control_t accessRights1[4];
- sysmpu_rwrights_master_access_control_t accessRights2[4];
- #if FSL_FEATURE_SYSMPU_HAS_PROCESS_IDENTIFIER
- uint8_t processIdentifier;
- uint8_t
- processIdMask;
- #endif
- } sysmpu_region_config_t;
- typedef struct _sysmpu_config
- {
- sysmpu_region_config_t regionConfig;
- struct _sysmpu_config *next;
- } sysmpu_config_t;
- #if defined(__cplusplus)
- extern "C" {
- #endif
- void SYSMPU_Init(SYSMPU_Type *base, const sysmpu_config_t *config);
- void SYSMPU_Deinit(SYSMPU_Type *base);
- static inline void SYSMPU_Enable(SYSMPU_Type *base, bool enable)
- {
- if (enable)
- {
-
- base->CESR |= SYSMPU_CESR_VLD_MASK;
- }
- else
- {
- base->CESR &= ~SYSMPU_CESR_VLD_MASK;
- }
- }
- static inline void SYSMPU_RegionEnable(SYSMPU_Type *base, uint32_t number, bool enable)
- {
- if (enable)
- {
-
- base->WORD[number][3] |= SYSMPU_WORD_VLD_MASK;
- }
- else
- {
- base->WORD[number][3] &= ~SYSMPU_WORD_VLD_MASK;
- }
- }
- void SYSMPU_GetHardwareInfo(SYSMPU_Type *base, sysmpu_hardware_info_t *hardwareInform);
- void SYSMPU_SetRegionConfig(SYSMPU_Type *base, const sysmpu_region_config_t *regionConfig);
- void SYSMPU_SetRegionAddr(SYSMPU_Type *base, uint32_t regionNum, uint32_t startAddr, uint32_t endAddr);
- void SYSMPU_SetRegionRwxMasterAccessRights(SYSMPU_Type *base,
- uint32_t regionNum,
- uint32_t masterNum,
- const sysmpu_rwxrights_master_access_control_t *accessRights);
- #if FSL_FEATURE_SYSMPU_MASTER_COUNT > 4
- void SYSMPU_SetRegionRwMasterAccessRights(SYSMPU_Type *base,
- uint32_t regionNum,
- uint32_t masterNum,
- const sysmpu_rwrights_master_access_control_t *accessRights);
- #endif
- bool SYSMPU_GetSlavePortErrorStatus(SYSMPU_Type *base, sysmpu_slave_t slaveNum);
- void SYSMPU_GetDetailErrorAccessInfo(SYSMPU_Type *base, sysmpu_slave_t slaveNum, sysmpu_access_err_info_t *errInform);
- #if defined(__cplusplus)
- }
- #endif
- #endif
|