Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 358005
b: refs/heads/master
c: a81cc00
h: refs/heads/master
i:
  358003: f409db5
v: v3
  • Loading branch information
Ben Widawsky authored and Daniel Vetter committed Jan 20, 2013
1 parent ca675fb commit c8cdca5
Show file tree
Hide file tree
Showing 5 changed files with 24 additions and 33 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: abedc077b45eff0b5a8630af8431ad5d59213582
refs/heads/master: a81cc00c11ab6816fbcb7dd99a60b50e71765d25
27 changes: 0 additions & 27 deletions trunk/drivers/char/agp/intel-gtt.c
Original file line number Diff line number Diff line change
Expand Up @@ -840,9 +840,6 @@ static int intel_fake_agp_insert_entries(struct agp_memory *mem,
{
int ret = -EINVAL;

if (intel_private.base.do_idle_maps)
return -ENODEV;

if (intel_private.clear_fake_agp) {
int start = intel_private.base.stolen_size / PAGE_SIZE;
int end = intel_private.base.gtt_mappable_entries;
Expand Down Expand Up @@ -907,9 +904,6 @@ static int intel_fake_agp_remove_entries(struct agp_memory *mem,
if (mem->page_count == 0)
return 0;

if (intel_private.base.do_idle_maps)
return -ENODEV;

intel_gtt_clear_range(pg_start, mem->page_count);

if (intel_private.base.needs_dmar) {
Expand Down Expand Up @@ -1069,24 +1063,6 @@ static void i965_write_entry(dma_addr_t addr,
writel(addr | pte_flags, intel_private.gtt + entry);
}

/* Certain Gen5 chipsets require require idling the GPU before
* unmapping anything from the GTT when VT-d is enabled.
*/
static inline int needs_idle_maps(void)
{
#ifdef CONFIG_INTEL_IOMMU
const unsigned short gpu_devid = intel_private.pcidev->device;

/* Query intel_iommu to see if we need the workaround. Presumably that
* was loaded first.
*/
if ((gpu_devid == PCI_DEVICE_ID_INTEL_IRONLAKE_M_HB ||
gpu_devid == PCI_DEVICE_ID_INTEL_IRONLAKE_M_IG) &&
intel_iommu_gfx_mapped)
return 1;
#endif
return 0;
}

static int i9xx_setup(void)
{
Expand Down Expand Up @@ -1115,9 +1091,6 @@ static int i9xx_setup(void)
break;
}

if (needs_idle_maps())
intel_private.base.do_idle_maps = 1;

intel_i9xx_setup_flush();

return 0;
Expand Down
2 changes: 2 additions & 0 deletions trunk/drivers/gpu/drm/i915/i915_drv.h
Original file line number Diff line number Diff line change
Expand Up @@ -381,6 +381,8 @@ struct i915_gtt {

/** "Graphics Stolen Memory" holds the global PTEs */
void __iomem *gsm;

bool do_idle_maps;
};

#define I915_PPGTT_PD_ENTRIES 512
Expand Down
24 changes: 21 additions & 3 deletions trunk/drivers/gpu/drm/i915/i915_gem_gtt.c
Original file line number Diff line number Diff line change
Expand Up @@ -338,11 +338,27 @@ void i915_gem_init_ppgtt(struct drm_device *dev)
}
}

extern int intel_iommu_gfx_mapped;
/* Certain Gen5 chipsets require require idling the GPU before
* unmapping anything from the GTT when VT-d is enabled.
*/
static inline bool needs_idle_maps(struct drm_device *dev)
{
#ifdef CONFIG_INTEL_IOMMU
/* Query intel_iommu to see if we need the workaround. Presumably that
* was loaded first.
*/
if (IS_GEN5(dev) && IS_MOBILE(dev) && intel_iommu_gfx_mapped)
return true;
#endif
return false;
}

static bool do_idling(struct drm_i915_private *dev_priv)
{
bool ret = dev_priv->mm.interruptible;

if (unlikely(dev_priv->mm.gtt->do_idle_maps)) {
if (unlikely(dev_priv->gtt.do_idle_maps)) {
dev_priv->mm.interruptible = false;
if (i915_gpu_idle(dev_priv->dev)) {
DRM_ERROR("Couldn't idle GPU\n");
Expand All @@ -356,11 +372,10 @@ static bool do_idling(struct drm_i915_private *dev_priv)

static void undo_idling(struct drm_i915_private *dev_priv, bool interruptible)
{
if (unlikely(dev_priv->mm.gtt->do_idle_maps))
if (unlikely(dev_priv->gtt.do_idle_maps))
dev_priv->mm.interruptible = interruptible;
}


static void i915_ggtt_clear_range(struct drm_device *dev,
unsigned first_entry,
unsigned num_entries)
Expand Down Expand Up @@ -709,6 +724,9 @@ int i915_gem_gtt_init(struct drm_device *dev)
intel_gmch_remove();
return -ENODEV;
}

dev_priv->gtt.do_idle_maps = needs_idle_maps(dev);

return 0;
}

Expand Down
2 changes: 0 additions & 2 deletions trunk/include/drm/intel-gtt.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@ struct intel_gtt {
unsigned int gtt_mappable_entries;
/* Whether i915 needs to use the dmar apis or not. */
unsigned int needs_dmar : 1;
/* Whether we idle the gpu before mapping/unmapping */
unsigned int do_idle_maps : 1;
/* Share the scratch page dma with ppgtts. */
dma_addr_t scratch_page_dma;
struct page *scratch_page;
Expand Down

0 comments on commit c8cdca5

Please sign in to comment.