xref: /rk3399_ARM-atf/lib/cpus/aarch64/neoverse_n1_pubsub.c (revision 4c700c1563aff7b51df95f17e952e050b9b4e37f)
1b04ea14bSJohn Tsichritzis /*
2*4c700c15SGovindraj Raja  * Copyright (c) 2018-2019, Arm Limited and Contributors. All rights reserved.
3b04ea14bSJohn Tsichritzis  *
4b04ea14bSJohn Tsichritzis  * SPDX-License-Identifier: BSD-3-Clause
5b04ea14bSJohn Tsichritzis  */
6b04ea14bSJohn Tsichritzis 
7da6d75a0SJohn Tsichritzis #include <neoverse_n1.h>
8b04ea14bSJohn Tsichritzis #include <cpuamu.h>
9b04ea14bSJohn Tsichritzis #include <lib/el3_runtime/pubsub_events.h>
10b04ea14bSJohn Tsichritzis 
11da6d75a0SJohn Tsichritzis static void *neoverse_n1_context_save(const void *arg)
12b04ea14bSJohn Tsichritzis {
13da6d75a0SJohn Tsichritzis 	if (midr_match(NEOVERSE_N1_MIDR) != 0)
14da6d75a0SJohn Tsichritzis 		cpuamu_context_save(NEOVERSE_N1_AMU_NR_COUNTERS);
15b04ea14bSJohn Tsichritzis 
16b04ea14bSJohn Tsichritzis 	return (void *)0;
17b04ea14bSJohn Tsichritzis }
18b04ea14bSJohn Tsichritzis 
19da6d75a0SJohn Tsichritzis static void *neoverse_n1_context_restore(const void *arg)
20b04ea14bSJohn Tsichritzis {
21da6d75a0SJohn Tsichritzis 	if (midr_match(NEOVERSE_N1_MIDR) != 0)
22da6d75a0SJohn Tsichritzis 		cpuamu_context_restore(NEOVERSE_N1_AMU_NR_COUNTERS);
23b04ea14bSJohn Tsichritzis 
24b04ea14bSJohn Tsichritzis 	return (void *)0;
25b04ea14bSJohn Tsichritzis }
26b04ea14bSJohn Tsichritzis 
27da6d75a0SJohn Tsichritzis SUBSCRIBE_TO_EVENT(psci_suspend_pwrdown_start, neoverse_n1_context_save);
28da6d75a0SJohn Tsichritzis SUBSCRIBE_TO_EVENT(psci_suspend_pwrdown_finish, neoverse_n1_context_restore);
29