diff options
Diffstat (limited to 'applications/trustzone_inference/secure/mpc_sie_drv.c')
-rw-r--r-- | applications/trustzone_inference/secure/mpc_sie_drv.c | 423 |
1 files changed, 186 insertions, 237 deletions
diff --git a/applications/trustzone_inference/secure/mpc_sie_drv.c b/applications/trustzone_inference/secure/mpc_sie_drv.c index e93d37d..0463290 100644 --- a/applications/trustzone_inference/secure/mpc_sie_drv.c +++ b/applications/trustzone_inference/secure/mpc_sie_drv.c @@ -15,52 +15,55 @@ */ #include "mpc_sie_drv.h" -#include <stddef.h> #include <stdbool.h> +#include <stddef.h> #include "cmsis_compiler.h" /* Values for hardware version in PIDR0 reg */ -#define SIE200 0x60 -#define SIE300 0x65 +#define SIE200 0x60 +#define SIE300 0x65 -#define MPC_SIE_BLK_CFG_OFFSET 5U +#define MPC_SIE_BLK_CFG_OFFSET 5U /* Defines with numbering (eg: SIE300) are only relevant to the given SIE * version. Defines without the numbering are applicable to all SIE versions. */ /* CTRL register bit indexes */ -#define MPC_SIE200_CTRL_SEC_RESP (1UL << 4UL) /* MPC fault triggers a - * bus error - */ -#define MPC_SIE300_CTRL_GATE_REQ (1UL << 6UL) /* Request for gating - * incoming transfers - */ -#define MPC_SIE300_CTRL_GATE_ACK (1UL << 7UL) /* Acknowledge for gating - * incoming transfers - */ -#define MPC_SIE_CTRL_AUTOINCREMENT (1UL << 8UL) /* BLK_IDX auto increment */ -#define MPC_SIE300_CTRL_SEC_RESP (1UL << 16UL) /* Response type when SW - * asks to gate the transfer - */ -#define MPC_SIE300_CTRL_GATE_PRESENT (1UL << 23UL) /* Gating feature present */ -#define MPC_SIE_CTRL_SEC_LOCK_DOWN (1UL << 31UL) /* MPC Security lock down */ +#define MPC_SIE200_CTRL_SEC_RESP \ + (1UL << 4UL) /* MPC fault triggers a \ + * bus error \ + */ +#define MPC_SIE300_CTRL_GATE_REQ \ + (1UL << 6UL) /* Request for gating \ + * incoming transfers \ + */ +#define MPC_SIE300_CTRL_GATE_ACK \ + (1UL << 7UL) /* Acknowledge for gating \ + * incoming transfers \ + */ +#define MPC_SIE_CTRL_AUTOINCREMENT (1UL << 8UL) /* BLK_IDX auto increment */ +#define MPC_SIE300_CTRL_SEC_RESP \ + (1UL << 16UL) /* Response type when SW \ + * asks to gate the transfer \ + */ +#define MPC_SIE300_CTRL_GATE_PRESENT (1UL << 23UL) /* Gating feature present */ +#define MPC_SIE_CTRL_SEC_LOCK_DOWN (1UL << 31UL) /* MPC Security lock down */ /* PIDR register bit masks */ -#define MPC_PIDR0_SIE_VERSION_MASK ((1UL << 8UL) - 1UL) +#define MPC_PIDR0_SIE_VERSION_MASK ((1UL << 8UL) - 1UL) /* ARM MPC interrupt */ -#define MPC_SIE_INT_BIT (1UL) +#define MPC_SIE_INT_BIT (1UL) /* Error code returned by the internal driver functions */ enum mpc_sie_intern_error_t { - MPC_SIE_INTERN_ERR_NONE = MPC_SIE_ERR_NONE, - MPC_SIE_INTERN_ERR_NOT_IN_RANGE = MPC_SIE_ERR_NOT_IN_RANGE, - MPC_SIE_INTERN_ERR_NOT_ALIGNED = MPC_SIE_ERR_NOT_ALIGNED, - MPC_SIE_INTERN_ERR_INVALID_RANGE = MPC_SIE_ERR_INVALID_RANGE, - MPC_INTERN_ERR_RANGE_SEC_ATTR_NON_COMPATIBLE = - MPC_SIE_ERR_RANGE_SEC_ATTR_NON_COMPATIBLE, + MPC_SIE_INTERN_ERR_NONE = MPC_SIE_ERR_NONE, + MPC_SIE_INTERN_ERR_NOT_IN_RANGE = MPC_SIE_ERR_NOT_IN_RANGE, + MPC_SIE_INTERN_ERR_NOT_ALIGNED = MPC_SIE_ERR_NOT_ALIGNED, + MPC_SIE_INTERN_ERR_INVALID_RANGE = MPC_SIE_ERR_INVALID_RANGE, + MPC_INTERN_ERR_RANGE_SEC_ATTR_NON_COMPATIBLE = MPC_SIE_ERR_RANGE_SEC_ATTR_NON_COMPATIBLE, /* Calculated block index * is higher than the maximum allowed by the MPC. It should never * happen unless the controlled ranges of the MPC are misconfigured @@ -73,35 +76,35 @@ enum mpc_sie_intern_error_t { /* ARM MPC memory mapped register access structure */ struct mpc_sie_reg_map_t { - volatile uint32_t ctrl; /* (R/W) MPC Control */ - volatile uint32_t reserved[3];/* Reserved */ - volatile uint32_t blk_max; /* (R/ ) Maximum value of block based index */ - volatile uint32_t blk_cfg; /* (R/ ) Block configuration */ - volatile uint32_t blk_idx; /* (R/W) Index value for accessing block - * based look up table - */ - volatile uint32_t blk_lutn; /* (R/W) Block based gating - * Look Up Table (LUT) - */ - volatile uint32_t int_stat; /* (R/ ) Interrupt state */ - volatile uint32_t int_clear; /* ( /W) Interrupt clear */ - volatile uint32_t int_en; /* (R/W) Interrupt enable */ - volatile uint32_t int_info1; /* (R/ ) Interrupt information 1 */ - volatile uint32_t int_info2; /* (R/ ) Interrupt information 2 */ - volatile uint32_t int_set; /* ( /W) Interrupt set. Debug purpose only */ + volatile uint32_t ctrl; /* (R/W) MPC Control */ + volatile uint32_t reserved[3]; /* Reserved */ + volatile uint32_t blk_max; /* (R/ ) Maximum value of block based index */ + volatile uint32_t blk_cfg; /* (R/ ) Block configuration */ + volatile uint32_t blk_idx; /* (R/W) Index value for accessing block + * based look up table + */ + volatile uint32_t blk_lutn; /* (R/W) Block based gating + * Look Up Table (LUT) + */ + volatile uint32_t int_stat; /* (R/ ) Interrupt state */ + volatile uint32_t int_clear; /* ( /W) Interrupt clear */ + volatile uint32_t int_en; /* (R/W) Interrupt enable */ + volatile uint32_t int_info1; /* (R/ ) Interrupt information 1 */ + volatile uint32_t int_info2; /* (R/ ) Interrupt information 2 */ + volatile uint32_t int_set; /* ( /W) Interrupt set. Debug purpose only */ volatile uint32_t reserved2[998]; /* Reserved */ - volatile uint32_t pidr4; /* (R/ ) Peripheral ID 4 */ - volatile uint32_t pidr5; /* (R/ ) Peripheral ID 5 */ - volatile uint32_t pidr6; /* (R/ ) Peripheral ID 6 */ - volatile uint32_t pidr7; /* (R/ ) Peripheral ID 7 */ - volatile uint32_t pidr0; /* (R/ ) Peripheral ID 0 */ - volatile uint32_t pidr1; /* (R/ ) Peripheral ID 1 */ - volatile uint32_t pidr2; /* (R/ ) Peripheral ID 2 */ - volatile uint32_t pidr3; /* (R/ ) Peripheral ID 3 */ - volatile uint32_t cidr0; /* (R/ ) Component ID 0 */ - volatile uint32_t cidr1; /* (R/ ) Component ID 1 */ - volatile uint32_t cidr2; /* (R/ ) Component ID 2 */ - volatile uint32_t cidr3; /* (R/ ) Component ID 3 */ + volatile uint32_t pidr4; /* (R/ ) Peripheral ID 4 */ + volatile uint32_t pidr5; /* (R/ ) Peripheral ID 5 */ + volatile uint32_t pidr6; /* (R/ ) Peripheral ID 6 */ + volatile uint32_t pidr7; /* (R/ ) Peripheral ID 7 */ + volatile uint32_t pidr0; /* (R/ ) Peripheral ID 0 */ + volatile uint32_t pidr1; /* (R/ ) Peripheral ID 1 */ + volatile uint32_t pidr2; /* (R/ ) Peripheral ID 2 */ + volatile uint32_t pidr3; /* (R/ ) Peripheral ID 3 */ + volatile uint32_t cidr0; /* (R/ ) Component ID 0 */ + volatile uint32_t cidr1; /* (R/ ) Component ID 1 */ + volatile uint32_t cidr2; /* (R/ ) Component ID 2 */ + volatile uint32_t cidr3; /* (R/ ) Component ID 3 */ }; /* @@ -114,17 +117,14 @@ struct mpc_sie_reg_map_t { * * \return True if the base is controller by the range list, false otherwise. */ -static uint32_t is_ctrl_by_range_list( - struct mpc_sie_dev_t* dev, - uint32_t addr, - const struct mpc_sie_memory_range_t** addr_range) -{ +static uint32_t +is_ctrl_by_range_list(struct mpc_sie_dev_t *dev, uint32_t addr, const struct mpc_sie_memory_range_t **addr_range) { uint32_t i; - const struct mpc_sie_memory_range_t* range; + const struct mpc_sie_memory_range_t *range; - for(i = 0; i < dev->data->nbr_of_ranges; i++) { + for (i = 0; i < dev->data->nbr_of_ranges; i++) { range = dev->data->range_list[i]; - if(addr >= range->base && addr <= range->limit) { + if (addr >= range->base && addr <= range->limit) { *addr_range = range; return 1; } @@ -152,40 +152,37 @@ static uint32_t is_ctrl_by_range_list( * * \return Returns error code as specified in \ref mpc_sie_intern_error_t */ -static enum mpc_sie_intern_error_t get_lut_masks( - struct mpc_sie_dev_t* dev, - const uint32_t base, const uint32_t limit, - const struct mpc_sie_memory_range_t** range, - uint32_t *first_word_idx, - uint32_t *nr_words, - uint32_t *first_word_mask, - uint32_t *limit_word_mask) -{ - const struct mpc_sie_memory_range_t* base_range; +static enum mpc_sie_intern_error_t get_lut_masks(struct mpc_sie_dev_t *dev, + const uint32_t base, + const uint32_t limit, + const struct mpc_sie_memory_range_t **range, + uint32_t *first_word_idx, + uint32_t *nr_words, + uint32_t *first_word_mask, + uint32_t *limit_word_mask) { + const struct mpc_sie_memory_range_t *base_range; uint32_t block_size; uint32_t base_block_idx; uint32_t base_word_idx; uint32_t blk_max; - const struct mpc_sie_memory_range_t* limit_range; + const struct mpc_sie_memory_range_t *limit_range; uint32_t limit_block_idx; uint32_t limit_word_idx; uint32_t mask; uint32_t norm_base; uint32_t norm_limit; - struct mpc_sie_reg_map_t* p_mpc = - (struct mpc_sie_reg_map_t*)dev->cfg->base; + struct mpc_sie_reg_map_t *p_mpc = (struct mpc_sie_reg_map_t *)dev->cfg->base; /* * Check that the addresses are within the controlled regions * of this MPC */ - if(!is_ctrl_by_range_list(dev, base, &base_range) || - !is_ctrl_by_range_list(dev, limit, &limit_range)) { + if (!is_ctrl_by_range_list(dev, base, &base_range) || !is_ctrl_by_range_list(dev, limit, &limit_range)) { return MPC_SIE_INTERN_ERR_NOT_IN_RANGE; } /* Base and limit should be part of the same range */ - if(base_range != limit_range) { + if (base_range != limit_range) { return MPC_SIE_INTERN_ERR_INVALID_RANGE; } *range = base_range; @@ -193,7 +190,7 @@ static enum mpc_sie_intern_error_t get_lut_masks( block_size = (1 << (p_mpc->blk_cfg + MPC_SIE_BLK_CFG_OFFSET)); /* Base and limit+1 addresses must be aligned on the MPC block size */ - if(base % block_size || (limit+1) % block_size) { + if (base % block_size || (limit + 1) % block_size) { return MPC_SIE_INTERN_ERR_NOT_ALIGNED; } @@ -207,24 +204,24 @@ static enum mpc_sie_intern_error_t get_lut_masks( /* * Calculate block index and to which 32 bits word it belongs */ - limit_block_idx = norm_limit/block_size; - limit_word_idx = limit_block_idx/32; + limit_block_idx = norm_limit / block_size; + limit_word_idx = limit_block_idx / 32; - base_block_idx = norm_base/block_size; - base_word_idx = base_block_idx/32; + base_block_idx = norm_base / block_size; + base_word_idx = base_block_idx / 32; - if(base_block_idx > limit_block_idx) { + if (base_block_idx > limit_block_idx) { return MPC_SIE_INTERN_ERR_INVALID_RANGE; } /* Transmit the information to the caller */ - *nr_words = limit_word_idx - base_word_idx + 1; + *nr_words = limit_word_idx - base_word_idx + 1; *first_word_idx = base_word_idx; /* Limit to the highest block that can be configured */ blk_max = p_mpc->blk_max; - if((limit_word_idx > blk_max) || (base_word_idx > blk_max)) { + if ((limit_word_idx > blk_max) || (base_word_idx > blk_max)) { return MPC_SIE_INTERN_ERR_BLK_IDX_TOO_HIGH; } @@ -236,12 +233,12 @@ static enum mpc_sie_intern_error_t get_lut_masks( /* * Create the mask for the limit word to select only the first M bits. */ - *limit_word_mask = (1 << ((limit_block_idx+1) % 32)) - 1; + *limit_word_mask = (1 << ((limit_block_idx + 1) % 32)) - 1; /* * If limit_word_mask is 0, it means that the limit touched block index is * the limit in its word, so the limit word mask has all its bits selected */ - if(*limit_word_mask == 0) { + if (*limit_word_mask == 0) { *limit_word_mask = 0xFFFFFFFF; } @@ -254,8 +251,8 @@ static enum mpc_sie_intern_error_t get_lut_masks( * As the only bits that are the same in both masks are the 1 that we want * to select, just use XOR to extract them. */ - if(base_word_idx == limit_word_idx) { - mask = ~(*first_word_mask ^ *limit_word_mask); + if (base_word_idx == limit_word_idx) { + mask = ~(*first_word_mask ^ *limit_word_mask); *first_word_mask = mask; *limit_word_mask = mask; } @@ -263,39 +260,33 @@ static enum mpc_sie_intern_error_t get_lut_masks( return MPC_SIE_INTERN_ERR_NONE; } -enum mpc_sie_error_t mpc_sie_init(struct mpc_sie_dev_t* dev, - const struct mpc_sie_memory_range_t** range_list, - uint8_t nbr_of_ranges) -{ - if((range_list == NULL) || (nbr_of_ranges == 0)) { +enum mpc_sie_error_t +mpc_sie_init(struct mpc_sie_dev_t *dev, const struct mpc_sie_memory_range_t **range_list, uint8_t nbr_of_ranges) { + if ((range_list == NULL) || (nbr_of_ranges == 0)) { return MPC_SIE_INVALID_ARG; } dev->data->sie_version = get_sie_version(dev); - if ((dev->data->sie_version != SIE200) && - (dev->data->sie_version != SIE300)) { + if ((dev->data->sie_version != SIE200) && (dev->data->sie_version != SIE300)) { return MPC_SIE_UNSUPPORTED_HARDWARE_VERSION; } - dev->data->range_list = range_list; - dev->data->nbr_of_ranges = nbr_of_ranges; + dev->data->range_list = range_list; + dev->data->nbr_of_ranges = nbr_of_ranges; dev->data->is_initialized = true; return MPC_SIE_ERR_NONE; } -enum mpc_sie_error_t mpc_sie_get_block_size(struct mpc_sie_dev_t* dev, - uint32_t* blk_size) -{ - struct mpc_sie_reg_map_t* p_mpc = - (struct mpc_sie_reg_map_t*)dev->cfg->base; +enum mpc_sie_error_t mpc_sie_get_block_size(struct mpc_sie_dev_t *dev, uint32_t *blk_size) { + struct mpc_sie_reg_map_t *p_mpc = (struct mpc_sie_reg_map_t *)dev->cfg->base; - if(dev->data->is_initialized != true) { + if (dev->data->is_initialized != true) { return MPC_SIE_NOT_INIT; } - if(blk_size == 0) { + if (blk_size == 0) { return MPC_SIE_INVALID_ARG; } @@ -305,11 +296,10 @@ enum mpc_sie_error_t mpc_sie_get_block_size(struct mpc_sie_dev_t* dev, return MPC_SIE_ERR_NONE; } -enum mpc_sie_error_t mpc_sie_config_region(struct mpc_sie_dev_t* dev, +enum mpc_sie_error_t mpc_sie_config_region(struct mpc_sie_dev_t *dev, const uint32_t base, const uint32_t limit, - enum mpc_sie_sec_attr_t attr) -{ + enum mpc_sie_sec_attr_t attr) { enum mpc_sie_intern_error_t error; uint32_t first_word_idx; uint32_t first_word_mask; @@ -317,24 +307,22 @@ enum mpc_sie_error_t mpc_sie_config_region(struct mpc_sie_dev_t* dev, uint32_t limit_word_mask; uint32_t limit_word_idx; uint32_t nr_words; - const struct mpc_sie_memory_range_t* range; + const struct mpc_sie_memory_range_t *range; uint32_t word_value; - struct mpc_sie_reg_map_t* p_mpc = - (struct mpc_sie_reg_map_t*)dev->cfg->base; + struct mpc_sie_reg_map_t *p_mpc = (struct mpc_sie_reg_map_t *)dev->cfg->base; - if(dev->data->is_initialized != true) { + if (dev->data->is_initialized != true) { return MPC_SIE_NOT_INIT; } /* Get the bitmasks used to select the bits in the LUT */ - error = get_lut_masks(dev, base, limit, &range, &first_word_idx, &nr_words, - &first_word_mask, &limit_word_mask); + error = get_lut_masks(dev, base, limit, &range, &first_word_idx, &nr_words, &first_word_mask, &limit_word_mask); limit_word_idx = first_word_idx + nr_words - 1; - if(error != MPC_SIE_INTERN_ERR_NONE) { + if (error != MPC_SIE_INTERN_ERR_NONE) { /* Map internal error code lower than 0 to a generic errpr */ - if(error < 0) { + if (error < 0) { return MPC_SIE_ERR_INVALID_RANGE; } return (enum mpc_sie_error_t)error; @@ -344,7 +332,7 @@ enum mpc_sie_error_t mpc_sie_config_region(struct mpc_sie_dev_t* dev, * The memory range should allow accesses in with the wanted security * attribute if it requires special attribute for successful accesses */ - if(range->attr != attr) { + if (range->attr != attr) { return MPC_SIE_ERR_RANGE_SEC_ATTR_NON_COMPATIBLE; } @@ -358,9 +346,9 @@ enum mpc_sie_error_t mpc_sie_config_region(struct mpc_sie_dev_t* dev, p_mpc->blk_idx = first_word_idx; /* If only one word needs to be touched in the LUT */ - if(nr_words == 1) { + if (nr_words == 1) { word_value = p_mpc->blk_lutn; - if(attr == MPC_SIE_SEC_ATTR_NONSECURE) { + if (attr == MPC_SIE_SEC_ATTR_NONSECURE) { word_value |= first_word_mask; } else { word_value &= ~first_word_mask; @@ -370,7 +358,7 @@ enum mpc_sie_error_t mpc_sie_config_region(struct mpc_sie_dev_t* dev, * Set the index again because full word read or write could have * incremented it */ - p_mpc->blk_idx = first_word_idx; + p_mpc->blk_idx = first_word_idx; p_mpc->blk_lutn = word_value; /* Commit the configuration change */ @@ -382,7 +370,7 @@ enum mpc_sie_error_t mpc_sie_config_region(struct mpc_sie_dev_t* dev, /* First word */ word_value = p_mpc->blk_lutn; - if(attr == MPC_SIE_SEC_ATTR_NONSECURE) { + if (attr == MPC_SIE_SEC_ATTR_NONSECURE) { word_value |= first_word_mask; } else { word_value &= ~first_word_mask; @@ -396,9 +384,9 @@ enum mpc_sie_error_t mpc_sie_config_region(struct mpc_sie_dev_t* dev, p_mpc->blk_lutn = word_value; /* Fully configure the intermediate words if there are any */ - for(i=first_word_idx+1; i<limit_word_idx; i++) { + for (i = first_word_idx + 1; i < limit_word_idx; i++) { p_mpc->blk_idx = i; - if(attr == MPC_SIE_SEC_ATTR_NONSECURE) { + if (attr == MPC_SIE_SEC_ATTR_NONSECURE) { p_mpc->blk_lutn = 0xFFFFFFFF; } else { p_mpc->blk_lutn = 0x00000000; @@ -407,13 +395,13 @@ enum mpc_sie_error_t mpc_sie_config_region(struct mpc_sie_dev_t* dev, /* Partially configure the limit word */ p_mpc->blk_idx = limit_word_idx; - word_value = p_mpc->blk_lutn; - if(attr == MPC_SIE_SEC_ATTR_NONSECURE) { + word_value = p_mpc->blk_lutn; + if (attr == MPC_SIE_SEC_ATTR_NONSECURE) { word_value |= limit_word_mask; } else { word_value &= ~limit_word_mask; } - p_mpc->blk_idx = limit_word_idx; + p_mpc->blk_idx = limit_word_idx; p_mpc->blk_lutn = word_value; /* Commit the configuration change */ @@ -423,11 +411,8 @@ enum mpc_sie_error_t mpc_sie_config_region(struct mpc_sie_dev_t* dev, return MPC_SIE_ERR_NONE; } -enum mpc_sie_error_t mpc_sie_get_region_config( - struct mpc_sie_dev_t* dev, - uint32_t base, uint32_t limit, - enum mpc_sie_sec_attr_t* attr) -{ +enum mpc_sie_error_t +mpc_sie_get_region_config(struct mpc_sie_dev_t *dev, uint32_t base, uint32_t limit, enum mpc_sie_sec_attr_t *attr) { enum mpc_sie_sec_attr_t attr_prev; uint32_t block_size; uint32_t block_size_mask; @@ -438,16 +423,15 @@ enum mpc_sie_error_t mpc_sie_get_region_config( uint32_t limit_word_idx; uint32_t limit_word_mask; uint32_t nr_words; - struct mpc_sie_reg_map_t* p_mpc = - (struct mpc_sie_reg_map_t*)dev->cfg->base; - const struct mpc_sie_memory_range_t* range; + struct mpc_sie_reg_map_t *p_mpc = (struct mpc_sie_reg_map_t *)dev->cfg->base; + const struct mpc_sie_memory_range_t *range; uint32_t word_value; - if(dev->data->is_initialized != true) { + if (dev->data->is_initialized != true) { return MPC_SIE_NOT_INIT; } - if(attr == 0) { + if (attr == 0) { return MPC_SIE_INVALID_ARG; } @@ -474,14 +458,13 @@ enum mpc_sie_error_t mpc_sie_get_region_config( */ /* Get the bitmasks used to select the bits in the LUT */ - error = get_lut_masks(dev, base, limit, &range, &first_word_idx, &nr_words, - &first_word_mask, &limit_word_mask); + error = get_lut_masks(dev, base, limit, &range, &first_word_idx, &nr_words, &first_word_mask, &limit_word_mask); - limit_word_idx = first_word_idx+nr_words - 1; + limit_word_idx = first_word_idx + nr_words - 1; - if(error != MPC_SIE_INTERN_ERR_NONE) { + if (error != MPC_SIE_INTERN_ERR_NONE) { /* Map internal error code lower than 0 to generic error */ - if(error < 0) { + if (error < 0) { return MPC_SIE_ERR_INVALID_RANGE; } return (enum mpc_sie_error_t)error; @@ -491,16 +474,16 @@ enum mpc_sie_error_t mpc_sie_get_region_config( p_mpc->blk_idx = first_word_idx; /* If only one word needs to be touched in the LUT */ - if(nr_words == 1) { + if (nr_words == 1) { word_value = p_mpc->blk_lutn; word_value &= first_word_mask; - if(word_value == 0) { + if (word_value == 0) { *attr = MPC_SIE_SEC_ATTR_SECURE; - /* - * If there are differences between the mask and the word value, - * it means that the security attributes of blocks are mixed - */ - } else if(word_value ^ first_word_mask) { + /* + * If there are differences between the mask and the word value, + * it means that the security attributes of blocks are mixed + */ + } else if (word_value ^ first_word_mask) { *attr = MPC_SIE_SEC_ATTR_MIXED; } else { *attr = MPC_SIE_SEC_ATTR_NONSECURE; @@ -510,9 +493,9 @@ enum mpc_sie_error_t mpc_sie_get_region_config( /* Get the partial configuration of the first word */ word_value = p_mpc->blk_lutn & first_word_mask; - if(word_value == 0x00000000) { + if (word_value == 0x00000000) { *attr = MPC_SIE_SEC_ATTR_SECURE; - } else if(word_value ^ first_word_mask) { + } else if (word_value ^ first_word_mask) { *attr = MPC_SIE_SEC_ATTR_MIXED; /* * Bail out as the security attribute will be the same regardless @@ -529,12 +512,12 @@ enum mpc_sie_error_t mpc_sie_get_region_config( attr_prev = *attr; /* Get the configuration of the intermediate words if there are any */ - for(i=first_word_idx+1; i<limit_word_idx; i++) { + for (i = first_word_idx + 1; i < limit_word_idx; i++) { p_mpc->blk_idx = i; - word_value = p_mpc->blk_lutn; - if(word_value == 0x00000000) { + word_value = p_mpc->blk_lutn; + if (word_value == 0x00000000) { *attr = MPC_SIE_SEC_ATTR_SECURE; - } else if(word_value == 0xFFFFFFFF) { + } else if (word_value == 0xFFFFFFFF) { *attr = MPC_SIE_SEC_ATTR_NONSECURE; } else { *attr = MPC_SIE_SEC_ATTR_MIXED; @@ -542,7 +525,7 @@ enum mpc_sie_error_t mpc_sie_get_region_config( } /* If the attribute is different than the one found before, bail out */ - if(*attr != attr_prev) { + if (*attr != attr_prev) { *attr = MPC_SIE_SEC_ATTR_MIXED; return MPC_SIE_ERR_NONE; } @@ -551,17 +534,17 @@ enum mpc_sie_error_t mpc_sie_get_region_config( /* Get the partial configuration of the limit word */ p_mpc->blk_idx = limit_word_idx; - word_value = p_mpc->blk_lutn & limit_word_mask; - if(word_value == 0x00000000) { + word_value = p_mpc->blk_lutn & limit_word_mask; + if (word_value == 0x00000000) { *attr = MPC_SIE_SEC_ATTR_SECURE; - } else if(word_value ^ first_word_mask) { + } else if (word_value ^ first_word_mask) { *attr = MPC_SIE_SEC_ATTR_MIXED; return MPC_SIE_ERR_NONE; } else { *attr = MPC_SIE_SEC_ATTR_NONSECURE; } - if(*attr != attr_prev) { + if (*attr != attr_prev) { *attr = MPC_SIE_SEC_ATTR_MIXED; return MPC_SIE_ERR_NONE; } @@ -569,17 +552,14 @@ enum mpc_sie_error_t mpc_sie_get_region_config( return MPC_SIE_ERR_NONE; } -enum mpc_sie_error_t mpc_sie_get_ctrl(struct mpc_sie_dev_t* dev, - uint32_t* ctrl_val) -{ - struct mpc_sie_reg_map_t* p_mpc = - (struct mpc_sie_reg_map_t*)dev->cfg->base; +enum mpc_sie_error_t mpc_sie_get_ctrl(struct mpc_sie_dev_t *dev, uint32_t *ctrl_val) { + struct mpc_sie_reg_map_t *p_mpc = (struct mpc_sie_reg_map_t *)dev->cfg->base; - if(dev->data->is_initialized != true) { + if (dev->data->is_initialized != true) { return MPC_SIE_NOT_INIT; } - if(ctrl_val == 0) { + if (ctrl_val == 0) { return MPC_SIE_INVALID_ARG; } @@ -588,13 +568,10 @@ enum mpc_sie_error_t mpc_sie_get_ctrl(struct mpc_sie_dev_t* dev, return MPC_SIE_ERR_NONE; } -enum mpc_sie_error_t mpc_sie_set_ctrl(struct mpc_sie_dev_t* dev, - uint32_t mpc_ctrl) -{ - struct mpc_sie_reg_map_t* p_mpc = - (struct mpc_sie_reg_map_t*)dev->cfg->base; +enum mpc_sie_error_t mpc_sie_set_ctrl(struct mpc_sie_dev_t *dev, uint32_t mpc_ctrl) { + struct mpc_sie_reg_map_t *p_mpc = (struct mpc_sie_reg_map_t *)dev->cfg->base; - if(dev->data->is_initialized != true) { + if (dev->data->is_initialized != true) { return MPC_SIE_NOT_INIT; } @@ -603,23 +580,20 @@ enum mpc_sie_error_t mpc_sie_set_ctrl(struct mpc_sie_dev_t* dev, return MPC_SIE_ERR_NONE; } -enum mpc_sie_error_t mpc_sie_get_sec_resp(struct mpc_sie_dev_t* dev, - enum mpc_sie_sec_resp_t* sec_rep) -{ - struct mpc_sie_reg_map_t* p_mpc = - (struct mpc_sie_reg_map_t*)dev->cfg->base; - bool gating_present = false; +enum mpc_sie_error_t mpc_sie_get_sec_resp(struct mpc_sie_dev_t *dev, enum mpc_sie_sec_resp_t *sec_rep) { + struct mpc_sie_reg_map_t *p_mpc = (struct mpc_sie_reg_map_t *)dev->cfg->base; + bool gating_present = false; - if(dev->data->is_initialized != true) { + if (dev->data->is_initialized != true) { return MPC_SIE_NOT_INIT; } - if(sec_rep == NULL) { + if (sec_rep == NULL) { return MPC_SIE_INVALID_ARG; } if (dev->data->sie_version == SIE200) { - if(p_mpc->ctrl & MPC_SIE200_CTRL_SEC_RESP) { + if (p_mpc->ctrl & MPC_SIE200_CTRL_SEC_RESP) { *sec_rep = MPC_SIE_RESP_BUS_ERROR; } else { *sec_rep = MPC_SIE_RESP_RAZ_WI; @@ -631,7 +605,7 @@ enum mpc_sie_error_t mpc_sie_get_sec_resp(struct mpc_sie_dev_t* dev, return MPC_SIE_ERR_GATING_NOT_PRESENT; } - if(p_mpc->ctrl & MPC_SIE300_CTRL_SEC_RESP) { + if (p_mpc->ctrl & MPC_SIE300_CTRL_SEC_RESP) { /* MPC returns a BUS ERROR response */ *sec_rep = MPC_SIE_RESP_BUS_ERROR; } else { @@ -645,14 +619,11 @@ enum mpc_sie_error_t mpc_sie_get_sec_resp(struct mpc_sie_dev_t* dev, return MPC_SIE_ERR_NONE; } -enum mpc_sie_error_t mpc_sie_set_sec_resp(struct mpc_sie_dev_t* dev, - enum mpc_sie_sec_resp_t sec_rep) -{ - struct mpc_sie_reg_map_t* p_mpc = - (struct mpc_sie_reg_map_t*)dev->cfg->base; - bool gating_present = false; +enum mpc_sie_error_t mpc_sie_set_sec_resp(struct mpc_sie_dev_t *dev, enum mpc_sie_sec_resp_t sec_rep) { + struct mpc_sie_reg_map_t *p_mpc = (struct mpc_sie_reg_map_t *)dev->cfg->base; + bool gating_present = false; - if(dev->data->is_initialized != true) { + if (dev->data->is_initialized != true) { return MPC_SIE_NOT_INIT; } @@ -686,12 +657,10 @@ enum mpc_sie_error_t mpc_sie_set_sec_resp(struct mpc_sie_dev_t* dev, return MPC_SIE_ERR_NONE; } -enum mpc_sie_error_t mpc_sie_irq_enable(struct mpc_sie_dev_t* dev) -{ - struct mpc_sie_reg_map_t* p_mpc = - (struct mpc_sie_reg_map_t*)dev->cfg->base; +enum mpc_sie_error_t mpc_sie_irq_enable(struct mpc_sie_dev_t *dev) { + struct mpc_sie_reg_map_t *p_mpc = (struct mpc_sie_reg_map_t *)dev->cfg->base; - if(dev->data->is_initialized != true) { + if (dev->data->is_initialized != true) { return MPC_SIE_NOT_INIT; } @@ -700,52 +669,40 @@ enum mpc_sie_error_t mpc_sie_irq_enable(struct mpc_sie_dev_t* dev) return MPC_SIE_ERR_NONE; } -void mpc_sie_irq_disable(struct mpc_sie_dev_t* dev) -{ - struct mpc_sie_reg_map_t* p_mpc = - (struct mpc_sie_reg_map_t*)dev->cfg->base; +void mpc_sie_irq_disable(struct mpc_sie_dev_t *dev) { + struct mpc_sie_reg_map_t *p_mpc = (struct mpc_sie_reg_map_t *)dev->cfg->base; p_mpc->int_en &= ~MPC_SIE_INT_BIT; } -void mpc_sie_clear_irq(struct mpc_sie_dev_t* dev) -{ - struct mpc_sie_reg_map_t* p_mpc = - (struct mpc_sie_reg_map_t*)dev->cfg->base; +void mpc_sie_clear_irq(struct mpc_sie_dev_t *dev) { + struct mpc_sie_reg_map_t *p_mpc = (struct mpc_sie_reg_map_t *)dev->cfg->base; p_mpc->int_clear = MPC_SIE_INT_BIT; } -uint32_t mpc_sie_irq_state(struct mpc_sie_dev_t* dev) -{ - struct mpc_sie_reg_map_t* p_mpc = - (struct mpc_sie_reg_map_t*)dev->cfg->base; +uint32_t mpc_sie_irq_state(struct mpc_sie_dev_t *dev) { + struct mpc_sie_reg_map_t *p_mpc = (struct mpc_sie_reg_map_t *)dev->cfg->base; return (p_mpc->int_stat & MPC_SIE_INT_BIT); } -enum mpc_sie_error_t mpc_sie_lock_down(struct mpc_sie_dev_t* dev) -{ - struct mpc_sie_reg_map_t* p_mpc = - (struct mpc_sie_reg_map_t*)dev->cfg->base; +enum mpc_sie_error_t mpc_sie_lock_down(struct mpc_sie_dev_t *dev) { + struct mpc_sie_reg_map_t *p_mpc = (struct mpc_sie_reg_map_t *)dev->cfg->base; - if(dev->data->is_initialized != true) { + if (dev->data->is_initialized != true) { return MPC_SIE_NOT_INIT; } - p_mpc->ctrl |= (MPC_SIE_CTRL_AUTOINCREMENT - | MPC_SIE_CTRL_SEC_LOCK_DOWN); + p_mpc->ctrl |= (MPC_SIE_CTRL_AUTOINCREMENT | MPC_SIE_CTRL_SEC_LOCK_DOWN); return MPC_SIE_ERR_NONE; } -enum mpc_sie_error_t mpc_sie_is_gating_present(struct mpc_sie_dev_t* dev, - bool* gating_present) -{ - struct mpc_sie_reg_map_t* p_mpc = - (struct mpc_sie_reg_map_t*)dev->cfg->base; +enum mpc_sie_error_t mpc_sie_is_gating_present(struct mpc_sie_dev_t *dev, bool *gating_present) { + struct mpc_sie_reg_map_t *p_mpc = (struct mpc_sie_reg_map_t *)dev->cfg->base; - if(dev->data->is_initialized != true) { + if (dev->data->is_initialized != true) { return MPC_SIE_NOT_INIT; } @@ -758,34 +715,26 @@ enum mpc_sie_error_t mpc_sie_is_gating_present(struct mpc_sie_dev_t* dev, return MPC_SIE_ERR_NONE; } -uint32_t get_sie_version(struct mpc_sie_dev_t* dev) -{ - struct mpc_sie_reg_map_t* p_mpc = - (struct mpc_sie_reg_map_t*)dev->cfg->base; +uint32_t get_sie_version(struct mpc_sie_dev_t *dev) { + struct mpc_sie_reg_map_t *p_mpc = (struct mpc_sie_reg_map_t *)dev->cfg->base; return p_mpc->pidr0 & MPC_PIDR0_SIE_VERSION_MASK; } -bool mpc_sie_get_gate_ack(struct mpc_sie_dev_t* dev) -{ - struct mpc_sie_reg_map_t* p_mpc = - (struct mpc_sie_reg_map_t*)dev->cfg->base; +bool mpc_sie_get_gate_ack(struct mpc_sie_dev_t *dev) { + struct mpc_sie_reg_map_t *p_mpc = (struct mpc_sie_reg_map_t *)dev->cfg->base; return (bool)(p_mpc->ctrl & MPC_SIE300_CTRL_GATE_ACK); } -void mpc_sie_request_gating(struct mpc_sie_dev_t* dev) -{ - struct mpc_sie_reg_map_t* p_mpc = - (struct mpc_sie_reg_map_t*)dev->cfg->base; +void mpc_sie_request_gating(struct mpc_sie_dev_t *dev) { + struct mpc_sie_reg_map_t *p_mpc = (struct mpc_sie_reg_map_t *)dev->cfg->base; p_mpc->ctrl |= MPC_SIE300_CTRL_GATE_REQ; } -void mpc_sie_release_gating(struct mpc_sie_dev_t* dev) -{ - struct mpc_sie_reg_map_t* p_mpc = - (struct mpc_sie_reg_map_t*)dev->cfg->base; +void mpc_sie_release_gating(struct mpc_sie_dev_t *dev) { + struct mpc_sie_reg_map_t *p_mpc = (struct mpc_sie_reg_map_t *)dev->cfg->base; p_mpc->ctrl &= ~MPC_SIE300_CTRL_GATE_REQ; } |