drm/radeon/dpm: add pcie gen helper function
authorAlex Deucher <alexander.deucher@amd.com>
Mon, 25 Mar 2013 22:28:29 +0000 (18:28 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 27 Jun 2013 23:16:40 +0000 (19:16 -0400)
Add a helper function to determine the preferred
pcie gen based on the card, system, and circumstance.

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/radeon/r600_dpm.c
drivers/gpu/drm/radeon/r600_dpm.h

index 2e5ec65a78f7d4780139f7c4fd3969ecaf33cbe9..28177da694f25b5172e22d5ed68cba9bf9e196a5 100644 (file)
@@ -997,3 +997,26 @@ void r600_free_extended_power_table(struct radeon_device *rdev)
        if (rdev->pm.dpm.dyn_state.ppm_table)
                kfree(rdev->pm.dpm.dyn_state.ppm_table);
 }
+
+enum radeon_pcie_gen r600_get_pcie_gen_support(struct radeon_device *rdev,
+                                              u32 sys_mask,
+                                              enum radeon_pcie_gen asic_gen,
+                                              enum radeon_pcie_gen default_gen)
+{
+       switch (asic_gen) {
+       case RADEON_PCIE_GEN1:
+               return RADEON_PCIE_GEN1;
+       case RADEON_PCIE_GEN2:
+               return RADEON_PCIE_GEN2;
+       case RADEON_PCIE_GEN3:
+               return RADEON_PCIE_GEN3;
+       default:
+               if ((sys_mask & DRM_PCIE_SPEED_80) && (default_gen == RADEON_PCIE_GEN3))
+                       return RADEON_PCIE_GEN3;
+               else if ((sys_mask & DRM_PCIE_SPEED_50) && (default_gen == RADEON_PCIE_GEN2))
+                       return RADEON_PCIE_GEN2;
+               else
+                       return RADEON_PCIE_GEN1;
+       }
+       return RADEON_PCIE_GEN1;
+}
index c6b9e30f20c23ee9188d5bcf022cac69489a5c77..a95ab214289b8a9034997f02a82e0fbbedf655b3 100644 (file)
@@ -218,4 +218,9 @@ bool r600_is_internal_thermal_sensor(enum radeon_int_thermal_type sensor);
 int r600_parse_extended_power_table(struct radeon_device *rdev);
 void r600_free_extended_power_table(struct radeon_device *rdev);
 
+enum radeon_pcie_gen r600_get_pcie_gen_support(struct radeon_device *rdev,
+                                              u32 sys_mask,
+                                              enum radeon_pcie_gen asic_gen,
+                                              enum radeon_pcie_gen default_gen);
+
 #endif