diff options
Diffstat (limited to 'arch/powerpc/oprofile/op_model_fsl_booke.c')
-rw-r--r-- | arch/powerpc/oprofile/op_model_fsl_booke.c | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/arch/powerpc/oprofile/op_model_fsl_booke.c b/arch/powerpc/oprofile/op_model_fsl_booke.c index 0b3c31f5209e..2267eb8c661b 100644 --- a/arch/powerpc/oprofile/op_model_fsl_booke.c +++ b/arch/powerpc/oprofile/op_model_fsl_booke.c | |||
@@ -32,6 +32,87 @@ static unsigned long reset_value[OP_MAX_COUNTER]; | |||
32 | static int num_counters; | 32 | static int num_counters; |
33 | static int oprofile_running; | 33 | static int oprofile_running; |
34 | 34 | ||
35 | static inline u32 get_pmlca(int ctr) | ||
36 | { | ||
37 | u32 pmlca; | ||
38 | |||
39 | switch (ctr) { | ||
40 | case 0: | ||
41 | pmlca = mfpmr(PMRN_PMLCA0); | ||
42 | break; | ||
43 | case 1: | ||
44 | pmlca = mfpmr(PMRN_PMLCA1); | ||
45 | break; | ||
46 | case 2: | ||
47 | pmlca = mfpmr(PMRN_PMLCA2); | ||
48 | break; | ||
49 | case 3: | ||
50 | pmlca = mfpmr(PMRN_PMLCA3); | ||
51 | break; | ||
52 | default: | ||
53 | panic("Bad ctr number\n"); | ||
54 | } | ||
55 | |||
56 | return pmlca; | ||
57 | } | ||
58 | |||
59 | static inline void set_pmlca(int ctr, u32 pmlca) | ||
60 | { | ||
61 | switch (ctr) { | ||
62 | case 0: | ||
63 | mtpmr(PMRN_PMLCA0, pmlca); | ||
64 | break; | ||
65 | case 1: | ||
66 | mtpmr(PMRN_PMLCA1, pmlca); | ||
67 | break; | ||
68 | case 2: | ||
69 | mtpmr(PMRN_PMLCA2, pmlca); | ||
70 | break; | ||
71 | case 3: | ||
72 | mtpmr(PMRN_PMLCA3, pmlca); | ||
73 | break; | ||
74 | default: | ||
75 | panic("Bad ctr number\n"); | ||
76 | } | ||
77 | } | ||
78 | |||
79 | static inline unsigned int ctr_read(unsigned int i) | ||
80 | { | ||
81 | switch(i) { | ||
82 | case 0: | ||
83 | return mfpmr(PMRN_PMC0); | ||
84 | case 1: | ||
85 | return mfpmr(PMRN_PMC1); | ||
86 | case 2: | ||
87 | return mfpmr(PMRN_PMC2); | ||
88 | case 3: | ||
89 | return mfpmr(PMRN_PMC3); | ||
90 | default: | ||
91 | return 0; | ||
92 | } | ||
93 | } | ||
94 | |||
95 | static inline void ctr_write(unsigned int i, unsigned int val) | ||
96 | { | ||
97 | switch(i) { | ||
98 | case 0: | ||
99 | mtpmr(PMRN_PMC0, val); | ||
100 | break; | ||
101 | case 1: | ||
102 | mtpmr(PMRN_PMC1, val); | ||
103 | break; | ||
104 | case 2: | ||
105 | mtpmr(PMRN_PMC2, val); | ||
106 | break; | ||
107 | case 3: | ||
108 | mtpmr(PMRN_PMC3, val); | ||
109 | break; | ||
110 | default: | ||
111 | break; | ||
112 | } | ||
113 | } | ||
114 | |||
115 | |||
35 | static void init_pmc_stop(int ctr) | 116 | static void init_pmc_stop(int ctr) |
36 | { | 117 | { |
37 | u32 pmlca = (PMLCA_FC | PMLCA_FCS | PMLCA_FCU | | 118 | u32 pmlca = (PMLCA_FC | PMLCA_FCS | PMLCA_FCU | |