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 | { |
