xref: /rk3399_ARM-atf/plat/common/aarch64/plat_common.c (revision 6eabbb07d7ee2aac3a8e8e734649c8eaa8385af6)
1 /*
2  * Copyright (c) 2014-2017, ARM Limited and Contributors. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #include <arch_helpers.h>
8 #include <assert.h>
9 #include <console.h>
10 #include <platform.h>
11 #include <xlat_mmu_helpers.h>
12 
13 /*
14  * The following platform setup functions are weakly defined. They
15  * provide typical implementations that may be re-used by multiple
16  * platforms but may also be overridden by a platform if required.
17  */
18 #pragma weak bl31_plat_enable_mmu
19 #pragma weak bl32_plat_enable_mmu
20 #pragma weak bl31_plat_runtime_setup
21 #if !ERROR_DEPRECATED
22 #pragma weak plat_get_syscnt_freq2
23 #endif /* ERROR_DEPRECATED */
24 
25 #if SDEI_SUPPORT
26 #pragma weak plat_sdei_handle_masked_trigger
27 #pragma weak plat_sdei_validate_entry_point
28 #endif
29 
30 void bl31_plat_enable_mmu(uint32_t flags)
31 {
32 	enable_mmu_el3(flags);
33 }
34 
35 void bl32_plat_enable_mmu(uint32_t flags)
36 {
37 	enable_mmu_el1(flags);
38 }
39 
40 void bl31_plat_runtime_setup(void)
41 {
42 #if MULTI_CONSOLE_API
43 	console_switch_state(CONSOLE_FLAG_RUNTIME);
44 #else
45 	console_uninit();
46 #endif
47 }
48 
49 #if !ENABLE_PLAT_COMPAT
50 /*
51  * Helper function for platform_get_pos() when platform compatibility is
52  * disabled. This is to enable SPDs using the older platform API to continue
53  * to work.
54  */
55 unsigned int platform_core_pos_helper(unsigned long mpidr)
56 {
57 	int idx = plat_core_pos_by_mpidr(mpidr);
58 	assert(idx >= 0);
59 	return idx;
60 }
61 #endif
62 
63 
64 #if !ERROR_DEPRECATED
65 unsigned int plat_get_syscnt_freq2(void)
66 {
67 	unsigned long long freq = plat_get_syscnt_freq();
68 
69 	assert(freq >> 32 == 0);
70 
71 	return (unsigned int)freq;
72 }
73 #endif /* ERROR_DEPRECATED */
74 
75 #if SDEI_SUPPORT
76 /*
77  * Function that handles spurious SDEI interrupts while events are masked.
78  */
79 void plat_sdei_handle_masked_trigger(uint64_t mpidr, unsigned int intr)
80 {
81 	WARN("Spurious SDEI interrupt %u on masked PE %lx\n", intr, mpidr);
82 }
83 
84 /*
85  * Default Function to validate SDEI entry point, which returns success.
86  * Platforms may override this with their own validation mechanism.
87  */
88 int plat_sdei_validate_entry_point(uintptr_t ep, unsigned int client_mode)
89 {
90 	return 0;
91 }
92 #endif
93