diff options
author | Mike Travis <travis@sgi.com> | 2013-02-11 14:45:11 -0500 |
---|---|---|
committer | H. Peter Anvin <hpa@linux.intel.com> | 2013-02-11 20:17:50 -0500 |
commit | 6edbd4714edd8af64ec6a1bb8d89d0cb2bbe671e (patch) | |
tree | 33dfde55da9b7688d1d4a59f4666510cb9cde869 | |
parent | 526018bc5eccfe3177780f03d2aaba0efee40720 (diff) |
x86, uv, uv3: Update Hub Info for SGI UV3
This patch updates the UV HUB info for UV3. The "is_uv3_hub" and
"is_uvx_hub" (UV2 or UV3) functions are added as well as the addresses
and sizes of the MMR regions for UV3.
Signed-off-by: Mike Travis <travis@sgi.com>
Link: http://lkml.kernel.org/r/20130211194508.610723192@gulag1.americas.sgi.com
Acked-by: Russ Anderson <rja@sgi.com>
Reviewed-by: Dimitri Sivanich <sivanich@sgi.com>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
-rw-r--r-- | arch/x86/include/asm/uv/uv_hub.h | 44 |
1 files changed, 36 insertions, 8 deletions
diff --git a/arch/x86/include/asm/uv/uv_hub.h b/arch/x86/include/asm/uv/uv_hub.h index 21f7385badb8..2c32df95bb78 100644 --- a/arch/x86/include/asm/uv/uv_hub.h +++ b/arch/x86/include/asm/uv/uv_hub.h | |||
@@ -5,7 +5,7 @@ | |||
5 | * | 5 | * |
6 | * SGI UV architectural definitions | 6 | * SGI UV architectural definitions |
7 | * | 7 | * |
8 | * Copyright (C) 2007-2010 Silicon Graphics, Inc. All rights reserved. | 8 | * Copyright (C) 2007-2013 Silicon Graphics, Inc. All rights reserved. |
9 | */ | 9 | */ |
10 | 10 | ||
11 | #ifndef _ASM_X86_UV_UV_HUB_H | 11 | #ifndef _ASM_X86_UV_UV_HUB_H |
@@ -175,6 +175,7 @@ DECLARE_PER_CPU(struct uv_hub_info_s, __uv_hub_info); | |||
175 | */ | 175 | */ |
176 | #define UV1_HUB_REVISION_BASE 1 | 176 | #define UV1_HUB_REVISION_BASE 1 |
177 | #define UV2_HUB_REVISION_BASE 3 | 177 | #define UV2_HUB_REVISION_BASE 3 |
178 | #define UV3_HUB_REVISION_BASE 5 | ||
178 | 179 | ||
179 | static inline int is_uv1_hub(void) | 180 | static inline int is_uv1_hub(void) |
180 | { | 181 | { |
@@ -183,6 +184,23 @@ static inline int is_uv1_hub(void) | |||
183 | 184 | ||
184 | static inline int is_uv2_hub(void) | 185 | static inline int is_uv2_hub(void) |
185 | { | 186 | { |
187 | return ((uv_hub_info->hub_revision >= UV2_HUB_REVISION_BASE) && | ||
188 | (uv_hub_info->hub_revision < UV3_HUB_REVISION_BASE)); | ||
189 | } | ||
190 | |||
191 | static inline int is_uv3_hub(void) | ||
192 | { | ||
193 | return uv_hub_info->hub_revision >= UV3_HUB_REVISION_BASE; | ||
194 | } | ||
195 | |||
196 | static inline int is_uv_hub(void) | ||
197 | { | ||
198 | return uv_hub_info->hub_revision; | ||
199 | } | ||
200 | |||
201 | /* code common to uv2 and uv3 only */ | ||
202 | static inline int is_uvx_hub(void) | ||
203 | { | ||
186 | return uv_hub_info->hub_revision >= UV2_HUB_REVISION_BASE; | 204 | return uv_hub_info->hub_revision >= UV2_HUB_REVISION_BASE; |
187 | } | 205 | } |
188 | 206 | ||
@@ -230,14 +248,23 @@ union uvh_apicid { | |||
230 | #define UV2_LOCAL_MMR_SIZE (32UL * 1024 * 1024) | 248 | #define UV2_LOCAL_MMR_SIZE (32UL * 1024 * 1024) |
231 | #define UV2_GLOBAL_MMR32_SIZE (32UL * 1024 * 1024) | 249 | #define UV2_GLOBAL_MMR32_SIZE (32UL * 1024 * 1024) |
232 | 250 | ||
233 | #define UV_LOCAL_MMR_BASE (is_uv1_hub() ? UV1_LOCAL_MMR_BASE \ | 251 | #define UV3_LOCAL_MMR_BASE 0xfa000000UL |
234 | : UV2_LOCAL_MMR_BASE) | 252 | #define UV3_GLOBAL_MMR32_BASE 0xfc000000UL |
235 | #define UV_GLOBAL_MMR32_BASE (is_uv1_hub() ? UV1_GLOBAL_MMR32_BASE \ | 253 | #define UV3_LOCAL_MMR_SIZE (32UL * 1024 * 1024) |
236 | : UV2_GLOBAL_MMR32_BASE) | 254 | #define UV3_GLOBAL_MMR32_SIZE (32UL * 1024 * 1024) |
237 | #define UV_LOCAL_MMR_SIZE (is_uv1_hub() ? UV1_LOCAL_MMR_SIZE : \ | 255 | |
238 | UV2_LOCAL_MMR_SIZE) | 256 | #define UV_LOCAL_MMR_BASE (is_uv1_hub() ? UV1_LOCAL_MMR_BASE : \ |
257 | (is_uv2_hub() ? UV2_LOCAL_MMR_BASE : \ | ||
258 | UV3_LOCAL_MMR_BASE)) | ||
259 | #define UV_GLOBAL_MMR32_BASE (is_uv1_hub() ? UV1_GLOBAL_MMR32_BASE :\ | ||
260 | (is_uv2_hub() ? UV2_GLOBAL_MMR32_BASE :\ | ||
261 | UV3_GLOBAL_MMR32_BASE)) | ||
262 | #define UV_LOCAL_MMR_SIZE (is_uv1_hub() ? UV1_LOCAL_MMR_SIZE : \ | ||
263 | (is_uv2_hub() ? UV2_LOCAL_MMR_SIZE : \ | ||
264 | UV3_LOCAL_MMR_SIZE)) | ||
239 | #define UV_GLOBAL_MMR32_SIZE (is_uv1_hub() ? UV1_GLOBAL_MMR32_SIZE :\ | 265 | #define UV_GLOBAL_MMR32_SIZE (is_uv1_hub() ? UV1_GLOBAL_MMR32_SIZE :\ |
240 | UV2_GLOBAL_MMR32_SIZE) | 266 | (is_uv2_hub() ? UV2_GLOBAL_MMR32_SIZE :\ |
267 | UV3_GLOBAL_MMR32_SIZE)) | ||
241 | #define UV_GLOBAL_MMR64_BASE (uv_hub_info->global_mmr_base) | 268 | #define UV_GLOBAL_MMR64_BASE (uv_hub_info->global_mmr_base) |
242 | 269 | ||
243 | #define UV_GLOBAL_GRU_MMR_BASE 0x4000000 | 270 | #define UV_GLOBAL_GRU_MMR_BASE 0x4000000 |
@@ -599,6 +626,7 @@ static inline void uv_hub_send_ipi(int pnode, int apicid, int vector) | |||
599 | * 1 - UV1 rev 1.0 initial silicon | 626 | * 1 - UV1 rev 1.0 initial silicon |
600 | * 2 - UV1 rev 2.0 production silicon | 627 | * 2 - UV1 rev 2.0 production silicon |
601 | * 3 - UV2 rev 1.0 initial silicon | 628 | * 3 - UV2 rev 1.0 initial silicon |
629 | * 5 - UV3 rev 1.0 initial silicon | ||
602 | */ | 630 | */ |
603 | static inline int uv_get_min_hub_revision_id(void) | 631 | static inline int uv_get_min_hub_revision_id(void) |
604 | { | 632 | { |