ARM: tegra: Add Tegra Profiler
[linux-2.6.git] / drivers / misc / tegra-profiler / pl310.h
1 /*
2  * drivers/misc/tegra-profiler/pl310.h
3  *
4  * Copyright (c) 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  */
16
17 #ifndef __QUADD_PL310_H
18 #define __QUADD_PL310_H
19
20 /*
21  * l2x0 event type
22  */
23 enum quadd_l2x0_event_type {
24         QUADD_L2X0_TYPE_DATA_READ_MISSES        = 0,
25         QUADD_L2X0_TYPE_DATA_WRITE_MISSES       = 1,
26         QUADD_L2X0_TYPE_INSTRUCTION_MISSES      = 2,
27 };
28
29 #ifdef __KERNEL__
30
31 #include <linux/io.h>
32
33 #define L2X0_EVENT_CNT_ENABLE           (1 << 0)
34 #define L2X0_EVENT_CNT_RESET_CNT0       (1 << 1)
35 #define L2X0_EVENT_CNT_RESET_CNT1       (2 << 1)
36
37
38 #define L2X0_EVENT_CNT_CFG_DRHIT        (2 << 2)
39 #define L2X0_EVENT_CNT_CFG_DRREQ        (3 << 2)
40
41 #define L2X0_EVENT_CNT_CFG_DWHIT        (4 << 2)
42 #define L2X0_EVENT_CNT_CFG_DWREQ        (5 << 2)
43
44 #define L2X0_EVENT_CNT_CFG_IRHIT        (7 << 2)
45 #define L2X0_EVENT_CNT_CFG_IRREQ        (8 << 2)
46
47 /*
48  * l2x0 counters
49  */
50 enum quadd_l2x0_counter {
51         QUADD_L2X0_COUNTER1 = 0,
52         QUADD_L2X0_COUNTER0 = 1,
53 };
54
55 struct l2x0_context {
56         int l2x0_event_type;
57         int event_id;
58
59         void __iomem *l2x0_base;
60         spinlock_t lock;
61 };
62
63 struct quadd_event_source_interface;
64
65 struct quadd_event_source_interface *quadd_l2x0_events_init(void);
66
67 static inline unsigned long quadd_get_pl310_phys_addr(void)
68 {
69         unsigned long phys_addr = 0;
70
71 #if defined(CONFIG_ARCH_TEGRA)
72         phys_addr = 0x50043000;
73 #endif
74         return phys_addr;
75 }
76
77 #endif  /* __KERNEL__ */
78
79 #endif  /* __QUADD_PL310_H */