• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2012-2022 Huawei Technologies Co., Ltd.
3  * Description: get and set static mem info.
4  *
5  * This software is licensed under the terms of the GNU General Public
6  * License version 2, as published by the Free Software Foundation, and
7  * may be copied, distributed, and modified under those terms.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  */
14 
15 #include "declare_static_ion.h"
16 #include <linux/of_reserved_mem.h>
17 #include <linux/of.h>
18 #include "tc_ns_log.h"
19 
20 static u64 g_ion_mem_addr;
21 static u64 g_ion_mem_size;
22 
supersonic_reserve_tee_mem(const struct reserved_mem * rmem)23 static int supersonic_reserve_tee_mem(const struct reserved_mem *rmem)
24 {
25 	if (rmem) {
26 		g_ion_mem_addr = rmem->base;
27 		g_ion_mem_size = rmem->size;
28 	} else {
29 		tloge("rmem is NULL\n");
30 	}
31 
32 	return 0;
33 }
34 
35 RESERVEDMEM_OF_DECLARE(supersonic, "platform-supersonic",
36 	supersonic_reserve_tee_mem);
37 
38 static u64 g_secfacedetect_mem_addr;
39 static u64 g_secfacedetect_mem_size;
40 
secfacedetect_reserve_tee_mem(const struct reserved_mem * rmem)41 static int secfacedetect_reserve_tee_mem(const struct reserved_mem *rmem)
42 {
43 	if (rmem) {
44 		g_secfacedetect_mem_addr = rmem->base;
45 		g_secfacedetect_mem_size = rmem->size;
46 	} else {
47 		tloge("secfacedetect_reserve_tee_mem mem is NULL\n");
48 	}
49 	return 0;
50 }
51 RESERVEDMEM_OF_DECLARE(secfacedetect, "platform-secfacedetect",
52 	secfacedetect_reserve_tee_mem);
53 
54 static u64 g_pt_addr = 0;
55 static u64 g_pt_size = 0;
56 
reserve_pt_mem(const struct reserved_mem * rmem)57 static int reserve_pt_mem(const struct reserved_mem *rmem)
58 {
59 	if (rmem) {
60 		g_pt_size = rmem->size;
61 		g_pt_addr = rmem->base;
62 		tloge("reserve pt mem is not NULL\n");
63 	} else {
64 		tloge("reserve pt mem is NULL\n");
65 	}
66 	return 0;
67 }
68 
69 RESERVEDMEM_OF_DECLARE(pagetable, "platform-ai-pagetable",
70 	reserve_pt_mem);
71 
72 static u64 g_pp_addr = 0;
73 static u64 g_pp_size = 0;
74 
reserve_pp_mem(const struct reserved_mem * rmem)75 static int reserve_pp_mem(const struct reserved_mem *rmem)
76 {
77 	if (rmem) {
78 		g_pp_addr = rmem->base;
79 		g_pp_size = rmem->size;
80 	} else {
81 		tloge("reserve pp mem is NULL\n");
82 	}
83 	return 0;
84 }
85 
86 RESERVEDMEM_OF_DECLARE(ai_running, "platform-ai-running",
87 	reserve_pp_mem);
88 
89 static u64 g_voiceid_addr = 0;
90 static u64 g_voiceid_size = 0;
voiceid_reserve_tee_mem(const struct reserved_mem * rmem)91 static int voiceid_reserve_tee_mem(const struct reserved_mem *rmem)
92 {
93 	if (rmem) {
94 		g_voiceid_addr = rmem->base;
95 		g_voiceid_size = rmem->size;
96 	} else {
97 		tloge("voiceid reserve tee mem is NULL\n");
98 	}
99 	return 0;
100 }
101 RESERVEDMEM_OF_DECLARE(voiceid, "platform-voiceid",
102 	voiceid_reserve_tee_mem);
103 
104 static u64 g_secos_ex_addr;
105 static u64 g_secos_ex_size;
secos_reserve_tee_mem(const struct reserved_mem * rmem)106 static int secos_reserve_tee_mem(const struct reserved_mem *rmem)
107 {
108 	if (rmem) {
109 		g_secos_ex_addr = rmem->base;
110 		g_secos_ex_size = rmem->size;
111 	} else {
112 		tloge("secos reserve tee mem is NULL\n");
113 	}
114 	return 0;
115 }
116 RESERVEDMEM_OF_DECLARE(secos_ex, "platform-secos-ex",
117 	secos_reserve_tee_mem);
118 
119 static u64 g_ion_ex_mem_addr;
120 static u64 g_ion_ex_mem_size;
supersonic_ex_reserve_tee_mem(const struct reserved_mem * rmem)121 static int supersonic_ex_reserve_tee_mem(const struct reserved_mem *rmem)
122 {
123 	if (rmem) {
124 		g_ion_ex_mem_addr = rmem->base;
125 		g_ion_ex_mem_size = rmem->size;
126 	} else {
127 		tloge("rmem is NULL\n");
128 	}
129 	return 0;
130 }
131 RESERVEDMEM_OF_DECLARE(supersonic_ex, "platform-supersonic-ex",
132 	supersonic_ex_reserve_tee_mem);
133 
set_mem_tag(struct register_ion_mem_tag * memtag,u64 addr,u64 size,uint32_t tag,uint32_t * pos)134 static void set_mem_tag(struct register_ion_mem_tag *memtag,
135 	u64 addr, u64 size, uint32_t tag, uint32_t *pos)
136 {
137 	memtag->memaddr[*pos] = addr;
138 	memtag->memsize[*pos] = size;
139 	memtag->memtag[*pos] = tag;
140 	(*pos)++;
141 }
142 
set_ion_mem_info(struct register_ion_mem_tag * memtag)143 void set_ion_mem_info(struct register_ion_mem_tag *memtag)
144 {
145 	uint32_t pos = 0;
146 	if(!memtag) {
147 		tloge("invalid memtag\n");
148 		return;
149 	}
150 
151 	tlogi("ion mem static reserved for tee face=%d, finger=%d,voiceid=%d,"
152 		"secos=%d,finger-ex=%d, pt_size= %d,pp_size=%d\n",
153 		(uint32_t)g_secfacedetect_mem_size, (uint32_t)g_ion_mem_size,
154 		(uint32_t)g_voiceid_size, (uint32_t)g_secos_ex_size,
155 		(uint32_t)g_ion_ex_mem_size, (uint32_t)g_pt_size,
156 		(uint32_t)g_pp_size);
157 
158 	if (g_ion_mem_addr != (u64)0 && g_ion_mem_size != (u64)0)
159 		set_mem_tag(memtag,g_ion_mem_addr, g_ion_mem_size, PP_MEM_TAG, &pos);
160 	if (g_secfacedetect_mem_addr != (u64)0 && g_secfacedetect_mem_size != (u64)0)
161 		set_mem_tag(memtag,g_secfacedetect_mem_addr, g_secfacedetect_mem_size, PP_MEM_TAG, &pos);
162 	if (g_voiceid_addr != (u64)0 && g_voiceid_size != (u64)0)
163 		set_mem_tag(memtag, g_voiceid_addr, g_voiceid_size, PP_MEM_TAG, &pos);
164 	if (g_secos_ex_addr != (u64)0 && g_secos_ex_size != (u64)0)
165 		set_mem_tag(memtag, g_secos_ex_addr, g_secos_ex_size, PP_MEM_TAG, &pos);
166 	if (g_pt_addr != (u64)0 && g_pt_size != (u64)0)
167 		set_mem_tag(memtag, g_pt_addr, g_pt_size, PT_MEM_TAG, &pos);
168 	if (g_pp_addr != (u64)0 && g_pp_size != (u64)0)
169 		set_mem_tag(memtag, g_pp_addr, g_pp_size, PRI_PP_MEM_TAG, &pos);
170 	if (g_ion_ex_mem_addr != (u64)0 && g_ion_ex_mem_size != (u64)0)
171 		set_mem_tag(memtag, g_ion_ex_mem_addr, g_ion_ex_mem_size, PP_MEM_TAG, &pos);
172 	/* here pos max is 7, memaddr[] has 10 positions, just 3 free */
173 	memtag->size = pos;
174 	return;
175 }