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