ttm_lock_set_kill(&dev_priv->fbdev_master.lock, false, SIGTERM);
        dev_priv->active_master = &dev_priv->fbdev_master;
 
-       dev_priv->mmio_virt = ioremap_cache(dev_priv->mmio_start,
-                                           dev_priv->mmio_size);
+       /*
+        * Force __iomem for this mapping until the implied compiler
+        * barriers and {READ|WRITE}_ONCE semantics from the
+        * io{read|write}32() accessors can be replaced with explicit
+        * barriers.
+        */
+       dev_priv->mmio_virt = (void __iomem *) memremap(dev_priv->mmio_start,
+                                           dev_priv->mmio_size, MEMREMAP_WB);
 
        if (unlikely(dev_priv->mmio_virt == NULL)) {
                ret = -ENOMEM;
 out_no_device:
        ttm_object_device_release(&dev_priv->tdev);
 out_err4:
-       iounmap(dev_priv->mmio_virt);
+       memunmap((void __force *) dev_priv->mmio_virt);
 out_err3:
        vmw_ttm_global_release(dev_priv);
 out_err0:
                pci_release_regions(dev->pdev);
 
        ttm_object_device_release(&dev_priv->tdev);
-       iounmap(dev_priv->mmio_virt);
+       memunmap((void __force *) dev_priv->mmio_virt);
        if (dev_priv->ctx.staged_bindings)
                vmw_binding_state_free(dev_priv->ctx.staged_bindings);
        vmw_ttm_global_release(dev_priv);