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
This commit is contained in:
Nate Lawson 2005-03-04 18:59:54 +00:00
parent 9954331c23
commit 5e517fee01

View File

@ -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);
}