mbed library sources. Supersedes mbed-src.
Dependents: Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more
targets/TARGET_Cypress/TARGET_PSOC6_FUTURE/TARGET_FUTURE_SEQUANA_M0_PSA/cyprotection.h@189:f392fc9709a3, 2019-02-20 (annotated)
- Committer:
- AnnaBridge
- Date:
- Wed Feb 20 22:31:08 2019 +0000
- Revision:
- 189:f392fc9709a3
mbed library release version 165
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
AnnaBridge | 189:f392fc9709a3 | 1 | /* mbed Microcontroller Library |
AnnaBridge | 189:f392fc9709a3 | 2 | * |
AnnaBridge | 189:f392fc9709a3 | 3 | * \copyright |
AnnaBridge | 189:f392fc9709a3 | 4 | |
AnnaBridge | 189:f392fc9709a3 | 5 | * (c) 2018, Cypress Semiconductor Corporation |
AnnaBridge | 189:f392fc9709a3 | 6 | * or a subsidiary of Cypress Semiconductor Corporation. All rights |
AnnaBridge | 189:f392fc9709a3 | 7 | * reserved. |
AnnaBridge | 189:f392fc9709a3 | 8 | * |
AnnaBridge | 189:f392fc9709a3 | 9 | * SPDX-License-Identifier: Apache-2.0 |
AnnaBridge | 189:f392fc9709a3 | 10 | * |
AnnaBridge | 189:f392fc9709a3 | 11 | * Licensed under the Apache License, Version 2.0 (the "License"); |
AnnaBridge | 189:f392fc9709a3 | 12 | * you may not use this file except in compliance with the License. |
AnnaBridge | 189:f392fc9709a3 | 13 | * You may obtain a copy of the License at |
AnnaBridge | 189:f392fc9709a3 | 14 | * |
AnnaBridge | 189:f392fc9709a3 | 15 | * http://www.apache.org/licenses/LICENSE-2.0 |
AnnaBridge | 189:f392fc9709a3 | 16 | * |
AnnaBridge | 189:f392fc9709a3 | 17 | * Unless required by applicable law or agreed to in writing, software |
AnnaBridge | 189:f392fc9709a3 | 18 | * distributed under the License is distributed on an "AS IS" BASIS, |
AnnaBridge | 189:f392fc9709a3 | 19 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
AnnaBridge | 189:f392fc9709a3 | 20 | * See the License for the specific language governing permissions and |
AnnaBridge | 189:f392fc9709a3 | 21 | * limitations under the License. |
AnnaBridge | 189:f392fc9709a3 | 22 | */ |
AnnaBridge | 189:f392fc9709a3 | 23 | |
AnnaBridge | 189:f392fc9709a3 | 24 | #ifndef _CYPROTECTION_H_ |
AnnaBridge | 189:f392fc9709a3 | 25 | #define _CYPROTECTION_H_ |
AnnaBridge | 189:f392fc9709a3 | 26 | |
AnnaBridge | 189:f392fc9709a3 | 27 | #include "cy_prot.h" |
AnnaBridge | 189:f392fc9709a3 | 28 | |
AnnaBridge | 189:f392fc9709a3 | 29 | #define MPU_SMPU_SUBREGIONS_NUMB (8u) |
AnnaBridge | 189:f392fc9709a3 | 30 | /* MPU is not used yet */ |
AnnaBridge | 189:f392fc9709a3 | 31 | #define CPUSS_PROT_MPU_STRUCT_NR (0u) |
AnnaBridge | 189:f392fc9709a3 | 32 | |
AnnaBridge | 189:f392fc9709a3 | 33 | #define CPUSS_PROT_PPU_GR_STRUCT_NR (16u) |
AnnaBridge | 189:f392fc9709a3 | 34 | #define CPUSS_PROT_PPU_PROG_STRUCT_NR (16u) |
AnnaBridge | 189:f392fc9709a3 | 35 | #define CPUSS_PROT_PPU_FX_SL_STRUCT_NR (16u) |
AnnaBridge | 189:f392fc9709a3 | 36 | #define CPUSS_PROT_PPU_FX_RG_STRUCT_NR (29u) |
AnnaBridge | 189:f392fc9709a3 | 37 | |
AnnaBridge | 189:f392fc9709a3 | 38 | #define CPUSS_PROT_PPU_FX_RG_START_ADDR (0x40201000UL) |
AnnaBridge | 189:f392fc9709a3 | 39 | |
AnnaBridge | 189:f392fc9709a3 | 40 | #define PRIVILEGED_MODE (1u) |
AnnaBridge | 189:f392fc9709a3 | 41 | #define UNPRIVILEGED_MODE (0u) |
AnnaBridge | 189:f392fc9709a3 | 42 | #define NONSECURE_MODE (1u) |
AnnaBridge | 189:f392fc9709a3 | 43 | #define SECURE_MODE (0u) |
AnnaBridge | 189:f392fc9709a3 | 44 | |
AnnaBridge | 189:f392fc9709a3 | 45 | /* PPU Group existing bitmask - 11001011111 */ |
AnnaBridge | 189:f392fc9709a3 | 46 | #define PERI_PPU_GR_MMIO_EXIST_BITMASK 0x65F |
AnnaBridge | 189:f392fc9709a3 | 47 | /* PPU MMIO1 Group Fixed Region existing bitmask - 10 */ |
AnnaBridge | 189:f392fc9709a3 | 48 | #define PERI_PPU_GR_MMIO1_EXIST_BITMASK 0x2 |
AnnaBridge | 189:f392fc9709a3 | 49 | /* PPU MMIO2 Group Fixed Region existing bitmask - 11001111111111 */ |
AnnaBridge | 189:f392fc9709a3 | 50 | #define PERI_PPU_GR_MMIO2_EXIST_BITMASK 0x33FF |
AnnaBridge | 189:f392fc9709a3 | 51 | /* PPU MMIO3 Group Fixed Region existing bitmask - 1111101111111 */ |
AnnaBridge | 189:f392fc9709a3 | 52 | #define PERI_PPU_GR_MMIO3_EXIST_BITMASK 0x1F7F |
AnnaBridge | 189:f392fc9709a3 | 53 | /* PPU MMIO4 Group Fixed Region existing bitmask - 101 */ |
AnnaBridge | 189:f392fc9709a3 | 54 | #define PERI_PPU_GR_MMIO4_EXIST_BITMASK 0x5 |
AnnaBridge | 189:f392fc9709a3 | 55 | /* PPU MMIO6 Group Fixed Region existing bitmask - 1111111111 */ |
AnnaBridge | 189:f392fc9709a3 | 56 | #define PERI_PPU_GR_MMIO6_EXIST_BITMASK 0x3FF |
AnnaBridge | 189:f392fc9709a3 | 57 | /* PPU MMIO9 Group Fixed Region existing bitmask - 11 */ |
AnnaBridge | 189:f392fc9709a3 | 58 | #define PERI_PPU_GR_MMIO9_EXIST_BITMASK 0x3 |
AnnaBridge | 189:f392fc9709a3 | 59 | /* PPU MMIO10 Group Fixed Region existing bitmask - 111 */ |
AnnaBridge | 189:f392fc9709a3 | 60 | #define PERI_PPU_GR_MMIO10_EXIST_BITMASK 0x7 |
AnnaBridge | 189:f392fc9709a3 | 61 | |
AnnaBridge | 189:f392fc9709a3 | 62 | |
AnnaBridge | 189:f392fc9709a3 | 63 | /* TODO: There is no SWPU configuration part */ |
AnnaBridge | 189:f392fc9709a3 | 64 | typedef struct { |
AnnaBridge | 189:f392fc9709a3 | 65 | uint32_t* address; /**< Base address of the memory region (Only applicable to slave) */ |
AnnaBridge | 189:f392fc9709a3 | 66 | cy_en_prot_size_t regionSize; /**< Size of the memory region (Only applicable to slave) */ |
AnnaBridge | 189:f392fc9709a3 | 67 | uint8_t subregions; /**< Mask of the 8 subregions to disable (Only applicable to slave) */ |
AnnaBridge | 189:f392fc9709a3 | 68 | cy_en_prot_perm_t userPermission; /**< User permissions for the region */ |
AnnaBridge | 189:f392fc9709a3 | 69 | cy_en_prot_perm_t privPermission; /**< Privileged permissions for the region */ |
AnnaBridge | 189:f392fc9709a3 | 70 | bool secure; /**< Non Secure = 0, Secure = 1 */ |
AnnaBridge | 189:f392fc9709a3 | 71 | bool pcMatch; /**< Access evaluation = 0, Matching = 1 */ |
AnnaBridge | 189:f392fc9709a3 | 72 | uint16_t pcMask; /**< Mask of allowed protection context(s) */ |
AnnaBridge | 189:f392fc9709a3 | 73 | PROT_SMPU_SMPU_STRUCT_Type* prot_region; /* protection region */ |
AnnaBridge | 189:f392fc9709a3 | 74 | cy_en_prot_perm_t userMstPermission; /**< User permissions for the region */ |
AnnaBridge | 189:f392fc9709a3 | 75 | cy_en_prot_perm_t privMstPermission; /**< Privileged permissions for the region */ |
AnnaBridge | 189:f392fc9709a3 | 76 | } cy_smpu_region_config_t; |
AnnaBridge | 189:f392fc9709a3 | 77 | |
AnnaBridge | 189:f392fc9709a3 | 78 | /* |
AnnaBridge | 189:f392fc9709a3 | 79 | * See Cy_Prot_ConfigBusMaster function description for parameters meaning |
AnnaBridge | 189:f392fc9709a3 | 80 | * |
AnnaBridge | 189:f392fc9709a3 | 81 | * act_pcMask specifies active PC for Cy_Prot_SetActivePC function |
AnnaBridge | 189:f392fc9709a3 | 82 | */ |
AnnaBridge | 189:f392fc9709a3 | 83 | typedef struct { |
AnnaBridge | 189:f392fc9709a3 | 84 | en_prot_master_t busMaster; |
AnnaBridge | 189:f392fc9709a3 | 85 | bool privileged; |
AnnaBridge | 189:f392fc9709a3 | 86 | bool secure; |
AnnaBridge | 189:f392fc9709a3 | 87 | uint32_t pcMask; |
AnnaBridge | 189:f392fc9709a3 | 88 | uint32_t act_pc; |
AnnaBridge | 189:f392fc9709a3 | 89 | } cy_bus_master_config_t; |
AnnaBridge | 189:f392fc9709a3 | 90 | |
AnnaBridge | 189:f392fc9709a3 | 91 | /** Configuration structure for Fixed Group (GR) PPU (PPU_GR) struct initialization */ |
AnnaBridge | 189:f392fc9709a3 | 92 | typedef struct |
AnnaBridge | 189:f392fc9709a3 | 93 | { |
AnnaBridge | 189:f392fc9709a3 | 94 | cy_en_prot_perm_t userPermission; /**< User permissions for the region */ |
AnnaBridge | 189:f392fc9709a3 | 95 | cy_en_prot_perm_t privPermission; /**< Privileged permissions for the region */ |
AnnaBridge | 189:f392fc9709a3 | 96 | bool secure; /**< Non Secure = 0, Secure = 1 */ |
AnnaBridge | 189:f392fc9709a3 | 97 | bool pcMatch; /**< Access evaluation = 0, Matching = 1 */ |
AnnaBridge | 189:f392fc9709a3 | 98 | uint16_t pcMask; /**< Mask of allowed protection context(s) */ |
AnnaBridge | 189:f392fc9709a3 | 99 | cy_en_prot_perm_t userMstPermission; /**< Master User permissions for the region */ |
AnnaBridge | 189:f392fc9709a3 | 100 | cy_en_prot_perm_t privMstPermission; /**< Master Privileged permissions for the region */ |
AnnaBridge | 189:f392fc9709a3 | 101 | bool secureMst; /**< Non Secure = 0, Secure = 1 Master */ |
AnnaBridge | 189:f392fc9709a3 | 102 | uint16_t pcMstMask; /**< Master Mask of allowed protection context(s) */ |
AnnaBridge | 189:f392fc9709a3 | 103 | PERI_PPU_GR_Type *pPpuStr; /**< Ppu structure address */ |
AnnaBridge | 189:f392fc9709a3 | 104 | } cy_ppu_fixed_gr_cfg_t; |
AnnaBridge | 189:f392fc9709a3 | 105 | /** Configuration structure for Fixed Region (RG) PPU (PPU_RG) struct initialization */ |
AnnaBridge | 189:f392fc9709a3 | 106 | typedef struct |
AnnaBridge | 189:f392fc9709a3 | 107 | { |
AnnaBridge | 189:f392fc9709a3 | 108 | cy_en_prot_perm_t userPermission; /**< User permissions for the region */ |
AnnaBridge | 189:f392fc9709a3 | 109 | cy_en_prot_perm_t privPermission; /**< Privileged permissions for the region */ |
AnnaBridge | 189:f392fc9709a3 | 110 | bool secure; /**< Non Secure = 0, Secure = 1 */ |
AnnaBridge | 189:f392fc9709a3 | 111 | bool pcMatch; /**< Access evaluation = 0, Matching = 1 */ |
AnnaBridge | 189:f392fc9709a3 | 112 | uint16_t pcMask; /**< Mask of allowed protection context(s) */ |
AnnaBridge | 189:f392fc9709a3 | 113 | cy_en_prot_perm_t userMstPermission; /**< Master User permissions for the region */ |
AnnaBridge | 189:f392fc9709a3 | 114 | cy_en_prot_perm_t privMstPermission; /**< Master Privileged permissions for the region */ |
AnnaBridge | 189:f392fc9709a3 | 115 | bool secureMst; /**< Non Secure = 0, Secure = 1 Master */ |
AnnaBridge | 189:f392fc9709a3 | 116 | uint16_t pcMstMask; /**< Master Mask of allowed protection context(s) */ |
AnnaBridge | 189:f392fc9709a3 | 117 | PERI_GR_PPU_RG_Type *pPpuStr; /**< Ppu structure address */ |
AnnaBridge | 189:f392fc9709a3 | 118 | } cy_ppu_fixed_rg_cfg_t; |
AnnaBridge | 189:f392fc9709a3 | 119 | /** Configuration structure for Fixed Slave (SL) PPU (PPU_SL) struct initialization */ |
AnnaBridge | 189:f392fc9709a3 | 120 | typedef struct |
AnnaBridge | 189:f392fc9709a3 | 121 | { |
AnnaBridge | 189:f392fc9709a3 | 122 | cy_en_prot_perm_t userPermission; /**< User permissions for the region */ |
AnnaBridge | 189:f392fc9709a3 | 123 | cy_en_prot_perm_t privPermission; /**< Privileged permissions for the region */ |
AnnaBridge | 189:f392fc9709a3 | 124 | bool secure; /**< Non Secure = 0, Secure = 1 */ |
AnnaBridge | 189:f392fc9709a3 | 125 | bool pcMatch; /**< Access evaluation = 0, Matching = 1 */ |
AnnaBridge | 189:f392fc9709a3 | 126 | uint16_t pcMask; /**< Mask of allowed protection context(s) */ |
AnnaBridge | 189:f392fc9709a3 | 127 | cy_en_prot_perm_t userMstPermission; /**< Master User permissions for the region */ |
AnnaBridge | 189:f392fc9709a3 | 128 | cy_en_prot_perm_t privMstPermission; /**< Master Privileged permissions for the region */ |
AnnaBridge | 189:f392fc9709a3 | 129 | bool secureMst; /**< Non Secure = 0, Secure = 1 Master */ |
AnnaBridge | 189:f392fc9709a3 | 130 | uint16_t pcMstMask; /**< Master Mask of allowed protection context(s) */ |
AnnaBridge | 189:f392fc9709a3 | 131 | PERI_GR_PPU_SL_Type *pPpuStr; /**< Ppu structure address */ |
AnnaBridge | 189:f392fc9709a3 | 132 | } cy_ppu_fixed_sl_cfg_t; |
AnnaBridge | 189:f392fc9709a3 | 133 | |
AnnaBridge | 189:f392fc9709a3 | 134 | /** Configuration structure for Programmable (PROG) PPU (PPU_PR) struct initialization */ |
AnnaBridge | 189:f392fc9709a3 | 135 | typedef struct |
AnnaBridge | 189:f392fc9709a3 | 136 | { |
AnnaBridge | 189:f392fc9709a3 | 137 | uint32_t* address; /**< Base address of the memory region (Only applicable to slave) */ |
AnnaBridge | 189:f392fc9709a3 | 138 | cy_en_prot_size_t regionSize; /**< Size of the memory region (Only applicable to slave) */ |
AnnaBridge | 189:f392fc9709a3 | 139 | uint8_t subregions; /**< Mask of the 8 subregions to disable (Only applicable to slave) */ |
AnnaBridge | 189:f392fc9709a3 | 140 | cy_en_prot_perm_t userPermission; /**< User permissions for the region */ |
AnnaBridge | 189:f392fc9709a3 | 141 | cy_en_prot_perm_t privPermission; /**< Privileged permissions for the region */ |
AnnaBridge | 189:f392fc9709a3 | 142 | bool secure; /**< Non Secure = 0, Secure = 1 */ |
AnnaBridge | 189:f392fc9709a3 | 143 | bool pcMatch; /**< Access evaluation = 0, Matching = 1 */ |
AnnaBridge | 189:f392fc9709a3 | 144 | uint16_t pcMask; /**< Mask of allowed protection context(s) */ |
AnnaBridge | 189:f392fc9709a3 | 145 | cy_en_prot_perm_t userMstPermission; /**< Master User permissions for the region */ |
AnnaBridge | 189:f392fc9709a3 | 146 | cy_en_prot_perm_t privMstPermission; /**< Master Privileged permissions for the region */ |
AnnaBridge | 189:f392fc9709a3 | 147 | bool secureMst; /**< Non Secure = 0, Secure = 1 Master */ |
AnnaBridge | 189:f392fc9709a3 | 148 | uint16_t pcMstMask; /**< Master Mask of allowed protection context(s) */ |
AnnaBridge | 189:f392fc9709a3 | 149 | PERI_PPU_PR_Type *pPpuStr; /**< Ppu structure address */ |
AnnaBridge | 189:f392fc9709a3 | 150 | } cy_ppu_prog_cfg_t; |
AnnaBridge | 189:f392fc9709a3 | 151 | |
AnnaBridge | 189:f392fc9709a3 | 152 | cy_en_prot_status_t smpu_protect(cy_smpu_region_config_t smpu_config_arr[], uint32_t arr_length); |
AnnaBridge | 189:f392fc9709a3 | 153 | cy_en_prot_status_t ppu_fixed_rg_protect(cy_ppu_fixed_rg_cfg_t ppu_config_arr[], uint32_t arr_length); |
AnnaBridge | 189:f392fc9709a3 | 154 | cy_en_prot_status_t ppu_fixed_sl_protect(cy_ppu_fixed_sl_cfg_t ppu_config_arr[], uint32_t arr_length); |
AnnaBridge | 189:f392fc9709a3 | 155 | cy_en_prot_status_t ppu_prog_protect(cy_ppu_prog_cfg_t ppu_config_arr[], uint32_t arr_length); |
AnnaBridge | 189:f392fc9709a3 | 156 | cy_en_prot_status_t ppu_fixed_gr_protect(cy_ppu_fixed_gr_cfg_t ppu_config_arr[], uint32_t arr_length); |
AnnaBridge | 189:f392fc9709a3 | 157 | cy_en_prot_status_t bus_masters_protect(cy_bus_master_config_t bus_masters_config_arr[], uint32_t arr_length); |
AnnaBridge | 189:f392fc9709a3 | 158 | |
AnnaBridge | 189:f392fc9709a3 | 159 | uint8_t isPeripheralAccessAllowed(uint32_t perStartAddr, uint32_t perSize, |
AnnaBridge | 189:f392fc9709a3 | 160 | uint8_t privModeFlag, uint8_t nsecureFlag, enum cy_en_prot_pc_t protectionCtx, cy_en_prot_perm_t accessType); |
AnnaBridge | 189:f392fc9709a3 | 161 | uint8_t isMemoryAccessAllowed(uint32_t memStartAddr, uint32_t memSize, |
AnnaBridge | 189:f392fc9709a3 | 162 | uint8_t privModeFlag, uint8_t nsecureFlag, enum cy_en_prot_pc_t protectionCtx, cy_en_prot_perm_t accessType); |
AnnaBridge | 189:f392fc9709a3 | 163 | |
AnnaBridge | 189:f392fc9709a3 | 164 | #endif /* _CYPROTECTION_H_ */ |