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)68static 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