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