diff options
author | njl <njl@FreeBSD.org> | 2005-03-04 18:59:54 +0000 |
---|---|---|
committer | njl <njl@FreeBSD.org> | 2005-03-04 18:59:54 +0000 |
commit | 0ac02e4b45bb4db09ab3ba877571ad9c8cfa548d (patch) | |
tree | fb18e065058ea990c27918304acd7c511d63f65b | |
parent | af31e4b0b53583946ba7c6313d1cb89eaae260c2 (diff) | |
download | FreeBSD-src-0ac02e4b45bb4db09ab3ba877571ad9c8cfa548d.zip FreeBSD-src-0ac02e4b45bb4db09ab3ba877571ad9c8cfa548d.tar.gz |
On i386 platforms at least, ACPI throttling is accomplished by the chipset
modulating the STPCLK# pin based on the duty cycle. Since p4tcc uses the
same mechanism (but internal to the CPU), we triggered a hang on some
systems at low frequencies when both were in use. Now, disable
acpi_throttle when p4tcc is also present.
Tested by: Kevin Oberman
-rw-r--r-- | sys/dev/acpica/acpi_throttle.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/sys/dev/acpica/acpi_throttle.c b/sys/dev/acpica/acpi_throttle.c index b736124..073b060 100644 --- a/sys/dev/acpica/acpi_throttle.c +++ b/sys/dev/acpica/acpi_throttle.c @@ -134,7 +134,7 @@ acpi_throttle_identify(driver_t *driver, device_t parent) ACPI_OBJECT *obj; /* Make sure we're not being doubly invoked. */ - if (device_find_child(parent, "acpi_throttle", -1) != NULL) + if (device_find_child(parent, "acpi_throttle", -1)) return; /* Check for a valid duty width and parent CPU type. */ @@ -169,6 +169,15 @@ acpi_throttle_probe(device_t dev) if (resource_disabled("acpi_throttle", 0)) return (ENXIO); + /* + * On i386 platforms at least, ACPI throttling is accomplished by + * the chipset modulating the STPCLK# pin based on the duty cycle. + * Since p4tcc uses the same mechanism (but internal to the CPU), + * we disable acpi_throttle when p4tcc is also present. + */ + if (device_find_child(device_get_parent(dev), "p4tcc", -1)) + return (ENXIO); + device_set_desc(dev, "ACPI CPU Throttling"); return (0); } |