···719719 else720720 return;721721722722- /* no need to reprogram if nothing changed */722722+ /* no need to reprogram if nothing changed unless we are on BTC+ */723723 if (rdev->pm.dpm.current_ps == rdev->pm.dpm.requested_ps) {724724- /* update display watermarks based on new power state */725725- if (rdev->pm.dpm.new_active_crtcs != rdev->pm.dpm.current_active_crtcs) {726726- radeon_bandwidth_update(rdev);727727- /* update displays */728728- radeon_dpm_display_configuration_changed(rdev);729729- rdev->pm.dpm.current_active_crtcs = rdev->pm.dpm.new_active_crtcs;730730- rdev->pm.dpm.current_active_crtc_count = rdev->pm.dpm.new_active_crtc_count;724724+ if ((rdev->family < CHIP_BARTS) || (rdev->flags & RADEON_IS_IGP)) {725725+ /* for pre-BTC and APUs if the num crtcs changed but state is the same,726726+ * all we need to do is update the display configuration.727727+ */728728+ if (rdev->pm.dpm.new_active_crtcs != rdev->pm.dpm.current_active_crtcs) {729729+ /* update display watermarks based on new power state */730730+ radeon_bandwidth_update(rdev);731731+ /* update displays */732732+ radeon_dpm_display_configuration_changed(rdev);733733+ rdev->pm.dpm.current_active_crtcs = rdev->pm.dpm.new_active_crtcs;734734+ rdev->pm.dpm.current_active_crtc_count = rdev->pm.dpm.new_active_crtc_count;735735+ }736736+ return;737737+ } else {738738+ /* for BTC+ if the num crtcs hasn't changed and state is the same,739739+ * nothing to do, if the num crtcs is > 1 and state is the same,740740+ * update display configuration.741741+ */742742+ if (rdev->pm.dpm.new_active_crtcs ==743743+ rdev->pm.dpm.current_active_crtcs) {744744+ return;745745+ } else {746746+ if ((rdev->pm.dpm.current_active_crtc_count > 1) &&747747+ (rdev->pm.dpm.new_active_crtc_count > 1)) {748748+ /* update display watermarks based on new power state */749749+ radeon_bandwidth_update(rdev);750750+ /* update displays */751751+ radeon_dpm_display_configuration_changed(rdev);752752+ rdev->pm.dpm.current_active_crtcs = rdev->pm.dpm.new_active_crtcs;753753+ rdev->pm.dpm.current_active_crtc_count = rdev->pm.dpm.new_active_crtc_count;754754+ return;755755+ }756756+ }731757 }732732- return;733758 }734759735760 printk("switching from power state:\n");