2010/6/3 Rafał Miłecki zajec5@gmail.com:
2010/5/28 Alex Deucher alexdeucher@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