Lines Matching +full:duty +full:- +full:cycle

1 /*-
2 * Copyright (c) 2003-2005 Nate Lawson (SDG)
50 * clock cycle. It does not change voltage and so is less efficient than
90 static int thr_rid; /* Driver-wide resource id. */
134 if (device_find_child(parent, "acpi_throttle", -1)) in acpi_throttle_identify()
137 /* Check for a valid duty width and parent CPU type. */ in acpi_throttle_identify()
146 * Add a child if there's a non-NULL P_BLK and correct length, or in acpi_throttle_identify()
154 if ((obj->Processor.PblkAddress && obj->Processor.PblkLength >= 4) || in acpi_throttle_identify()
172 * the chipset modulating the STPCLK# pin based on the duty cycle. in acpi_throttle_probe()
176 if (device_find_child(device_get_parent(dev), "p4tcc", -1) && in acpi_throttle_probe()
195 sc->cpu_dev = dev; in acpi_throttle_attach()
196 sc->cpu_handle = acpi_get_handle(dev); in acpi_throttle_attach()
200 status = AcpiEvaluateObject(sc->cpu_handle, NULL, NULL, &buf); in acpi_throttle_attach()
202 device_printf(dev, "attach failed to get Processor obj - %s\n", in acpi_throttle_attach()
207 sc->cpu_p_blk = obj->Processor.PblkAddress; in acpi_throttle_attach()
208 sc->cpu_p_blk_len = obj->Processor.PblkLength; in acpi_throttle_attach()
242 if (device_get_unit(sc->cpu_dev) == 0) { in acpi_throttle_evaluate()
249 /* Validate the duty offset/width. */ in acpi_throttle_evaluate()
250 duty_end = cpu_duty_offset + cpu_duty_width - 1; in acpi_throttle_evaluate()
252 device_printf(sc->cpu_dev, in acpi_throttle_evaluate()
257 device_printf(sc->cpu_dev, in acpi_throttle_evaluate()
271 status = AcpiEvaluateObject(sc->cpu_handle, "_PTC", NULL, &buf); in acpi_throttle_evaluate()
274 device_printf(sc->cpu_dev, "_PTC buffer too small\n"); in acpi_throttle_evaluate()
278 acpi_bus_alloc_gas(sc->cpu_dev, &sc->cpu_p_type, &thr_rid, in acpi_throttle_evaluate()
279 &gas, &sc->cpu_p_cnt, 0); in acpi_throttle_evaluate()
280 if (sc->cpu_p_cnt != NULL && bootverbose) { in acpi_throttle_evaluate()
281 device_printf(sc->cpu_dev, "P_CNT from _PTC %#jx\n", in acpi_throttle_evaluate()
287 if (sc->cpu_p_cnt == NULL) { in acpi_throttle_evaluate()
293 if (sc->cpu_p_blk_len < 4) in acpi_throttle_evaluate()
295 gas.Address = sc->cpu_p_blk; in acpi_throttle_evaluate()
298 acpi_bus_alloc_gas(sc->cpu_dev, &sc->cpu_p_type, &thr_rid, in acpi_throttle_evaluate()
299 &gas, &sc->cpu_p_cnt, 0); in acpi_throttle_evaluate()
300 if (sc->cpu_p_cnt != NULL) { in acpi_throttle_evaluate()
302 device_printf(sc->cpu_dev, in acpi_throttle_evaluate()
303 "P_CNT from P_BLK %#x\n", sc->cpu_p_blk); in acpi_throttle_evaluate()
305 device_printf(sc->cpu_dev, "failed to attach P_CNT\n"); in acpi_throttle_evaluate()
325 * Disable throttling control on PIIX4 A and B-step. in acpi_throttle_quirks()
326 * See specification changes #13 ("Manual Throttle Duty Cycle") in acpi_throttle_quirks()
355 for (i = 0, speed = CPU_MAX_SPEED; speed != 0; i++, speed--) { in acpi_thr_settings()
375 * Validate requested state converts to a duty cycle that is an in acpi_thr_set()
378 speed = set->freq * CPU_MAX_SPEED / 10000; in acpi_thr_set()
379 if (speed * 10000 != set->freq * CPU_MAX_SPEED || in acpi_thr_set()
384 if (speed == sc->cpu_thr_state) in acpi_thr_set()
388 p_cnt = THR_GET_REG(sc->cpu_p_cnt); in acpi_thr_set()
390 THR_SET_REG(sc->cpu_p_cnt, p_cnt); in acpi_thr_set()
395 clk_val = (CPU_MAX_SPEED - 1) << cpu_duty_offset; in acpi_thr_set()
400 THR_SET_REG(sc->cpu_p_cnt, p_cnt); in acpi_thr_set()
402 THR_SET_REG(sc->cpu_p_cnt, p_cnt); in acpi_thr_set()
404 sc->cpu_thr_state = speed; in acpi_thr_set()
420 p_cnt = THR_GET_REG(sc->cpu_p_cnt); in acpi_thr_get()
421 clk_val = (p_cnt >> cpu_duty_offset) & (CPU_MAX_SPEED - 1); in acpi_thr_get()
422 sc->cpu_thr_state = clk_val; in acpi_thr_get()
425 set->freq = CPU_SPEED_PERCENT(clk_val); in acpi_thr_get()
426 set->dev = dev; in acpi_thr_get()