]> rtime.felk.cvut.cz Git - pes-rpp/rpp-test-sw.git/blob - rpp/lib/rpp/src/sys/asm/sys_pmu.asm
80cff2c603e3924f605bc12697484a4f404dc418
[pes-rpp/rpp-test-sw.git] / rpp / lib / rpp / src / sys / asm / sys_pmu.asm
1 ;-------------------------------------------------------------------------------
2 ; sys_pmu.asm
3 ;
4 ; (c) Texas Instruments 2012, All rights reserved.
5 ;
6
7     .text
8     .arm
9
10
11 ;-------------------------------------------------------------------------------
12 ; Initialize Pmu
13 ; Note: It will reset all counters
14
15     .def     _pmuInit_
16     .asmfunc
17
18 _pmuInit_
19
20         stmfd sp!, {r0}
21         ; set control register
22         mrc   p15, #0, r0, c9, c12, #0
23         orr   r0,  r0, #(1 << 4) + 6 + 1
24         mcr   p15, #0, r0, c9, c12, #0
25         ; clear flags
26         mov   r0,  #0
27         mcr   p15, #0, r0, c9, c12, #3
28         ; select counter 0 event
29         mcr   p15, #0, r0, c9, c12, #5 ; select counter
30         mov   r0,  #0x11
31         mcr   p15, #0, r0, c9, c13, #1 ; select event
32         ; select counter 1 event
33         mov   r0,  #1
34         mcr   p15, #0, r0, c9, c12, #5 ; select counter
35         mov   r0,  #0x11
36         mcr   p15, #0, r0, c9, c13, #1 ; select event
37         ; select counter 2 event
38         mov   r0,  #2
39         mcr   p15, #0, r0, c9, c12, #5 ; select counter
40         mov   r0,  #0x11
41         mcr   p15, #0, r0, c9, c13, #1 ; select event
42         ldmfd sp!, {r0}
43         bx    lr
44
45     .endasmfunc
46
47
48 ;-------------------------------------------------------------------------------
49 ; Enable Counters Global [Cycle, Event [0..2]]
50 ; Note: It will reset all counters
51
52     .def     _pmuEnableCountersGlobal_
53     .asmfunc
54
55 _pmuEnableCountersGlobal_
56
57         stmfd sp!, {r0}
58         mrc   p15, #0, r0, c9, c12, #0
59         orr   r0,  r0, #7
60         mcr   p15, #0, r0, c9, c12, #0
61         ldmfd sp!, {r0}
62         bx    lr
63
64     .endasmfunc
65
66 ;-------------------------------------------------------------------------------
67 ; Disable Counters Global [Cycle, Event [0..2]]
68
69     .def     _pmuDisableCountersGlobal_
70     .asmfunc
71
72 _pmuDisableCountersGlobal_
73
74         stmfd sp!, {r0}
75         mrc   p15, #0, r0, c9, c12, #0
76         bic   r0,  r0, #1
77         mcr   p15, #0, r0, c9, c12, #0
78         ldmfd sp!, {r0}
79         bx    lr
80
81     .endasmfunc
82
83 ;-------------------------------------------------------------------------------
84 ; Reset Cycle Counter
85
86     .def     _pmuResetCycleCounter_
87     .asmfunc
88
89 _pmuResetCycleCounter_
90
91         stmfd sp!, {r0}
92         mrc   p15, #0, r0, c9, c12, #0
93         orr   r0,  r0, #4
94         mcr   p15, #0, r0, c9, c12, #0
95         ldmfd sp!, {r0}
96         bx    lr
97
98     .endasmfunc
99
100 ;-------------------------------------------------------------------------------
101 ; Reset Event Counters [0..2]
102
103     .def     _pmuResetEventCounters_
104     .asmfunc
105
106 _pmuResetEventCounters_
107
108         stmfd sp!, {r0}
109         mrc   p15, #0, r0, c9, c12, #0
110         orr   r0,  r0, #2
111         mcr   p15, #0, r0, c9, c12, #0
112         ldmfd sp!, {r0}
113         bx    lr
114
115     .endasmfunc
116
117 ;-------------------------------------------------------------------------------
118 ; Reset Cycle Counter abd Event Counters [0..2]
119
120     .def     _pmuResetCounters_
121     .asmfunc
122
123 _pmuResetCounters_
124
125         stmfd sp!, {r0}
126         mrc   p15, #0, r0, c9, c12, #0
127         orr   r0,  r0, #6
128         mcr   p15, #0, r0, c9, c12, #0
129         ldmfd sp!, {r0}
130         bx    lr
131
132     .endasmfunc
133
134 ;-------------------------------------------------------------------------------
135 ; Start Counters [Cycle, 0..2]
136
137     .def     _pmuStartCounters_
138     .asmfunc
139
140 _pmuStartCounters_
141
142         mcr   p15, #0, r0, c9, c12, #1
143         bx    lr
144
145     .endasmfunc
146
147 ;-------------------------------------------------------------------------------
148 ; Stop Counters [Cycle, 0..2]
149
150     .def     _pmuStopCounters_
151     .asmfunc
152
153 _pmuStopCounters_
154
155         mcr   p15, #0, r0, c9, c12, #2
156         bx    lr
157
158     .endasmfunc
159
160 ;-------------------------------------------------------------------------------
161 ; Set Count event
162
163     .def     _pmuSetCountEvent_
164     .asmfunc
165
166 _pmuSetCountEvent_
167
168         lsr   r0,  r0, #1
169         mcr   p15, #0, r0, c9, c12, #5 ; select counter
170         mcr   p15, #0, r1, c9, c13, #1 ; select event
171         bx    lr
172
173     .endasmfunc
174
175 ;-------------------------------------------------------------------------------
176 ; Get Cycle Count
177
178     .def     _pmuGetCycleCount_
179     .asmfunc
180
181 _pmuGetCycleCount_
182
183         mrc   p15, #0, r0, c9, c13, #0
184         bx    lr
185
186     .endasmfunc
187
188 ;-------------------------------------------------------------------------------
189 ; Get Event Counter Count Value
190
191     .def     _pmuGetEventCount_
192     .asmfunc
193
194 _pmuGetEventCount_
195
196         lsr   r0,  r0, #1
197         mcr   p15, #0, r0, c9, c12, #5 ; select counter
198         mrc   p15, #0, r0, c9, c13, #2 ; read event counter
199         bx    lr
200
201     .endasmfunc
202
203 ;-------------------------------------------------------------------------------
204 ; Get Overflow Flags
205
206     .def     _pmuGetOverflow_
207     .asmfunc
208
209 _pmuGetOverflow_
210
211         mrc   p15, #0, r0, c9, c12, #3 ; read overflow
212         mov   r1,  #0
213         mcr   p15, #0, r1, c9, c12, #3 ; clear flags
214         bx    lr
215
216     .endasmfunc
217
218
219
220 ;-------------------------------------------------------------------------------
221