diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-09-07 17:00:43 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-09-07 17:00:43 -0400 |
| commit | 4eab8a5717f5a863cb0e2fc8b22d8b22f4aaa644 (patch) | |
| tree | ef1e57b99019aa876fc814d2da2560b6fab631c8 /drivers/gpu | |
| parent | 6300d6d755842f2ed18053ed6f868944d51b5aef (diff) | |
| parent | 8554048070906579ec9fa19ac381deddd2d7b155 (diff) | |
Merge branch 'drm-intel-fixes' of git://anongit.freedesktop.org/~ickle/drm-intel
* 'drm-intel-fixes' of git://anongit.freedesktop.org/~ickle/drm-intel: (25 commits)
intel_agp,i915: Add more sandybridge graphics device ids
drm/i915: Enable MI_FLUSH on Sandybridge
agp/intel: Fix cache control for Sandybridge
agp/intel: use #ifdef idiom for intel-agp.h
agp/intel: fix physical address mask bits for sandybridge
drm/i915: Prevent double dpms on
drm/i915: Avoid use of uninitialised values when disabling panel-fitter
drm/i915: Avoid pageflipping freeze when we miss the flip prepare interrupt
drm/i915: Tightly scope intel_encoder to prevent invalid use
drm/i915: Allocate the PCI resource for the MCHBAR
drm/i915/dp: Really try 5 times before giving up.
drm/i915/sdvo: Restore guess of the DDC bus in absence of VBIOS
drm/i915/dp: Boost timeout for enabling transcoder to 100ms
drm/i915: Re-use set_base_atomic to share setting of the display registers
drm/i915: Fix offset page-flips on i965+
drm/i915: Include a generation number in the device info
i915: return -EFAULT if copy_to_user fails
i915: return -EFAULT if copy_to_user fails
agp/intel: Promote warning about failure to setup flush to error.
drm/i915: overlay on gen2 can't address above 1G
...
Diffstat (limited to 'drivers/gpu')
| -rw-r--r-- | drivers/gpu/drm/i915/i915_debugfs.c | 50 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/i915_dma.c | 36 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/i915_drv.c | 65 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/i915_drv.h | 27 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/i915_gem.c | 11 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/i915_irq.c | 51 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/i915_reg.h | 1 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 244 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_dp.c | 58 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_drv.h | 10 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_overlay.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_ringbuffer.c | 8 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_sdvo.c | 69 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/intel_tv.c | 9 |
14 files changed, 382 insertions, 259 deletions
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c index 92d5605a34d1..5e43d7076789 100644 --- a/drivers/gpu/drm/i915/i915_debugfs.c +++ b/drivers/gpu/drm/i915/i915_debugfs.c | |||
| @@ -31,6 +31,7 @@ | |||
| 31 | #include <linux/slab.h> | 31 | #include <linux/slab.h> |
| 32 | #include "drmP.h" | 32 | #include "drmP.h" |
| 33 | #include "drm.h" | 33 | #include "drm.h" |
| 34 | #include "intel_drv.h" | ||
| 34 | #include "i915_drm.h" | 35 | #include "i915_drm.h" |
| 35 | #include "i915_drv.h" | 36 | #include "i915_drv.h" |
| 36 | 37 | ||
| @@ -121,6 +122,54 @@ static int i915_gem_object_list_info(struct seq_file *m, void *data) | |||
| 121 | return 0; | 122 | return 0; |
| 122 | } | 123 | } |
| 123 | 124 | ||
| 125 | static int i915_gem_pageflip_info(struct seq_file *m, void *data) | ||
| 126 | { | ||
| 127 | struct drm_info_node *node = (struct drm_info_node *) m->private; | ||
| 128 | struct drm_device *dev = node->minor->dev; | ||
| 129 | unsigned long flags; | ||
| 130 | struct intel_crtc *crtc; | ||
| 131 | |||
| 132 | list_for_each_entry(crtc, &dev->mode_config.crtc_list, base.head) { | ||
| 133 | const char *pipe = crtc->pipe ? "B" : "A"; | ||
| 134 | const char *plane = crtc->plane ? "B" : "A"; | ||
| 135 | struct intel_unpin_work *work; | ||
| 136 | |||
| 137 | spin_lock_irqsave(&dev->event_lock, flags); | ||
| 138 | work = crtc->unpin_work; | ||
| 139 | if (work == NULL) { | ||
| 140 | seq_printf(m, "No flip due on pipe %s (plane %s)\n", | ||
| 141 | pipe, plane); | ||
| 142 | } else { | ||
| 143 | if (!work->pending) { | ||
| 144 | seq_printf(m, "Flip queued on pipe %s (plane %s)\n", | ||
| 145 | pipe, plane); | ||
| 146 | } else { | ||
| 147 | seq_printf(m, "Flip pending (waiting for vsync) on pipe %s (plane %s)\n", | ||
| 148 | pipe, plane); | ||
| 149 | } | ||
| 150 | if (work->enable_stall_check) | ||
| 151 | seq_printf(m, "Stall check enabled, "); | ||
| 152 | else | ||
| 153 | seq_printf(m, "Stall check waiting for page flip ioctl, "); | ||
| 154 | seq_printf(m, "%d prepares\n", work->pending); | ||
| 155 | |||
| 156 | if (work->old_fb_obj) { | ||
| 157 | struct drm_i915_gem_object *obj_priv = to_intel_bo(work->old_fb_obj); | ||
| 158 | if(obj_priv) | ||
| 159 | seq_printf(m, "Old framebuffer gtt_offset 0x%08x\n", obj_priv->gtt_offset ); | ||
| 160 | } | ||
| 161 | if (work->pending_flip_obj) { | ||
| 162 | struct drm_i915_gem_object *obj_priv = to_intel_bo(work->pending_flip_obj); | ||
| 163 | if(obj_priv) | ||
| 164 | seq_printf(m, "New framebuffer gtt_offset 0x%08x\n", obj_priv->gtt_offset ); | ||
| 165 | } | ||
| 166 | } | ||
| 167 | spin_unlock_irqrestore(&dev->event_lock, flags); | ||
| 168 | } | ||
| 169 | |||
| 170 | return 0; | ||
| 171 | } | ||
| 172 | |||
| 124 | static int i915_gem_request_info(struct seq_file *m, void *data) | 173 | static int i915_gem_request_info(struct seq_file *m, void *data) |
| 125 | { | 174 | { |
| 126 | struct drm_info_node *node = (struct drm_info_node *) m->private; | 175 | struct drm_info_node *node = (struct drm_info_node *) m->private; |
| @@ -777,6 +826,7 @@ static struct drm_info_list i915_debugfs_list[] = { | |||
| 777 | {"i915_gem_active", i915_gem_object_list_info, 0, (void *) ACTIVE_LIST}, | 826 | {"i915_gem_active", i915_gem_object_list_info, 0, (void *) ACTIVE_LIST}, |
| 778 | {"i915_gem_flushing", i915_gem_object_list_info, 0, (void *) FLUSHING_LIST}, | 827 | {"i915_gem_flushing", i915_gem_object_list_info, 0, (void *) FLUSHING_LIST}, |
| 779 | {"i915_gem_inactive", i915_gem_object_list_info, 0, (void *) INACTIVE_LIST}, | 828 | {"i915_gem_inactive", i915_gem_object_list_info, 0, (void *) INACTIVE_LIST}, |
| 829 | {"i915_gem_pageflip", i915_gem_pageflip_info, 0}, | ||
| 780 | {"i915_gem_request", i915_gem_request_info, 0}, | 830 | {"i915_gem_request", i915_gem_request_info, 0}, |
| 781 | {"i915_gem_seqno", i915_gem_seqno_info, 0}, | 831 | {"i915_gem_seqno", i915_gem_seqno_info, 0}, |
| 782 | {"i915_gem_fence_regs", i915_gem_fence_regs_info, 0}, | 832 | {"i915_gem_fence_regs", i915_gem_fence_regs_info, 0}, |
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c index a7ec93e62f81..9d67b4853030 100644 --- a/drivers/gpu/drm/i915/i915_dma.c +++ b/drivers/gpu/drm/i915/i915_dma.c | |||
| @@ -620,8 +620,10 @@ static int i915_batchbuffer(struct drm_device *dev, void *data, | |||
| 620 | ret = copy_from_user(cliprects, batch->cliprects, | 620 | ret = copy_from_user(cliprects, batch->cliprects, |
| 621 | batch->num_cliprects * | 621 | batch->num_cliprects * |
| 622 | sizeof(struct drm_clip_rect)); | 622 | sizeof(struct drm_clip_rect)); |
| 623 | if (ret != 0) | 623 | if (ret != 0) { |
| 624 | ret = -EFAULT; | ||
| 624 | goto fail_free; | 625 | goto fail_free; |
| 626 | } | ||
| 625 | } | 627 | } |
| 626 | 628 | ||
| 627 | mutex_lock(&dev->struct_mutex); | 629 | mutex_lock(&dev->struct_mutex); |
| @@ -662,8 +664,10 @@ static int i915_cmdbuffer(struct drm_device *dev, void *data, | |||
| 662 | return -ENOMEM; | 664 | return -ENOMEM; |
| 663 | 665 | ||
| 664 | ret = copy_from_user(batch_data, cmdbuf->buf, cmdbuf->sz); | 666 | ret = copy_from_user(batch_data, cmdbuf->buf, cmdbuf->sz); |
| 665 | if (ret != 0) | 667 | if (ret != 0) { |
| 668 | ret = -EFAULT; | ||
| 666 | goto fail_batch_free; | 669 | goto fail_batch_free; |
| 670 | } | ||
| 667 | 671 | ||
| 668 | if (cmdbuf->num_cliprects) { | 672 | if (cmdbuf->num_cliprects) { |
| 669 | cliprects = kcalloc(cmdbuf->num_cliprects, | 673 | cliprects = kcalloc(cmdbuf->num_cliprects, |
| @@ -676,8 +680,10 @@ static int i915_cmdbuffer(struct drm_device *dev, void *data, | |||
| 676 | ret = copy_from_user(cliprects, cmdbuf->cliprects, | 680 | ret = copy_from_user(cliprects, cmdbuf->cliprects, |
| 677 | cmdbuf->num_cliprects * | 681 | cmdbuf->num_cliprects * |
| 678 | sizeof(struct drm_clip_rect)); | 682 | sizeof(struct drm_clip_rect)); |
| 679 | if (ret != 0) | 683 | if (ret != 0) { |
| 684 | ret = -EFAULT; | ||
| 680 | goto fail_clip_free; | 685 | goto fail_clip_free; |
| 686 | } | ||
| 681 | } | 687 | } |
| 682 | 688 | ||
| 683 | mutex_lock(&dev->struct_mutex); | 689 | mutex_lock(&dev->struct_mutex); |
| @@ -885,7 +891,7 @@ intel_alloc_mchbar_resource(struct drm_device *dev) | |||
| 885 | int reg = IS_I965G(dev) ? MCHBAR_I965 : MCHBAR_I915; | 891 | int reg = IS_I965G(dev) ? MCHBAR_I965 : MCHBAR_I915; |
| 886 | u32 temp_lo, temp_hi = 0; | 892 | u32 temp_lo, temp_hi = 0; |
| 887 | u64 mchbar_addr; | 893 | u64 mchbar_addr; |
| 888 | int ret = 0; | 894 | int ret; |
| 889 | 895 | ||
| 890 | if (IS_I965G(dev)) | 896 | if (IS_I965G(dev)) |
| 891 | pci_read_config_dword(dev_priv->bridge_dev, reg + 4, &temp_hi); | 897 | pci_read_config_dword(dev_priv->bridge_dev, reg + 4, &temp_hi); |
| @@ -895,22 +901,23 @@ intel_alloc_mchbar_resource(struct drm_device *dev) | |||
| 895 | /* If ACPI doesn't have it, assume we need to allocate it ourselves */ | 901 | /* If ACPI doesn't have it, assume we need to allocate it ourselves */ |
| 896 | #ifdef CONFIG_PNP | 902 | #ifdef CONFIG_PNP |
| 897 | if (mchbar_addr && | 903 | if (mchbar_addr && |
| 898 | pnp_range_reserved(mchbar_addr, mchbar_addr + MCHBAR_SIZE)) { | 904 | pnp_range_reserved(mchbar_addr, mchbar_addr + MCHBAR_SIZE)) |
| 899 | ret = 0; | 905 | return 0; |
| 900 | goto out; | ||
| 901 | } | ||
| 902 | #endif | 906 | #endif |
| 903 | 907 | ||
| 904 | /* Get some space for it */ | 908 | /* Get some space for it */ |
| 905 | ret = pci_bus_alloc_resource(dev_priv->bridge_dev->bus, &dev_priv->mch_res, | 909 | dev_priv->mch_res.name = "i915 MCHBAR"; |
| 910 | dev_priv->mch_res.flags = IORESOURCE_MEM; | ||
| 911 | ret = pci_bus_alloc_resource(dev_priv->bridge_dev->bus, | ||
