• 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 <common/types.h>
14 #include <arch/mmu.h>
15 
16 #define TEEOS_CFG_OFFSET 0x8000
17 
18 #define MAX_PROTECTED_REGIONS 16
19 #define GICR_MAX_NUM          8
20 
21 typedef struct p_reg {
22     u64 start;
23     u64 end;
24 } p_region_t;
25 
26 struct gic_config_t {
27     char version;
28     union {
29         struct v2_t {
30             p_region_t dist;
31             p_region_t contr;
32         } v2;
33         struct v3_t {
34             p_region_t dist;
35             u32 redist_num;
36             u32 redist_stride;
37             p_region_t redist[GICR_MAX_NUM];
38         } v3;
39     };
40 };
41 
42 struct platform_info {
43     u64 plat_cfg_size;
44     u64 phys_region_size;
45     u64 phys_region_start;
46     u64 uart_addr;
47     struct gic_config_t gic_config;
48     struct extend_datas_t {
49         u64 extend_length;
50         char extend_paras[0];
51     } extend_datas;
52 };
53 
54 static struct platform_info *teeos_cfg;
55 
teeos_cfg_init(paddr_t start_pa)56 void teeos_cfg_init(paddr_t start_pa)
57 {
58     teeos_cfg = (void *)phys_to_virt(start_pa - TEEOS_CFG_OFFSET);
59 }
60 
get_tzdram_start(void)61 paddr_t get_tzdram_start(void)
62 {
63     return teeos_cfg->phys_region_start;
64 }
65 
get_tzdram_end(void)66 paddr_t get_tzdram_end(void)
67 {
68     return teeos_cfg->phys_region_start + teeos_cfg->phys_region_size;
69 }
70 
get_gicd_base(void)71 paddr_t get_gicd_base(void)
72 {
73     return teeos_cfg->gic_config.v3.dist.start;
74 }
75 
get_uart_base(void)76 paddr_t get_uart_base(void)
77 {
78     return teeos_cfg->uart_addr;
79 }
80