2
* linux/arch/arm/include/asm/hardware/coresight.h
4
* CoreSight components' registers
6
* Copyright (C) 2009 Nokia Corporation.
9
* This program is free software; you can redistribute it and/or modify
10
* it under the terms of the GNU General Public License version 2 as
11
* published by the Free Software Foundation.
14
#ifndef __ASM_HARDWARE_CORESIGHT_H
15
#define __ASM_HARDWARE_CORESIGHT_H
17
#define TRACER_ACCESSED_BIT 0
18
#define TRACER_RUNNING_BIT 1
19
#define TRACER_CYCLE_ACC_BIT 2
20
#define TRACER_ACCESSED BIT(TRACER_ACCESSED_BIT)
21
#define TRACER_RUNNING BIT(TRACER_RUNNING_BIT)
22
#define TRACER_CYCLE_ACC BIT(TRACER_CYCLE_ACC_BIT)
24
#define TRACER_TIMEOUT 10000
26
#define etm_writel(t, v, x) \
27
(__raw_writel((v), (t)->etm_regs + (x)))
28
#define etm_readl(t, x) (__raw_readl((t)->etm_regs + (x)))
30
/* CoreSight Management Registers */
31
#define CSMR_LOCKACCESS 0xfb0
32
#define CSMR_LOCKSTATUS 0xfb4
33
#define CSMR_AUTHSTATUS 0xfb8
34
#define CSMR_DEVID 0xfc8
35
#define CSMR_DEVTYPE 0xfcc
36
/* CoreSight Component Registers */
37
#define CSCR_CLASS 0xff4
39
#define UNLOCK_MAGIC 0xc5acce55
41
/* ETM control register, "ETM Architecture", 3.3.1 */
43
#define ETMCTRL_POWERDOWN 1
44
#define ETMCTRL_PROGRAM (1 << 10)
45
#define ETMCTRL_PORTSEL (1 << 11)
46
#define ETMCTRL_DO_CONTEXTID (3 << 14)
47
#define ETMCTRL_PORTMASK1 (7 << 4)
48
#define ETMCTRL_PORTMASK2 (1 << 21)
49
#define ETMCTRL_PORTMASK (ETMCTRL_PORTMASK1 | ETMCTRL_PORTMASK2)
50
#define ETMCTRL_PORTSIZE(x) ((((x) & 7) << 4) | (!!((x) & 8)) << 21)
51
#define ETMCTRL_DO_CPRT (1 << 1)
52
#define ETMCTRL_DATAMASK (3 << 2)
53
#define ETMCTRL_DATA_DO_DATA (1 << 2)
54
#define ETMCTRL_DATA_DO_ADDR (1 << 3)
55
#define ETMCTRL_DATA_DO_BOTH (ETMCTRL_DATA_DO_DATA | ETMCTRL_DATA_DO_ADDR)
56
#define ETMCTRL_BRANCH_OUTPUT (1 << 8)
57
#define ETMCTRL_CYCLEACCURATE (1 << 12)
59
/* ETM configuration code register */
60
#define ETMR_CONFCODE (0x04)
62
/* ETM trace start/stop resource control register */
63
#define ETMR_TRACESSCTRL (0x18)
65
/* ETM trigger event register */
66
#define ETMR_TRIGEVT (0x08)
68
/* address access type register bits, "ETM architecture",
71
#define ETMAAT_IFETCH 0
72
#define ETMAAT_IEXEC 1
73
#define ETMAAT_IEXECPASS 2
74
#define ETMAAT_IEXECFAIL 3
75
#define ETMAAT_DLOADSTORE 4
76
#define ETMAAT_DLOAD 5
77
#define ETMAAT_DSTORE 6
78
/* - comparison access size */
79
#define ETMAAT_JAVA (0 << 3)
80
#define ETMAAT_THUMB (1 << 3)
81
#define ETMAAT_ARM (3 << 3)
82
/* - data value comparison control */
83
#define ETMAAT_NOVALCMP (0 << 5)
84
#define ETMAAT_VALMATCH (1 << 5)
85
#define ETMAAT_VALNOMATCH (3 << 5)
87
#define ETMAAT_EXACTMATCH (1 << 7)
88
/* - context id comparator control */
89
#define ETMAAT_IGNCONTEXTID (0 << 8)
90
#define ETMAAT_VALUE1 (1 << 8)
91
#define ETMAAT_VALUE2 (2 << 8)
92
#define ETMAAT_VALUE3 (3 << 8)
93
/* - security level control */
94
#define ETMAAT_IGNSECURITY (0 << 10)
95
#define ETMAAT_NSONLY (1 << 10)
96
#define ETMAAT_SONLY (2 << 10)
98
#define ETMR_COMP_VAL(x) (0x40 + (x) * 4)
99
#define ETMR_COMP_ACC_TYPE(x) (0x80 + (x) * 4)
101
/* ETM status register, "ETM Architecture", 3.3.2 */
102
#define ETMR_STATUS (0x10)
103
#define ETMST_OVERFLOW BIT(0)
104
#define ETMST_PROGBIT BIT(1)
105
#define ETMST_STARTSTOP BIT(2)
106
#define ETMST_TRIGGER BIT(3)
108
#define etm_progbit(t) (etm_readl((t), ETMR_STATUS) & ETMST_PROGBIT)
109
#define etm_started(t) (etm_readl((t), ETMR_STATUS) & ETMST_STARTSTOP)
110
#define etm_triggered(t) (etm_readl((t), ETMR_STATUS) & ETMST_TRIGGER)
112
#define ETMR_TRACEENCTRL2 0x1c
113
#define ETMR_TRACEENCTRL 0x24
114
#define ETMTE_INCLEXCL BIT(24)
115
#define ETMR_TRACEENEVT 0x20
116
#define ETMCTRL_OPTS (ETMCTRL_DO_CPRT | \
117
ETMCTRL_DATA_DO_ADDR | \
118
ETMCTRL_BRANCH_OUTPUT | \
119
ETMCTRL_DO_CONTEXTID)
121
/* ETM management registers, "ETM Architecture", 3.5.24 */
122
#define ETMMR_OSLAR 0x300
123
#define ETMMR_OSLSR 0x304
124
#define ETMMR_OSSRR 0x308
125
#define ETMMR_PDSR 0x314
127
/* ETB registers, "CoreSight Components TRM", 9.3 */
128
#define ETBR_DEPTH 0x04
129
#define ETBR_STATUS 0x0c
130
#define ETBR_READMEM 0x10
131
#define ETBR_READADDR 0x14
132
#define ETBR_WRITEADDR 0x18
133
#define ETBR_TRIGGERCOUNT 0x1c
134
#define ETBR_CTRL 0x20
135
#define ETBR_FORMATTERCTRL 0x304
136
#define ETBFF_ENFTC 1
137
#define ETBFF_ENFCONT BIT(1)
138
#define ETBFF_FONFLIN BIT(4)
139
#define ETBFF_MANUAL_FLUSH BIT(6)
140
#define ETBFF_TRIGIN BIT(8)
141
#define ETBFF_TRIGEVT BIT(9)
142
#define ETBFF_TRIGFL BIT(10)
144
#define etb_writel(t, v, x) \
145
(__raw_writel((v), (t)->etb_regs + (x)))
146
#define etb_readl(t, x) (__raw_readl((t)->etb_regs + (x)))
148
#define etm_lock(t) do { etm_writel((t), 0, CSMR_LOCKACCESS); } while (0)
149
#define etm_unlock(t) \
150
do { etm_writel((t), UNLOCK_MAGIC, CSMR_LOCKACCESS); } while (0)
152
#define etb_lock(t) do { etb_writel((t), 0, CSMR_LOCKACCESS); } while (0)
153
#define etb_unlock(t) \
154
do { etb_writel((t), UNLOCK_MAGIC, CSMR_LOCKACCESS); } while (0)
156
#endif /* __ASM_HARDWARE_CORESIGHT_H */