New cpufreq framework and drivers
Nate Lawson
nate at root.org
Wed Feb 2 13:29:45 PST 2005
Bruno Ducrot wrote:
> On Wed, Feb 02, 2005 at 12:03:47PM -0800, Nate Lawson wrote:
>
>>Colin Percival wrote:
>>
>>>Nate Lawson wrote:
>>>
>>>
>>>>Hardware drivers are of two types, absolute
>>>>and relative. SpeedStep, Powernow, etc. are absolute drivers in that
>>>>they set the cpu's base frequency. ACPI throttling, Longrun, etc. are
>>>>relative drivers that reduce the processor's clock to a fraction of
>>>>its current base (i.e., they have an additive effect.)
>>>
>>>
>>>If my first glance at the patch is correct, this would have my laptop (a
>>>1.4GHz
>>>Pentium M) reporting the availability of the frequencies 600MHz, 800MHz,
>>>etc.
>>
>>>from enhanced speedstep, along with the frequencies 300MHz, 400MHz,
>>
>>>500MHz, and
>>>700MHz obtained via 50% clock throttling.
>>
>>That is correct. The code to support relative drivers was removed
>>before posting to give the basic framework more testing before I commit
>>it shortly. The relative support will go in soon after that code is
>>committed.
>>
>
> But longrun is relative though and can scale voltage.
> (And the point that longrun can control frequency itself is imho irrelevant).
If you look at struct cf_setting, the "freq" field is either the
absolute freq in Mhz (i.e. 700 = 700 Mhz) or a relative percentage (i.e.
50 = 50% clock reduction). The way you tell the difference is that the
CPUFREQ_DRV_SETTINGS() method returns a "type", which is either absolute
or relative.
All the other fields are valid for both types so your driver would set
the "volt" field of cf_setting to whatever Longrun says.) If your
driver somehow knew the power consumed for that setting, it could supply
that info too. Otherwise, set CPUFREQ_VAL_UNKNOWN for each value not
known by the driver.
(BTW, I'm moving relative units to hundredths of a percent, i.e. 8055 =
80.55%)
--
Nate
More information about the freebsd-acpi
mailing list