xref: /rk3399_ARM-atf/plat/amlogic/g12a/g12a_common.c (revision f7fa5289176068d0d54cd0b218eae3394b47f8c1)
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