blob: 0878959c47bdbf3dbaa6001c416ba6589414b28d [file] [log] [blame]
Konstantin Porotchkinf69ec582018-06-07 18:31:14 +03001/*
2 * Copyright (C) 2018 Marvell International Ltd.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 * https://spdx.org/licenses
6 */
7
8#ifndef __PLAT_PM_TRACE_H
9#define __PLAT_PM_TRACE_H
10
11
12/*
13 * PM Trace is for Debug purpose only!!!
14 * It should not be enabled during System Run time
15 */
16#undef PM_TRACE_ENABLE
17
18
19/* trace entry time */
20struct pm_trace_entry {
21 /* trace entry time stamp */
22 unsigned int timestamp;
23
24 /* trace info
25 * [16-31] - API Trace Id
26 * [00-15] - API Step Id
27 */
28 unsigned int trace_info;
29};
30
31struct pm_trace_ctrl {
32 /* trace pointer - points to next free entry in trace cyclic queue */
33 unsigned int trace_pointer;
34
35 /* trace count - number of entries in the queue, clear upon read */
36 unsigned int trace_count;
37};
38
39/* trace size definition */
40#define AP_MSS_ATF_CORE_INFO_SIZE (256)
41#define AP_MSS_ATF_CORE_ENTRY_SIZE (8)
42#define AP_MSS_ATF_TRACE_SIZE_MASK (0xFF)
43
44/* trace address definition */
45#define AP_MSS_TIMER_BASE (MVEBU_REGS_BASE_MASK + 0x580110)
46
47#define AP_MSS_ATF_CORE_0_CTRL_BASE (MVEBU_REGS_BASE_MASK + 0x520140)
48#define AP_MSS_ATF_CORE_1_CTRL_BASE (MVEBU_REGS_BASE_MASK + 0x520150)
49#define AP_MSS_ATF_CORE_2_CTRL_BASE (MVEBU_REGS_BASE_MASK + 0x520160)
50#define AP_MSS_ATF_CORE_3_CTRL_BASE (MVEBU_REGS_BASE_MASK + 0x520170)
51#define AP_MSS_ATF_CORE_CTRL_BASE (AP_MSS_ATF_CORE_0_CTRL_BASE)
52
53#define AP_MSS_ATF_CORE_0_INFO_BASE (MVEBU_REGS_BASE_MASK + 0x5201C0)
54#define AP_MSS_ATF_CORE_0_INFO_TRACE (MVEBU_REGS_BASE_MASK + 0x5201C4)
55#define AP_MSS_ATF_CORE_1_INFO_BASE (MVEBU_REGS_BASE_MASK + 0x5209C0)
56#define AP_MSS_ATF_CORE_1_INFO_TRACE (MVEBU_REGS_BASE_MASK + 0x5209C4)
57#define AP_MSS_ATF_CORE_2_INFO_BASE (MVEBU_REGS_BASE_MASK + 0x5211C0)
58#define AP_MSS_ATF_CORE_2_INFO_TRACE (MVEBU_REGS_BASE_MASK + 0x5211C4)
59#define AP_MSS_ATF_CORE_3_INFO_BASE (MVEBU_REGS_BASE_MASK + 0x5219C0)
60#define AP_MSS_ATF_CORE_3_INFO_TRACE (MVEBU_REGS_BASE_MASK + 0x5219C4)
61#define AP_MSS_ATF_CORE_INFO_BASE (AP_MSS_ATF_CORE_0_INFO_BASE)
62
63/* trace info definition */
64#define TRACE_PWR_DOMAIN_OFF (0x10000)
65#define TRACE_PWR_DOMAIN_SUSPEND (0x20000)
66#define TRACE_PWR_DOMAIN_SUSPEND_FINISH (0x30000)
67#define TRACE_PWR_DOMAIN_ON (0x40000)
68#define TRACE_PWR_DOMAIN_ON_FINISH (0x50000)
69
70#define TRACE_PWR_DOMAIN_ON_MASK (0xFF)
71
72#ifdef PM_TRACE_ENABLE
73
74/* trace API definition */
75void pm_core_0_trace(unsigned int trace);
76void pm_core_1_trace(unsigned int trace);
77void pm_core_2_trace(unsigned int trace);
78void pm_core_3_trace(unsigned int trace);
79
80typedef void (*core_trace_func)(unsigned int);
81
82extern core_trace_func funcTbl[PLATFORM_CORE_COUNT];
83
84#define PM_TRACE(trace) funcTbl[plat_my_core_pos()](trace)
85
86#else
87
88#define PM_TRACE(trace)
89
90#endif
91
92/*******************************************************************************
93 * pm_trace_add
94 *
95 * DESCRIPTION: Add PM trace
96 ******************************************************************************
97 */
98void pm_trace_add(unsigned int trace, unsigned int core);
99
100#endif /* __PLAT_PM_TRACE_H */