xref: /optee_os/core/drivers/crypto/caam/include/caam_sm.h (revision dc6563d7d6a4a1ab83e506aa101819a88efe418c)
1 /* SPDX-License-Identifier: BSD-2-Clause */
2 /*
3  * Copyright 2018-2019, 2023 NXP
4  */
5 #ifndef __CAAM_SM_H__
6 #define __CAAM_SM_H__
7 
8 #include "caam_jr.h"
9 #include "drivers/caam_extension.h"
10 
11 /*
12  * Secure Memory data
13  */
14 struct caam_sm_page_addr {
15 	paddr_t paddr; /* Secure memory base address */
16 	vaddr_t vaddr; /* Secure memory virtual base address */
17 };
18 
19 /*
20  * Secure Memory Page(s)/Partition definition
21  */
22 struct caam_sm_page_desc {
23 	unsigned int partition; /* Partition number */
24 	unsigned int page; /* Page number */
25 	unsigned int page_count; /* Number of pages used */
26 };
27 
28 #ifdef CFG_NXP_CAAM_SM_DRV
29 /*
30  * CAAM Secure memory module initialization
31  *
32  * @jrcfg  JR configuration structure
33  */
34 enum caam_status caam_sm_init(struct caam_jrcfg *jrcfg);
35 
36 /*
37  * Allocate page(s) to one partition in the CAAM secure memory.
38  * Reset the group access and permission access to remove restrictions.
39  *
40  * @sm_page_descriptor  Secure Memory page
41  * @sm_page_addr [out]  Secure Memory page addresses
42  */
43 enum caam_status
44 caam_sm_alloc(const struct caam_sm_page_desc *sm_page_descriptor,
45 	      struct caam_sm_page_addr *sm_page_addr);
46 
47 /*
48  * Set the Secure Memory group 1 and group 2 access rights to allocated
49  * partition and lock configuration.
50  *
51  * @page_desc  Secure Memory page
52  * @grp1_perm  Group 1 Permission value
53  * @grp2_perm  Group 2 Permission value
54  */
55 enum caam_status
56 caam_sm_set_access_perm(const struct caam_sm_page_desc *page_desc,
57 			unsigned int grp1_perm, unsigned int grp2_perm);
58 
59 /*
60  * Free a Secure Memory pages
61  *
62  * @sm_page_descriptor    Secure Memory page
63  */
64 enum caam_status
65 caam_sm_free(const struct caam_sm_page_desc *sm_page_descriptor);
66 
67 #else
caam_sm_init(struct caam_jrcfg * jrcfg __unused)68 static inline enum caam_status caam_sm_init(struct caam_jrcfg *jrcfg __unused)
69 {
70 	return CAAM_NO_ERROR;
71 }
72 #endif /* CFG_NXP_CAAM_SM_DRV */
73 #endif /* __CAAM_SM_H__ */
74