|
@@ -1106,6 +1106,31 @@ union firmware_info {
|
|
|
ATOM_FIRMWARE_INFO_V2_2 info_22;
|
|
|
};
|
|
|
|
|
|
+union igp_info {
|
|
|
+ struct _ATOM_INTEGRATED_SYSTEM_INFO info;
|
|
|
+ struct _ATOM_INTEGRATED_SYSTEM_INFO_V2 info_2;
|
|
|
+ struct _ATOM_INTEGRATED_SYSTEM_INFO_V6 info_6;
|
|
|
+ struct _ATOM_INTEGRATED_SYSTEM_INFO_V1_7 info_7;
|
|
|
+ struct _ATOM_INTEGRATED_SYSTEM_INFO_V1_8 info_8;
|
|
|
+};
|
|
|
+
|
|
|
+static void radeon_atombios_get_dentist_vco_freq(struct radeon_device *rdev)
|
|
|
+{
|
|
|
+ struct radeon_mode_info *mode_info = &rdev->mode_info;
|
|
|
+ int index = GetIndexIntoMasterTable(DATA, IntegratedSystemInfo);
|
|
|
+ union igp_info *igp_info;
|
|
|
+ u8 frev, crev;
|
|
|
+ u16 data_offset;
|
|
|
+
|
|
|
+ if (atom_parse_data_header(mode_info->atom_context, index, NULL,
|
|
|
+ &frev, &crev, &data_offset)) {
|
|
|
+ igp_info = (union igp_info *)(mode_info->atom_context->bios +
|
|
|
+ data_offset);
|
|
|
+ rdev->clock.vco_freq =
|
|
|
+ le32_to_cpu(igp_info->info_6.ulDentistVCOFreq);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
bool radeon_atom_get_clock_info(struct drm_device *dev)
|
|
|
{
|
|
|
struct radeon_device *rdev = dev->dev_private;
|
|
@@ -1260,6 +1285,10 @@ bool radeon_atom_get_clock_info(struct drm_device *dev)
|
|
|
if (ASIC_IS_DCE8(rdev))
|
|
|
rdev->clock.vco_freq =
|
|
|
le32_to_cpu(firmware_info->info_22.ulGPUPLL_OutputFreq);
|
|
|
+ else if (ASIC_IS_DCE5(rdev))
|
|
|
+ rdev->clock.vco_freq = rdev->clock.current_dispclk;
|
|
|
+ else if (ASIC_IS_DCE41(rdev))
|
|
|
+ radeon_atombios_get_dentist_vco_freq(rdev);
|
|
|
else
|
|
|
rdev->clock.vco_freq = rdev->clock.current_dispclk;
|
|
|
|
|
@@ -1272,14 +1301,6 @@ bool radeon_atom_get_clock_info(struct drm_device *dev)
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
-union igp_info {
|
|
|
- struct _ATOM_INTEGRATED_SYSTEM_INFO info;
|
|
|
- struct _ATOM_INTEGRATED_SYSTEM_INFO_V2 info_2;
|
|
|
- struct _ATOM_INTEGRATED_SYSTEM_INFO_V6 info_6;
|
|
|
- struct _ATOM_INTEGRATED_SYSTEM_INFO_V1_7 info_7;
|
|
|
- struct _ATOM_INTEGRATED_SYSTEM_INFO_V1_8 info_8;
|
|
|
-};
|
|
|
-
|
|
|
bool radeon_atombios_sideport_present(struct radeon_device *rdev)
|
|
|
{
|
|
|
struct radeon_mode_info *mode_info = &rdev->mode_info;
|