diff options
author | Ben Widawsky <ben@bwidawsk.net> | 2013-01-24 17:45:00 -0500 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2013-01-31 05:50:07 -0500 |
commit | a54c0c279f3864171fe53c66e769d5a137c5c651 (patch) | |
tree | 08d17841b72e39afdc4ce601f46770824c12fe8a /drivers/gpu/drm/i915 | |
parent | baa09f5fd8a6d033ec075355dda99a65b7f6a0f3 (diff) |
drm/i915: remove intel_gtt structure
With the probe call in our dispatch table, we can now cut away the
last three remaining members in the intel_gtt shared struct and so
remove it completely.
v2: Rebased on top of Daniel's series
Signed-off-by: Ben Widawsky <ben@bwidawsk.net>
Reviewed-by: Damien Lespiau <damien.lespiau@intel.com>
[danvet: bikeshed commit message a bit.]
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915')
-rw-r--r-- | drivers/gpu/drm/i915/i915_drv.h | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/i915_gem_gtt.c | 30 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/i915_gem_stolen.c | 8 |
3 files changed, 11 insertions, 30 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index dee8d5c7a235..d3274164143d 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h | |||
@@ -406,6 +406,7 @@ struct i915_gtt { | |||
406 | unsigned int pg_start, | 406 | unsigned int pg_start, |
407 | enum i915_cache_level cache_level); | 407 | enum i915_cache_level cache_level); |
408 | }; | 408 | }; |
409 | #define gtt_total_entries(gtt) ((gtt).total >> PAGE_SHIFT) | ||
409 | 410 | ||
410 | #define I915_PPGTT_PD_ENTRIES 512 | 411 | #define I915_PPGTT_PD_ENTRIES 512 |
411 | #define I915_PPGTT_PT_ENTRIES 1024 | 412 | #define I915_PPGTT_PT_ENTRIES 1024 |
@@ -696,8 +697,6 @@ struct intel_l3_parity { | |||
696 | }; | 697 | }; |
697 | 698 | ||
698 | struct i915_gem_mm { | 699 | struct i915_gem_mm { |
699 | /** Bridge to intel-gtt-ko */ | ||
700 | struct intel_gtt *gtt; | ||
701 | /** Memory allocator for GTT stolen memory */ | 700 | /** Memory allocator for GTT stolen memory */ |
702 | struct drm_mm stolen; | 701 | struct drm_mm stolen; |
703 | /** Memory allocator for GTT */ | 702 | /** Memory allocator for GTT */ |
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c index 87249e8cd4a0..f7e0018626bd 100644 --- a/drivers/gpu/drm/i915/i915_gem_gtt.c +++ b/drivers/gpu/drm/i915/i915_gem_gtt.c | |||
@@ -182,7 +182,8 @@ static int gen6_ppgtt_init(struct i915_hw_ppgtt *ppgtt) | |||
182 | /* ppgtt PDEs reside in the global gtt pagetable, which has 512*1024 | 182 | /* ppgtt PDEs reside in the global gtt pagetable, which has 512*1024 |
183 | * entries. For aliasing ppgtt support we just steal them at the end for | 183 | * entries. For aliasing ppgtt support we just steal them at the end for |
184 | * now. */ | 184 | * now. */ |
185 | first_pd_entry_in_global_pt = dev_priv->mm.gtt->gtt_total_entries - I915_PPGTT_PD_ENTRIES; | 185 | first_pd_entry_in_global_pt = |
186 | gtt_total_entries(dev_priv->gtt) - I915_PPGTT_PD_ENTRIES; | ||
186 | 187 | ||
187 | ppgtt->num_pd_entries = I915_PPGTT_PD_ENTRIES; | 188 | ppgtt->num_pd_entries = I915_PPGTT_PD_ENTRIES; |
188 | ppgtt->clear_range = gen6_ppgtt_clear_range; | 189 | ppgtt->clear_range = gen6_ppgtt_clear_range; |
@@ -473,7 +474,7 @@ static void gen6_ggtt_clear_range(struct drm_device *dev, | |||
473 | struct drm_i915_private *dev_priv = dev->dev_private; | 474 | struct drm_i915_private *dev_priv = dev->dev_private; |
474 | gtt_pte_t scratch_pte; | 475 | gtt_pte_t scratch_pte; |
475 | gtt_pte_t __iomem *gtt_base = (gtt_pte_t __iomem *) dev_priv->gtt.gsm + first_entry; | 476 | gtt_pte_t __iomem *gtt_base = (gtt_pte_t __iomem *) dev_priv->gtt.gsm + first_entry; |
476 | const int max_entries = dev_priv->mm.gtt->gtt_total_entries - first_entry; | 477 | const int max_entries = gtt_total_entries(dev_priv->gtt) - first_entry; |
477 | int i; | 478 | int i; |
478 | 479 | ||
479 | if (WARN(num_entries > max_entries, | 480 | if (WARN(num_entries > max_entries, |
@@ -634,7 +635,7 @@ void i915_gem_init_global_gtt(struct drm_device *dev) | |||
634 | unsigned long gtt_size, mappable_size; | 635 | unsigned long gtt_size, mappable_size; |
635 | int ret; | 636 | int ret; |
636 | 637 | ||
637 | gtt_size = dev_priv->mm.gtt->gtt_total_entries << PAGE_SHIFT; | 638 | gtt_size = dev_priv->gtt.total; |
638 | mappable_size = dev_priv->gtt.mappable_end; | 639 | mappable_size = dev_priv->gtt.mappable_end; |
639 | 640 | ||
640 | if (intel_enable_ppgtt(dev) && HAS_ALIASING_PPGTT(dev)) { | 641 | if (intel_enable_ppgtt(dev) && HAS_ALIASING_PPGTT(dev)) { |
@@ -778,7 +779,6 @@ void gen6_gmch_remove(struct drm_device *dev) | |||
778 | struct drm_i915_private *dev_priv = dev->dev_private; | 779 | struct drm_i915_private *dev_priv = dev->dev_private; |
779 | iounmap(dev_priv->gtt.gsm); | 780 | iounmap(dev_priv->gtt.gsm); |
780 | teardown_scratch_page(dev_priv->dev); | 781 | teardown_scratch_page(dev_priv->dev); |
781 | kfree(dev_priv->mm.gtt); | ||
782 | } | 782 | } |
783 | 783 | ||
784 | static int i915_gmch_probe(struct drm_device *dev, | 784 | static int i915_gmch_probe(struct drm_device *dev, |
@@ -788,22 +788,13 @@ static int i915_gmch_probe(struct drm_device *dev, | |||
788 | struct drm_i915_private *dev_priv = dev->dev_private; | 788 | struct drm_i915_private *dev_priv = dev->dev_private; |
789 | int ret; | 789 | int ret; |
790 | 790 | ||
791 | /* This is a temporary hack to make the code cleaner in | ||
792 | * i915_gem_gtt_init. I promise it will go away very shortly. */ | ||
793 | kfree(dev_priv->mm.gtt); | ||
794 | |||
795 | ret = intel_gmch_probe(dev_priv->bridge_dev, dev_priv->dev->pdev, NULL); | 791 | ret = intel_gmch_probe(dev_priv->bridge_dev, dev_priv->dev->pdev, NULL); |
796 | if (!ret) { | 792 | if (!ret) { |
797 | DRM_ERROR("failed to set up gmch\n"); | 793 | DRM_ERROR("failed to set up gmch\n"); |
798 | return -EIO; | 794 | return -EIO; |
799 | } | 795 | } |
800 | 796 | ||
801 | dev_priv->mm.gtt = intel_gtt_get(); | 797 | intel_gtt_get(gtt_total, stolen); |
802 | if (!dev_priv->mm.gtt) { | ||
803 | DRM_ERROR("Failed to initialize GTT\n"); | ||
804 | intel_gmch_remove(); | ||
805 | return -ENODEV; | ||
806 | } | ||
807 | 798 | ||
808 | dev_priv->gtt.do_idle_maps = needs_idle_maps(dev_priv->dev); | 799 | dev_priv->gtt.do_idle_maps = needs_idle_maps(dev_priv->dev); |
809 | dev_priv->gtt.gtt_clear_range = i915_ggtt_clear_range; | 800 | dev_priv->gtt.gtt_clear_range = i915_ggtt_clear_range; |
@@ -824,10 +815,6 @@ int i915_gem_gtt_init(struct drm_device *dev) | |||
824 | unsigned long gtt_size; | 815 | unsigned long gtt_size; |
825 | int ret; | 816 | int ret; |
826 | 817 | ||
827 | dev_priv->mm.gtt = kzalloc(sizeof(*dev_priv->mm.gtt), GFP_KERNEL); | ||
828 | if (!dev_priv->mm.gtt) | ||
829 | return -ENOMEM; | ||
830 | |||
831 | gtt->mappable_base = pci_resource_start(dev->pdev, 2); | 818 | gtt->mappable_base = pci_resource_start(dev->pdev, 2); |
832 | gtt->mappable_end = pci_resource_len(dev->pdev, 2); | 819 | gtt->mappable_end = pci_resource_len(dev->pdev, 2); |
833 | 820 | ||
@@ -841,13 +828,8 @@ int i915_gem_gtt_init(struct drm_device *dev) | |||
841 | 828 | ||
842 | ret = dev_priv->gtt.gtt_probe(dev, &dev_priv->gtt.total, | 829 | ret = dev_priv->gtt.gtt_probe(dev, &dev_priv->gtt.total, |
843 | &dev_priv->gtt.stolen_size); | 830 | &dev_priv->gtt.stolen_size); |
844 | if (ret) { | 831 | if (ret) |
845 | kfree(dev_priv->mm.gtt); | ||
846 | return ret; | 832 | return ret; |
847 | } | ||
848 | |||
849 | dev_priv->mm.gtt->gtt_total_entries = dev_priv->gtt.total >> PAGE_SHIFT; | ||
850 | dev_priv->mm.gtt->stolen_size = dev_priv->gtt.stolen_size; | ||
851 | 833 | ||
852 | gtt_size = (dev_priv->gtt.total >> PAGE_SHIFT) * sizeof(gtt_pte_t); | 834 | gtt_size = (dev_priv->gtt.total >> PAGE_SHIFT) * sizeof(gtt_pte_t); |
853 | 835 | ||
diff --git a/drivers/gpu/drm/i915/i915_gem_stolen.c b/drivers/gpu/drm/i915/i915_gem_stolen.c index f21ae17e298f..69d97cbac13c 100644 --- a/drivers/gpu/drm/i915/i915_gem_stolen.c +++ b/drivers/gpu/drm/i915/i915_gem_stolen.c | |||
@@ -187,11 +187,11 @@ int i915_gem_init_stolen(struct drm_device *dev) | |||
187 | if (dev_priv->mm.stolen_base == 0) | 187 | if (dev_priv->mm.stolen_base == 0) |
188 | return 0; | 188 | return 0; |
189 | 189 | ||
190 | DRM_DEBUG_KMS("found %d bytes of stolen memory at %08lx\n", | 190 | DRM_DEBUG_KMS("found %zd bytes of stolen memory at %08lx\n", |
191 | dev_priv->mm.gtt->stolen_size, dev_priv->mm.stolen_base); | 191 | dev_priv->gtt.stolen_size, dev_priv->mm.stolen_base); |
192 | 192 | ||
193 | /* Basic memrange allocator for stolen space */ | 193 | /* Basic memrange allocator for stolen space */ |
194 | drm_mm_init(&dev_priv->mm.stolen, 0, dev_priv->mm.gtt->stolen_size); | 194 | drm_mm_init(&dev_priv->mm.stolen, 0, dev_priv->gtt.stolen_size); |
195 | 195 | ||
196 | return 0; | 196 | return 0; |
197 | } | 197 | } |
@@ -205,7 +205,7 @@ i915_pages_create_for_stolen(struct drm_device *dev, | |||
205 | struct scatterlist *sg; | 205 | struct scatterlist *sg; |
206 | 206 | ||
207 | DRM_DEBUG_DRIVER("offset=0x%x, size=%d\n", offset, size); | 207 | DRM_DEBUG_DRIVER("offset=0x%x, size=%d\n", offset, size); |
208 | BUG_ON(offset > dev_priv->mm.gtt->stolen_size - size); | 208 | BUG_ON(offset > dev_priv->gtt.stolen_size - size); |
209 | 209 | ||
210 | /* We hide that we have no struct page backing our stolen object | 210 | /* We hide that we have no struct page backing our stolen object |
211 | * by wrapping the contiguous physical allocation with a fake | 211 | * by wrapping the contiguous physical allocation with a fake |