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