gxl_common.c 3.93 KB
Newer Older
1
/*
2
 * Copyright (c) 2018-2019, ARM Limited and Contributors. All rights reserved.
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#include <assert.h>
#include <common/bl_common.h>
#include <common/debug.h>
#include <common/ep_info.h>
#include <bl31/interrupt_mgmt.h>
#include <meson_console.h>
#include <lib/mmio.h>
#include <platform_def.h>
#include <stdint.h>
#include <lib/xlat_tables/xlat_tables_v2.h>

/*******************************************************************************
 * Platform memory map regions
 ******************************************************************************/
21
22
#define MAP_NSDRAM0	MAP_REGION_FLAT(AML_NSDRAM0_BASE,		\
					AML_NSDRAM0_SIZE,		\
23
24
					MT_MEMORY | MT_RW | MT_NS)

25
26
#define MAP_NSDRAM1	MAP_REGION_FLAT(AML_NSDRAM1_BASE,		\
					AML_NSDRAM1_SIZE,		\
27
28
					MT_MEMORY | MT_RW | MT_NS)

29
30
#define MAP_SEC_DEVICE0	MAP_REGION_FLAT(AML_SEC_DEVICE0_BASE,		\
					AML_SEC_DEVICE0_SIZE,		\
31
32
					MT_DEVICE | MT_RW | MT_SECURE)

33
34
#define MAP_SEC_DEVICE1	MAP_REGION_FLAT(AML_SEC_DEVICE1_BASE,		\
					AML_SEC_DEVICE1_SIZE,		\
35
36
					MT_DEVICE | MT_RW | MT_SECURE)

37
38
#define MAP_TZRAM	MAP_REGION_FLAT(AML_TZRAM_BASE,		\
					AML_TZRAM_SIZE,		\
39
40
					MT_DEVICE | MT_RW | MT_SECURE)

41
42
#define MAP_SEC_DEVICE2	MAP_REGION_FLAT(AML_SEC_DEVICE2_BASE,		\
					AML_SEC_DEVICE2_SIZE,		\
43
44
					MT_DEVICE | MT_RW | MT_SECURE)

45
46
#define MAP_SEC_DEVICE3	MAP_REGION_FLAT(AML_SEC_DEVICE3_BASE,		\
					AML_SEC_DEVICE3_SIZE,		\
47
48
					MT_DEVICE | MT_RW | MT_SECURE)

49
static const mmap_region_t gxl_mmap[] = {
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
	MAP_NSDRAM0,
	MAP_NSDRAM1,
	MAP_SEC_DEVICE0,
	MAP_SEC_DEVICE1,
	MAP_TZRAM,
	MAP_SEC_DEVICE2,
	MAP_SEC_DEVICE3,
	{0}
};

/*******************************************************************************
 * Per-image regions
 ******************************************************************************/
#define MAP_BL31	MAP_REGION_FLAT(BL31_BASE,			\
				BL31_END - BL31_BASE,			\
				MT_MEMORY | MT_RW | MT_SECURE)

#define MAP_BL_CODE	MAP_REGION_FLAT(BL_CODE_BASE,			\
				BL_CODE_END - BL_CODE_BASE,		\
				MT_CODE | MT_SECURE)

#define MAP_BL_RO_DATA	MAP_REGION_FLAT(BL_RO_DATA_BASE,		\
				BL_RO_DATA_END - BL_RO_DATA_BASE,	\
				MT_RO_DATA | MT_SECURE)

#define MAP_BL_COHERENT	MAP_REGION_FLAT(BL_COHERENT_RAM_BASE,		\
				BL_COHERENT_RAM_END - BL_COHERENT_RAM_BASE, \
				MT_DEVICE | MT_RW | MT_SECURE)

/*******************************************************************************
 * Function that sets up the translation tables.
 ******************************************************************************/
82
void aml_setup_page_tables(void)
83
84
{
#if IMAGE_BL31
85
	const mmap_region_t gxl_bl_mmap[] = {
86
87
88
89
90
91
92
93
94
95
		MAP_BL31,
		MAP_BL_CODE,
		MAP_BL_RO_DATA,
#if USE_COHERENT_MEM
		MAP_BL_COHERENT,
#endif
		{0}
	};
#endif

96
	mmap_add(gxl_bl_mmap);
97

98
	mmap_add(gxl_mmap);
99
100
101
102
103
104
105

	init_xlat_tables();
}

/*******************************************************************************
 * Function that sets up the console
 ******************************************************************************/
106
static console_meson_t gxl_console;
107

108
void aml_console_init(void)
109
{
110
111
112
	int rc = console_meson_register(AML_UART0_AO_BASE,
					AML_UART0_AO_CLK_IN_HZ,
					AML_UART_BAUDRATE,
113
					&gxl_console);
114
115
116
117
118
119
120
121
122
	if (rc == 0) {
		/*
		 * The crash console doesn't use the multi console API, it uses
		 * the core console functions directly. It is safe to call panic
		 * and let it print debug information.
		 */
		panic();
	}

123
	console_set_scope(&gxl_console.console,
124
125
126
127
128
129
130
131
132
133
			  CONSOLE_FLAG_BOOT | CONSOLE_FLAG_RUNTIME);
}

/*******************************************************************************
 * Function that returns the system counter frequency
 ******************************************************************************/
unsigned int plat_get_syscnt_freq2(void)
{
	uint32_t val;

134
	val = mmio_read_32(AML_SYS_CPU_CFG7);
135
	val &= 0xFDFFFFFF;
136
	mmio_write_32(AML_SYS_CPU_CFG7, val);
137

138
	val = mmio_read_32(AML_AO_TIMESTAMP_CNTL);
139
	val &= 0xFFFFFE00;
140
	mmio_write_32(AML_AO_TIMESTAMP_CNTL, val);
141

142
	return AML_OSC24M_CLK_IN_HZ;
143
}