1 /*
2 * Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7 #include <assert.h>
8 #include <errno.h>
9
10 #include <arch_helpers.h>
11 #include <common/bl_common.h>
12 #include <common/debug.h>
13 #include <drivers/delay_timer.h>
14 #include <lib/mmio.h>
15 #include <lib/xlat_tables/xlat_tables.h>
16 #include <plat/common/platform.h>
17
18 #include "hi3798cv200.h"
19 #include "platform_def.h"
20
21 #define MAP_DDR MAP_REGION_FLAT(DDR_BASE, \
22 DDR_SIZE, \
23 MT_MEMORY | MT_RW | MT_NS)
24
25 #define MAP_DEVICE MAP_REGION_FLAT(DEVICE_BASE, \
26 DEVICE_SIZE, \
27 MT_DEVICE | MT_RW | MT_SECURE)
28
29 #define MAP_TSP_MEM MAP_REGION_FLAT(TSP_SEC_MEM_BASE, \
30 TSP_SEC_MEM_SIZE, \
31 MT_MEMORY | MT_RW | MT_SECURE)
32
33 #ifdef SPD_opteed
34 #define MAP_OPTEE_PAGEABLE MAP_REGION_FLAT( \
35 POPLAR_OPTEE_PAGEABLE_LOAD_BASE, \
36 POPLAR_OPTEE_PAGEABLE_LOAD_SIZE, \
37 MT_MEMORY | MT_RW | MT_SECURE)
38 #endif
39
40 static const mmap_region_t poplar_mmap[] = {
41 MAP_DDR,
42 MAP_DEVICE,
43 MAP_TSP_MEM,
44 #ifdef SPD_opteed
45 MAP_OPTEE_PAGEABLE,
46 #endif
47 {0}
48 };
49
50 #define DEFINE_CONFIGURE_MMU_EL(_el) \
51 void plat_configure_mmu_el##_el(unsigned long total_base, \
52 unsigned long total_size, \
53 unsigned long ro_start, \
54 unsigned long ro_limit, \
55 unsigned long coh_start, \
56 unsigned long coh_limit) \
57 { \
58 mmap_add_region(total_base, total_base, \
59 total_size, \
60 MT_MEMORY | MT_RW | MT_SECURE); \
61 mmap_add_region(ro_start, ro_start, \
62 ro_limit - ro_start, \
63 MT_MEMORY | MT_RO | MT_SECURE); \
64 mmap_add_region(coh_start, coh_start, \
65 coh_limit - coh_start, \
66 MT_DEVICE | MT_RW | MT_SECURE); \
67 mmap_add(poplar_mmap); \
68 init_xlat_tables(); \
69 \
70 enable_mmu_el##_el(0); \
71 }
72
73 DEFINE_CONFIGURE_MMU_EL(3)
74 DEFINE_CONFIGURE_MMU_EL(1)
75
plat_get_syscnt_freq2(void)76 unsigned int plat_get_syscnt_freq2(void)
77 {
78 return SYS_COUNTER_FREQ_IN_TICKS;
79 }
80