diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-04-28 16:14:02 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-04-28 16:14:02 -0400 |
| commit | fafc9929c668f8bae6dd1f109f33a86d2cb3c460 (patch) | |
| tree | ea9739877f8d4107c8a36683e248595cedb1e738 | |
| parent | 0dee0e7fbf446b02125a67f7dfe9415880d6564e (diff) | |
| parent | e8e7a2b8ccfdae0d4cb6bd25824bbedcd42da316 (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/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
| -rw-r--r-- | drivers/gpu/drm/Kconfig | 1 | ||||
| -rw-r--r-- | drivers/gpu/drm/drm_fb_helper.c | 27 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/i915_dma.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_drv.h | 1 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_fb.c | 10 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_kms.c | 13 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/reg_srcs/r600 | 1 | ||||
| -rw-r--r-- | include/drm/drm_fb_helper.h | 1 | ||||
| -rw-r--r-- | include/drm/radeon_drm.h | 1 |
9 files changed, 49 insertions, 8 deletions
diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig index c58f691ec3ce..b493663c7ba7 100644 --- a/drivers/gpu/drm/Kconfig +++ b/drivers/gpu/drm/Kconfig | |||
| @@ -24,6 +24,7 @@ config DRM_KMS_HELPER | |||
| 24 | depends on DRM | 24 | depends on DRM |
| 25 | select FB | 25 | select FB |
| 26 | select FRAMEBUFFER_CONSOLE if !EXPERT | 26 | select FRAMEBUFFER_CONSOLE if !EXPERT |
| 27 | select FRAMEBUFFER_CONSOLE_DETECT_PRIMARY if FRAMEBUFFER_CONSOLE | ||
| 27 | help | 28 | help |
| 28 | FB and CRTC helpers for KMS drivers. | 29 | FB and CRTC helpers for KMS drivers. |
| 29 | 30 | ||
diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c index 950720473967..11d7a72c22d9 100644 --- a/drivers/gpu/drm/drm_fb_helper.c +++ b/drivers/gpu/drm/drm_fb_helper.c | |||
| @@ -342,9 +342,22 @@ int drm_fb_helper_debug_leave(struct fb_info *info) | |||
| 342 | } | 342 | } |
| 343 | EXPORT_SYMBOL(drm_fb_helper_debug_leave); | 343 | EXPORT_SYMBOL(drm_fb_helper_debug_leave); |
| 344 | 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 | |||
| 345 | bool drm_fb_helper_force_kernel_mode(void) | 359 | bool drm_fb_helper_force_kernel_mode(void) |
| 346 | { | 360 | { |
| 347 | int i = 0; | ||
| 348 | bool ret, error = false; | 361 | bool ret, error = false; |
| 349 | struct drm_fb_helper *helper; | 362 | struct drm_fb_helper *helper; |
| 350 | 363 | ||
| @@ -352,12 +365,12 @@ bool drm_fb_helper_force_kernel_mode(void) | |||
| 352 | return false; | 365 | return false; |
| 353 | 366 | ||
| 354 | list_for_each_entry(helper, &kernel_fb_helper_list, kernel_fb_list) { | 367 | list_for_each_entry(helper, &kernel_fb_helper_list, kernel_fb_list) { |
| 355 | for (i = 0; i < helper->crtc_count; i++) { | 368 | if (helper->dev->switch_power_state == DRM_SWITCH_POWER_OFF) |
| 356 | struct drm_mode_set *mode_set = &helper->crtc_info[i].mode_set; | 369 | continue; |
| 357 | ret = drm_crtc_helper_set_config(mode_set); | 370 | |
| 358 | if (ret) | 371 | ret = drm_fb_helper_restore_fbdev_mode(helper); |
| 359 | error = true; | 372 | if (ret) |
| 360 | } | 373 | error = true; |
| 361 | } | 374 | } |
| 362 | return error; | 375 | return error; |
| 363 | } | 376 | } |
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c index 72730377a01b..12876f2795d2 100644 --- a/drivers/gpu/drm/i915/i915_dma.c +++ b/drivers/gpu/drm/i915/i915_dma.c | |||
| @@ -2207,7 +2207,7 @@ void i915_driver_lastclose(struct drm_device * dev) | |||
| 2207 | drm_i915_private_t *dev_priv = dev->dev_private; | 2207 | drm_i915_private_t *dev_priv = dev->dev_private; |
| 2208 | 2208 | ||
| 2209 | if (!dev_priv || drm_core_check_feature(dev, DRIVER_MODESET)) { | 2209 | if (!dev_priv || drm_core_check_feature(dev, DRIVER_MODESET)) { |
| 2210 | drm_fb_helper_restore(); | 2210 | intel_fb_restore_mode(dev); |
| 2211 | vga_switcheroo_process_delayed_switch(); | 2211 | vga_switcheroo_process_delayed_switch(); |
| 2212 | return; | 2212 | return; |
| 2213 | } | 2213 | } |
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h index f5b0d8306d83..1d20712d527f 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h | |||
| @@ -338,4 +338,5 @@ extern int intel_overlay_attrs(struct drm_device *dev, void *data, | |||
| 338 | struct drm_file *file_priv); | 338 | struct drm_file *file_priv); |
| 339 | 339 | ||
| 340 | extern void intel_fb_output_poll_changed(struct drm_device *dev); | 340 | extern void intel_fb_output_poll_changed(struct drm_device *dev); |
| 341 | extern void intel_fb_restore_mode(struct drm_device *dev); | ||
| 341 | #endif /* __INTEL_DRV_H__ */ | 342 | #endif /* __INTEL_DRV_H__ */ |
diff --git a/drivers/gpu/drm/i915/intel_fb.c b/drivers/gpu/drm/i915/intel_fb.c index 512782728e51..ec49bae73382 100644 --- a/drivers/gpu/drm/i915/intel_fb.c +++ b/drivers/gpu/drm/i915/intel_fb.c | |||
| @@ -264,3 +264,13 @@ void intel_fb_output_poll_changed(struct drm_device *dev) | |||
| 264 | drm_i915_private_t *dev_priv = dev->dev_private; | 264 | drm_i915_private_t *dev_priv = dev->dev_private; |
| 265 | drm_fb_helper_hotplug_event(&dev_priv->fbdev->helper); | 265 | drm_fb_helper_hotplug_event(&dev_priv->fbdev->helper); |
| 266 | } | 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 | } | ||
diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c index bf7d4c061451..871df0376b1c 100644 --- a/drivers/gpu/drm/radeon/radeon_kms.c +++ b/drivers/gpu/drm/radeon/radeon_kms.c | |||
| @@ -221,6 +221,19 @@ int radeon_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp) | |||
| 221 | return -EINVAL; | 221 | return -EINVAL; |
| 222 | } | 222 | } |
| 223 | break; | 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; | ||
| 224 | default: | 237 | default: |
| 225 | DRM_DEBUG_KMS("Invalid request %d\n", info->request); | 238 | DRM_DEBUG_KMS("Invalid request %d\n", info->request); |
| 226 | return -EINVAL; | 239 | return -EINVAL; |
diff --git a/drivers/gpu/drm/radeon/reg_srcs/r600 b/drivers/gpu/drm/radeon/reg_srcs/r600 index af0da4ae3f55..92f1900dc7ca 100644 --- a/drivers/gpu/drm/radeon/reg_srcs/r600 +++ b/drivers/gpu/drm/radeon/reg_srcs/r600 | |||
| @@ -708,6 +708,7 @@ r600 0x9400 | |||
| 708 | 0x00028D0C DB_RENDER_CONTROL | 708 | 0x00028D0C DB_RENDER_CONTROL |
| 709 | 0x00028D10 DB_RENDER_OVERRIDE | 709 | 0x00028D10 DB_RENDER_OVERRIDE |
| 710 | 0x0002880C DB_SHADER_CONTROL | 710 | 0x0002880C DB_SHADER_CONTROL |
| 711 | 0x00028D28 DB_SRESULTS_COMPARE_STATE0 | ||
| 711 | 0x00028D2C DB_SRESULTS_COMPARE_STATE1 | 712 | 0x00028D2C DB_SRESULTS_COMPARE_STATE1 |
| 712 | 0x00028430 DB_STENCILREFMASK | 713 | 0x00028430 DB_STENCILREFMASK |
| 713 | 0x00028434 DB_STENCILREFMASK_BF | 714 | 0x00028434 DB_STENCILREFMASK_BF |
diff --git a/include/drm/drm_fb_helper.h b/include/drm/drm_fb_helper.h index f22e7fe4b6db..ade09d7b4271 100644 --- a/include/drm/drm_fb_helper.h +++ b/include/drm/drm_fb_helper.h | |||
| @@ -118,6 +118,7 @@ int drm_fb_helper_setcolreg(unsigned regno, | |||
| 118 | unsigned transp, | 118 | unsigned transp, |
| 119 | struct fb_info *info); | 119 | struct fb_info *info); |
| 120 | 120 | ||
| 121 | bool drm_fb_helper_restore_fbdev_mode(struct drm_fb_helper *fb_helper); | ||
| 121 | void drm_fb_helper_restore(void); | 122 | void drm_fb_helper_restore(void); |
| 122 | void drm_fb_helper_fill_var(struct fb_info *info, struct drm_fb_helper *fb_helper, | 123 | 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); | 124 | uint32_t fb_width, uint32_t fb_height); |
diff --git a/include/drm/radeon_drm.h b/include/drm/radeon_drm.h index 3bce1a4fc305..7aa5dddb2098 100644 --- a/include/drm/radeon_drm.h +++ b/include/drm/radeon_drm.h | |||
| @@ -909,6 +909,7 @@ struct drm_radeon_cs { | |||
| 909 | #define RADEON_INFO_WANT_CMASK 0x08 /* get access to CMASK on r300 */ | 909 | #define RADEON_INFO_WANT_CMASK 0x08 /* get access to CMASK on r300 */ |
| 910 | #define RADEON_INFO_CLOCK_CRYSTAL_FREQ 0x09 /* clock crystal frequency */ | 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 */ | 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+ */ | ||
| 912 | 913 | ||
| 913 | struct drm_radeon_info { | 914 | struct drm_radeon_info { |
| 914 | uint32_t request; | 915 | uint32_t request; |
