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 20static u64 g_ion_mem_addr; 21static u64 g_ion_mem_size; 22 23static 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 35RESERVEDMEM_OF_DECLARE(supersonic, "platform-supersonic", 36 supersonic_reserve_tee_mem); 37 38static u64 g_secfacedetect_mem_addr; 39static u64 g_secfacedetect_mem_size; 40 41static 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} 51RESERVEDMEM_OF_DECLARE(secfacedetect, "platform-secfacedetect", 52 secfacedetect_reserve_tee_mem); 53 54static u64 g_pt_addr = 0; 55static u64 g_pt_size = 0; 56 57static 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 69RESERVEDMEM_OF_DECLARE(pagetable, "platform-ai-pagetable", 70 reserve_pt_mem); 71 72static u64 g_pp_addr = 0; 73static u64 g_pp_size = 0; 74 75static 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 86RESERVEDMEM_OF_DECLARE(ai_running, "platform-ai-running", 87 reserve_pp_mem); 88 89static u64 g_voiceid_addr = 0; 90static u64 g_voiceid_size = 0; 91static 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} 101RESERVEDMEM_OF_DECLARE(voiceid, "platform-voiceid", 102 voiceid_reserve_tee_mem); 103 104static u64 g_secos_ex_addr; 105static u64 g_secos_ex_size; 106static 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} 116RESERVEDMEM_OF_DECLARE(secos_ex, "platform-secos-ex", 117 secos_reserve_tee_mem); 118 119static u64 g_ion_ex_mem_addr; 120static u64 g_ion_ex_mem_size; 121static 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} 131RESERVEDMEM_OF_DECLARE(supersonic_ex, "platform-supersonic-ex", 132 supersonic_ex_reserve_tee_mem); 133 134static 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 143void 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}