Commit 52e4c2a05256cb83cda12f3c2137ab1533344edb

Authored by Linus Torvalds

Merge branch 'drm-fixes' of git://people.freedesktop.org/~airlied/linux

* 'drm-fixes' of git://people.freedesktop.org/~airlied/linux:
  drm/radeon/kms/combios: fix dynamic allocation of PM clock modes

Showing 1 changed file Side-by-side Diff

drivers/gpu/drm/radeon/radeon_combios.c
... ... @@ -2563,15 +2563,18 @@
2563 2563  
2564 2564 /* allocate 2 power states */
2565 2565 rdev->pm.power_state = kzalloc(sizeof(struct radeon_power_state) * 2, GFP_KERNEL);
2566   - if (!rdev->pm.power_state) {
2567   - rdev->pm.default_power_state_index = state_index;
2568   - rdev->pm.num_power_states = 0;
  2566 + if (rdev->pm.power_state) {
  2567 + /* allocate 1 clock mode per state */
  2568 + rdev->pm.power_state[0].clock_info =
  2569 + kzalloc(sizeof(struct radeon_pm_clock_info) * 1, GFP_KERNEL);
  2570 + rdev->pm.power_state[1].clock_info =
  2571 + kzalloc(sizeof(struct radeon_pm_clock_info) * 1, GFP_KERNEL);
  2572 + if (!rdev->pm.power_state[0].clock_info ||
  2573 + !rdev->pm.power_state[1].clock_info)
  2574 + goto pm_failed;
  2575 + } else
  2576 + goto pm_failed;
2569 2577  
2570   - rdev->pm.current_power_state_index = rdev->pm.default_power_state_index;
2571   - rdev->pm.current_clock_mode_index = 0;
2572   - return;
2573   - }
2574   -
2575 2578 /* check for a thermal chip */
2576 2579 offset = combios_get_table_offset(dev, COMBIOS_OVERDRIVE_INFO_TABLE);
2577 2580 if (offset) {
... ... @@ -2732,6 +2735,14 @@
2732 2735 rdev->pm.power_state[state_index].flags = 0;
2733 2736 rdev->pm.default_power_state_index = state_index;
2734 2737 rdev->pm.num_power_states = state_index + 1;
  2738 +
  2739 + rdev->pm.current_power_state_index = rdev->pm.default_power_state_index;
  2740 + rdev->pm.current_clock_mode_index = 0;
  2741 + return;
  2742 +
  2743 +pm_failed:
  2744 + rdev->pm.default_power_state_index = state_index;
  2745 + rdev->pm.num_power_states = 0;
2735 2746  
2736 2747 rdev->pm.current_power_state_index = rdev->pm.default_power_state_index;
2737 2748 rdev->pm.current_clock_mode_index = 0;