|
@@ -776,23 +776,36 @@ static inline int uv_num_possible_blades(void)
|
|
|
extern void uv_nmi_setup(void);
|
|
|
extern void uv_nmi_setup_hubless(void);
|
|
|
|
|
|
+/* BIOS/Kernel flags exchange MMR */
|
|
|
+#define UVH_BIOS_KERNEL_MMR UVH_SCRATCH5
|
|
|
+#define UVH_BIOS_KERNEL_MMR_ALIAS UVH_SCRATCH5_ALIAS
|
|
|
+#define UVH_BIOS_KERNEL_MMR_ALIAS_2 UVH_SCRATCH5_ALIAS_2
|
|
|
+
|
|
|
+/* TSC sync valid, set by BIOS */
|
|
|
+#define UVH_TSC_SYNC_MMR UVH_BIOS_KERNEL_MMR
|
|
|
+#define UVH_TSC_SYNC_SHIFT 10
|
|
|
+#define UVH_TSC_SYNC_SHIFT_UV2K 16 /* UV2/3k have different bits */
|
|
|
+#define UVH_TSC_SYNC_MASK 3 /* 0011 */
|
|
|
+#define UVH_TSC_SYNC_VALID 3 /* 0011 */
|
|
|
+#define UVH_TSC_SYNC_INVALID 2 /* 0010 */
|
|
|
+
|
|
|
/* BMC sets a bit this MMR non-zero before sending an NMI */
|
|
|
-#define UVH_NMI_MMR UVH_SCRATCH5
|
|
|
-#define UVH_NMI_MMR_CLEAR UVH_SCRATCH5_ALIAS
|
|
|
+#define UVH_NMI_MMR UVH_BIOS_KERNEL_MMR
|
|
|
+#define UVH_NMI_MMR_CLEAR UVH_BIOS_KERNEL_MMR_ALIAS
|
|
|
#define UVH_NMI_MMR_SHIFT 63
|
|
|
-#define UVH_NMI_MMR_TYPE "SCRATCH5"
|
|
|
+#define UVH_NMI_MMR_TYPE "SCRATCH5"
|
|
|
|
|
|
/* Newer SMM NMI handler, not present in all systems */
|
|
|
#define UVH_NMI_MMRX UVH_EVENT_OCCURRED0
|
|
|
#define UVH_NMI_MMRX_CLEAR UVH_EVENT_OCCURRED0_ALIAS
|
|
|
#define UVH_NMI_MMRX_SHIFT UVH_EVENT_OCCURRED0_EXTIO_INT0_SHFT
|
|
|
-#define UVH_NMI_MMRX_TYPE "EXTIO_INT0"
|
|
|
+#define UVH_NMI_MMRX_TYPE "EXTIO_INT0"
|
|
|
|
|
|
/* Non-zero indicates newer SMM NMI handler present */
|
|
|
#define UVH_NMI_MMRX_SUPPORTED UVH_EXTIO_INT0_BROADCAST
|
|
|
|
|
|
/* Indicates to BIOS that we want to use the newer SMM NMI handler */
|
|
|
-#define UVH_NMI_MMRX_REQ UVH_SCRATCH5_ALIAS_2
|
|
|
+#define UVH_NMI_MMRX_REQ UVH_BIOS_KERNEL_MMR_ALIAS_2
|
|
|
#define UVH_NMI_MMRX_REQ_SHIFT 62
|
|
|
|
|
|
struct uv_hub_nmi_s {
|