diff options
| -rw-r--r-- | drivers/gpu/drm/i915/i915_debugfs.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/i915_drv.h | 8 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/i915_gem.c | 26 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/i915_irq.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_crt.c | 4 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 89 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_dp.c | 15 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_drv.h | 1 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_hdmi.c | 16 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_lvds.c | 8 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_modes.c | 30 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_sdvo.c | 14 | ||||
| -rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_hw.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_mem.c | 4 | ||||
| -rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_sgdma.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_state.c | 114 | ||||
| -rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_vm.c | 1 | ||||
| -rw-r--r-- | drivers/gpu/drm/nouveau/nv04_crtc.c | 8 | ||||
| -rw-r--r-- | drivers/gpu/drm/nouveau/nvreg.h | 2 |
19 files changed, 161 insertions, 187 deletions
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c index 51c2257b11e6..4d46441cbe2d 100644 --- a/drivers/gpu/drm/i915/i915_debugfs.c +++ b/drivers/gpu/drm/i915/i915_debugfs.c | |||
| @@ -776,7 +776,7 @@ static int i915_error_state(struct seq_file *m, void *unused) | |||
| 776 | seq_printf(m, " INSTPM: 0x%08x\n", error->instpm); | 776 | seq_printf(m, " INSTPM: 0x%08x\n", error->instpm); |
| 777 | seq_printf(m, " seqno: 0x%08x\n", error->seqno); | 777 | seq_printf(m, " seqno: 0x%08x\n", error->seqno); |
| 778 | 778 | ||
| 779 | for (i = 0; i < 16; i++) | 779 | for (i = 0; i < dev_priv->num_fence_regs; i++) |
| 780 | seq_printf(m, " fence[%d] = %08llx\n", i, error->fence[i]); | 780 | seq_printf(m, " fence[%d] = %08llx\n", i, error->fence[i]); |
| 781 | 781 | ||
| 782 | if (error->active_bo) | 782 | if (error->active_bo) |
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index ee660355ae68..f63ee162f124 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h | |||
| @@ -716,6 +716,7 @@ typedef struct drm_i915_private { | |||
| 716 | struct intel_fbdev *fbdev; | 716 | struct intel_fbdev *fbdev; |
| 717 | 717 | ||
| 718 | struct drm_property *broadcast_rgb_property; | 718 | struct drm_property *broadcast_rgb_property; |
| 719 | struct drm_property *force_audio_property; | ||
| 719 | 720 | ||
| 720 | atomic_t forcewake_count; | 721 | atomic_t forcewake_count; |
| 721 | } drm_i915_private_t; | 722 | } drm_i915_private_t; |
| @@ -909,13 +910,6 @@ struct drm_i915_file_private { | |||
| 909 | } mm; | 910 | } mm; |
| 910 | }; | 911 | }; |
| 911 | 912 | ||
| 912 | enum intel_chip_family { | ||
| 913 | CHIP_I8XX = 0x01, | ||
| 914 | CHIP_I9XX = 0x02, | ||
| 915 | CHIP_I915 = 0x04, | ||
| 916 | CHIP_I965 = 0x08, | ||
| 917 | }; | ||
| 918 | |||
| 919 | #define INTEL_INFO(dev) (((struct drm_i915_private *) (dev)->dev_private)->info) | 913 | #define INTEL_INFO(dev) (((struct drm_i915_private *) (dev)->dev_private)->info) |
| 920 | 914 | ||
| 921 | #define IS_I830(dev) ((dev)->pci_device == 0x3577) | 915 | #define IS_I830(dev) ((dev)->pci_device == 0x3577) |
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index 0b2e167d2bce..12d32579b951 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c | |||
| @@ -354,7 +354,7 @@ i915_gem_shmem_pread_fast(struct drm_device *dev, | |||
| 354 | * page_offset = offset within page | 354 | * page_offset = offset within page |
| 355 | * page_length = bytes to copy for this page | 355 | * page_length = bytes to copy for this page |
| 356 | */ | 356 | */ |
| 357 | page_offset = offset & (PAGE_SIZE-1); | 357 | page_offset = offset_in_page(offset); |
| 358 | page_length = remain; | 358 | page_length = remain; |
| 359 | if ((page_offset + remain) > PAGE_SIZE) | 359 | if ((page_offset + remain) > PAGE_SIZE) |
| 360 | page_length = PAGE_SIZE - page_offset; | 360 | page_length = PAGE_SIZE - page_offset; |
| @@ -453,9 +453,9 @@ i915_gem_shmem_pread_slow(struct drm_device *dev, | |||
| 453 | * data_page_offset = offset with data_page_index page. | 453 | * data_page_offset = offset with data_page_index page. |
| 454 | * page_length = bytes to copy for this page | 454 | * page_length = bytes to copy for this page |
| 455 | */ | 455 | */ |
| 456 | shmem_page_offset = offset & ~PAGE_MASK; | 456 | shmem_page_offset = offset_in_page(offset); |
| 457 | data_page_index = data_ptr / PAGE_SIZE - first_data_page; | 457 | data_page_index = data_ptr / PAGE_SIZE - first_data_page; |
| 458 | data_page_offset = data_ptr & ~PAGE_MASK; | 458 | data_page_offset = offset_in_page(data_ptr); |
| 459 | 459 | ||
| 460 | page_length = remain; | 460 | page_length = remain; |
| 461 | if ((shmem_page_offset + page_length) > PAGE_SIZE) | 461 | if ((shmem_page_offset + page_length) > PAGE_SIZE) |
| @@ -638,8 +638,8 @@ i915_gem_gtt_pwrite_fast(struct drm_device *dev, | |||
| 638 | * page_offset = offset within page | 638 | * page_offset = offset within page |
| 639 | * page_length = bytes to copy for this page | 639 | * page_length = bytes to copy for this page |
| 640 | */ | 640 | */ |
| 641 | page_base = (offset & ~(PAGE_SIZE-1)); | 641 | page_base = offset & PAGE_MASK; |
| 642 | page_offset = offset & (PAGE_SIZE-1); | 642 | page_offset = offset_in_page(offset); |
| 643 | page_length = remain; | 643 | page_length = remain; |
| 644 | if ((page_offset + remain) > PAGE_SIZE) | 644 | if ((page_offset + remain) > PAGE_SIZE) |
| 645 | page_length = PAGE_SIZE - page_offset; | 645 | page_length = PAGE_SIZE - page_offset; |
| @@ -650,7 +650,6 @@ i915_gem_gtt_pwrite_fast(struct drm_device *dev, | |||
| 650 | */ | 650 | */ |
| 651 | if (fast_user_write(dev_priv->mm.gtt_mapping, page_base, | 651 | if (fast_user_write(dev_priv->mm.gtt_mapping, page_base, |
| 652 | page_offset, user_data, page_length)) | 652 | page_offset, user_data, page_length)) |
| 653 | |||
| 654 | return -EFAULT; | 653 | return -EFAULT; |
| 655 | 654 | ||
| 656 | remain -= page_length; | 655 | remain -= page_length; |
| @@ -730,9 +729,9 @@ i915_gem_gtt_pwrite_slow(struct drm_device *dev, | |||
| 730 | * page_length = bytes to copy for this page | 729 | * page_length = bytes to copy for this page |
| 731 | */ | 730 | */ |
| 732 | gtt_page_base = offset & PAGE_MASK; | 731 | gtt_page_base = offset & PAGE_MASK; |
| 733 | gtt_page_offset = offset & ~PAGE_MASK; | 732 | gtt_page_offset = offset_in_page(offset); |
| 734 | data_page_index = data_ptr / PAGE_SIZE - first_data_page; | 733 | data_page_index = data_ptr / PAGE_SIZE - first_data_page; |
| 735 | data_page_offset = data_ptr & ~PAGE_MASK; | 734 | data_page_offset = offset_in_page(data_ptr); |
| 736 | 735 | ||
| 737 | page_length = remain; | 736 | page_length = remain; |
| 738 | if ((gtt_page_offset + page_length) > PAGE_SIZE) | 737 | if ((gtt_page_offset + page_length) > PAGE_SIZE) |
| @@ -791,7 +790,7 @@ i915_gem_shmem_pwrite_fast(struct drm_device *dev, | |||
| 791 | * page_offset = offset within page | 790 | * page_offset = offset within page |
| 792 | * page_length = bytes to copy for this page | 791 | * page_length = bytes to copy for this page |
| 793 | */ | 792 | */ |
| 794 | page_offset = offset & (PAGE_SIZE-1); | 793 | page_offset = offset_in_page(offset); |
| 795 | page_length = remain; | 794 | page_length = remain; |
| 796 | if ((page_offset + remain) > PAGE_SIZE) | 795 | if ((page_offset + remain) > PAGE_SIZE) |
| 797 | page_length = PAGE_SIZE - page_offset; | 796 | page_length = PAGE_SIZE - page_offset; |
| @@ -896,9 +895,9 @@ i915_gem_shmem_pwrite_slow(struct drm_device *dev, | |||
| 896 | * data_page_offset = offset with data_page_index page. | 895 | * data_page_offset = offset with data_page_index page. |
| 897 | * page_length = bytes to copy for this page | 896 | * page_length = bytes to copy for this page |
| 898 | */ | 897 | */ |
| 899 | shmem_page_offset = offset & ~PAGE_MASK; | 898 | shmem_page_offset = offset_in_page(offset); |
| 900 | data_page_index = data_ptr / PAGE_SIZE - first_data_page; | 899 | data_page_index = data_ptr / PAGE_SIZE - first_data_page; |
| 901 | data_page_offset = data_ptr & ~PAGE_MASK; | 900 | data_page_offset = offset_in_page(data_ptr); |
| 902 | 901 | ||
| 903 | page_length = remain; | 902 | page_length = remain; |
| 904 | if ((shmem_page_offset + page_length) > PAGE_SIZE) | 903 | if ((shmem_page_offset + page_length) > PAGE_SIZE) |
| @@ -1450,8 +1449,9 @@ i915_gem_get_unfenced_gtt_alignment(struct drm_i915_gem_object *obj) | |||
| 1450 | * edge of an even tile row (where tile rows are counted as if the bo is | 1449 | * edge of an even tile row (where tile rows are counted as if the bo is |
| 1451 | * placed in a fenced gtt region). | 1450 | * placed in a fenced gtt region). |
| 1452 | */ | 1451 | */ |
| 1453 | if (IS_GEN2(dev) || | 1452 | if (IS_GEN2(dev)) |
| 1454 | (obj->tiling_mode == I915_TILING_Y && HAS_128_BYTE_Y_TILING(dev))) | 1453 | tile_height = 16; |
| 1454 | else if (obj->tiling_mode == I915_TILING_Y && HAS_128_BYTE_Y_TILING(dev)) | ||
| 1455 | tile_height = 32; | 1455 | tile_height = 32; |
| 1456 | else | 1456 | else |
| 1457 | tile_height = 8; | 1457 | tile_height = 8; |
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c index b79619a7b788..b9fafe3b045b 100644 --- a/drivers/gpu/drm/i915/i915_irq.c +++ b/drivers/gpu/drm/i915/i915_irq.c | |||
| @@ -517,7 +517,7 @@ irqreturn_t ivybridge_irq_handler(DRM_IRQ_ARGS) | |||
| 517 | if (de_iir & DE_PIPEA_VBLANK_IVB) | 517 | if (de_iir & DE_PIPEA_VBLANK_IVB) |
| 518 | drm_handle_vblank(dev, 0); | 518 | drm_handle_vblank(dev, 0); |
| 519 | 519 | ||
| 520 | if (de_iir & DE_PIPEB_VBLANK_IVB); | 520 | if (de_iir & DE_PIPEB_VBLANK_IVB) |
| 521 | drm_handle_vblank(dev, 1); | 521 | drm_handle_vblank(dev, 1); |
| 522 | 522 | ||
| 523 | /* check event from PCH */ | 523 | /* check event from PCH */ |
diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c index e93f93cc7e78..0979d8877880 100644 --- a/drivers/gpu/drm/i915/intel_crt.c +++ b/drivers/gpu/drm/i915/intel_crt.c | |||
| @@ -288,6 +288,8 @@ static bool intel_crt_detect_ddc(struct drm_connector *connector) | |||
| 288 | * This may be a DVI-I connector with a shared DDC | 288 | * This may be a DVI-I connector with a shared DDC |
| 289 | * link between analog and digital outputs, so we | 289 | * link between analog and digital outputs, so we |
| 290 | * have to check the EDID input spec of the attached device. | 290 | * have to check the EDID input spec of the attached device. |
| 291 | * | ||
| 292 | * On the other hand, what should we do if it is a broken EDID? | ||
| 291 | */ | 293 | */ |
| 292 | if (edid != NULL) { | 294 | if (edid != NULL) { |
| 293 | is_digital = edid->input & DRM_EDID_INPUT_DIGITAL; | 295 | is_digital = edid->input & DRM_EDID_INPUT_DIGITAL; |
| @@ -298,6 +300,8 @@ static bool intel_crt_detect_ddc(struct drm_connector *connector) | |||
| 298 | if (!is_digital) { | 300 | if (!is_digital) { |
| 299 | DRM_DEBUG_KMS("CRT detected via DDC:0x50 [EDID]\n"); | 301 | DRM_DEBUG_KMS("CRT detected via DDC:0x50 [EDID]\n"); |
| 300 | return true; | 302 | return true; |
| 303 | } else { | ||
| 304 | DRM_DEBUG_KMS("CRT not detected via DDC:0x50 [EDID reports a digital panel]\n"); | ||
| 301 | } | 305 | } |
| 302 | } | 306 | } |
| 303 | 307 | ||
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index f553ddfdc168..81a9059b6a94 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
| @@ -3983,54 +3983,6 @@ static void i830_update_wm(struct drm_device *dev) | |||
| 3983 | #define ILK_LP0_PLANE_LATENCY 700 | 3983 | #define ILK_LP0_PLANE_LATENCY 700 |
| 3984 | #define ILK_LP0_CURSOR_LATENCY 1300 | 3984 | #define ILK_LP0_CURSOR_LATENCY 1300 |
| 3985 | 3985 | ||
| 3986 | static bool ironlake_compute_wm0(struct drm_device *dev, | ||
| 3987 | int pipe, | ||
| 3988 | const struct intel_watermark_params *display, | ||
| 3989 | int display_latency_ns, | ||
| 3990 | const struct intel_watermark_params *cursor, | ||
| 3991 | int cursor_latency_ns, | ||
| 3992 | int *plane_wm, | ||
| 3993 | int *cursor_wm) | ||
| 3994 | { | ||
| 3995 | struct drm_crtc *crtc; | ||
| 3996 | int htotal, hdisplay, clock, pixel_size; | ||
| 3997 | int line_time_us, line_count; | ||
| 3998 | int entries, tlb_miss; | ||
| 3999 | |||
| 4000 | crtc = intel_get_crtc_for_pipe(dev, pipe); | ||
| 4001 | if (crtc->fb == NULL || !crtc->enabled) | ||
| 4002 | return false; | ||
| 4003 | |||
| 4004 | htotal = crtc->mode.htotal; | ||
| 4005 | hdisplay = crtc->mode.hdisplay; | ||
| 4006 | clock = crtc->mode.clock; | ||
| 4007 | pixel_size = crtc->fb->bits_per_pixel / 8; | ||
| 4008 | |||
| 4009 | /* Use the small buffer method to calculate plane watermark */ | ||
| 4010 | entries = ((clock * pixel_size / 1000) * display_latency_ns) / 1000; | ||
| 4011 | tlb_miss = display->fifo_size*display->cacheline_size - hdisplay * 8; | ||
| 4012 | if (tlb_miss > 0) | ||
| 4013 | entries += tlb_miss; | ||
| 4014 | entries = DIV_ROUND_UP(entries, display->cacheline_size); | ||
| 4015 | *plane_wm = entries + display->guard_size; | ||
| 4016 | if (*plane_wm > (int)display->max_wm) | ||
| 4017 | *plane_wm = display->max_wm; | ||
| 4018 | |||
| 4019 | /* Use the large buffer method to calculate cursor watermark */ | ||
| 4020 | line_time_us = ((htotal * 1000) / clock); | ||
| 4021 | line_count = (cursor_latency_ns / line_time_us + 1000) / 1000; | ||
| 4022 | entries = line_count * 64 * pixel_size; | ||
| 4023 | tlb_miss = cursor->fifo_size*cursor->cacheline_size - hdisplay * 8; | ||
| 4024 | if (tlb_miss > 0) | ||
| 4025 | entries += tlb_miss; | ||
| 4026 | entries = DIV_ROUND_UP(entries, cursor->cacheline_size); | ||
| 4027 | *cursor_wm = entries + cursor->guard_size; | ||
| 4028 | if (*cursor_wm > (int)cursor->max_wm) | ||
| 4029 | *cursor_wm = (int)cursor->max_wm; | ||
| 4030 | |||
| 4031 | return true; | ||
| 4032 | } | ||
| 4033 | |||
| 4034 | /* | 3986 | /* |
| 4035 | * Check the wm result. | 3987 | * Check the wm result. |
| 4036 | * | 3988 | * |
| @@ -4139,12 +4091,12 @@ static void ironlake_update_wm(struct drm_device *dev) | |||
| 4139 | unsigned int enabled; | 4091 | unsigned int enabled; |
| 4140 | 4092 | ||
| 4141 | enabled = 0; | 4093 | enabled = 0; |
| 4142 | if (ironlake_compute_wm0(dev, 0, | 4094 | if (g4x_compute_wm0(dev, 0, |
| 4143 | &ironlake_display_wm_info, | 4095 | &ironlake_display_wm_info, |
| 4144 | ILK_LP0_PLANE_LATENCY, | 4096 | ILK_LP0_PLANE_LATENCY, |
| 4145 | &ironlake_cursor_wm_info, | 4097 | &ironlake_cursor_wm_info, |
| 4146 | ILK_LP0_CURSOR_LATENCY, | 4098 | ILK_LP0_CURSOR_LATENCY, |
| 4147 | &plane_wm, &cursor_wm)) { | 4099 | &plane_wm, &cursor_wm)) { |
| 4148 | I915_WRITE(WM0_PIPEA_ILK, | 4100 | I915_WRITE(WM0_PIPEA_ILK, |
| 4149 | (plane_wm << WM0_PIPE_PLANE_SHIFT) | cursor_wm); | 4101 | (plane_wm << WM0_PIPE_PLANE_SHIFT) | cursor_wm); |
| 4150 | DRM_DEBUG_KMS("FIFO watermarks For pipe A -" | 4102 | DRM_DEBUG_KMS("FIFO watermarks For pipe A -" |
| @@ -4153,12 +4105,12 @@ static void ironlake_update_wm(struct drm_device *dev) | |||
| 4153 | enabled |= 1; | 4105 | enabled |= 1; |
| 4154 | } | 4106 | } |
| 4155 | 4107 | ||
| 4156 | if (ironlake_compute_wm0(dev, 1, | 4108 | if (g4x_compute_wm0(dev, 1, |
| 4157 | &ironlake_display_wm_info, | 4109 | &ironlake_display_wm_info, |
| 4158 | ILK_LP0_PLANE_LATENCY, | 4110 | ILK_LP0_PLANE_LATENCY, |
| 4159 | &ironlake_cursor_wm_info, | 4111 | &ironlake_cursor_wm_info, |
| 4160 | ILK_LP0_CURSOR_LATENCY, | 4112 | ILK_LP0_CURSOR_LATENCY, |
| 4161 | &plane_wm, &cursor_wm)) { | 4113 | &plane_wm, &cursor_wm)) { |
| 4162 | I915_WRITE(WM0_PIPEB_ILK, | 4114 | I915_WRITE(WM0_PIPEB_ILK, |
| 4163 | (plane_wm << WM0_PIPE_PLANE_SHIFT) | cursor_wm); | 4115 | (plane_wm << WM0_PIPE_PLANE_SHIFT) | cursor_wm); |
| 4164 | DRM_DEBUG_KMS("FIFO watermarks For pipe B -" | 4116 | DRM_DEBUG_KMS("FIFO watermarks For pipe B -" |
| @@ -4223,10 +4175,10 @@ static void sandybridge_update_wm(struct drm_device *dev) | |||
| 4223 | unsigned int enabled; | 4175 | unsigned int enabled; |
| 4224 | 4176 | ||
| 4225 | enabled = 0; | 4177 | enabled = 0; |
| 4226 | if (ironlake_compute_wm0(dev, 0, | 4178 | if (g4x_compute_wm0(dev, 0, |
| 4227 | &sandybridge_display_wm_info, latency, | 4179 | &sandybridge_display_wm_info, latency, |
| 4228 | &sandybridge_cursor_wm_info, latency, | 4180 | &sandybridge_cursor_wm_info, latency, |
| 4229 | &plane_wm, &cursor_wm)) { | 4181 | &plane_wm, &cursor_wm)) { |
| 4230 | I915_WRITE(WM0_PIPEA_ILK, | 4182 | I915_WRITE(WM0_PIPEA_ILK, |
| 4231 | (plane_wm << WM0_PIPE_PLANE_SHIFT) | cursor_wm); | 4183 | (plane_wm << WM0_PIPE_PLANE_SHIFT) | cursor_wm); |
| 4232 | DRM_DEBUG_KMS("FIFO watermarks For pipe A -" | 4184 | DRM_DEBUG_KMS("FIFO watermarks For pipe A -" |
| @@ -4235,10 +4187,10 @@ static void sandybridge_update_wm(struct drm_device *dev) | |||
| 4235 | enabled |= 1; | 4187 | enabled |= 1; |
| 4236 | } | 4188 | } |
| 4237 | 4189 | ||
| 4238 | if (ironlake_compute_wm0(dev, 1, | 4190 | if (g4x_compute_wm0(dev, 1, |
| 4239 | &sandybridge_display_wm_info, latency, | 4191 | &sandybridge_display_wm_info, latency, |
| 4240 | &sandybridge_cursor_wm_info, latency, | 4192 | &sandybridge_cursor_wm_info, latency, |
| 4241 | &plane_wm, &cursor_wm)) { | 4193 | &plane_wm, &cursor_wm)) { |
| 4242 | I915_WRITE(WM0_PIPEB_ILK, | 4194 | I915_WRITE(WM0_PIPEB_ILK, |
| 4243 | (plane_wm << WM0_PIPE_PLANE_SHIFT) | cursor_wm); | 4195 | (plane_wm << WM0_PIPE_PLANE_SHIFT) | cursor_wm); |
| 4244 | DRM_DEBUG_KMS("FIFO watermarks For pipe B -" | 4196 | DRM_DEBUG_KMS("FIFO watermarks For pipe B -" |
| @@ -7675,6 +7627,7 @@ static void intel_init_display(struct drm_device *dev) | |||
| 7675 | dev_priv->display.update_wm = NULL; | 7627 | dev_priv->display.update_wm = NULL; |
| 7676 | } else | 7628 | } else |
| 7677 | dev_priv->display.update_wm = pineview_update_wm; | 7629 | dev_priv->display.update_wm = pineview_update_wm; |
| 7630 | dev_priv->display.init_clock_gating = gen3_init_clock_gating; | ||
| 7678 | } else if (IS_G4X(dev)) { | 7631 | } else if (IS_G4X(dev)) { |
| 7679 | dev_priv->display.update_wm = g4x_update_wm; | 7632 | dev_priv->display.update_wm = g4x_update_wm; |
| 7680 | dev_priv->display.init_clock_gating = g4x_init_clock_gating; | 7633 | dev_priv->display.init_clock_gating = g4x_init_clock_gating; |
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index a4d80314e7f8..391b55f1cc74 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c | |||
| @@ -59,8 +59,6 @@ struct intel_dp { | |||
| 59 | bool is_pch_edp; | 59 | bool is_pch_edp; |
| 60 | uint8_t train_set[4]; | 60 | uint8_t train_set[4]; |
| 61 | uint8_t link_status[DP_LINK_STATUS_SIZE]; | 61 | uint8_t link_status[DP_LINK_STATUS_SIZE]; |
| 62 | |||
| 63 | struct drm_property *force_audio_property; | ||
| 64 | }; | 62 | }; |
| 65 | 63 | ||
| 66 | /** | 64 | /** |
| @@ -1702,7 +1700,7 @@ intel_dp_set_property(struct drm_connector *connector, | |||
| 1702 | if (ret) | 1700 | if (ret) |
| 1703 | return ret; | 1701 | return ret; |
| 1704 | 1702 | ||
| 1705 | if (property == intel_dp->force_audio_property) { | 1703 | if (property == dev_priv->force_audio_property) { |
| 1706 | int i = val; | 1704 | int i = val; |
| 1707 | bool has_audio; | 1705 | bool has_audio; |
| 1708 | 1706 | ||
| @@ -1841,16 +1839,7 @@ bool intel_dpd_is_edp(struct drm_device *dev) | |||
| 1841 | static void | 1839 | static void |
| 1842 | intel_dp_add_properties(struct intel_dp *intel_dp, struct drm_connector *connector) | 1840 | intel_dp_add_properties(struct intel_dp *intel_dp, struct drm_connector *connector) |
| 1843 | { | 1841 | { |
| 1844 | struct drm_device *dev = connector->dev; | 1842 | intel_attach_force_audio_property(connector); |
| 1845 | |||
| 1846 | intel_dp->force_audio_property = | ||
| 1847 | drm_property_create(dev, DRM_MODE_PROP_RANGE, "force_audio", 2); | ||
| 1848 | if (intel_dp->force_audio_property) { | ||
| 1849 | intel_dp->force_audio_property->values[0] = -1; | ||
| 1850 | intel_dp->force_audio_property->values[1] = 1; | ||
| 1851 | drm_connector_attach_property(connector, intel_dp->force_audio_property, 0); | ||
| 1852 | } | ||
| 1853 | |||
| 1854 | intel_attach_broadcast_rgb_property(connector); | 1843 | intel_attach_broadcast_rgb_property(connector); |
| 1855 | } | 1844 | } |
| 1856 | 1845 | ||
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h index 831d7a4a0d18..9ffa61eb4d7e 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h | |||
| @@ -236,6 +236,7 @@ struct intel_unpin_work { | |||
| 236 | int intel_ddc_get_modes(struct drm_connector *c, struct i2c_adapter *adapter); | 236 | int intel_ddc_get_modes(struct drm_connector *c, struct i2c_adapter *adapter); |
| 237 | extern bool intel_ddc_probe(struct intel_encoder *intel_encoder, int ddc_bus); | 237 | extern bool intel_ddc_probe(struct intel_encoder *intel_encoder, int ddc_bus); |
| 238 | 238 | ||
| 239 | extern void intel_attach_force_audio_property(struct drm_connector *connector); | ||
| 239 | extern void intel_attach_broadcast_rgb_property(struct drm_connector *connector); | 240 | extern void intel_attach_broadcast_rgb_property(struct drm_connector *connector); |
| 240 | 241 | ||
| 241 | extern void intel_crt_init(struct drm_device *dev); | 242 | extern void intel_crt_init(struct drm_device *dev); |
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c index f289b8642976..aa0a8e83142e 100644 --- a/drivers/gpu/drm/i915/intel_hdmi.c +++ b/drivers/gpu/drm/i915/intel_hdmi.c | |||
| @@ -45,7 +45,6 @@ struct intel_hdmi { | |||
| 45 | bool has_hdmi_sink; | 45 | bool has_hdmi_sink; |
| 46 | bool has_audio; | 46 | bool has_audio; |
| 47 | int force_audio; | 47 | int force_audio; |
| 48 | struct drm_property *force_audio_property; | ||
| 49 | }; | 48 | }; |
| 50 | 49 | ||
| 51 | static struct intel_hdmi *enc_to_intel_hdmi(struct drm_encoder *encoder) | 50 | static struct intel_hdmi *enc_to_intel_hdmi(struct drm_encoder *encoder) |
| @@ -194,7 +193,7 @@ static int intel_hdmi_mode_valid(struct drm_connector *connector, | |||
| 194 | if (mode->clock > 165000) | 193 | if (mode->clock > 165000) |
| 195 | return MODE_CLOCK_HIGH; | 194 | return MODE_CLOCK_HIGH; |
| 196 | if (mode->clock < 20000) | 195 | if (mode->clock < 20000) |
| 197 | return MODE_CLOCK_HIGH; | 196 | return MODE_CLOCK_LOW; |
| 198 | 197 | ||
| 199 | if (mode->flags & DRM_MODE_FLAG_DBLSCAN) | 198 | if (mode->flags & DRM_MODE_FLAG_DBLSCAN) |
| 200 | return MODE_NO_DBLESCAN; | 199 | return MODE_NO_DBLESCAN; |
| @@ -287,7 +286,7 @@ intel_hdmi_set_property(struct drm_connector *connector, | |||
| 287 | if (ret) | 286 | if (ret) |
| 288 | return ret; | 287 | return ret; |
| 289 | 288 | ||
| 290 | if (property == intel_hdmi->force_audio_property) { | 289 | if (property == dev_priv->force_audio_property) { |
| 291 | int i = val; | 290 | int i = val; |
| 292 | bool has_audio; | 291 | bool has_audio; |
| 293 | 292 | ||
| @@ -365,16 +364,7 @@ static const struct drm_encoder_funcs intel_hdmi_enc_funcs = { | |||
| 365 | static void | 364 | static void |
| 366 | intel_hdmi_add_properties(struct intel_hdmi *intel_hdmi, struct drm_connector *connector) | 365 | intel_hdmi_add_properties(struct intel_hdmi *intel_hdmi, struct drm_connector *connector) |
| 367 | { | 366 | { |
| 368 | struct drm_device *dev = connector->dev; | 367 | intel_attach_force_audio_property(connector); |
| 369 | |||
| 370 | intel_hdmi->force_audio_property = | ||
| 371 | drm_property_create(dev, DRM_MODE_PROP_RANGE, "force_audio", 2); | ||
| 372 | if (intel_hdmi->force_audio_property) { | ||
| 373 | intel_hdmi->force_audio_property->values[0] = -1; | ||
| 374 | intel_hdmi->force_audio_property->values[1] = 1; | ||
| 375 | drm_connector_attach_property(connector, intel_hdmi->force_audio_property, 0); | ||
| 376 | } | ||
| 377 | |||
| 378 | intel_attach_broadcast_rgb_property(connector); | 368 | intel_attach_broadcast_rgb_property(connector); |
| 379 | } | 369 | } |
| 380 | 370 | ||
diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c index 67cb076d271b..b28f7bd9f88a 100644 --- a/drivers/gpu/drm/i915/intel_lvds.c +++ b/drivers/gpu/drm/i915/intel_lvds.c | |||
| @@ -727,6 +727,14 @@ static const struct dmi_system_id intel_no_lvds[] = { | |||
| 727 | DMI_MATCH(DMI_PRODUCT_NAME, "U800"), | 727 | DMI_MATCH(DMI_PRODUCT_NAME, "U800"), |
| 728 | }, | 728 | }, |
| 729 | }, | 729 | }, |
| 730 | { | ||
| 731 | .callback = intel_no_lvds_dmi_callback, | ||
| 732 | .ident = "Asus EeeBox PC EB1007", | ||
| 733 | .matches = { | ||
| 734 | DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK Computer INC."), | ||
| 735 | DMI_MATCH(DMI_PRODUCT_NAME, "EB1007"), | ||
| 736 | }, | ||
| 737 | }, | ||
| 730 | 738 | ||
| 731 | { } /* terminating entry */ | 739 | { } /* terminating entry */ |
| 732 | }; | 740 | }; |
diff --git a/drivers/gpu/drm/i915/intel_modes.c b/drivers/gpu/drm/i915/intel_modes.c index 9034dd8f33c7..3b26a3ba02dd 100644 --- a/drivers/gpu/drm/i915/intel_modes.c +++ b/drivers/gpu/drm/i915/intel_modes.c | |||
| @@ -81,6 +81,36 @@ int intel_ddc_get_modes(struct drm_connector *connector, | |||
| 81 | return ret; | 81 | return ret; |
| 82 | } | 82 | } |
| 83 | 83 | ||
| 84 | static const char *force_audio_names[] = { | ||
| 85 | "off", | ||
| 86 | "auto", | ||
| 87 | "on", | ||
| 88 | }; | ||
| 89 | |||
| 90 | void | ||
| 91 | intel_attach_force_audio_property(struct drm_connector *connector) | ||
| 92 | { | ||
| 93 | struct drm_device *dev = connector->dev; | ||
| 94 | struct drm_i915_private *dev_priv = dev->dev_private; | ||
| 95 | struct drm_property *prop; | ||
| 96 | int i; | ||
| 97 | |||
| 98 | prop = dev_priv->force_audio_property; | ||
| 99 | if (prop == NULL) { | ||
| 100 | prop = drm_property_create(dev, DRM_MODE_PROP_ENUM, | ||
| 101 | "audio", | ||
| 102 | ARRAY_SIZE(force_audio_names)); | ||
| 103 | if (prop == NULL) | ||
| 104 | return; | ||
| 105 | |||
| 106 | for (i = 0; i < ARRAY_SIZE(force_audio_names); i++) | ||
| 107 | drm_property_add_enum(prop, i, i-1, force_audio_names[i]); | ||
| 108 | |||
| 109 | dev_priv->force_audio_property = prop; | ||
| 110 | } | ||
| 111 | drm_connector_attach_property(connector, prop, 0); | ||
| 112 | } | ||
| 113 | |||
| 84 | static const char *broadcast_rgb_names[] = { | 114 | static const char *broadcast_rgb_names[] = { |
| 85 | "Full", | 115 | "Full", |
| 86 | "Limited 16:235", | 116 | "Limited 16:235", |
diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c index 754086f83941..30fe554d8936 100644 --- a/drivers/gpu/drm/i915/intel_sdvo.c +++ b/drivers/gpu/drm/i915/intel_sdvo.c | |||
| @@ -148,8 +148,6 @@ struct intel_sdvo_connector { | |||
| 148 | int format_supported_num; | 148 | int format_supported_num; |
| 149 | struct drm_property *tv_format; | 149 | struct drm_property *tv_format; |
| 150 | 150 | ||
| 151 | struct drm_property *force_audio_property; | ||
| 152 | |||
| 153 | /* add the property for the SDVO-TV */ | 151 | /* add the property for the SDVO-TV */ |
| 154 | struct drm_property *left; | 152 | struct drm_property *left; |
| 155 | struct drm_property *right; | 153 | struct drm_property *right; |
| @@ -1712,7 +1710,7 @@ intel_sdvo_set_property(struct drm_connector *connector, | |||
| 1712 | if (ret) | 1710 | if (ret) |
| 1713 | return ret; | 1711 | return ret; |
| 1714 | 1712 | ||
| 1715 | if (property == intel_sdvo_connector->force_audio_property) { | 1713 | if (property == dev_priv->force_audio_property) { |
| 1716 | int i = val; | 1714 | int i = val; |
| 1717 | bool has_audio; | 1715 | bool has_audio; |
| 1718 | 1716 | ||
| @@ -2037,15 +2035,7 @@ intel_sdvo_add_hdmi_properties(struct intel_sdvo_connector *connector) | |||
| 2037 | { | 2035 | { |
| 2038 | struct drm_device *dev = connector->base.base.dev; | 2036 | struct drm_device *dev = connector->base.base.dev; |
| 2039 | 2037 | ||
| 2040 | connector->force_audio_property = | 2038 | intel_attach_force_audio_property(&connector->base.base); |
| 2041 | drm_property_create(dev, DRM_MODE_PROP_RANGE, "force_audio", 2); | ||
| 2042 | if (connector->force_audio_property) { | ||
| 2043 | connector->force_audio_property->values[0] = -1; | ||
| 2044 | connector->force_audio_property->values[1] = 1; | ||
| 2045 | drm_connector_attach_property(&connector->base.base, | ||
| 2046 | connector->force_audio_property, 0); | ||
| 2047 | } | ||
| 2048 | |||
| 2049 | if (INTEL_INFO(dev)->gen >= 4 && IS_MOBILE(dev)) | 2039 | if (INTEL_INFO(dev)->gen >= 4 && IS_MOBILE(dev)) |
| 2050 | intel_attach_broadcast_rgb_property(&connector->base.base); | 2040 | intel_attach_broadcast_rgb_property(&connector->base.base); |
| 2051 | } | 2041 | } |
diff --git a/drivers/gpu/drm/nouveau/nouveau_hw.c b/drivers/gpu/drm/nouveau/nouveau_hw.c index 053edf9d2f67..ba896e54b799 100644 --- a/drivers/gpu/drm/nouveau/nouveau_hw.c +++ b/drivers/gpu/drm/nouveau/nouveau_hw.c | |||
| @@ -900,6 +900,7 @@ nv_save_state_ext(struct drm_device *dev, int head, | |||
| 900 | } | 900 | } |
| 901 | /* NV11 and NV20 don't have this, they stop at 0x52. */ | 901 | /* NV11 and NV20 don't have this, they stop at 0x52. */ |
| 902 | if (nv_gf4_disp_arch(dev)) { | 902 | if (nv_gf4_disp_arch(dev)) { |
| 903 | rd_cio_state(dev, head, regp, NV_CIO_CRE_42); | ||
| 903 | rd_cio_state(dev, head, regp, NV_CIO_CRE_53); | 904 | rd_cio_state(dev, head, regp, NV_CIO_CRE_53); |
| 904 | rd_cio_state(dev, head, regp, NV_CIO_CRE_54); | 905 | rd_cio_state(dev, head, regp, NV_CIO_CRE_54); |
| 905 | 906 | ||
| @@ -1003,6 +1004,7 @@ nv_load_state_ext(struct drm_device *dev, int head, | |||
| 1003 | nouveau_wait_eq(dev, 650000000, NV_PRMCIO_INP0__COLOR, 0x8, 0x0); | 1004 | nouveau_wait_eq(dev, 650000000, NV_PRMCIO_INP0__COLOR, 0x8, 0x0); |
| 1004 | } | 1005 | } |
| 1005 | 1006 | ||
| 1007 | wr_cio_state(dev, head, regp, NV_CIO_CRE_42); | ||
| 1006 | wr_cio_state(dev, head, regp, NV_CIO_CRE_53); | 1008 | wr_cio_state(dev, head, regp, NV_CIO_CRE_53); |
| 1007 | wr_cio_state(dev, head, regp, NV_CIO_CRE_54); | 1009 | wr_cio_state(dev, head, regp, NV_CIO_CRE_54); |
| 1008 | 1010 | ||
diff --git a/drivers/gpu/drm/nouveau/nouveau_mem.c b/drivers/gpu/drm/nouveau/nouveau_mem.c index 2960f583dc38..5ee14d216ce8 100644 --- a/drivers/gpu/drm/nouveau/nouveau_mem.c +++ b/drivers/gpu/drm/nouveau/nouveau_mem.c | |||
| @@ -397,7 +397,7 @@ nouveau_mem_vram_init(struct drm_device *dev) | |||
| 397 | if (pci_dma_supported(dev->pdev, DMA_BIT_MASK(40))) | 397 | if (pci_dma_supported(dev->pdev, DMA_BIT_MASK(40))) |
| 398 | dma_bits = 40; | 398 | dma_bits = 40; |
| 399 | } else | 399 | } else |
| 400 | if (drm_pci_device_is_pcie(dev) && | 400 | if (0 && drm_pci_device_is_pcie(dev) && |
| 401 | dev_priv->chipset > 0x40 && | 401 | dev_priv->chipset > 0x40 && |
| 402 | dev_priv->chipset != 0x45) { | 402 | dev_priv->chipset != 0x45) { |
| 403 | if (pci_dma_supported(dev->pdev, DMA_BIT_MASK(39))) | 403 | if (pci_dma_supported(dev->pdev, DMA_BIT_MASK(39))) |
| @@ -868,7 +868,9 @@ nouveau_gart_manager_del(struct ttm_mem_type_manager *man, | |||
| 868 | nouveau_vm_unmap(&node->tmp_vma); | 868 | nouveau_vm_unmap(&node->tmp_vma); |
| 869 | nouveau_vm_put(&node->tmp_vma); | 869 | nouveau_vm_put(&node->tmp_vma); |
| 870 | } | 870 | } |
| 871 | |||
| 871 | mem->mm_node = NULL; | 872 | mem->mm_node = NULL; |
| 873 | kfree(node); | ||
| 872 | } | 874 | } |
| 873 | 875 | ||
| 874 | static int | 876 | static int |
diff --git a/drivers/gpu/drm/nouveau/nouveau_sgdma.c b/drivers/gpu/drm/nouveau/nouveau_sgdma.c index c77111eca6ac..82fad914e648 100644 --- a/drivers/gpu/drm/nouveau/nouveau_sgdma.c +++ b/drivers/gpu/drm/nouveau/nouveau_sgdma.c | |||
| @@ -458,7 +458,7 @@ nouveau_sgdma_init(struct drm_device *dev) | |||
| 458 | dev_priv->gart_info.type = NOUVEAU_GART_HW; | 458 | dev_priv->gart_info.type = NOUVEAU_GART_HW; |
| 459 | dev_priv->gart_info.func = &nv50_sgdma_backend; | 459 | dev_priv->gart_info.func = &nv50_sgdma_backend; |
| 460 | } else | 460 | } else |
| 461 | if (drm_pci_device_is_pcie(dev) && | 461 | if (0 && drm_pci_device_is_pcie(dev) && |
| 462 | dev_priv->chipset > 0x40 && dev_priv->chipset != 0x45) { | 462 | dev_priv->chipset > 0x40 && dev_priv->chipset != 0x45) { |
| 463 | if (nv44_graph_class(dev)) { | 463 | if (nv44_graph_class(dev)) { |
| 464 | dev_priv->gart_info.func = &nv44_sgdma_backend; | 464 | dev_priv->gart_info.func = &nv44_sgdma_backend; |
diff --git a/drivers/gpu/drm/nouveau/nouveau_state.c b/drivers/gpu/drm/nouveau/nouveau_state.c index 38ea662568c1..80218887e0a0 100644 --- a/drivers/gpu/drm/nouveau/nouveau_state.c +++ b/drivers/gpu/drm/nouveau/nouveau_state.c | |||
| @@ -371,6 +371,7 @@ static int nouveau_init_engine_ptrs(struct drm_device *dev) | |||
| 371 | engine->vram.flags_valid = nv50_vram_flags_valid; | 371 | engine->vram.flags_valid = nv50_vram_flags_valid; |
| 372 | break; | 372 | break; |
| 373 | case 0xC0: | 373 | case 0xC0: |
| 374 | case 0xD0: | ||
| 374 | engine->instmem.init = nvc0_instmem_init; | 375 | engine->instmem.init = nvc0_instmem_init; |
| 375 | engine->instmem.takedown = nvc0_instmem_takedown; | 376 | engine->instmem.takedown = nvc0_instmem_takedown; |
| 376 | engine->instmem.suspend = nvc0_instmem_suspend; | 377 | engine->instmem.suspend = nvc0_instmem_suspend; |
| @@ -563,68 +564,68 @@ nouveau_card_init(struct drm_device *dev) | |||
| 563 | if (ret) | 564 | if (ret) |
| 564 | goto out_timer; | 565 | goto out_timer; |
| 565 | 566 | ||
| 566 | switch (dev_priv->card_type) { | 567 | if (!nouveau_noaccel) { |
| 567 | case NV_04: | 568 | switch (dev_priv->card_type) { |
| 568 | nv04_graph_create(dev); | 569 | case NV_04: |
| 569 | break; | 570 | nv04_graph_create(dev); |
| 570 | case NV_10: | 571 | break; |
| 571 | nv10_graph_create(dev); | 572 | case NV_10: |
| 572 | break; | 573 | nv10_graph_create(dev); |
| 573 | case NV_20: | 574 | break; |
| 574 | case NV_30: | 575 | case NV_20: |
| 575 | nv20_graph_create(dev); | 576 | case NV_30: |
| 576 | break; | 577 | nv20_graph_create(dev); |
| 577 | case NV_40: | 578 | break; |
| 578 | nv40_graph_create(dev); | 579 | case NV_40: |
| 579 | break; | 580 | nv40_graph_create(dev); |
| 580 | case NV_50: | 581 | break; |
| 581 | nv50_graph_create(dev); | 582 | case NV_50: |
| 582 | break; | 583 | nv50_graph_create(dev); |
| 583 | case NV_C0: | 584 | break; |
| 584 | nvc0_graph_create(dev); | 585 | case NV_C0: |
| 585 | break; | 586 | nvc0_graph_create(dev); |
| 586 | default: | 587 | break; |
| 587 | break; | 588 | default: |
| 588 | } | 589 | break; |
| 589 | 590 | } | |
| 590 | switch (dev_priv->chipset) { | ||
| 591 | case 0x84: | ||
| 592 | case 0x86: | ||
| 593 | case 0x92: | ||
| 594 | case 0x94: | ||
| 595 | case 0x96: | ||
| 596 | case 0xa0: | ||
| 597 | nv84_crypt_create(dev); | ||
| 598 | break; | ||
| 599 | } | ||
| 600 | 591 | ||
| 601 | switch (dev_priv->card_type) { | ||
| 602 | case NV_50: | ||
| 603 | switch (dev_priv->chipset) { | 592 | switch (dev_priv->chipset) { |
| 604 | case 0xa3: | 593 | case 0x84: |
| 605 | case 0xa5: | 594 | case 0x86: |
| 606 | case 0xa8: | 595 | case 0x92: |
| 607 | case 0xaf: | 596 | case 0x94: |
| 608 | nva3_copy_create(dev); | 597 | case 0x96: |
| 598 | case 0xa0: | ||
| 599 | nv84_crypt_create(dev); | ||
| 609 | break; | 600 | break; |
| 610 | } | 601 | } |
| 611 | break; | ||
| 612 | case NV_C0: | ||
| 613 | nvc0_copy_create(dev, 0); | ||
| 614 | nvc0_copy_create(dev, 1); | ||
| 615 | break; | ||
| 616 | default: | ||
| 617 | break; | ||
| 618 | } | ||
| 619 | 602 | ||
| 620 | if (dev_priv->card_type == NV_40) | 603 | switch (dev_priv->card_type) { |
| 621 | nv40_mpeg_create(dev); | 604 | case NV_50: |
| 622 | else | 605 | switch (dev_priv->chipset) { |
| 623 | if (dev_priv->card_type == NV_50 && | 606 | case 0xa3: |
| 624 | (dev_priv->chipset < 0x98 || dev_priv->chipset == 0xa0)) | 607 | case 0xa5: |
| 625 | nv50_mpeg_create(dev); | 608 | case 0xa8: |
| 609 | case 0xaf: | ||
| 610 | nva3_copy_create(dev); | ||
| 611 | break; | ||
| 612 | } | ||
| 613 | break; | ||
| 614 | case NV_C0: | ||
| 615 | nvc0_copy_create(dev, 0); | ||
| 616 | nvc0_copy_create(dev, 1); | ||
| 617 | break; | ||
| 618 | default: | ||
| 619 | break; | ||
| 620 | } | ||
| 621 | |||
| 622 | if (dev_priv->card_type == NV_40) | ||
| 623 | nv40_mpeg_create(dev); | ||
| 624 | else | ||
| 625 | if (dev_priv->card_type == NV_50 && | ||
| 626 | (dev_priv->chipset < 0x98 || dev_priv->chipset == 0xa0)) | ||
| 627 | nv50_mpeg_create(dev); | ||
| 626 | 628 | ||
| 627 | if (!nouveau_noaccel) { | ||
| 628 | for (e = 0; e < NVOBJ_ENGINE_NR; e++) { | 629 | for (e = 0; e < NVOBJ_ENGINE_NR; e++) { |
| 629 | if (dev_priv->eng[e]) { | 630 | if (dev_priv->eng[e]) { |
| 630 | ret = dev_priv->eng[e]->init(dev, e); | 631 | ret = dev_priv->eng[e]->init(dev, e); |
| @@ -922,6 +923,7 @@ int nouveau_load(struct drm_device *dev, unsigned long flags) | |||
| 922 | dev_priv->card_type = NV_50; | 923 | dev_priv->card_type = NV_50; |
| 923 | break; | 924 | break; |
| 924 | case 0xc0: | 925 | case 0xc0: |
| 926 | case 0xd0: | ||
| 925 | dev_priv->card_type = NV_C0; | 927 | dev_priv->card_type = NV_C0; |
| 926 | break; | 928 | break; |
| 927 | default: | 929 | default: |
diff --git a/drivers/gpu/drm/nouveau/nouveau_vm.c b/drivers/gpu/drm/nouveau/nouveau_vm.c index 0059e6f58a8b..519a6b4bba46 100644 --- a/drivers/gpu/drm/nouveau/nouveau_vm.c +++ b/drivers/gpu/drm/nouveau/nouveau_vm.c | |||
| @@ -58,6 +58,7 @@ nouveau_vm_map_at(struct nouveau_vma *vma, u64 delta, struct nouveau_mem *node) | |||
| 58 | num -= len; | 58 | num -= len; |
| 59 | pte += len; | 59 | pte += len; |
| 60 | if (unlikely(end >= max)) { | 60 | if (unlikely(end >= max)) { |
| 61 | phys += len << (bits + 12); | ||
| 61 | pde++; | 62 | pde++; |
| 62 | pte = 0; | 63 | pte = 0; |
| 63 | } | 64 | } |
diff --git a/drivers/gpu/drm/nouveau/nv04_crtc.c b/drivers/gpu/drm/nouveau/nv04_crtc.c index 3c78bc81357e..f1a3ae491995 100644 --- a/drivers/gpu/drm/nouveau/nv04_crtc.c +++ b/drivers/gpu/drm/nouveau/nv04_crtc.c | |||
| @@ -376,7 +376,10 @@ nv_crtc_mode_set_vga(struct drm_crtc *crtc, struct drm_display_mode *mode) | |||
| 376 | */ | 376 | */ |
| 377 | 377 | ||
| 378 | /* framebuffer can be larger than crtc scanout area. */ | 378 | /* framebuffer can be larger than crtc scanout area. */ |
| 379 | regp->CRTC[NV_CIO_CRE_RPC0_INDEX] = XLATE(fb->pitch / 8, 8, NV_CIO_CRE_RPC0_OFFSET_10_8); | 379 | regp->CRTC[NV_CIO_CRE_RPC0_INDEX] = |
| 380 | XLATE(fb->pitch / 8, 8, NV_CIO_CRE_RPC0_OFFSET_10_8); | ||
| 381 | regp->CRTC[NV_CIO_CRE_42] = | ||
| 382 | XLATE(fb->pitch / 8, 11, NV_CIO_CRE_42_OFFSET_11); | ||
| 380 | regp->CRTC[NV_CIO_CRE_RPC1_INDEX] = mode->crtc_hdisplay < 1280 ? | 383 | regp->CRTC[NV_CIO_CRE_RPC1_INDEX] = mode->crtc_hdisplay < 1280 ? |
| 381 | MASK(NV_CIO_CRE_RPC1_LARGE) : 0x00; | 384 | MASK(NV_CIO_CRE_RPC1_LARGE) : 0x00; |
| 382 | regp->CRTC[NV_CIO_CRE_LSR_INDEX] = XLATE(horizBlankEnd, 6, NV_CIO_CRE_LSR_HBE_6) | | 385 | regp->CRTC[NV_CIO_CRE_LSR_INDEX] = XLATE(horizBlankEnd, 6, NV_CIO_CRE_LSR_HBE_6) | |
| @@ -824,8 +827,11 @@ nv04_crtc_do_mode_set_base(struct drm_crtc *crtc, | |||
| 824 | regp->CRTC[NV_CIO_CR_OFFSET_INDEX] = drm_fb->pitch >> 3; | 827 | regp->CRTC[NV_CIO_CR_OFFSET_INDEX] = drm_fb->pitch >> 3; |
| 825 | regp->CRTC[NV_CIO_CRE_RPC0_INDEX] = | 828 | regp->CRTC[NV_CIO_CRE_RPC0_INDEX] = |
| 826 | XLATE(drm_fb->pitch >> 3, 8, NV_CIO_CRE_RPC0_OFFSET_10_8); | 829 | XLATE(drm_fb->pitch >> 3, 8, NV_CIO_CRE_RPC0_OFFSET_10_8); |
| 830 | regp->CRTC[NV_CIO_CRE_42] = | ||
| 831 | XLATE(drm_fb->pitch / 8, 11, NV_CIO_CRE_42_OFFSET_11); | ||
| 827 | crtc_wr_cio_state(crtc, regp, NV_CIO_CRE_RPC0_INDEX); | 832 | crtc_wr_cio_state(crtc, regp, NV_CIO_CRE_RPC0_INDEX); |
| 828 | crtc_wr_cio_state(crtc, regp, NV_CIO_CR_OFFSET_INDEX); | 833 | crtc_wr_cio_state(crtc, regp, NV_CIO_CR_OFFSET_INDEX); |
| 834 | crtc_wr_cio_state(crtc, regp, NV_CIO_CRE_42); | ||
| 829 | 835 | ||
| 830 | /* Update the framebuffer location. */ | 836 | /* Update the framebuffer location. */ |
| 831 | regp->fb_start = nv_crtc->fb.offset & ~3; | 837 | regp->fb_start = nv_crtc->fb.offset & ~3; |
diff --git a/drivers/gpu/drm/nouveau/nvreg.h b/drivers/gpu/drm/nouveau/nvreg.h index fe0f253089ac..bbfb1a68fb11 100644 --- a/drivers/gpu/drm/nouveau/nvreg.h +++ b/drivers/gpu/drm/nouveau/nvreg.h | |||
| @@ -277,6 +277,8 @@ | |||
| 277 | # define NV_CIO_CRE_EBR_VDE_11 2:2 | 277 | # define NV_CIO_CRE_EBR_VDE_11 2:2 |
| 278 | # define NV_CIO_CRE_EBR_VRS_11 4:4 | 278 | # define NV_CIO_CRE_EBR_VRS_11 4:4 |
| 279 | # define NV_CIO_CRE_EBR_VBS_11 6:6 | 279 | # define NV_CIO_CRE_EBR_VBS_11 6:6 |
| 280 | # define NV_CIO_CRE_42 0x42 | ||
| 281 | # define NV_CIO_CRE_42_OFFSET_11 6:6 | ||
| 280 | # define NV_CIO_CRE_43 0x43 | 282 | # define NV_CIO_CRE_43 0x43 |
| 281 | # define NV_CIO_CRE_44 0x44 /* head control */ | 283 | # define NV_CIO_CRE_44 0x44 /* head control */ |
| 282 | # define NV_CIO_CRE_CSB 0x45 /* colour saturation boost */ | 284 | # define NV_CIO_CRE_CSB 0x45 /* colour saturation boost */ |
