diff options
author | David S. Miller <davem@davemloft.net> | 2012-08-17 02:19:32 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-08-19 02:26:14 -0400 |
commit | 09d053c797f4a559af0647e4283b9b9ec0682d10 (patch) | |
tree | a24ba2d57b40d251ede54f6358f79456bfcb855c /arch/sparc/include | |
parent | 0bab20ba4c95f56355c24a0b9f03eb486c2a267d (diff) |
sparc64: Abstract away PIC register accesses.
And, like for the PCR, allow indexing of different PIC register
numbers.
This also removes all of the non-__KERNEL__ bits from asm/perfctr.h,
nothing kernel side should include it any more.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc/include')
-rw-r--r-- | arch/sparc/include/asm/pcr.h | 6 | ||||
-rw-r--r-- | arch/sparc/include/asm/perfctr.h | 30 |
2 files changed, 4 insertions, 32 deletions
diff --git a/arch/sparc/include/asm/pcr.h b/arch/sparc/include/asm/pcr.h index 55e23416eef..d53abf75198 100644 --- a/arch/sparc/include/asm/pcr.h +++ b/arch/sparc/include/asm/pcr.h | |||
@@ -2,8 +2,10 @@ | |||
2 | #define __PCR_H | 2 | #define __PCR_H |
3 | 3 | ||
4 | struct pcr_ops { | 4 | struct pcr_ops { |
5 | u64 (*read)(unsigned long); | 5 | u64 (*read_pcr)(unsigned long); |
6 | void (*write)(unsigned long, u64); | 6 | void (*write_pcr)(unsigned long, u64); |
7 | u64 (*read_pic)(unsigned long); | ||
8 | void (*write_pic)(unsigned long, u64); | ||
7 | }; | 9 | }; |
8 | extern const struct pcr_ops *pcr_ops; | 10 | extern const struct pcr_ops *pcr_ops; |
9 | 11 | ||
diff --git a/arch/sparc/include/asm/perfctr.h b/arch/sparc/include/asm/perfctr.h index 3332d2cba6c..214feefa577 100644 --- a/arch/sparc/include/asm/perfctr.h +++ b/arch/sparc/include/asm/perfctr.h | |||
@@ -54,11 +54,6 @@ enum perfctr_opcode { | |||
54 | PERFCTR_GETPCR | 54 | PERFCTR_GETPCR |
55 | }; | 55 | }; |
56 | 56 | ||
57 | /* I don't want the kernel's namespace to be polluted with this | ||
58 | * stuff when this file is included. --DaveM | ||
59 | */ | ||
60 | #ifndef __KERNEL__ | ||
61 | |||
62 | #define PRIV 0x00000001 | 57 | #define PRIV 0x00000001 |
63 | #define SYS 0x00000002 | 58 | #define SYS 0x00000002 |
64 | #define USR 0x00000004 | 59 | #define USR 0x00000004 |
@@ -168,29 +163,4 @@ struct vcounter_struct { | |||
168 | unsigned long long vcnt1; | 163 | unsigned long long vcnt1; |
169 | }; | 164 | }; |
170 | 165 | ||
171 | #else /* !(__KERNEL__) */ | ||
172 | |||
173 | #ifndef CONFIG_SPARC32 | ||
174 | |||
175 | /* Performance counter register access. */ | ||
176 | #define read_pcr(__p) __asm__ __volatile__("rd %%pcr, %0" : "=r" (__p)) | ||
177 | #define write_pcr(__p) __asm__ __volatile__("wr %0, 0x0, %%pcr" : : "r" (__p)) | ||
178 | #define read_pic(__p) __asm__ __volatile__("rd %%pic, %0" : "=r" (__p)) | ||
179 | |||
180 | /* Blackbird errata workaround. See commentary in | ||
181 | * arch/sparc64/kernel/smp.c:smp_percpu_timer_interrupt() | ||
182 | * for more information. | ||
183 | */ | ||
184 | #define write_pic(__p) \ | ||
185 | __asm__ __volatile__("ba,pt %%xcc, 99f\n\t" \ | ||
186 | " nop\n\t" \ | ||
187 | ".align 64\n" \ | ||
188 | "99:wr %0, 0x0, %%pic\n\t" \ | ||
189 | "rd %%pic, %%g0" : : "r" (__p)) | ||
190 | #define reset_pic() write_pic(0) | ||
191 | |||
192 | #endif /* !CONFIG_SPARC32 */ | ||
193 | |||
194 | #endif /* !(__KERNEL__) */ | ||
195 | |||
196 | #endif /* !(PERF_COUNTER_API) */ | 166 | #endif /* !(PERF_COUNTER_API) */ |