Commit 52e4c2a05256cb83cda12f3c2137ab1533344edb
Exists in
master
and in
6 other branches
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; |