1*cdb8c52fSCarlo Caione /*
2*cdb8c52fSCarlo Caione * Copyright (c) 2019, ARM Limited and Contributors. All rights reserved.
3*cdb8c52fSCarlo Caione *
4*cdb8c52fSCarlo Caione * SPDX-License-Identifier: BSD-3-Clause
5*cdb8c52fSCarlo Caione */
6*cdb8c52fSCarlo Caione
7*cdb8c52fSCarlo Caione #include <assert.h>
8*cdb8c52fSCarlo Caione #include <bl31/interrupt_mgmt.h>
9*cdb8c52fSCarlo Caione #include <common/bl_common.h>
10*cdb8c52fSCarlo Caione #include <common/ep_info.h>
11*cdb8c52fSCarlo Caione #include <lib/mmio.h>
12*cdb8c52fSCarlo Caione #include <lib/xlat_tables/xlat_tables_v2.h>
13*cdb8c52fSCarlo Caione #include <platform_def.h>
14*cdb8c52fSCarlo Caione #include <stdint.h>
15*cdb8c52fSCarlo Caione
16*cdb8c52fSCarlo Caione /*******************************************************************************
17*cdb8c52fSCarlo Caione * Platform memory map regions
18*cdb8c52fSCarlo Caione ******************************************************************************/
19*cdb8c52fSCarlo Caione #define MAP_NSDRAM0 MAP_REGION_FLAT(AML_NSDRAM0_BASE, \
20*cdb8c52fSCarlo Caione AML_NSDRAM0_SIZE, \
21*cdb8c52fSCarlo Caione MT_MEMORY | MT_RW | MT_NS)
22*cdb8c52fSCarlo Caione
23*cdb8c52fSCarlo Caione #define MAP_NS_SHARE_MEM MAP_REGION_FLAT(AML_NS_SHARE_MEM_BASE, \
24*cdb8c52fSCarlo Caione AML_NS_SHARE_MEM_SIZE, \
25*cdb8c52fSCarlo Caione MT_MEMORY | MT_RW | MT_NS)
26*cdb8c52fSCarlo Caione
27*cdb8c52fSCarlo Caione #define MAP_SEC_SHARE_MEM MAP_REGION_FLAT(AML_SEC_SHARE_MEM_BASE, \
28*cdb8c52fSCarlo Caione AML_SEC_SHARE_MEM_SIZE, \
29*cdb8c52fSCarlo Caione MT_MEMORY | MT_RW | MT_SECURE)
30*cdb8c52fSCarlo Caione
31*cdb8c52fSCarlo Caione #define MAP_SEC_DEVICE0 MAP_REGION_FLAT(AML_SEC_DEVICE0_BASE, \
32*cdb8c52fSCarlo Caione AML_SEC_DEVICE0_SIZE, \
33*cdb8c52fSCarlo Caione MT_DEVICE | MT_RW)
34*cdb8c52fSCarlo Caione
35*cdb8c52fSCarlo Caione #define MAP_HDCP_RX MAP_REGION_FLAT(AML_HDCP_RX_BASE, \
36*cdb8c52fSCarlo Caione AML_HDCP_RX_SIZE, \
37*cdb8c52fSCarlo Caione MT_DEVICE | MT_RW | MT_SECURE)
38*cdb8c52fSCarlo Caione
39*cdb8c52fSCarlo Caione #define MAP_HDCP_TX MAP_REGION_FLAT(AML_HDCP_TX_BASE, \
40*cdb8c52fSCarlo Caione AML_HDCP_TX_SIZE, \
41*cdb8c52fSCarlo Caione MT_DEVICE | MT_RW | MT_SECURE)
42*cdb8c52fSCarlo Caione
43*cdb8c52fSCarlo Caione #define MAP_GIC_DEVICE MAP_REGION_FLAT(AML_GIC_DEVICE_BASE, \
44*cdb8c52fSCarlo Caione AML_GIC_DEVICE_SIZE, \
45*cdb8c52fSCarlo Caione MT_DEVICE | MT_RW | MT_SECURE)
46*cdb8c52fSCarlo Caione
47*cdb8c52fSCarlo Caione #define MAP_SEC_DEVICE1 MAP_REGION_FLAT(AML_SEC_DEVICE1_BASE, \
48*cdb8c52fSCarlo Caione AML_SEC_DEVICE1_SIZE, \
49*cdb8c52fSCarlo Caione MT_DEVICE | MT_RW | MT_SECURE)
50*cdb8c52fSCarlo Caione
51*cdb8c52fSCarlo Caione #define MAP_SEC_DEVICE2 MAP_REGION_FLAT(AML_SEC_DEVICE2_BASE, \
52*cdb8c52fSCarlo Caione AML_SEC_DEVICE2_SIZE, \
53*cdb8c52fSCarlo Caione MT_DEVICE | MT_RW | MT_SECURE)
54*cdb8c52fSCarlo Caione
55*cdb8c52fSCarlo Caione #define MAP_TZRAM MAP_REGION_FLAT(AML_TZRAM_BASE, \
56*cdb8c52fSCarlo Caione AML_TZRAM_SIZE, \
57*cdb8c52fSCarlo Caione MT_DEVICE | MT_RW | MT_SECURE)
58*cdb8c52fSCarlo Caione
59*cdb8c52fSCarlo Caione static const mmap_region_t g12a_mmap[] = {
60*cdb8c52fSCarlo Caione MAP_NSDRAM0,
61*cdb8c52fSCarlo Caione MAP_NS_SHARE_MEM,
62*cdb8c52fSCarlo Caione MAP_SEC_SHARE_MEM,
63*cdb8c52fSCarlo Caione MAP_SEC_DEVICE0,
64*cdb8c52fSCarlo Caione MAP_HDCP_RX,
65*cdb8c52fSCarlo Caione MAP_HDCP_TX,
66*cdb8c52fSCarlo Caione MAP_GIC_DEVICE,
67*cdb8c52fSCarlo Caione MAP_SEC_DEVICE1,
68*cdb8c52fSCarlo Caione MAP_SEC_DEVICE2,
69*cdb8c52fSCarlo Caione MAP_TZRAM,
70*cdb8c52fSCarlo Caione {0}
71*cdb8c52fSCarlo Caione };
72*cdb8c52fSCarlo Caione
73*cdb8c52fSCarlo Caione /*******************************************************************************
74*cdb8c52fSCarlo Caione * Per-image regions
75*cdb8c52fSCarlo Caione ******************************************************************************/
76*cdb8c52fSCarlo Caione #define MAP_BL31 MAP_REGION_FLAT(BL31_BASE, \
77*cdb8c52fSCarlo Caione BL31_END - BL31_BASE, \
78*cdb8c52fSCarlo Caione MT_MEMORY | MT_RW | MT_SECURE)
79*cdb8c52fSCarlo Caione
80*cdb8c52fSCarlo Caione #define MAP_BL_CODE MAP_REGION_FLAT(BL_CODE_BASE, \
81*cdb8c52fSCarlo Caione BL_CODE_END - BL_CODE_BASE, \
82*cdb8c52fSCarlo Caione MT_CODE | MT_SECURE)
83*cdb8c52fSCarlo Caione
84*cdb8c52fSCarlo Caione #define MAP_BL_RO_DATA MAP_REGION_FLAT(BL_RO_DATA_BASE, \
85*cdb8c52fSCarlo Caione BL_RO_DATA_END - BL_RO_DATA_BASE, \
86*cdb8c52fSCarlo Caione MT_RO_DATA | MT_SECURE)
87*cdb8c52fSCarlo Caione
88*cdb8c52fSCarlo Caione #define MAP_BL_COHERENT MAP_REGION_FLAT(BL_COHERENT_RAM_BASE, \
89*cdb8c52fSCarlo Caione BL_COHERENT_RAM_END - BL_COHERENT_RAM_BASE, \
90*cdb8c52fSCarlo Caione MT_DEVICE | MT_RW | MT_SECURE)
91*cdb8c52fSCarlo Caione
92*cdb8c52fSCarlo Caione /*******************************************************************************
93*cdb8c52fSCarlo Caione * Function that sets up the translation tables.
94*cdb8c52fSCarlo Caione ******************************************************************************/
aml_setup_page_tables(void)95*cdb8c52fSCarlo Caione void aml_setup_page_tables(void)
96*cdb8c52fSCarlo Caione {
97*cdb8c52fSCarlo Caione #if IMAGE_BL31
98*cdb8c52fSCarlo Caione const mmap_region_t g12a_bl_mmap[] = {
99*cdb8c52fSCarlo Caione MAP_BL31,
100*cdb8c52fSCarlo Caione MAP_BL_CODE,
101*cdb8c52fSCarlo Caione MAP_BL_RO_DATA,
102*cdb8c52fSCarlo Caione #if USE_COHERENT_MEM
103*cdb8c52fSCarlo Caione MAP_BL_COHERENT,
104*cdb8c52fSCarlo Caione #endif
105*cdb8c52fSCarlo Caione {0}
106*cdb8c52fSCarlo Caione };
107*cdb8c52fSCarlo Caione #endif
108*cdb8c52fSCarlo Caione
109*cdb8c52fSCarlo Caione mmap_add(g12a_bl_mmap);
110*cdb8c52fSCarlo Caione
111*cdb8c52fSCarlo Caione mmap_add(g12a_mmap);
112*cdb8c52fSCarlo Caione
113*cdb8c52fSCarlo Caione init_xlat_tables();
114*cdb8c52fSCarlo Caione }
115*cdb8c52fSCarlo Caione
116*cdb8c52fSCarlo Caione /*******************************************************************************
117*cdb8c52fSCarlo Caione * Function that returns the system counter frequency
118*cdb8c52fSCarlo Caione ******************************************************************************/
plat_get_syscnt_freq2(void)119*cdb8c52fSCarlo Caione unsigned int plat_get_syscnt_freq2(void)
120*cdb8c52fSCarlo Caione {
121*cdb8c52fSCarlo Caione mmio_clrbits_32(AML_SYS_CPU_CFG7, ~0xFDFFFFFF);
122*cdb8c52fSCarlo Caione mmio_clrbits_32(AML_AO_TIMESTAMP_CNTL, ~0xFFFFFE00);
123*cdb8c52fSCarlo Caione
124*cdb8c52fSCarlo Caione return AML_OSC24M_CLK_IN_HZ;
125*cdb8c52fSCarlo Caione }
126