ARM: tegra: pcie: Remove dock detect variable
[linux-3.10.git] / arch / arm / mach-tegra / tegra_ptm.h
1 /*
2  * arch/arm/mach-tegra/tegra_ptm.h
3  *
4  * Copyright (c) 2012-2013, NVIDIA CORPORATION.  All rights reserved.
5  *
6  * This program is free software; you can redistribute it and/or modify it
7  * under the terms and conditions of the GNU General Public License,
8  * version 2, as published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope it will be useful, but WITHOUT
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
13  * more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
17  */
18
19 #ifndef __MACH_TEGRA_PTM_H
20 #define __MACH_TEGRA_PTM_H
21
22 #define PTM0_BASE       (TEGRA_CSITE_BASE + 0x1C000)
23 #define PTM1_BASE       (TEGRA_CSITE_BASE + 0x1D000)
24 #define PTM2_BASE       (TEGRA_CSITE_BASE + 0x1E000)
25 #define PTM3_BASE       (TEGRA_CSITE_BASE + 0x1F000)
26 #define FUNNEL_BASE     (TEGRA_CSITE_BASE + 0x4000)
27 #define TPIU_BASE       (TEGRA_CSITE_BASE + 0x3000)
28 #define ETB_BASE        (TEGRA_CSITE_BASE + 0x1000)
29
30 #define TRACER_ACCESSED         BIT(0)
31 #define TRACER_RUNNING          BIT(1)
32 #define TRACER_CYCLE_ACC        BIT(2)
33 #define TRACER_TRACE_DATA       BIT(3)
34 #define TRACER_TIMESTAMP        BIT(4)
35 #define TRACER_BRANCHOUTPUT     BIT(5)
36 #define TRACER_RETURN_STACK     BIT(6)
37
38 #define TRACER_TIMEOUT 10000
39
40 /*
41  * CoreSight Management Register Offsets:
42  * These registers offsets are same for both ETB, PTM, FUNNEL and TPIU
43  */
44 #define CORESIGHT_LOCKACCESS    0xfb0
45 #define CORESIGHT_LOCKSTATUS    0xfb4
46 #define CORESIGHT_AUTHSTATUS    0xfb8
47 #define CORESIGHT_DEVID         0xfc8
48 #define CORESIGHT_DEVTYPE       0xfcc
49
50 /* PTM control register */
51 #define PTM_CTRL                        0x0
52 #define PTM_CTRL_POWERDOWN              (1 << 0)
53 #define PTM_CTRL_PROGRAM                (1 << 10)
54 #define PTM_CTRL_CONTEXTIDSIZE(x)       (((x) & 3) << 14)
55 #define PTM_CTRL_STALLPROCESSOR         (1 << 7)
56 #define PTM_CTRL_BRANCH_OUTPUT          (1 << 8)
57 #define PTM_CTRL_CYCLEACCURATE          (1 << 12)
58 #define PTM_CTRL_TIMESTAMP_EN           (1 << 28)
59 #define PTM_CTRL_RETURN_STACK_EN        (1 << 29)
60
61 /* PTM configuration code register */
62 #define PTM_CONFCODE            (0x04)
63
64 /* PTM trigger event register */
65 #define PTM_TRIGEVT             (0x08)
66
67 /* address access type register bits, "PTM architecture",
68  * table 3-27 */
69 /* - access type */
70 #define PTM_COMP_ACC_TYPE(x)            (0x80 + (x) * 4)
71 /* this is a read only bit */
72 #define PTM_ACC_TYPE_INSTR_ONLY         (1 << 0)
73 /* - context id comparator control */
74 #define PTM_ACC_TYPE_IGN_CONTEXTID      (0 << 8)
75 #define PTM_ACC_TYPE_CONTEXTID_CMP1     (1 << 8)
76 #define PTM_ACC_TYPE_CONTEXTID_CMP2     (2 << 8)
77 #define PTM_ACC_TYPE_CONTEXTID_CMP3     (3 << 8)
78 /* - security level control */
79 #define PTM_ACC_TYPE_PFT10_IGN_SECURITY (0 << 10)
80 #define PTM_ACC_TYPE_PFT10_NS_ONLY      (1 << 10)
81 #define PTM_ACC_TYPE_PFT10_S_ONLY       (2 << 10)
82 #define PTM_ACC_TYPE_PFT11_NS_CTRL(x)   (((x & 1) << 11) | ((x & 2) << 13))
83 #define PTM_ACC_TYPE_PFT11_S_CTRL(x)    (((x & 1) << 10) | ((x & 2) << 12))
84 #define PTM_ACC_TYPE_PFT11_MATCH_ALL            0
85 #define PTM_ACC_TYPE_PFT11_MATCH_NONE           1
86 #define PTM_ACC_TYPE_PFT11_MATCH_PRIVILEGE      2
87 #define PTM_ACC_TYPE_PFT11_MATCH_USER           3
88 /*
89  * If secureity extension is not implemented, the state mode is same as
90  * secure state under security extension.
91  */
92 #define PTM_ACC_TYPE_PFT11_NO_S_EXT_CTRL(x) PTM_ACC_TYPE_PFT11_S_CTRL(x)
93
94 #define PTM_COMP_VAL(x)                 (0x40 + (x) * 4)
95
96 /* PTM status register */
97 #define PTM_STATUS                      0x10
98 #define PTM_STATUS_OVERFLOW             BIT(0)
99 #define PTM_STATUS_PROGBIT              BIT(1)
100 #define PTM_STATUS_STARTSTOP            BIT(2)
101 #define PTM_STATUS_TRIGGER              BIT(3)
102 #define ptm_progbit(t, id) (ptm_readl((t), id, PTM_STATUS) & PTM_STATUS_PROGBIT)
103 #define ptm_started(t) (ptm_readl((t), PTM_STATUS) & PTM_STATUS_STARTSTOP)
104 #define ptm_triggered(t) (ptm_readl((t), PTM_STATUS) & PTM_STATUS_TRIGGER)
105
106 /* PTM trace start/stop resource control register */
107 #define PTM_START_STOP_CTRL     (0x18)
108
109 /* PTM trace enable control */
110 #define PTM_TRACE_ENABLE_CTRL1                  0x24
111 #define PTM_TRACE_ENABLE_EXCL_CTRL              BIT(24)
112 #define PTM_TRACE_ENABLE_INCL_CTRL              0
113 #define PTM_TRACE_ENABLE_CTRL1_START_STOP_CTRL  BIT(25)
114
115 /* PTM trace enable event configuration */
116 #define PTM_TRACE_ENABLE_EVENT          0x20
117 /* PTM event resource */
118 #define COUNTER0                        ((0x4 << 4) | 0)
119 #define COUNTER1                        ((0x4 << 4) | 1)
120 #define COUNTER2                        ((0x4 << 4) | 2)
121 #define COUNTER3                        ((0x4 << 4) | 3)
122 #define EXT_IN0                         ((0x6 << 4) | 0)
123 #define EXT_IN1                         ((0x6 << 4) | 1)
124 #define EXT_IN2                         ((0x6 << 4) | 2)
125 #define EXT_IN3                         ((0x6 << 4) | 3)
126 #define EXTN_EXT_IN0                    ((0x6 << 4) | 8)
127 #define EXTN_EXT_IN1                    ((0x6 << 4) | 9)
128 #define EXTN_EXT_IN2                    ((0x6 << 4) | 10)
129 #define EXTN_EXT_IN3                    ((0x6 << 4) | 11)
130 #define IN_NS_STATE                     ((0x6 << 4) | 13)
131 #define TRACE_PROHIBITED                ((0x6 << 4) | 14)
132 #define ALWAYS_TRUE                     ((0x6 << 4) | 15)
133 #define LOGIC_A                         (0x0 << 14)
134 #define LOGIC_NOT_A                     (0x1 << 14)
135 #define LOGIC_A_AND_B                   (0x2 << 14)
136 #define LOGIC_NOT_A_AND_B               (0x3 << 14)
137 #define LOGIC_NOT_A_AND_NOT_B           (0x4 << 14)
138 #define LOGIC_A_OR_B                    (0x5 << 14)
139 #define LOGIC_NOT_A_OR_B                (0x6 << 14)
140 #define LOGIC_NOT_A_OR_NOT_B            (0x7 << 14)
141 #define SET_RES_A(RES)                  ((RES) << 0)
142 #define SET_RES_B(RES)                  ((RES) << 7)
143 #define DEF_PTM_EVENT(LOGIC, B, A)      ((LOGIC) | SET_RES_B(B) | SET_RES_A(A))
144
145 #define PTM_SYNC_FREQ           0x1e0
146
147 #define PTM_ID                  0x1e4
148 #define PTMIDR_VERSION(x)       (((x) >> 4) & 0xff)
149 #define PTMIDR_VERSION_3_1      0x21
150 #define PTMIDR_VERSION_PFT_1_0  0x30
151 #define PTMIDR_VERSION_PFT_1_1  0x31
152
153 /* PTM configuration register */
154 #define PTM_CCE                 0x1e8
155 #define PTMCCER_RETURN_STACK_IMPLEMENTED        BIT(23)
156 #define PTMCCER_TIMESTAMPING_IMPLEMENTED        BIT(22)
157 /* PTM management registers */
158 #define PTMMR_OSLAR             0x300
159 #define PTMMR_OSLSR             0x304
160 #define PTMMR_OSSRR             0x308
161 #define PTMMR_PDSR              0x314
162 /* PTM sequencer registers */
163 #define PTMSQ12EVR              0x180
164 #define PTMSQ21EVR              0x184
165 #define PTMSQ23EVR              0x188
166 #define PTMSQ31EVR              0x18C
167 #define PTMSQ32EVR              0x190
168 #define PTMSQ13EVR              0x194
169 #define PTMSQR                  0x19C
170 /* PTM counter event */
171 #define PTMCNTRLDVR(n)          ((0x50 + (n)) << 2)
172 #define PTMCNTENR(n)            ((0x54 + (n)) << 2)
173 #define PTMCNTRLDEVR(n)         ((0x58 + (n)) << 2)
174 #define PTMCNTVR(n)             ((0x5c + (n)) << 2)
175 /* PTM timestamp event */
176 #define PTMTSEVR                0x1F8
177 /* PTM ATID registers */
178 #define PTM_TRACEIDR            0x200
179
180 /* ETB registers, "CoreSight Components TRM", 9.3 */
181 #define ETB_DEPTH               0x04
182 #define ETB_STATUS              0x0c
183 #define ETB_STATUS_FULL         BIT(0)
184 #define ETB_READMEM             0x10
185 #define ETB_READADDR            0x14
186 #define ETB_WRITEADDR           0x18
187 #define ETB_TRIGGERCOUNT        0x1c
188 #define ETB_CTRL                0x20
189 #define TRACE_CAPATURE_ENABLE   0x1
190 #define TRACE_CAPATURE_DISABLE  0x0
191 #define ETB_RWD                 0x24
192 #define ETB_FF_CTRL             0x304
193 #define ETB_FF_CTRL_ENFTC       BIT(0)
194 #define ETB_FF_CTRL_ENFCONT     BIT(1)
195 #define ETB_FF_CTRL_FONFLIN     BIT(4)
196 #define ETB_FF_CTRL_MANUAL_FLUSH BIT(6)
197 #define ETB_FF_CTRL_TRIGIN      BIT(8)
198 #define ETB_FF_CTRL_TRIGEVT     BIT(9)
199 #define ETB_FF_CTRL_TRIGFL      BIT(10)
200 #define ETB_FF_CTRL_STOPFL      BIT(12)
201
202 #define FUNNEL_CTRL             0x0
203 #define FUNNEL_CTRL_CPU0        BIT(0)
204 #define FUNNEL_CTRL_CPU1        BIT(1)
205 #define FUNNEL_CTRL_CPU2        BIT(2)
206 #define FUNNEL_CTRL_ITM         BIT(3)
207 #define FUNNEL_CTRL_CPU3        BIT(4)
208 #define FUNNEL_MINIMUM_HOLD_TIME(x) ((x) << 8)
209 #define FUNNEL_PRIORITY         0x4
210 #define FUNNEL_PRIORITY_CPU0(p) ((p & 0x7)  << 0)
211 #define FUNNEL_PRIORITY_CPU1(p) ((p & 0x7)  << 3)
212 #define FUNNEL_PRIORITY_CPU2(p) ((p & 0x7)  << 6)
213 #define FUNNEL_PRIORITY_ITM(p)  ((p & 0x7)  << 9)
214 #define FUNNEL_PRIORITY_CPU3(p) ((p & 0x7)  << 12)
215
216 #define TPIU_ITCTRL             0xf00
217 #define TPIU_FF_CTRL            0x304
218 #define TPIU_FF_CTRL_ENFTC      BIT(0)
219 #define TPIU_FF_CTRL_ENFCONT    BIT(1)
220 #define TPIU_FF_CTRL_FONFLIN    BIT(4)
221 #define TPIU_FF_CTRL_MANUAL_FLUSH BIT(6)
222 #define TPIU_FF_CTRL_TRIGIN     BIT(8)
223 #define TPIU_FF_CTRL_TRIGEVT    BIT(9)
224 #define TPIU_FF_CTRL_TRIGFL     BIT(10)
225 #define TPIU_FF_CTRL_STOPFL     BIT(12)
226 #define TPIU_ITATBCTR2          0xef0
227 #define TPIU_IME                1
228 #define INTEGRATION_ATREADY     1
229
230 #define CLK_TPIU_OUT_ENB_U                      0x018
231 #define CLK_TPIU_OUT_ENB_U_TRACKCLK_IN          (0x1 << 13)
232 #define CLK_TPIU_SRC_TRACECLKIN                 0x634
233 #define CLK_TPIU_SRC_TRACECLKIN_SRC_MASK        (0x7 << 29)
234 #define CLK_TPIU_SRC_TRACECLKIN_PLLP            (0x0 << 29)
235
236 #define LOCK_MAGIC              0xc5acce55
237
238 #define etb_writel(t, v, x)     __raw_writel((v), (t)->etb_regs + (x))
239 #define etb_readl(t, x)         __raw_readl((t)->etb_regs + (x))
240 #define etb_regs_lock(t)        etb_writel((t), 0, CORESIGHT_LOCKACCESS)
241 #define etb_regs_unlock(t)      etb_writel((t), LOCK_MAGIC,             \
242                                                 CORESIGHT_LOCKACCESS)
243
244 #define funnel_writel(t, v, x)  __raw_writel((v), (t)->funnel_regs + (x))
245 #define funnel_readl(t, x)      __raw_readl((t)->funnel_regs + (x))
246 #define funnel_regs_lock(t)     funnel_writel((t), 0, CORESIGHT_LOCKACCESS)
247 #define funnel_regs_unlock(t)   funnel_writel((t), LOCK_MAGIC,          \
248                                                 CORESIGHT_LOCKACCESS)
249
250 #define tpiu_writel(t, v, x)    __raw_writel((v), (t)->tpiu_regs + (x))
251 #define tpiu_readl(t, x)        __raw_readl((t)->tpiu_regs + (x))
252 #define tpiu_regs_lock(t)       tpiu_writel((t), 0, CORESIGHT_LOCKACCESS)
253 #define tpiu_regs_unlock(t)     tpiu_writel((t), LOCK_MAGIC,            \
254                                                 CORESIGHT_LOCKACCESS)
255
256 #define ptm_writel(t, id, v, x) __raw_writel((v), (t)->ptm_regs[(id)] + (x))
257 #define ptm_readl(t, id, x)     __raw_readl((t)->ptm_regs[(id)] + (x))
258 #define ptm_regs_lock(t, id)    ptm_writel((t), (id), 0, CORESIGHT_LOCKACCESS);
259 #define ptm_regs_unlock(t, id)  ptm_writel((t), (id), LOCK_MAGIC,       \
260                                                 CORESIGHT_LOCKACCESS);
261 #define ptm_os_lock(t, id)      ptm_writel((t), (id), LOCK_MAGIC, PTMMR_OSLAR)
262 #define ptm_os_unlock(t, id)    ptm_writel((t), (id), 0, PTMMR_OSLAR)
263
264 #ifdef CONFIG_TEGRA_PTM
265 /* PTM required re-energized CPU enterring LP2 mode */
266 void ptm_power_idle_resume(int cpu);
267 #else
268 static inline void ptm_power_idle_resume(int cpu) {}
269 #endif
270
271 #endif