1 /* SPDX-License-Identifier: BSD-Source-Code */ 2 /* ---------------------------------------------------------------------------- 3 * ATMEL Microcontroller Software Support 4 * ---------------------------------------------------------------------------- 5 * Copyright (c) 2013, Atmel Corporation 6 * 7 * All rights reserved. 8 * 9 * Redistribution and use in source and binary forms, with or without 10 * modification, are permitted provided that the following conditions are met: 11 * 12 * - Redistributions of source code must retain the above copyright notice, 13 * this list of conditions and the disclaimer below. 14 * 15 * Atmel's name may not be used to endorse or promote products derived from 16 * this software without specific prior written permission. 17 * 18 * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR 19 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 20 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE 21 * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, 22 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 24 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 25 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 26 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 27 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 */ 29 #ifndef MATRIX_H 30 #define MATRIX_H 31 32 #include <mm/core_memprot.h> 33 #include <stdint.h> 34 #include <tee_api_types.h> 35 36 #define SECURITY_TYPE_AS 1 37 #define SECURITY_TYPE_NS 2 38 #define SECURITY_TYPE_PS 3 39 40 #define MATRIX_SPSELR_COUNT 3 41 #define MATRIX_SLAVE_COUNT 15 42 43 #ifdef CFG_PM_ARM32 44 struct matrix_state { 45 uint32_t spselr[MATRIX_SPSELR_COUNT]; 46 uint32_t ssr[MATRIX_SLAVE_COUNT]; 47 uint32_t srtsr[MATRIX_SLAVE_COUNT]; 48 uint32_t sassr[MATRIX_SLAVE_COUNT]; 49 uint32_t meier; 50 uint32_t meimr; 51 }; 52 #endif 53 54 struct matrix { 55 unsigned int matrix; 56 struct io_pa_va p; 57 #ifdef CFG_PM_ARM32 58 struct matrix_state state; 59 #endif 60 }; 61 62 struct peri_security { 63 unsigned int peri_id; 64 unsigned int matrix; 65 unsigned int security_type; 66 paddr_t addr; 67 }; 68 69 struct peri_security *peri_security_get(unsigned int idx); 70 struct matrix *matrix_get(unsigned int idx); 71 vaddr_t matrix_base(unsigned int matrix); 72 73 void matrix_write_protect_enable(unsigned int matrix_base); 74 void matrix_write_protect_disable(unsigned int matrix_base); 75 void matrix_configure_slave_security(unsigned int matrix_base, 76 unsigned int slave, 77 unsigned int srtop_setting, 78 unsigned int srsplit_setting, 79 unsigned int ssr_setting); 80 81 int matrix_configure_periph_non_secure(unsigned int *peri_id_array, 82 unsigned int size); 83 int matrix_configure_periph_secure(unsigned int peri_id); 84 TEE_Result matrix_dt_get_id(const void *fdt, int node, unsigned int *id); 85 86 #endif /* #ifndef MATRIX_H */ 87