diff options
Diffstat (limited to 'arch/sparc/include')
-rw-r--r-- | arch/sparc/include/asm/asi.h | 4 | ||||
-rw-r--r-- | arch/sparc/include/asm/elf_64.h | 9 | ||||
-rw-r--r-- | arch/sparc/include/asm/hypervisor.h | 11 | ||||
-rw-r--r-- | arch/sparc/include/asm/mdesc.h | 1 | ||||
-rw-r--r-- | arch/sparc/include/asm/pcr.h | 36 | ||||
-rw-r--r-- | arch/sparc/include/asm/perfctr.h | 30 | ||||
-rw-r--r-- | arch/sparc/include/asm/pstate.h | 14 |
7 files changed, 57 insertions, 48 deletions
diff --git a/arch/sparc/include/asm/asi.h b/arch/sparc/include/asm/asi.h index 61ebe7411ce..cc0006dc5d4 100644 --- a/arch/sparc/include/asm/asi.h +++ b/arch/sparc/include/asm/asi.h | |||
@@ -141,7 +141,8 @@ | |||
141 | /* SpitFire and later extended ASIs. The "(III)" marker designates | 141 | /* SpitFire and later extended ASIs. The "(III)" marker designates |
142 | * UltraSparc-III and later specific ASIs. The "(CMT)" marker designates | 142 | * UltraSparc-III and later specific ASIs. The "(CMT)" marker designates |
143 | * Chip Multi Threading specific ASIs. "(NG)" designates Niagara specific | 143 | * Chip Multi Threading specific ASIs. "(NG)" designates Niagara specific |
144 | * ASIs, "(4V)" designates SUN4V specific ASIs. | 144 | * ASIs, "(4V)" designates SUN4V specific ASIs. "(NG4)" designates SPARC-T4 |
145 | * and later ASIs. | ||
145 | */ | 146 | */ |
146 | #define ASI_PHYS_USE_EC 0x14 /* PADDR, E-cachable */ | 147 | #define ASI_PHYS_USE_EC 0x14 /* PADDR, E-cachable */ |
147 | #define ASI_PHYS_BYPASS_EC_E 0x15 /* PADDR, E-bit */ | 148 | #define ASI_PHYS_BYPASS_EC_E 0x15 /* PADDR, E-bit */ |
@@ -243,6 +244,7 @@ | |||
243 | #define ASI_UDBL_CONTROL_R 0x7f /* External UDB control regs rd low*/ | 244 | #define ASI_UDBL_CONTROL_R 0x7f /* External UDB control regs rd low*/ |
244 | #define ASI_INTR_R 0x7f /* IRQ vector dispatch read */ | 245 | #define ASI_INTR_R 0x7f /* IRQ vector dispatch read */ |
245 | #define ASI_INTR_DATAN_R 0x7f /* (III) In irq vector data reg N */ | 246 | #define ASI_INTR_DATAN_R 0x7f /* (III) In irq vector data reg N */ |
247 | #define ASI_PIC 0xb0 /* (NG4) PIC registers */ | ||
246 | #define ASI_PST8_P 0xc0 /* Primary, 8 8-bit, partial */ | 248 | #define ASI_PST8_P 0xc0 /* Primary, 8 8-bit, partial */ |
247 | #define ASI_PST8_S 0xc1 /* Secondary, 8 8-bit, partial */ | 249 | #define ASI_PST8_S 0xc1 /* Secondary, 8 8-bit, partial */ |
248 | #define ASI_PST16_P 0xc2 /* Primary, 4 16-bit, partial */ | 250 | #define ASI_PST16_P 0xc2 /* Primary, 4 16-bit, partial */ |
diff --git a/arch/sparc/include/asm/elf_64.h b/arch/sparc/include/asm/elf_64.h index 7df8b7f544d..370ca1e71ff 100644 --- a/arch/sparc/include/asm/elf_64.h +++ b/arch/sparc/include/asm/elf_64.h | |||
@@ -86,6 +86,15 @@ | |||
86 | #define AV_SPARC_IMA 0x00400000 /* integer multiply-add */ | 86 | #define AV_SPARC_IMA 0x00400000 /* integer multiply-add */ |
87 | #define AV_SPARC_ASI_CACHE_SPARING \ | 87 | #define AV_SPARC_ASI_CACHE_SPARING \ |
88 | 0x00800000 /* cache sparing ASIs available */ | 88 | 0x00800000 /* cache sparing ASIs available */ |
89 | #define AV_SPARC_PAUSE 0x01000000 /* PAUSE available */ | ||
90 | #define AV_SPARC_CBCOND 0x02000000 /* CBCOND insns available */ | ||
91 | |||
92 | /* Solaris decided to enumerate every single crypto instruction type | ||
93 | * in the AT_HWCAP bits. This is wasteful, since if crypto is present, | ||
94 | * you still need to look in the CFR register to see if the opcode is | ||
95 | * really available. So we simply advertise only "crypto" support. | ||
96 | */ | ||
97 | #define HWCAP_SPARC_CRYPTO 0x04000000 /* CRYPTO insns available */ | ||
89 | 98 | ||
90 | #define CORE_DUMP_USE_REGSET | 99 | #define CORE_DUMP_USE_REGSET |
91 | 100 | ||
diff --git a/arch/sparc/include/asm/hypervisor.h b/arch/sparc/include/asm/hypervisor.h index 015a761eaa3..ca121f0fa3e 100644 --- a/arch/sparc/include/asm/hypervisor.h +++ b/arch/sparc/include/asm/hypervisor.h | |||
@@ -2934,6 +2934,16 @@ extern unsigned long sun4v_reboot_data_set(unsigned long ra, | |||
2934 | unsigned long len); | 2934 | unsigned long len); |
2935 | #endif | 2935 | #endif |
2936 | 2936 | ||
2937 | #define HV_FAST_VT_GET_PERFREG 0x184 | ||
2938 | #define HV_FAST_VT_SET_PERFREG 0x185 | ||
2939 | |||
2940 | #ifndef __ASSEMBLY__ | ||
2941 | extern unsigned long sun4v_vt_get_perfreg(unsigned long reg_num, | ||
2942 | unsigned long *reg_val); | ||
2943 | extern unsigned long sun4v_vt_set_perfreg(unsigned long reg_num, | ||
2944 | unsigned long reg_val); | ||
2945 | #endif | ||
2946 | |||
2937 | /* Function numbers for HV_CORE_TRAP. */ | 2947 | /* Function numbers for HV_CORE_TRAP. */ |
2938 | #define HV_CORE_SET_VER 0x00 | 2948 | #define HV_CORE_SET_VER 0x00 |
2939 | #define HV_CORE_PUTCHAR 0x01 | 2949 | #define HV_CORE_PUTCHAR 0x01 |
@@ -2964,6 +2974,7 @@ extern unsigned long sun4v_reboot_data_set(unsigned long ra, | |||
2964 | #define HV_GRP_NIU 0x0204 | 2974 | #define HV_GRP_NIU 0x0204 |
2965 | #define HV_GRP_VF_CPU 0x0205 | 2975 | #define HV_GRP_VF_CPU 0x0205 |
2966 | #define HV_GRP_KT_CPU 0x0209 | 2976 | #define HV_GRP_KT_CPU 0x0209 |
2977 | #define HV_GRP_VT_CPU 0x020c | ||
2967 | #define HV_GRP_DIAG 0x0300 | 2978 | #define HV_GRP_DIAG 0x0300 |
2968 | 2979 | ||
2969 | #ifndef __ASSEMBLY__ | 2980 | #ifndef __ASSEMBLY__ |
diff --git a/arch/sparc/include/asm/mdesc.h b/arch/sparc/include/asm/mdesc.h index 9faa046713f..139097f3a67 100644 --- a/arch/sparc/include/asm/mdesc.h +++ b/arch/sparc/include/asm/mdesc.h | |||
@@ -73,6 +73,7 @@ extern void mdesc_register_notifier(struct mdesc_notifier_client *client); | |||
73 | 73 | ||
74 | extern void mdesc_fill_in_cpu_data(cpumask_t *mask); | 74 | extern void mdesc_fill_in_cpu_data(cpumask_t *mask); |
75 | extern void mdesc_populate_present_mask(cpumask_t *mask); | 75 | extern void mdesc_populate_present_mask(cpumask_t *mask); |
76 | extern void mdesc_get_page_sizes(cpumask_t *mask, unsigned long *pgsz_mask); | ||
76 | 77 | ||
77 | extern void sun4v_mdesc_init(void); | 78 | extern void sun4v_mdesc_init(void); |
78 | 79 | ||
diff --git a/arch/sparc/include/asm/pcr.h b/arch/sparc/include/asm/pcr.h index 288d7beba05..942bb17f60c 100644 --- a/arch/sparc/include/asm/pcr.h +++ b/arch/sparc/include/asm/pcr.h | |||
@@ -2,8 +2,13 @@ | |||
2 | #define __PCR_H | 2 | #define __PCR_H |
3 | 3 | ||
4 | struct pcr_ops { | 4 | struct pcr_ops { |
5 | u64 (*read)(void); | 5 | u64 (*read_pcr)(unsigned long); |
6 | void (*write)(u64); | 6 | void (*write_pcr)(unsigned long, u64); |
7 | u64 (*read_pic)(unsigned long); | ||
8 | void (*write_pic)(unsigned long, u64); | ||
9 | u64 (*nmi_picl_value)(unsigned int nmi_hz); | ||
10 | u64 pcr_nmi_enable; | ||
11 | u64 pcr_nmi_disable; | ||
7 | }; | 12 | }; |
8 | extern const struct pcr_ops *pcr_ops; | 13 | extern const struct pcr_ops *pcr_ops; |
9 | 14 | ||
@@ -27,21 +32,18 @@ extern void schedule_deferred_pcr_work(void); | |||
27 | #define PCR_N2_SL1_SHIFT 27 | 32 | #define PCR_N2_SL1_SHIFT 27 |
28 | #define PCR_N2_OV1 0x80000000 | 33 | #define PCR_N2_OV1 0x80000000 |
29 | 34 | ||
30 | extern unsigned int picl_shift; | 35 | #define PCR_N4_OV 0x00000001 /* PIC overflow */ |
31 | 36 | #define PCR_N4_TOE 0x00000002 /* Trap On Event */ | |
32 | /* In order to commonize as much of the implementation as | 37 | #define PCR_N4_UTRACE 0x00000004 /* Trace user events */ |
33 | * possible, we use PICH as our counter. Mostly this is | 38 | #define PCR_N4_STRACE 0x00000008 /* Trace supervisor events */ |
34 | * to accommodate Niagara-1 which can only count insn cycles | 39 | #define PCR_N4_HTRACE 0x00000010 /* Trace hypervisor events */ |
35 | * in PICH. | 40 | #define PCR_N4_MASK 0x000007e0 /* Event mask */ |
36 | */ | 41 | #define PCR_N4_MASK_SHIFT 5 |
37 | static inline u64 picl_value(unsigned int nmi_hz) | 42 | #define PCR_N4_SL 0x0000f800 /* Event Select */ |
38 | { | 43 | #define PCR_N4_SL_SHIFT 11 |
39 | u32 delta = local_cpu_data().clock_tick / (nmi_hz << picl_shift); | 44 | #define PCR_N4_PICNPT 0x00010000 /* PIC non-privileged trap */ |
40 | 45 | #define PCR_N4_PICNHT 0x00020000 /* PIC non-hypervisor trap */ | |
41 | return ((u64)((0 - delta) & 0xffffffff)) << 32; | 46 | #define PCR_N4_NTC 0x00040000 /* Next-To-Commit wrap */ |
42 | } | ||
43 | |||
44 | extern u64 pcr_enable; | ||
45 | 47 | ||
46 | extern int pcr_arch_init(void); | 48 | extern int pcr_arch_init(void); |
47 | 49 | ||
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) */ |
diff --git a/arch/sparc/include/asm/pstate.h b/arch/sparc/include/asm/pstate.h index a26a53777bb..4b6b998afd9 100644 --- a/arch/sparc/include/asm/pstate.h +++ b/arch/sparc/include/asm/pstate.h | |||
@@ -88,4 +88,18 @@ | |||
88 | #define VERS_MAXTL _AC(0x000000000000ff00,UL) /* Max Trap Level. */ | 88 | #define VERS_MAXTL _AC(0x000000000000ff00,UL) /* Max Trap Level. */ |
89 | #define VERS_MAXWIN _AC(0x000000000000001f,UL) /* Max RegWindow Idx.*/ | 89 | #define VERS_MAXWIN _AC(0x000000000000001f,UL) /* Max RegWindow Idx.*/ |
90 | 90 | ||
91 | /* Compatability Feature Register (%asr26), SPARC-T4 and later */ | ||
92 | #define CFR_AES _AC(0x0000000000000001,UL) /* Supports AES opcodes */ | ||
93 | #define CFR_DES _AC(0x0000000000000002,UL) /* Supports DES opcodes */ | ||
94 | #define CFR_KASUMI _AC(0x0000000000000004,UL) /* Supports KASUMI opcodes */ | ||
95 | #define CFR_CAMELLIA _AC(0x0000000000000008,UL) /* Supports CAMELLIA opcodes*/ | ||
96 | #define CFR_MD5 _AC(0x0000000000000010,UL) /* Supports MD5 opcodes */ | ||
97 | #define CFR_SHA1 _AC(0x0000000000000020,UL) /* Supports SHA1 opcodes */ | ||
98 | #define CFR_SHA256 _AC(0x0000000000000040,UL) /* Supports SHA256 opcodes */ | ||
99 | #define CFR_SHA512 _AC(0x0000000000000080,UL) /* Supports SHA512 opcodes */ | ||
100 | #define CFR_MPMUL _AC(0x0000000000000100,UL) /* Supports MPMUL opcodes */ | ||
101 | #define CFR_MONTMUL _AC(0x0000000000000200,UL) /* Supports MONTMUL opcodes */ | ||
102 | #define CFR_MONTSQR _AC(0x0000000000000400,UL) /* Supports MONTSQR opcodes */ | ||
103 | #define CFR_CRC32C _AC(0x0000000000000800,UL) /* Supports CRC32C opcodes */ | ||
104 | |||
91 | #endif /* !(_SPARC64_PSTATE_H) */ | 105 | #endif /* !(_SPARC64_PSTATE_H) */ |