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)56void 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)61paddr_t get_tzdram_start(void) 62 { 63 return teeos_cfg->phys_region_start; 64 } 65 get_tzdram_end(void)66paddr_t get_tzdram_end(void) 67 { 68 return teeos_cfg->phys_region_start + teeos_cfg->phys_region_size; 69 } 70 get_gicd_base(void)71paddr_t get_gicd_base(void) 72 { 73 return teeos_cfg->gic_config.v3.dist.start; 74 } 75 get_uart_base(void)76paddr_t get_uart_base(void) 77 { 78 return teeos_cfg->uart_addr; 79 } 80