xref: /rk3399_ARM-atf/plat/marvell/armada/a8k/common/plat_pm_trace.c (revision 2939f68add3269bf0e67f7a25c4a1b404a25c616)
1a2847172SGrzegorz Jaszczyk /*
2a2847172SGrzegorz Jaszczyk  * Copyright (C) 2018 Marvell International Ltd.
3a2847172SGrzegorz Jaszczyk  *
4a2847172SGrzegorz Jaszczyk  * SPDX-License-Identifier:     BSD-3-Clause
5a2847172SGrzegorz Jaszczyk  * https://spdx.org/licenses
6a2847172SGrzegorz Jaszczyk  */
7a2847172SGrzegorz Jaszczyk 
8a2847172SGrzegorz Jaszczyk #include <lib/mmio.h>
9a2847172SGrzegorz Jaszczyk #include <plat/common/platform.h>
10a2847172SGrzegorz Jaszczyk 
11*718dbcacSKonstantin Porotchkin #if MSS_SUPPORT
12a2847172SGrzegorz Jaszczyk #include <mss_mem.h>
13a2847172SGrzegorz Jaszczyk 
14a2847172SGrzegorz Jaszczyk #ifdef PM_TRACE_ENABLE
15*718dbcacSKonstantin Porotchkin #include <plat_pm_trace.h>
16a2847172SGrzegorz Jaszczyk 
17a2847172SGrzegorz Jaszczyk /* core trace APIs */
18a2847172SGrzegorz Jaszczyk core_trace_func funcTbl[PLATFORM_CORE_COUNT] = {
19a2847172SGrzegorz Jaszczyk 	pm_core_0_trace,
20a2847172SGrzegorz Jaszczyk 	pm_core_1_trace,
21a2847172SGrzegorz Jaszczyk 	pm_core_2_trace,
22a2847172SGrzegorz Jaszczyk 	pm_core_3_trace};
23a2847172SGrzegorz Jaszczyk 
24a2847172SGrzegorz Jaszczyk /*****************************************************************************
25a2847172SGrzegorz Jaszczyk  * pm_core0_trace
26a2847172SGrzegorz Jaszczyk  * pm_core1_trace
27a2847172SGrzegorz Jaszczyk  * pm_core2_trace
28a2847172SGrzegorz Jaszczyk  * pm_core_3trace
29a2847172SGrzegorz Jaszczyk  *
30a2847172SGrzegorz Jaszczyk  * This functions set trace info into core cyclic trace queue in MSS SRAM
31a2847172SGrzegorz Jaszczyk  * memory space
32a2847172SGrzegorz Jaszczyk  *****************************************************************************
33a2847172SGrzegorz Jaszczyk  */
pm_core_0_trace(unsigned int trace)34a2847172SGrzegorz Jaszczyk void pm_core_0_trace(unsigned int trace)
35a2847172SGrzegorz Jaszczyk {
36a2847172SGrzegorz Jaszczyk 	unsigned int current_position_core_0 =
37a2847172SGrzegorz Jaszczyk 			mmio_read_32(AP_MSS_ATF_CORE_0_CTRL_BASE);
38a2847172SGrzegorz Jaszczyk 	mmio_write_32((AP_MSS_ATF_CORE_0_INFO_BASE  +
39a2847172SGrzegorz Jaszczyk 		     (current_position_core_0 * AP_MSS_ATF_CORE_ENTRY_SIZE)),
40a2847172SGrzegorz Jaszczyk 		     mmio_read_32(AP_MSS_TIMER_BASE));
41a2847172SGrzegorz Jaszczyk 	mmio_write_32((AP_MSS_ATF_CORE_0_INFO_TRACE +
42a2847172SGrzegorz Jaszczyk 		     (current_position_core_0 * AP_MSS_ATF_CORE_ENTRY_SIZE)),
43a2847172SGrzegorz Jaszczyk 		     trace);
44a2847172SGrzegorz Jaszczyk 	mmio_write_32(AP_MSS_ATF_CORE_0_CTRL_BASE,
45a2847172SGrzegorz Jaszczyk 		     ((current_position_core_0 + 1) &
46a2847172SGrzegorz Jaszczyk 		     AP_MSS_ATF_TRACE_SIZE_MASK));
47a2847172SGrzegorz Jaszczyk }
48a2847172SGrzegorz Jaszczyk 
pm_core_1_trace(unsigned int trace)49a2847172SGrzegorz Jaszczyk void pm_core_1_trace(unsigned int trace)
50a2847172SGrzegorz Jaszczyk {
51a2847172SGrzegorz Jaszczyk 	unsigned int current_position_core_1 =
52a2847172SGrzegorz Jaszczyk 			mmio_read_32(AP_MSS_ATF_CORE_1_CTRL_BASE);
53a2847172SGrzegorz Jaszczyk 	mmio_write_32((AP_MSS_ATF_CORE_1_INFO_BASE +
54a2847172SGrzegorz Jaszczyk 		     (current_position_core_1 * AP_MSS_ATF_CORE_ENTRY_SIZE)),
55a2847172SGrzegorz Jaszczyk 		     mmio_read_32(AP_MSS_TIMER_BASE));
56a2847172SGrzegorz Jaszczyk 	mmio_write_32((AP_MSS_ATF_CORE_1_INFO_TRACE +
57a2847172SGrzegorz Jaszczyk 		     (current_position_core_1 * AP_MSS_ATF_CORE_ENTRY_SIZE)),
58a2847172SGrzegorz Jaszczyk 		     trace);
59a2847172SGrzegorz Jaszczyk 	mmio_write_32(AP_MSS_ATF_CORE_1_CTRL_BASE,
60a2847172SGrzegorz Jaszczyk 		     ((current_position_core_1 + 1) &
61a2847172SGrzegorz Jaszczyk 		     AP_MSS_ATF_TRACE_SIZE_MASK));
62a2847172SGrzegorz Jaszczyk }
63a2847172SGrzegorz Jaszczyk 
pm_core_2_trace(unsigned int trace)64a2847172SGrzegorz Jaszczyk void pm_core_2_trace(unsigned int trace)
65a2847172SGrzegorz Jaszczyk {
66a2847172SGrzegorz Jaszczyk 	unsigned int current_position_core_2 =
67a2847172SGrzegorz Jaszczyk 			mmio_read_32(AP_MSS_ATF_CORE_2_CTRL_BASE);
68a2847172SGrzegorz Jaszczyk 	mmio_write_32((AP_MSS_ATF_CORE_2_INFO_BASE +
69a2847172SGrzegorz Jaszczyk 		     (current_position_core_2 * AP_MSS_ATF_CORE_ENTRY_SIZE)),
70a2847172SGrzegorz Jaszczyk 		     mmio_read_32(AP_MSS_TIMER_BASE));
71a2847172SGrzegorz Jaszczyk 	mmio_write_32((AP_MSS_ATF_CORE_2_INFO_TRACE +
72a2847172SGrzegorz Jaszczyk 		     (current_position_core_2 * AP_MSS_ATF_CORE_ENTRY_SIZE)),
73a2847172SGrzegorz Jaszczyk 		     trace);
74a2847172SGrzegorz Jaszczyk 	mmio_write_32(AP_MSS_ATF_CORE_2_CTRL_BASE,
75a2847172SGrzegorz Jaszczyk 		     ((current_position_core_2 + 1) &
76a2847172SGrzegorz Jaszczyk 		     AP_MSS_ATF_TRACE_SIZE_MASK));
77a2847172SGrzegorz Jaszczyk }
78a2847172SGrzegorz Jaszczyk 
pm_core_3_trace(unsigned int trace)79a2847172SGrzegorz Jaszczyk void pm_core_3_trace(unsigned int trace)
80a2847172SGrzegorz Jaszczyk {
81a2847172SGrzegorz Jaszczyk 	unsigned int current_position_core_3 =
82a2847172SGrzegorz Jaszczyk 			mmio_read_32(AP_MSS_ATF_CORE_3_CTRL_BASE);
83a2847172SGrzegorz Jaszczyk 	mmio_write_32((AP_MSS_ATF_CORE_3_INFO_BASE +
84a2847172SGrzegorz Jaszczyk 		     (current_position_core_3 * AP_MSS_ATF_CORE_ENTRY_SIZE)),
85a2847172SGrzegorz Jaszczyk 		     mmio_read_32(AP_MSS_TIMER_BASE));
86a2847172SGrzegorz Jaszczyk 	mmio_write_32((AP_MSS_ATF_CORE_3_INFO_TRACE +
87a2847172SGrzegorz Jaszczyk 		     (current_position_core_3 * AP_MSS_ATF_CORE_ENTRY_SIZE)),
88a2847172SGrzegorz Jaszczyk 		     trace);
89a2847172SGrzegorz Jaszczyk 	mmio_write_32(AP_MSS_ATF_CORE_3_CTRL_BASE,
90a2847172SGrzegorz Jaszczyk 		     ((current_position_core_3 + 1) &
91a2847172SGrzegorz Jaszczyk 		     AP_MSS_ATF_TRACE_SIZE_MASK));
92a2847172SGrzegorz Jaszczyk }
93a2847172SGrzegorz Jaszczyk #endif /* PM_TRACE_ENABLE */
94*718dbcacSKonstantin Porotchkin #endif /* MSS_SUPPORT */
95