MCRC programming sequence:
MCRC signature generated depends on amount of data copied into PSA register at a time/in single write. Though data pattern can be 8, 16, 32, or 64 bit, data copied into PSA register is always 64 bit wide. If data pattern is less than 64 bit, then it is padded with zeros to make it 64 bit write.
Files | |
file | mcrc/v0/sdl_mcrc.h |
This file contains the prototypes of the APIs present in the device abstraction layer file of MCRC. This also contains some related macros. | |
Data Structures | |
struct | SDL_MCRC_Signature_t |
Structure for accessing MCRC register data which are 64 bit wide. More... | |
struct | SDL_MCRC_SignatureRegAddr_t |
Structure for accessing MCRC registers address which are 64 bit wide. More... | |
struct | SDL_MCRC_ChannelStaticRegs |
MCRC channel static registers list. More... | |
struct | SDL_MCRC_StaticRegs_t |
MCRC static registers list. More... | |
struct | SDL_MCRC_DataConfig_t |
Structure for MCRC CPU inputs data. More... | |
Functions | |
int32_t | SDL_MCRC_init (SDL_MCRC_InstType instance, SDL_MCRC_Channel_t channel, uint32_t watchdogPreload, uint32_t blockPreload) |
Initialize MCRC channel and will configure watchdog and block preload value for given channel. More... | |
int32_t | SDL_MCRC_verifyInit (SDL_MCRC_InstType instance, SDL_MCRC_Channel_t channel, uint32_t watchdogPreload, uint32_t blockPreload) |
Verify the MCRC watchdog and block preload value initialized for given channel. More... | |
int32_t | SDL_MCRC_config (SDL_MCRC_InstType instance, SDL_MCRC_Channel_t channel, uint32_t patternCount, uint32_t sectorCount, SDL_MCRC_ModeType mode) |
This API will configure MCRC mode, pattern and sector count for given channel. More... | |
int32_t | SDL_MCRC_verifyConfig (SDL_MCRC_InstType instance, SDL_MCRC_Channel_t channel, uint32_t patternCount, uint32_t sectorCount, SDL_MCRC_ModeType mode) |
This API will verify the configure of MCRC mode, pattern and sector count for given channel. More... | |
int32_t | SDL_MCRC_channelReset (SDL_MCRC_InstType instance, SDL_MCRC_Channel_t channel) |
This API is used to reset the MCRC channel. More... | |
int32_t | SDL_MCRC_setPSASeedSig (SDL_MCRC_InstType instance, SDL_MCRC_Channel_t channel, const SDL_MCRC_Signature_t *pSeedSign) |
This API is used to set the PSA seed value without compression for given Channel. More... | |
int32_t | SDL_MCRC_getPSASectorSig (SDL_MCRC_InstType instance, SDL_MCRC_Channel_t channel, SDL_MCRC_Signature_t *pSecSign) |
This API is used to get sector signature Value/ MCRC value for given channel. More... | |
int32_t | SDL_MCRC_getIntrStatus (SDL_MCRC_InstType instance, SDL_MCRC_Channel_t channel, uint32_t *pIntrStatus) |
This API is used to get the pending interrupts for given Channel. More... | |
int32_t | SDL_MCRC_enableIntr (SDL_MCRC_InstType instance, SDL_MCRC_Channel_t channel, uint32_t intrMask) |
This API is used to enable interrupts for given Channel. More... | |
int32_t | SDL_MCRC_disableIntr (SDL_MCRC_InstType instance, SDL_MCRC_Channel_t channel, uint32_t intrMask) |
This API is used to disable interrupts for given Channel. More... | |
int32_t | SDL_MCRC_clearIntr (SDL_MCRC_InstType instance, SDL_MCRC_Channel_t channel, uint32_t intrMask) |
This API is used to clear interrupts for given Channel. More... | |
int32_t | SDL_MCRC_isBusy (SDL_MCRC_InstType instance, SDL_MCRC_Channel_t channel, uint32_t *pBusyFlag) |
This API is used to check if MCRC is busy for given Channel. More... | |
int32_t | SDL_MCRC_getCurSecNum (SDL_MCRC_InstType instance, SDL_MCRC_Channel_t channel, uint32_t *pCurSecNum) |
This API is used to get the current sector number of which the signature verification fails in AUTO mode for given channel. More... | |
int32_t | SDL_MCRC_getPSASig (SDL_MCRC_InstType instance, SDL_MCRC_Channel_t channel, SDL_MCRC_Signature_t *pPSAsig) |
This API is used to get current known good signature value/ MCRC value for given channel. More... | |
int32_t | SDL_MCRC_readStaticReg (SDL_MCRC_InstType instance, SDL_MCRC_StaticRegs_t *pStaticRegs) |
This API is used to read static registers of MCRC module. This API needs to be called after the initial configuration is done and hence mutliple read between static registers do not change the values. More... | |
int32_t | SDL_MCRC_getCurPSASig (SDL_MCRC_InstType instance, SDL_MCRC_Channel_t channel, SDL_MCRC_Signature_t *pCurPSASig) |
This API is used to get current known good signature value/ MCRC value for given channel. More... | |
int32_t | SDL_MCRC_getPSASigRegAddr (SDL_MCRC_InstType instance, SDL_MCRC_Channel_t channel, SDL_MCRC_SignatureRegAddr_t *pMCRCregAddr) |
This API is used to get the PSA register address for given Channel. More... | |
int32_t | SDL_MCRC_computeSignCPUmode (SDL_MCRC_InstType instance, SDL_MCRC_Channel_t channel, const SDL_MCRC_DataConfig_t *pDataConfig, SDL_MCRC_Signature_t *sectSignVal) |
This API is used to compute the signature for CPU-only mode and it check if the generated MCRC signature value matches with the reference signature value. More... | |
int32_t | SDL_MCRC_getBaseaddr (SDL_MCRC_InstType instance, uint32_t *baseAddr) |
This API is used to get the base address of the instance. More... | |
Enumerations | |
enum | SDL_MCRC_DataBitSize { SDL_MCRC_DATA_8_BIT = 1, SDL_MCRC_DATA_16_BIT = 2, SDL_MCRC_DATA_32_BIT = 3, SDL_MCRC_DATA_64_BIT = 4 } |
This enumerator defines the Data size for input MCRC DATA. More... | |
enum | SDL_MCRC_InstType { MCU_MCRC64_0 = 1, MCRC64_0 =2, SDL_MCRC_INVALID = 0xffff } |
MCRC Instance supported. More... | |
Macros | |
#define | SDL_MCRC_CHANNEL_IRQSTATUS_RAW_MAIN_ALL |
Macro defines mask for all the interrupts for a channel. More... | |
#define | SDL_MCRC_PATTERN_COUNT_MAX (0x000FFFFFU) |
Macro defines maximum value of MCRC Pattern Count. More... | |
#define | SDL_MCRC_SECTOR_COUNT_MAX (0x0000FFFFU) |
Macro defines maximum value of MCRC Sector Count. More... | |
#define | SDL_MCRC_BCTOPLD_MAX (0x00FFFFFFU) |
Macro defines maximum value of MCRC Block Complete Timeout Counter Preload. More... | |
#define | SDL_MCRC_WDTOPLD_MAX (0x00FFFFFFU) |
Macro defines maximum value of MCRC Watchdog Timeout Counter Preload. More... | |
#define | SDL_MCRC_MAX_NUM_OF_CHANNELS (4U) |
Max number of channels supported in MCRC. More... | |
#define | SDL_MCRC_INSTANCES 2u |
MCRC instances supported by SOC. More... | |
MCRC Operation Mode | |
typedef uint32_t | SDL_MCRC_ModeType |
MCRC operation mode supported. MCRC can either operate in Semi-CPU, Full-CPU or Auto mode. More... | |
#define | SDL_MCRC_OPERATION_MODE_DATA (SDL_MCRC_CTRL2_CH1_MODE_DATA) |
#define | SDL_MCRC_OPERATION_MODE_AUTO (SDL_MCRC_CTRL2_CH1_MODE_AUTO) |
#define | SDL_MCRC_OPERATION_MODE_SEMICPU (SDL_MCRC_CTRL2_CH1_MODE_SEMICPU) |
#define | SDL_MCRC_OPERATION_MODE_FULLCPU (SDL_MCRC_CTRL2_CH1_MODE_FULLCPU) |
MCRC channel | |
typedef uint32_t | SDL_MCRC_Channel_t |
MCRC channel supported. More... | |
#define | SDL_MCRC_CHANNEL_1 (0x1U) |
#define | SDL_MCRC_CHANNEL_2 (0x2U) |
#define | SDL_MCRC_CHANNEL_3 (0x3U) |
#define | SDL_MCRC_CHANNEL_4 (0x4U) |
#define SDL_MCRC_CHANNEL_IRQSTATUS_RAW_MAIN_ALL |
Macro defines mask for all the interrupts for a channel.
#define SDL_MCRC_PATTERN_COUNT_MAX (0x000FFFFFU) |
Macro defines maximum value of MCRC Pattern Count.
#define SDL_MCRC_SECTOR_COUNT_MAX (0x0000FFFFU) |
Macro defines maximum value of MCRC Sector Count.
#define SDL_MCRC_BCTOPLD_MAX (0x00FFFFFFU) |
Macro defines maximum value of MCRC Block Complete Timeout Counter Preload.
#define SDL_MCRC_WDTOPLD_MAX (0x00FFFFFFU) |
Macro defines maximum value of MCRC Watchdog Timeout Counter Preload.
#define SDL_MCRC_MAX_NUM_OF_CHANNELS (4U) |
Max number of channels supported in MCRC.
#define SDL_MCRC_OPERATION_MODE_DATA (SDL_MCRC_CTRL2_CH1_MODE_DATA) |
Configure MCRC operation mode to Data Captures
#define SDL_MCRC_OPERATION_MODE_AUTO (SDL_MCRC_CTRL2_CH1_MODE_AUTO) |
Configure MCRC operation mode to Auto
#define SDL_MCRC_OPERATION_MODE_SEMICPU (SDL_MCRC_CTRL2_CH1_MODE_SEMICPU) |
Configure MCRC operation mode to Semi-CPU
#define SDL_MCRC_OPERATION_MODE_FULLCPU (SDL_MCRC_CTRL2_CH1_MODE_FULLCPU) |
Configure MCRC operation mode to Full-CPU
#define SDL_MCRC_CHANNEL_1 (0x1U) |
Select channel 1 for operation
#define SDL_MCRC_CHANNEL_2 (0x2U) |
Select channel 2 for operation
#define SDL_MCRC_CHANNEL_3 (0x3U) |
Select channel 3 for operation
#define SDL_MCRC_CHANNEL_4 (0x4U) |
Select channel 4 for operation
#define SDL_MCRC_INSTANCES 2u |
MCRC instances supported by SOC.
typedef uint32_t SDL_MCRC_ModeType |
MCRC operation mode supported. MCRC can either operate in Semi-CPU, Full-CPU or Auto mode.
typedef uint32_t SDL_MCRC_Channel_t |
MCRC channel supported.
enum SDL_MCRC_DataBitSize |
enum SDL_MCRC_InstType |
int32_t SDL_MCRC_init | ( | SDL_MCRC_InstType | instance, |
SDL_MCRC_Channel_t | channel, | ||
uint32_t | watchdogPreload, | ||
uint32_t | blockPreload | ||
) |
Initialize MCRC channel and will configure watchdog and block preload value for given channel.
instance | MCRC instance either MCU or Main. |
channel | Channel number to be initializaed. Values given by SDL_MCRC_Channel_t. |
watchdogPreload | It is used to check if DMA does supply a block of data responding to a request in a given time frame. |
blockPreload | It is used to check if MCRC for an entire block is completed in a given time frame. |
int32_t SDL_MCRC_verifyInit | ( | SDL_MCRC_InstType | instance, |
SDL_MCRC_Channel_t | channel, | ||
uint32_t | watchdogPreload, | ||
uint32_t | blockPreload | ||
) |
Verify the MCRC watchdog and block preload value initialized for given channel.
instance | MCRC instance either MCU or Main. |
channel | Channel number to be verified initialization. Values given by SDL_MCRC_Channel_t. |
watchdogPreload | It is used to check if DMA does supply a block of data responding to a request in a given time frame. |
blockPreload | It is used to check if MCRC for an entire block is completed in a given time frame. |
int32_t SDL_MCRC_config | ( | SDL_MCRC_InstType | instance, |
SDL_MCRC_Channel_t | channel, | ||
uint32_t | patternCount, | ||
uint32_t | sectorCount, | ||
SDL_MCRC_ModeType | mode | ||
) |
This API will configure MCRC mode, pattern and sector count for given channel.
instance | MCRC instance either MCU or Main. |
channel | Channel number to be configured. Values given by SDL_MCRC_Channel_t. |
patternCount | Number of data patterns in one sector to be compressed. |
sectorCount | Number of sectors in a block of memory. |
mode | MCRC operational mode. Refer SDL_MCRC_ModeType. |
int32_t SDL_MCRC_verifyConfig | ( | SDL_MCRC_InstType | instance, |
SDL_MCRC_Channel_t | channel, | ||
uint32_t | patternCount, | ||
uint32_t | sectorCount, | ||
SDL_MCRC_ModeType | mode | ||
) |
This API will verify the configure of MCRC mode, pattern and sector count for given channel.
instance | MCRC instance either MCU or Main. |
channel | Channel number to be verified configuration. Values given by SDL_MCRC_Channel_t. |
patternCount | Number of data patterns in one sector to be compressed. |
sectorCount | Number of sectors in a block of memory. |
mode | MCRC operational mode. Refer SDL_MCRC_ModeType. |
int32_t SDL_MCRC_channelReset | ( | SDL_MCRC_InstType | instance, |
SDL_MCRC_Channel_t | channel | ||
) |
This API is used to reset the MCRC channel.
instance | MCRC instance either MCU or Main. |
channel | Channel number for which reset is to be done. Values given by SDL_MCRC_Channel_t. |
int32_t SDL_MCRC_setPSASeedSig | ( | SDL_MCRC_InstType | instance, |
SDL_MCRC_Channel_t | channel, | ||
const SDL_MCRC_Signature_t * | pSeedSign | ||
) |
This API is used to set the PSA seed value without compression for given Channel.
instance | MCRC instance either MCU or Main. |
channel | Channel number for which PSA seed value to be set. Values given by SDL_MCRC_Channel_t. |
pSeedSign | Pointer to MCRC PSA seed signature values. Refer struct SDL_MCRC_Signature_t for details. |
int32_t SDL_MCRC_getPSASectorSig | ( | SDL_MCRC_InstType | instance, |
SDL_MCRC_Channel_t | channel, | ||
SDL_MCRC_Signature_t * | pSecSign | ||
) |
This API is used to get sector signature Value/ MCRC value for given channel.
instance | MCRC instance either MCU or Main. |
channel | Channel number which was configured for MCRC calculation. Values given by SDL_MCRC_Channel_t. |
pSecSign | Pointer to MCRC PSA sector signature values Refer struct SDL_MCRC_Signature_t. |
int32_t SDL_MCRC_getIntrStatus | ( | SDL_MCRC_InstType | instance, |
SDL_MCRC_Channel_t | channel, | ||
uint32_t * | pIntrStatus | ||
) |
This API is used to get the pending interrupts for given Channel.
instance | MCRC instance either MCU or Main. |
channel | Channel number for which pending interrupt is to get. Values given by SDL_MCRC_Channel_t. |
pIntrStatus | Pointer to pending interrupt status/occurred. |
int32_t SDL_MCRC_enableIntr | ( | SDL_MCRC_InstType | instance, |
SDL_MCRC_Channel_t | channel, | ||
uint32_t | intrMask | ||
) |
This API is used to enable interrupts for given Channel.
instance | MCRC instance either MCU or Main. |
channel | Channel number for which interrupt is to enable. Values given by SDL_MCRC_Channel_t. |
intrMask | Interrupts to enable. |
int32_t SDL_MCRC_disableIntr | ( | SDL_MCRC_InstType | instance, |
SDL_MCRC_Channel_t | channel, | ||
uint32_t | intrMask | ||
) |
This API is used to disable interrupts for given Channel.
instance | MCRC instance either MCU or Main. |
channel | Channel number for which interrupt is to disable. Values given by SDL_MCRC_Channel_t. |
intrMask | Interrupts to disable. |
int32_t SDL_MCRC_clearIntr | ( | SDL_MCRC_InstType | instance, |
SDL_MCRC_Channel_t | channel, | ||
uint32_t | intrMask | ||
) |
This API is used to clear interrupts for given Channel.
instance | MCRC instance either MCU or Main. |
channel | Channel number for which interrupt is to clear. Values given by SDL_MCRC_Channel_t. |
intrMask | Interrupts to clear status. |
int32_t SDL_MCRC_isBusy | ( | SDL_MCRC_InstType | instance, |
SDL_MCRC_Channel_t | channel, | ||
uint32_t * | pBusyFlag | ||
) |
This API is used to check if MCRC is busy for given Channel.
During Auto or Semi-CPU mode, the busy flag is set when the first data pattern of the block is compressed and remains set until the the last data pattern of the block is compressed. The flag is cleared when the last data pattern of the block is compressed.
instance | MCRC instance either MCU or Main. |
channel | Channel number for which busy status is to get. Values given by SDL_MCRC_Channel_t. |
pBusyFlag | Pointer to busy flag. 1U: MCRC channel is busy. 0U: MCRC channel is free. |
int32_t SDL_MCRC_getCurSecNum | ( | SDL_MCRC_InstType | instance, |
SDL_MCRC_Channel_t | channel, | ||
uint32_t * | pCurSecNum | ||
) |
This API is used to get the current sector number of which the signature verification fails in AUTO mode for given channel.
When a sector fails, the erroneous sector number is logged and the MCRC fail interrupt is generated.
instance | MCRC instance either MCU or Main. |
channel | Channel number for which the curent sector number is to get. Values given by SDL_MCRC_Channel_t. |
pCurSecNum | Pointer to current sector number. |
int32_t SDL_MCRC_getPSASig | ( | SDL_MCRC_InstType | instance, |
SDL_MCRC_Channel_t | channel, | ||
SDL_MCRC_Signature_t * | pPSAsig | ||
) |
This API is used to get current known good signature value/ MCRC value for given channel.
instance | MCRC instance either MCU or Main. |
channel | Channel number for which current MCRC value is to get. Values given by SDL_MCRC_Channel_t. |
pPSAsig | Pointer to current MCRC PSA signature values Refer struct SDL_MCRC_Signature_t. |
int32_t SDL_MCRC_readStaticReg | ( | SDL_MCRC_InstType | instance, |
SDL_MCRC_StaticRegs_t * | pStaticRegs | ||
) |
This API is used to read static registers of MCRC module. This API needs to be called after the initial configuration is done and hence mutliple read between static registers do not change the values.
instance | MCRC instance either MCU or Main. |
pStaticRegs | pointer to static registers to be read |
int32_t SDL_MCRC_getCurPSASig | ( | SDL_MCRC_InstType | instance, |
SDL_MCRC_Channel_t | channel, | ||
SDL_MCRC_Signature_t * | pCurPSASig | ||
) |
This API is used to get current known good signature value/ MCRC value for given channel.
instance | MCRC instance either MCU or Main. |
channel | Channel number for which current MCRC value is to get. Values given by SDL_MCRC_Channel_t. |
pCurPSASig | Pointer to current MCRC PSA signature values Refer struct SDL_MCRC_Signature_t. |
int32_t SDL_MCRC_getPSASigRegAddr | ( | SDL_MCRC_InstType | instance, |
SDL_MCRC_Channel_t | channel, | ||
SDL_MCRC_SignatureRegAddr_t * | pMCRCregAddr | ||
) |
This API is used to get the PSA register address for given Channel.
instance | MCRC instance either MCU or Main. |
channel | Channel number for which PSA register address is to get. Values given by SDL_MCRC_Channel_t. |
pMCRCregAddr | Pointer to MCRC PSA register address structure. Refer structure SDL_MCRC_SignatureRegAddr_t. |
int32_t SDL_MCRC_computeSignCPUmode | ( | SDL_MCRC_InstType | instance, |
SDL_MCRC_Channel_t | channel, | ||
const SDL_MCRC_DataConfig_t * | pDataConfig, | ||
SDL_MCRC_Signature_t * | sectSignVal | ||
) |
This API is used to compute the signature for CPU-only mode and it check if the generated MCRC signature value matches with the reference signature value.
instance | MCRC instance either MCU or Main. |
channel | MCRC channel number to be used |
pDataConfig | Pointer to data configuration |
sectSignVal | Generated sector signature value. |
int32_t SDL_MCRC_getBaseaddr | ( | SDL_MCRC_InstType | instance, |
uint32_t * | baseAddr | ||
) |
This API is used to get the base address of the instance.
instance | MCRC instance either MCU or Main. |
baseAddr | Dbase address of the instance. |
|
extern |
MCRC 64 bit Atomic write support.