diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-06-24 11:39:43 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-06-24 11:39:43 -0400 |
| commit | d96328055c8501f0ac4a6c343215fa8a2a140306 (patch) | |
| tree | 7a32ef0d579fe3f5c8441888584a4322cdb5f00e | |
| parent | 7a1f7b3d68174f99d01d52b585088b2eaee758a6 (diff) | |
| parent | ee4017f4ac8163737793cc64df535cd246792887 (diff) | |
Merge branch 'drm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6
* 'drm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6:
drm/radeon/kms: handle special cases for vddc
drm/radeon/kms: fix num_banks tiling config for fusion
| -rw-r--r-- | drivers/gpu/drm/radeon/evergreen.c | 4 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon.h | 1 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_atombios.c | 36 |
3 files changed, 39 insertions, 2 deletions
diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c index 445af7981637..12d2fdc52414 100644 --- a/drivers/gpu/drm/radeon/evergreen.c +++ b/drivers/gpu/drm/radeon/evergreen.c | |||
| @@ -2013,9 +2013,9 @@ static void evergreen_gpu_init(struct radeon_device *rdev) | |||
| 2013 | rdev->config.evergreen.tile_config |= (3 << 0); | 2013 | rdev->config.evergreen.tile_config |= (3 << 0); |
| 2014 | break; | 2014 | break; |
| 2015 | } | 2015 | } |
| 2016 | /* num banks is 8 on all fusion asics */ | 2016 | /* num banks is 8 on all fusion asics. 0 = 4, 1 = 8, 2 = 16 */ |
| 2017 | if (rdev->flags & RADEON_IS_IGP) | 2017 | if (rdev->flags & RADEON_IS_IGP) |
| 2018 | rdev->config.evergreen.tile_config |= 8 << 4; | 2018 | rdev->config.evergreen.tile_config |= 1 << 4; |
| 2019 | else | 2019 | else |
| 2020 | rdev->config.evergreen.tile_config |= | 2020 | rdev->config.evergreen.tile_config |= |
| 2021 | ((mc_arb_ramcfg & NOOFBANK_MASK) >> NOOFBANK_SHIFT) << 4; | 2021 | ((mc_arb_ramcfg & NOOFBANK_MASK) >> NOOFBANK_SHIFT) << 4; |
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h index 27f45579e64b..ef0e0e016914 100644 --- a/drivers/gpu/drm/radeon/radeon.h +++ b/drivers/gpu/drm/radeon/radeon.h | |||
| @@ -179,6 +179,7 @@ void radeon_pm_resume(struct radeon_device *rdev); | |||
| 179 | void radeon_combios_get_power_modes(struct radeon_device *rdev); | 179 | void radeon_combios_get_power_modes(struct radeon_device *rdev); |
| 180 | void radeon_atombios_get_power_modes(struct radeon_device *rdev); | 180 | void radeon_atombios_get_power_modes(struct radeon_device *rdev); |
| 181 | void radeon_atom_set_voltage(struct radeon_device *rdev, u16 voltage_level, u8 voltage_type); | 181 | void radeon_atom_set_voltage(struct radeon_device *rdev, u16 voltage_level, u8 voltage_type); |
| 182 | int radeon_atom_get_max_vddc(struct radeon_device *rdev, u16 *voltage); | ||
| 182 | void rs690_pm_info(struct radeon_device *rdev); | 183 | void rs690_pm_info(struct radeon_device *rdev); |
| 183 | extern int rv6xx_get_temp(struct radeon_device *rdev); | 184 | extern int rv6xx_get_temp(struct radeon_device *rdev); |
| 184 | extern int rv770_get_temp(struct radeon_device *rdev); | 185 | extern int rv770_get_temp(struct radeon_device *rdev); |
diff --git a/drivers/gpu/drm/radeon/radeon_atombios.c b/drivers/gpu/drm/radeon/radeon_atombios.c index 1e725d9f767f..bf2b61584cdb 100644 --- a/drivers/gpu/drm/radeon/radeon_atombios.c +++ b/drivers/gpu/drm/radeon/radeon_atombios.c | |||
| @@ -2320,6 +2320,14 @@ static bool radeon_atombios_parse_pplib_clock_info(struct radeon_device *rdev, | |||
| 2320 | le16_to_cpu(clock_info->r600.usVDDC); | 2320 | le16_to_cpu(clock_info->r600.usVDDC); |
| 2321 | } | 2321 | } |
| 2322 | 2322 | ||
| 2323 | /* patch up vddc if necessary */ | ||
| 2324 | if (rdev->pm.power_state[state_index].clock_info[mode_index].voltage.voltage == 0xff01) { | ||
| 2325 | u16 vddc; | ||
| 2326 | |||
| 2327 | if (radeon_atom_get_max_vddc(rdev, &vddc) == 0) | ||
| 2328 | rdev->pm.power_state[state_index].clock_info[mode_index].voltage.voltage = vddc; | ||
| 2329 | } | ||
| 2330 | |||
| 2323 | if (rdev->flags & RADEON_IS_IGP) { | 2331 | if (rdev->flags & RADEON_IS_IGP) { |
| 2324 | /* skip invalid modes */ | 2332 | /* skip invalid modes */ |
| 2325 | if (rdev->pm.power_state[state_index].clock_info[mode_index].sclk == 0) | 2333 | if (rdev->pm.power_state[state_index].clock_info[mode_index].sclk == 0) |
| @@ -2630,7 +2638,35 @@ void radeon_atom_set_voltage(struct radeon_device *rdev, u16 voltage_level, u8 v | |||
| 2630 | atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); | 2638 | atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); |
| 2631 | } | 2639 | } |
| 2632 | 2640 | ||
| 2641 | int radeon_atom_get_max_vddc(struct radeon_device *rdev, | ||
| 2642 | u16 *voltage) | ||
| 2643 | { | ||
| 2644 | union set_voltage args; | ||
| 2645 | int index = GetIndexIntoMasterTable(COMMAND, SetVoltage); | ||
| 2646 | u8 frev, crev; | ||
| 2647 | |||
| 2648 | if (!atom_parse_cmd_header(rdev->mode_info.atom_context, index, &frev, &crev)) | ||
| 2649 | return -EINVAL; | ||
| 2650 | |||
| 2651 | switch (crev) { | ||
| 2652 | case 1: | ||
| 2653 | return -EINVAL; | ||
| 2654 | case 2: | ||
| 2655 | args.v2.ucVoltageType = SET_VOLTAGE_GET_MAX_VOLTAGE; | ||
| 2656 | args.v2.ucVoltageMode = 0; | ||
| 2657 | args.v2.usVoltageLevel = 0; | ||
| 2658 | |||
| 2659 | atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args); | ||
| 2660 | |||
| 2661 | *voltage = le16_to_cpu(args.v2.usVoltageLevel); | ||
| 2662 | break; | ||
| 2663 | default: | ||
| 2664 | DRM_ERROR("Unknown table version %d, %d\n", frev, crev); | ||
| 2665 | return -EINVAL; | ||
| 2666 | } | ||
| 2633 | 2667 | ||
| 2668 | return 0; | ||
| 2669 | } | ||
| 2634 | 2670 | ||
| 2635 | void radeon_atom_initialize_bios_scratch_regs(struct drm_device *dev) | 2671 | void radeon_atom_initialize_bios_scratch_regs(struct drm_device *dev) |
| 2636 | { | 2672 | { |
