diff options
Diffstat (limited to 'arch/x86/include/asm/uv/uv_hub.h')
| -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 21f7385badb..2c32df95bb7 100644 --- a/arch/x86/include/asm/uv/uv_hub.h +++ b/arch/x86/include/asm/uv/uv_hub.h @@ -5,7 +5,7 @@   *   * SGI UV architectural definitions   * - * Copyright (C) 2007-2010 Silicon Graphics, Inc. All rights reserved. + * Copyright (C) 2007-2013 Silicon Graphics, Inc. All rights reserved.   */  #ifndef _ASM_X86_UV_UV_HUB_H @@ -175,6 +175,7 @@ DECLARE_PER_CPU(struct uv_hub_info_s, __uv_hub_info);   */  #define UV1_HUB_REVISION_BASE		1  #define UV2_HUB_REVISION_BASE		3 +#define UV3_HUB_REVISION_BASE		5  static inline int is_uv1_hub(void)  { @@ -183,6 +184,23 @@ static inline int is_uv1_hub(void)  static inline int is_uv2_hub(void)  { +	return ((uv_hub_info->hub_revision >= UV2_HUB_REVISION_BASE) && +		(uv_hub_info->hub_revision < UV3_HUB_REVISION_BASE)); +} + +static inline int is_uv3_hub(void) +{ +	return uv_hub_info->hub_revision >= UV3_HUB_REVISION_BASE; +} + +static inline int is_uv_hub(void) +{ +	return uv_hub_info->hub_revision; +} + +/* code common to uv2 and uv3 only */ +static inline int is_uvx_hub(void) +{  	return uv_hub_info->hub_revision >= UV2_HUB_REVISION_BASE;  } @@ -230,14 +248,23 @@ union uvh_apicid {  #define UV2_LOCAL_MMR_SIZE		(32UL * 1024 * 1024)  #define UV2_GLOBAL_MMR32_SIZE		(32UL * 1024 * 1024) -#define UV_LOCAL_MMR_BASE		(is_uv1_hub() ? UV1_LOCAL_MMR_BASE     \ -						: UV2_LOCAL_MMR_BASE) -#define UV_GLOBAL_MMR32_BASE		(is_uv1_hub() ? UV1_GLOBAL_MMR32_BASE  \ -						: UV2_GLOBAL_MMR32_BASE) -#define UV_LOCAL_MMR_SIZE		(is_uv1_hub() ? UV1_LOCAL_MMR_SIZE :   \ -						UV2_LOCAL_MMR_SIZE) +#define UV3_LOCAL_MMR_BASE		0xfa000000UL +#define UV3_GLOBAL_MMR32_BASE		0xfc000000UL +#define UV3_LOCAL_MMR_SIZE		(32UL * 1024 * 1024) +#define UV3_GLOBAL_MMR32_SIZE		(32UL * 1024 * 1024) + +#define UV_LOCAL_MMR_BASE		(is_uv1_hub() ? UV1_LOCAL_MMR_BASE : \ +					(is_uv2_hub() ? UV2_LOCAL_MMR_BASE : \ +							UV3_LOCAL_MMR_BASE)) +#define UV_GLOBAL_MMR32_BASE		(is_uv1_hub() ? UV1_GLOBAL_MMR32_BASE :\ +					(is_uv2_hub() ? UV2_GLOBAL_MMR32_BASE :\ +							UV3_GLOBAL_MMR32_BASE)) +#define UV_LOCAL_MMR_SIZE		(is_uv1_hub() ? UV1_LOCAL_MMR_SIZE : \ +					(is_uv2_hub() ? UV2_LOCAL_MMR_SIZE : \ +							UV3_LOCAL_MMR_SIZE))  #define UV_GLOBAL_MMR32_SIZE		(is_uv1_hub() ? UV1_GLOBAL_MMR32_SIZE :\ -						UV2_GLOBAL_MMR32_SIZE) +					(is_uv2_hub() ? UV2_GLOBAL_MMR32_SIZE :\ +							UV3_GLOBAL_MMR32_SIZE))  #define UV_GLOBAL_MMR64_BASE		(uv_hub_info->global_mmr_base)  #define UV_GLOBAL_GRU_MMR_BASE		0x4000000 @@ -599,6 +626,7 @@ static inline void uv_hub_send_ipi(int pnode, int apicid, int vector)   *     1 - UV1 rev 1.0 initial silicon   *     2 - UV1 rev 2.0 production silicon   *     3 - UV2 rev 1.0 initial silicon + *     5 - UV3 rev 1.0 initial silicon   */  static inline int uv_get_min_hub_revision_id(void)  {  |