diff --git a/sys/dev/acpica/acpi_cpu.c b/sys/dev/acpica/acpi_cpu.c
--- a/sys/dev/acpica/acpi_cpu.c
+++ b/sys/dev/acpica/acpi_cpu.c
@@ -396,6 +396,17 @@
      */
     if (!acpi_disabled("mwait") && cpu_mwait_usable())
 	sc->cpu_features |= ACPI_CAP_SMP_C1_NATIVE | ACPI_CAP_SMP_C3_NATIVE;
+
+    /*
+     * Work around a lingering SMM bug which leads to freezes when handling
+     * CPPC notifications. Tell the SMM we will handle any CPPC notifications.
+     */
+    int cppcval = 0;
+    if ((cpu_power_eax & CPUTPM1_HWP_NOTIFICATION) &&
+        (resource_int_value("acpi", 0, "nocppcworkaround", &cppcval) != 0
+	    || cppcval == 0)) {
+	    sc->cpu_features |= ACPI_CAP_INTR_CPPC;
+    }
 #endif
 
     if (devclass_get_drivers(device_get_devclass(dev), &drivers,