|
@@ -172,6 +172,8 @@ DECLARE_PER_CPU(struct uv_hub_info_s, __uv_hub_info);
|
|
#define UV_LOCAL_MMR_SIZE (64UL * 1024 * 1024)
|
|
#define UV_LOCAL_MMR_SIZE (64UL * 1024 * 1024)
|
|
#define UV_GLOBAL_MMR32_SIZE (64UL * 1024 * 1024)
|
|
#define UV_GLOBAL_MMR32_SIZE (64UL * 1024 * 1024)
|
|
|
|
|
|
|
|
+#define UV_GLOBAL_GRU_MMR_BASE 0x4000000
|
|
|
|
+
|
|
#define UV_GLOBAL_MMR32_PNODE_SHIFT 15
|
|
#define UV_GLOBAL_MMR32_PNODE_SHIFT 15
|
|
#define UV_GLOBAL_MMR64_PNODE_SHIFT 26
|
|
#define UV_GLOBAL_MMR64_PNODE_SHIFT 26
|
|
|
|
|
|
@@ -327,6 +329,15 @@ static inline unsigned long uv_read_global_mmr64(int pnode,
|
|
return readq(uv_global_mmr64_address(pnode, offset));
|
|
return readq(uv_global_mmr64_address(pnode, offset));
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+/*
|
|
|
|
+ * Global MMR space addresses when referenced by the GRU. (GRU does
|
|
|
|
+ * NOT use socket addressing).
|
|
|
|
+ */
|
|
|
|
+static inline unsigned long uv_global_gru_mmr_address(int pnode, unsigned long offset)
|
|
|
|
+{
|
|
|
|
+ return UV_GLOBAL_GRU_MMR_BASE | offset | (pnode << uv_hub_info->m_val);
|
|
|
|
+}
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* Access hub local MMRs. Faster than using global space but only local MMRs
|
|
* Access hub local MMRs. Faster than using global space but only local MMRs
|
|
* are accessible.
|
|
* are accessible.
|
|
@@ -454,6 +465,14 @@ static inline void uv_set_cpu_scir_bits(int cpu, unsigned char value)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static unsigned long uv_hub_ipi_value(int apicid, int vector, int mode)
|
|
|
|
+{
|
|
|
|
+ return (1UL << UVH_IPI_INT_SEND_SHFT) |
|
|
|
|
+ ((apicid) << UVH_IPI_INT_APIC_ID_SHFT) |
|
|
|
|
+ (mode << UVH_IPI_INT_DELIVERY_MODE_SHFT) |
|
|
|
|
+ (vector << UVH_IPI_INT_VECTOR_SHFT);
|
|
|
|
+}
|
|
|
|
+
|
|
static inline void uv_hub_send_ipi(int pnode, int apicid, int vector)
|
|
static inline void uv_hub_send_ipi(int pnode, int apicid, int vector)
|
|
{
|
|
{
|
|
unsigned long val;
|
|
unsigned long val;
|
|
@@ -462,10 +481,7 @@ static inline void uv_hub_send_ipi(int pnode, int apicid, int vector)
|
|
if (vector == NMI_VECTOR)
|
|
if (vector == NMI_VECTOR)
|
|
dmode = dest_NMI;
|
|
dmode = dest_NMI;
|
|
|
|
|
|
- val = (1UL << UVH_IPI_INT_SEND_SHFT) |
|
|
|
|
- ((apicid) << UVH_IPI_INT_APIC_ID_SHFT) |
|
|
|
|
- (dmode << UVH_IPI_INT_DELIVERY_MODE_SHFT) |
|
|
|
|
- (vector << UVH_IPI_INT_VECTOR_SHFT);
|
|
|
|
|
|
+ val = uv_hub_ipi_value(apicid, vector, dmode);
|
|
uv_write_global_mmr64(pnode, UVH_IPI_INT, val);
|
|
uv_write_global_mmr64(pnode, UVH_IPI_INT, val);
|
|
}
|
|
}
|
|
|
|
|