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/i915: restore only the mode of this driver on lastclose (v2)
drm/radeon/kms: add info query for tile pipes
drm/radeon/kms: add missing safe regs for 6xx/7xx
drm: select FRAMEBUFFER_CONSOLE_PRIMARY if we have FRAMEBUFFER_CONSOLE

+49 -8
+1
drivers/gpu/drm/Kconfig
··· 24 depends on DRM 25 select FB 26 select FRAMEBUFFER_CONSOLE if !EXPERT 27 help 28 FB and CRTC helpers for KMS drivers. 29
··· 24 depends on DRM 25 select FB 26 select FRAMEBUFFER_CONSOLE if !EXPERT 27 + select FRAMEBUFFER_CONSOLE_DETECT_PRIMARY if FRAMEBUFFER_CONSOLE 28 help 29 FB and CRTC helpers for KMS drivers. 30
+20 -7
drivers/gpu/drm/drm_fb_helper.c
··· 342 } 343 EXPORT_SYMBOL(drm_fb_helper_debug_leave); 344 345 bool drm_fb_helper_force_kernel_mode(void) 346 { 347 - int i = 0; 348 bool ret, error = false; 349 struct drm_fb_helper *helper; 350 ··· 365 return false; 366 367 list_for_each_entry(helper, &kernel_fb_helper_list, kernel_fb_list) { 368 - for (i = 0; i < helper->crtc_count; i++) { 369 - struct drm_mode_set *mode_set = &helper->crtc_info[i].mode_set; 370 - ret = drm_crtc_helper_set_config(mode_set); 371 - if (ret) 372 - error = true; 373 - } 374 } 375 return error; 376 }
··· 342 } 343 EXPORT_SYMBOL(drm_fb_helper_debug_leave); 344 345 + bool drm_fb_helper_restore_fbdev_mode(struct drm_fb_helper *fb_helper) 346 + { 347 + bool error = false; 348 + int i, ret; 349 + for (i = 0; i < fb_helper->crtc_count; i++) { 350 + struct drm_mode_set *mode_set = &fb_helper->crtc_info[i].mode_set; 351 + ret = drm_crtc_helper_set_config(mode_set); 352 + if (ret) 353 + error = true; 354 + } 355 + return error; 356 + } 357 + EXPORT_SYMBOL(drm_fb_helper_restore_fbdev_mode); 358 + 359 bool drm_fb_helper_force_kernel_mode(void) 360 { 361 bool ret, error = false; 362 struct drm_fb_helper *helper; 363 ··· 352 return false; 353 354 list_for_each_entry(helper, &kernel_fb_helper_list, kernel_fb_list) { 355 + if (helper->dev->switch_power_state == DRM_SWITCH_POWER_OFF) 356 + continue; 357 + 358 + ret = drm_fb_helper_restore_fbdev_mode(helper); 359 + if (ret) 360 + error = true; 361 } 362 return error; 363 }
+1 -1
drivers/gpu/drm/i915/i915_dma.c
··· 2207 drm_i915_private_t *dev_priv = dev->dev_private; 2208 2209 if (!dev_priv || drm_core_check_feature(dev, DRIVER_MODESET)) { 2210 - drm_fb_helper_restore(); 2211 vga_switcheroo_process_delayed_switch(); 2212 return; 2213 }
··· 2207 drm_i915_private_t *dev_priv = dev->dev_private; 2208 2209 if (!dev_priv || drm_core_check_feature(dev, DRIVER_MODESET)) { 2210 + intel_fb_restore_mode(dev); 2211 vga_switcheroo_process_delayed_switch(); 2212 return; 2213 }
+1
drivers/gpu/drm/i915/intel_drv.h
··· 338 struct drm_file *file_priv); 339 340 extern void intel_fb_output_poll_changed(struct drm_device *dev); 341 #endif /* __INTEL_DRV_H__ */
··· 338 struct drm_file *file_priv); 339 340 extern void intel_fb_output_poll_changed(struct drm_device *dev); 341 + extern void intel_fb_restore_mode(struct drm_device *dev); 342 #endif /* __INTEL_DRV_H__ */
+10
drivers/gpu/drm/i915/intel_fb.c
··· 264 drm_i915_private_t *dev_priv = dev->dev_private; 265 drm_fb_helper_hotplug_event(&dev_priv->fbdev->helper); 266 }
··· 264 drm_i915_private_t *dev_priv = dev->dev_private; 265 drm_fb_helper_hotplug_event(&dev_priv->fbdev->helper); 266 } 267 + 268 + void intel_fb_restore_mode(struct drm_device *dev) 269 + { 270 + int ret; 271 + drm_i915_private_t *dev_priv = dev->dev_private; 272 + 273 + ret = drm_fb_helper_restore_fbdev_mode(&dev_priv->fbdev->helper); 274 + if (ret) 275 + DRM_DEBUG("failed to restore crtc mode\n"); 276 + }
+13
drivers/gpu/drm/radeon/radeon_kms.c
··· 221 return -EINVAL; 222 } 223 break; 224 default: 225 DRM_DEBUG_KMS("Invalid request %d\n", info->request); 226 return -EINVAL;
··· 221 return -EINVAL; 222 } 223 break; 224 + case RADEON_INFO_NUM_TILE_PIPES: 225 + if (rdev->family >= CHIP_CAYMAN) 226 + value = rdev->config.cayman.max_tile_pipes; 227 + else if (rdev->family >= CHIP_CEDAR) 228 + value = rdev->config.evergreen.max_tile_pipes; 229 + else if (rdev->family >= CHIP_RV770) 230 + value = rdev->config.rv770.max_tile_pipes; 231 + else if (rdev->family >= CHIP_R600) 232 + value = rdev->config.r600.max_tile_pipes; 233 + else { 234 + return -EINVAL; 235 + } 236 + break; 237 default: 238 DRM_DEBUG_KMS("Invalid request %d\n", info->request); 239 return -EINVAL;
+1
drivers/gpu/drm/radeon/reg_srcs/r600
··· 708 0x00028D0C DB_RENDER_CONTROL 709 0x00028D10 DB_RENDER_OVERRIDE 710 0x0002880C DB_SHADER_CONTROL 711 0x00028D2C DB_SRESULTS_COMPARE_STATE1 712 0x00028430 DB_STENCILREFMASK 713 0x00028434 DB_STENCILREFMASK_BF
··· 708 0x00028D0C DB_RENDER_CONTROL 709 0x00028D10 DB_RENDER_OVERRIDE 710 0x0002880C DB_SHADER_CONTROL 711 + 0x00028D28 DB_SRESULTS_COMPARE_STATE0 712 0x00028D2C DB_SRESULTS_COMPARE_STATE1 713 0x00028430 DB_STENCILREFMASK 714 0x00028434 DB_STENCILREFMASK_BF
+1
include/drm/drm_fb_helper.h
··· 118 unsigned transp, 119 struct fb_info *info); 120 121 void drm_fb_helper_restore(void); 122 void drm_fb_helper_fill_var(struct fb_info *info, struct drm_fb_helper *fb_helper, 123 uint32_t fb_width, uint32_t fb_height);
··· 118 unsigned transp, 119 struct fb_info *info); 120 121 + bool drm_fb_helper_restore_fbdev_mode(struct drm_fb_helper *fb_helper); 122 void drm_fb_helper_restore(void); 123 void drm_fb_helper_fill_var(struct fb_info *info, struct drm_fb_helper *fb_helper, 124 uint32_t fb_width, uint32_t fb_height);
+1
include/drm/radeon_drm.h
··· 909 #define RADEON_INFO_WANT_CMASK 0x08 /* get access to CMASK on r300 */ 910 #define RADEON_INFO_CLOCK_CRYSTAL_FREQ 0x09 /* clock crystal frequency */ 911 #define RADEON_INFO_NUM_BACKENDS 0x0a /* DB/backends for r600+ - need for OQ */ 912 913 struct drm_radeon_info { 914 uint32_t request;
··· 909 #define RADEON_INFO_WANT_CMASK 0x08 /* get access to CMASK on r300 */ 910 #define RADEON_INFO_CLOCK_CRYSTAL_FREQ 0x09 /* clock crystal frequency */ 911 #define RADEON_INFO_NUM_BACKENDS 0x0a /* DB/backends for r600+ - need for OQ */ 912 + #define RADEON_INFO_NUM_TILE_PIPES 0x0b /* tile pipes for r600+ */ 913 914 struct drm_radeon_info { 915 uint32_t request;