[PATCH] drm/radeon/kms/pm: add support for SetVoltage cmd table (V2)

Alex Deucher alexdeucher at gmail.com
Thu Jun 3 19:20:28 PDT 2010


2010/6/3 Rafał Miłecki <zajec5 at gmail.com>:
> 2010/5/28 Alex Deucher <alexdeucher at gmail.com>:
>> diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
>> index dac2534..d84d7cf 100644
>> --- a/drivers/gpu/drm/radeon/r600.c
>> +++ b/drivers/gpu/drm/radeon/r600.c
>> @@ -475,6 +475,12 @@ void r600_pm_init_profile(struct radeon_device *rdev)
>>
>>  void r600_pm_misc(struct radeon_device *rdev)
>>  {
>> +       int requested_index = rdev->pm.requested_power_state_index;
>> +       struct radeon_power_state *ps = &rdev->pm.power_state[requested_index];
>> +       struct radeon_voltage *voltage = &ps->clock_info[0].voltage;
>> +
>> +       if ((voltage->type == VOLTAGE_SW) && voltage->voltage)
>> +               radeon_atom_set_voltage(rdev, voltage->voltage);
>>
>>  }
>>
>
> In case of my RV620 I can see (using AtomDis):
>    0004:  UCHAR ucVoltageType                                 = 0x01       (1)
> so it looks that my GPU uses VOLTAGE_GPIO (it's 0x01).
>
> You seem to do not use SetVoltage AtomBIOS command for VOLTAGE_GPIO.
> However in case of my BIOS there is SetVoltage command table.
>
> Could you comment on this, please?

The VOLTAGE_GPIO, VOLTAGE_SW, etc. enums in the driver are a little
confusing I guess.  They refer to the interface used to program the
voltage.  We could have called them VOLTAGE_TYPE1, VOLTAGE_TYPE2,
etc., but I wanted to provide a bit more info about the type.

VOLTAGE_GPIO refers to the cases where the power table specifies the
GPIO reg and a mask for voltage control.
VOLTAGE_VDDC refers to the cases where the power table specifies an
index into the VDDC voltage table.
VOLTAGE_SW refers to the cases where the power table specifies the
actual voltage value which SW (software) has to program.

Your system (actually all r6xx+ vbioses) specifies a voltage value, so
they are the VOLTAGE_SW type.  The actual implementation on the board
may be gpio or i2c, etc.; depends on the board.   The SetVoltage
command table uses the VoltageObject data table to look up the the
relevant info based on the voltage value specified.

I hope that clarifies things.

Alex


More information about the dri-devel mailing list