diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_atombios.c')
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_atombios.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_atombios.c b/drivers/gpu/drm/radeon/radeon_atombios.c index c4b5d0542ee2..f22eb5713528 100644 --- a/drivers/gpu/drm/radeon/radeon_atombios.c +++ b/drivers/gpu/drm/radeon/radeon_atombios.c | |||
@@ -1254,6 +1254,10 @@ bool radeon_atom_get_clock_info(struct drm_device *dev) | |||
1254 | if (rdev->clock.max_pixel_clock == 0) | 1254 | if (rdev->clock.max_pixel_clock == 0) |
1255 | rdev->clock.max_pixel_clock = 40000; | 1255 | rdev->clock.max_pixel_clock = 40000; |
1256 | 1256 | ||
1257 | /* not technically a clock, but... */ | ||
1258 | rdev->mode_info.firmware_flags = | ||
1259 | le16_to_cpu(firmware_info->info.usFirmwareCapability.susAccess); | ||
1260 | |||
1257 | return true; | 1261 | return true; |
1258 | } | 1262 | } |
1259 | 1263 | ||
@@ -2005,7 +2009,8 @@ static int radeon_atombios_parse_power_table_1_3(struct radeon_device *rdev) | |||
2005 | power_info = (union power_info *)(mode_info->atom_context->bios + data_offset); | 2009 | power_info = (union power_info *)(mode_info->atom_context->bios + data_offset); |
2006 | 2010 | ||
2007 | /* add the i2c bus for thermal/fan chip */ | 2011 | /* add the i2c bus for thermal/fan chip */ |
2008 | if (power_info->info.ucOverdriveThermalController > 0) { | 2012 | if ((power_info->info.ucOverdriveThermalController > 0) && |
2013 | (power_info->info.ucOverdriveThermalController < ARRAY_SIZE(thermal_controller_names))) { | ||
2009 | DRM_INFO("Possible %s thermal controller at 0x%02x\n", | 2014 | DRM_INFO("Possible %s thermal controller at 0x%02x\n", |
2010 | thermal_controller_names[power_info->info.ucOverdriveThermalController], | 2015 | thermal_controller_names[power_info->info.ucOverdriveThermalController], |
2011 | power_info->info.ucOverdriveControllerAddress >> 1); | 2016 | power_info->info.ucOverdriveControllerAddress >> 1); |
@@ -2209,7 +2214,7 @@ static void radeon_atombios_add_pplib_thermal_controller(struct radeon_device *r | |||
2209 | (controller->ucType == | 2214 | (controller->ucType == |
2210 | ATOM_PP_THERMALCONTROLLER_EMC2103_WITH_INTERNAL)) { | 2215 | ATOM_PP_THERMALCONTROLLER_EMC2103_WITH_INTERNAL)) { |
2211 | DRM_INFO("Special thermal controller config\n"); | 2216 | DRM_INFO("Special thermal controller config\n"); |
2212 | } else { | 2217 | } else if (controller->ucType < ARRAY_SIZE(pp_lib_thermal_controller_names)) { |
2213 | DRM_INFO("Possible %s thermal controller at 0x%02x %s fan control\n", | 2218 | DRM_INFO("Possible %s thermal controller at 0x%02x %s fan control\n", |
2214 | pp_lib_thermal_controller_names[controller->ucType], | 2219 | pp_lib_thermal_controller_names[controller->ucType], |
2215 | controller->ucI2cAddress >> 1, | 2220 | controller->ucI2cAddress >> 1, |
@@ -2224,6 +2229,12 @@ static void radeon_atombios_add_pplib_thermal_controller(struct radeon_device *r | |||
2224 | strlcpy(info.type, name, sizeof(info.type)); | 2229 | strlcpy(info.type, name, sizeof(info.type)); |
2225 | i2c_new_device(&rdev->pm.i2c_bus->adapter, &info); | 2230 | i2c_new_device(&rdev->pm.i2c_bus->adapter, &info); |
2226 | } | 2231 | } |
2232 | } else { | ||
2233 | DRM_INFO("Unknown thermal controller type %d at 0x%02x %s fan control\n", | ||
2234 | controller->ucType, | ||
2235 | controller->ucI2cAddress >> 1, | ||
2236 | (controller->ucFanParameters & | ||
2237 | ATOM_PP_FANPARAMETERS_NOFAN) ? "without" : "with"); | ||
2227 | } | 2238 | } |
2228 | } | 2239 | } |
2229 | } | 2240 | } |