Skip to content

Commit

Permalink
drm: Use ioremap_wc in i915_driver instead of ioremap, since we alway…
Browse files Browse the repository at this point in the history
…s want WC.

Fixes failure to map the ringbuffer when PAT tells us we don't get to do
uncached on something that's already mapped WC, or something along those lines.

Signed-off-by: Eric Anholt <eric@anholt.net>
Signed-off-by: Dave Airlie <airlied@redhat.com>
  • Loading branch information
Eric Anholt authored and Dave Airlie committed Oct 17, 2008
1 parent 28af0a2 commit bd88ee4
Showing 1 changed file with 9 additions and 6 deletions.
15 changes: 9 additions & 6 deletions drivers/gpu/drm/i915/i915_gem.c
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,7 @@ i915_gem_gtt_pwrite(struct drm_device *dev, struct drm_gem_object *obj,
if (unwritten)
#endif /* CONFIG_HIGHMEM */
{
vaddr = ioremap(pfn << PAGE_SHIFT, PAGE_SIZE);
vaddr = ioremap_wc(pfn << PAGE_SHIFT, PAGE_SIZE);
#if WATCH_PWRITE
DRM_INFO("pwrite slow i %d o %d l %d "
"pfn %ld vaddr %p\n",
Expand Down Expand Up @@ -1612,9 +1612,10 @@ i915_gem_object_pin_and_relocate(struct drm_gem_object *obj,
if (reloc_page != NULL)
iounmap(reloc_page);

reloc_page = ioremap(dev->agp->base +
(reloc_offset & ~(PAGE_SIZE - 1)),
PAGE_SIZE);
reloc_page = ioremap_wc(dev->agp->base +
(reloc_offset &
~(PAGE_SIZE - 1)),
PAGE_SIZE);
last_reloc_offset = reloc_offset;
if (reloc_page == NULL) {
drm_gem_object_unreference(target_obj);
Expand Down Expand Up @@ -2318,7 +2319,9 @@ i915_gem_init_hws(struct drm_device *dev)
dev_priv->hws_map.flags = 0;
dev_priv->hws_map.mtrr = 0;

drm_core_ioremap(&dev_priv->hws_map, dev);
/* Ioremapping here is the wrong thing to do. We want cached access.
*/
drm_core_ioremap_wc(&dev_priv->hws_map, dev);
if (dev_priv->hws_map.handle == NULL) {
DRM_ERROR("Failed to map status page.\n");
memset(&dev_priv->hws_map, 0, sizeof(dev_priv->hws_map));
Expand Down Expand Up @@ -2369,7 +2372,7 @@ i915_gem_init_ringbuffer(struct drm_device *dev)
dev_priv->ring.map.flags = 0;
dev_priv->ring.map.mtrr = 0;

drm_core_ioremap(&dev_priv->ring.map, dev);
drm_core_ioremap_wc(&dev_priv->ring.map, dev);
if (dev_priv->ring.map.handle == NULL) {
DRM_ERROR("Failed to map ringbuffer.\n");
memset(&dev_priv->ring, 0, sizeof(dev_priv->ring));
Expand Down

0 comments on commit bd88ee4

Please sign in to comment.