aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/include/asm/uv/uv_bau.h
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/include/asm/uv/uv_bau.h')
-rw-r--r--arch/x86/include/asm/uv/uv_bau.h19
1 files changed, 11 insertions, 8 deletions
diff --git a/arch/x86/include/asm/uv/uv_bau.h b/arch/x86/include/asm/uv/uv_bau.h
index 0b46ef261c77..2d60a7813dfe 100644
--- a/arch/x86/include/asm/uv/uv_bau.h
+++ b/arch/x86/include/asm/uv/uv_bau.h
@@ -73,6 +73,7 @@
73#define UV_INTD_SOFT_ACK_TIMEOUT_PERIOD (is_uv1_hub() ? \ 73#define UV_INTD_SOFT_ACK_TIMEOUT_PERIOD (is_uv1_hub() ? \
74 UV1_INTD_SOFT_ACK_TIMEOUT_PERIOD : \ 74 UV1_INTD_SOFT_ACK_TIMEOUT_PERIOD : \
75 UV2_INTD_SOFT_ACK_TIMEOUT_PERIOD) 75 UV2_INTD_SOFT_ACK_TIMEOUT_PERIOD)
76/* assuming UV3 is the same */
76 77
77#define BAU_MISC_CONTROL_MULT_MASK 3 78#define BAU_MISC_CONTROL_MULT_MASK 3
78 79
@@ -93,6 +94,8 @@
93#define SOFTACK_MSHIFT UVH_LB_BAU_MISC_CONTROL_ENABLE_INTD_SOFT_ACK_MODE_SHFT 94#define SOFTACK_MSHIFT UVH_LB_BAU_MISC_CONTROL_ENABLE_INTD_SOFT_ACK_MODE_SHFT
94#define SOFTACK_PSHIFT UVH_LB_BAU_MISC_CONTROL_INTD_SOFT_ACK_TIMEOUT_PERIOD_SHFT 95#define SOFTACK_PSHIFT UVH_LB_BAU_MISC_CONTROL_INTD_SOFT_ACK_TIMEOUT_PERIOD_SHFT
95#define SOFTACK_TIMEOUT_PERIOD UV_INTD_SOFT_ACK_TIMEOUT_PERIOD 96#define SOFTACK_TIMEOUT_PERIOD UV_INTD_SOFT_ACK_TIMEOUT_PERIOD
97#define PREFETCH_HINT_SHFT UV3H_LB_BAU_MISC_CONTROL_ENABLE_INTD_PREFETCH_HINT_SHFT
98#define SB_STATUS_SHFT UV3H_LB_BAU_MISC_CONTROL_ENABLE_EXTENDED_SB_STATUS_SHFT
96#define write_gmmr uv_write_global_mmr64 99#define write_gmmr uv_write_global_mmr64
97#define write_lmmr uv_write_local_mmr 100#define write_lmmr uv_write_local_mmr
98#define read_lmmr uv_read_local_mmr 101#define read_lmmr uv_read_local_mmr
@@ -322,8 +325,9 @@ struct uv1_bau_msg_header {
322/* 325/*
323 * UV2 Message header: 16 bytes (128 bits) (bytes 0x30-0x3f of descriptor) 326 * UV2 Message header: 16 bytes (128 bits) (bytes 0x30-0x3f of descriptor)
324 * see figure 9-2 of harp_sys.pdf 327 * see figure 9-2 of harp_sys.pdf
328 * assuming UV3 is the same
325 */ 329 */
326struct uv2_bau_msg_header { 330struct uv2_3_bau_msg_header {
327 unsigned int base_dest_nasid:15; /* nasid of the first bit */ 331 unsigned int base_dest_nasid:15; /* nasid of the first bit */
328 /* bits 14:0 */ /* in uvhub map */ 332 /* bits 14:0 */ /* in uvhub map */
329 unsigned int dest_subnodeid:5; /* must be 0x10, for the LB */ 333 unsigned int dest_subnodeid:5; /* must be 0x10, for the LB */
@@ -395,7 +399,7 @@ struct bau_desc {
395 */ 399 */
396 union bau_msg_header { 400 union bau_msg_header {
397 struct uv1_bau_msg_header uv1_hdr; 401 struct uv1_bau_msg_header uv1_hdr;
398 struct uv2_bau_msg_header uv2_hdr; 402 struct uv2_3_bau_msg_header uv2_3_hdr;
399 } header; 403 } header;
400 404
401 struct bau_msg_payload payload; 405 struct bau_msg_payload payload;
@@ -631,11 +635,6 @@ struct bau_control {
631 struct hub_and_pnode *thp; 635 struct hub_and_pnode *thp;
632}; 636};
633 637
634static inline unsigned long read_mmr_uv2_status(void)
635{
636 return read_lmmr(UV2H_LB_BAU_SB_ACTIVATION_STATUS_2);
637}
638
639static inline void write_mmr_data_broadcast(int pnode, unsigned long mmr_image) 638static inline void write_mmr_data_broadcast(int pnode, unsigned long mmr_image)
640{ 639{
641 write_gmmr(pnode, UVH_BAU_DATA_BROADCAST, mmr_image); 640 write_gmmr(pnode, UVH_BAU_DATA_BROADCAST, mmr_image);
@@ -760,7 +759,11 @@ static inline int atomic_read_short(const struct atomic_short *v)
760 */ 759 */
761static inline int atom_asr(short i, struct atomic_short *v) 760static inline int atom_asr(short i, struct atomic_short *v)
762{ 761{
763 return i + xadd(&v->counter, i); 762 short __i = i;
763 asm volatile(LOCK_PREFIX "xaddw %0, %1"
764 : "+r" (i), "+m" (v->counter)
765 : : "memory");
766 return i + __i;
764} 767}
765 768
766/* 769/*