• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 Institute of Parallel And Distributed Systems (IPADS), Shanghai Jiao Tong University (SJTU)
3  * Licensed under the Mulan PSL v2.
4  * You can use this software according to the terms and conditions of the Mulan PSL v2.
5  * You may obtain a copy of Mulan PSL v2 at:
6  *     http://license.coscl.org.cn/MulanPSL2
7  * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
8  * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
9  * PURPOSE.
10  * See the Mulan PSL v2 for more details.
11  */
12 #include <machine.h>
13 #include <mm/mm.h>
14 #include <common/macro.h>
15 #include <common/types.h>
16 #include <arch/tools.h>
17 #include <rk_atags.h>
18 
secure_ddr_region(int rgn,paddr_t st,paddr_t ed)19 static int secure_ddr_region(int rgn, paddr_t st, paddr_t ed)
20 {
21     vaddr_t fw_base = phys_to_virt(0xFE200000);
22     u32 bitmap;
23 
24     put32(fw_base + rgn * 4, (st >> 17) | ((ed - 1) >> 17 << 16));
25     bitmap = get32(fw_base + 0x80);
26     bitmap |= (1U << rgn);
27     put32(fw_base + 0x80, bitmap);
28 
29     return 0;
30 }
31 
parse_mem_map(void * info)32 void parse_mem_map(void *info)
33 {
34     extern char img_end;
35 
36     secure_ddr_region(1, get_tzdram_start(), get_tzdram_end());
37 
38     physmem_map_num = 1;
39     physmem_map[0][0] = ROUND_UP((paddr_t)&img_end, PAGE_SIZE);
40     physmem_map[0][1] = ROUND_DOWN(get_tzdram_end(), PAGE_SIZE);
41     kinfo("[ChCore] physmem_map: [0x%lx, 0x%lx)\n",
42           physmem_map[0][0],
43           physmem_map[0][1]);
44 
45     struct tag_tos_mem tag_tos_mem;
46     memset(&tag_tos_mem, 0, sizeof(tag_tos_mem));
47     memcpy(tag_tos_mem.tee_mem.name, "tee.mem", 8);
48     tag_tos_mem.tee_mem.phy_addr = get_tzdram_start();
49     tag_tos_mem.tee_mem.size = get_tzdram_end() - get_tzdram_start();
50     tag_tos_mem.tee_mem.flags = 1;
51     memcpy(tag_tos_mem.drm_mem.name, "drm.mem", 8);
52     tag_tos_mem.drm_mem.phy_addr = 0;
53     tag_tos_mem.drm_mem.size = 0;
54     tag_tos_mem.drm_mem.flags = 0;
55     tag_tos_mem.version = 65536;
56     set_tos_mem_tag(&tag_tos_mem);
57 }
58