xref: /optee_os/core/arch/arm/plat-sam/matrix.h (revision 45febb458e2a4ad5496bc1b287db835d526a769b)
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