gxl_common.c 3.96 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
/*
 * Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
 *
 * 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
 ******************************************************************************/
#define MAP_NSDRAM0	MAP_REGION_FLAT(GXBB_NSDRAM0_BASE,		\
					GXBB_NSDRAM0_SIZE,		\
					MT_MEMORY | MT_RW | MT_NS)

#define MAP_NSDRAM1	MAP_REGION_FLAT(GXBB_NSDRAM1_BASE,		\
					GXBB_NSDRAM1_SIZE,		\
					MT_MEMORY | MT_RW | MT_NS)

#define MAP_SEC_DEVICE0	MAP_REGION_FLAT(GXBB_SEC_DEVICE0_BASE,		\
					GXBB_SEC_DEVICE0_SIZE,		\
					MT_DEVICE | MT_RW | MT_SECURE)

#define MAP_SEC_DEVICE1	MAP_REGION_FLAT(GXBB_SEC_DEVICE1_BASE,		\
					GXBB_SEC_DEVICE1_SIZE,		\
					MT_DEVICE | MT_RW | MT_SECURE)

#define MAP_TZRAM	MAP_REGION_FLAT(GXBB_TZRAM_BASE,		\
					GXBB_TZRAM_SIZE,		\
					MT_DEVICE | MT_RW | MT_SECURE)

#define MAP_SEC_DEVICE2	MAP_REGION_FLAT(GXBB_SEC_DEVICE2_BASE,		\
					GXBB_SEC_DEVICE2_SIZE,		\
					MT_DEVICE | MT_RW | MT_SECURE)

#define MAP_SEC_DEVICE3	MAP_REGION_FLAT(GXBB_SEC_DEVICE3_BASE,		\
					GXBB_SEC_DEVICE3_SIZE,		\
					MT_DEVICE | MT_RW | MT_SECURE)

static const mmap_region_t gxbb_mmap[] = {
	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.
 ******************************************************************************/
void gxbb_setup_page_tables(void)
{
#if IMAGE_BL31
	const mmap_region_t gxbb_bl_mmap[] = {
		MAP_BL31,
		MAP_BL_CODE,
		MAP_BL_RO_DATA,
#if USE_COHERENT_MEM
		MAP_BL_COHERENT,
#endif
		{0}
	};
#endif

	mmap_add(gxbb_bl_mmap);

	mmap_add(gxbb_mmap);

	init_xlat_tables();
}

/*******************************************************************************
 * Function that sets up the console
 ******************************************************************************/
static console_meson_t gxbb_console;

void gxbb_console_init(void)
{
	int rc = console_meson_register(GXBB_UART0_AO_BASE,
					GXBB_UART0_AO_CLK_IN_HZ,
					GXBB_UART_BAUDRATE,
					&gxbb_console);
	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();
	}

	console_set_scope(&gxbb_console.console,
			  CONSOLE_FLAG_BOOT | CONSOLE_FLAG_RUNTIME);
}

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

	val = mmio_read_32(GXBB_SYS_CPU_CFG7);
	val &= 0xFDFFFFFF;
	mmio_write_32(GXBB_SYS_CPU_CFG7, val);

	val = mmio_read_32(GXBB_AO_TIMESTAMP_CNTL);
	val &= 0xFFFFFE00;
	mmio_write_32(GXBB_AO_TIMESTAMP_CNTL, val);

	return GXBB_OSC24M_CLK_IN_HZ;
}