]> Pileus Git - ~andy/linux/blobdiff - drivers/gpu/drm/i915/i915_gem_tiling.c
DRM/Radeon: Fix Load Detection on legacy primary DAC.
[~andy/linux] / drivers / gpu / drm / i915 / i915_gem_tiling.c
index b964df51cec7c6d906a2865313734b0c69f6fd4c..cedbfd7b3dfab10e915fe23ea3fc43afc661c302 100644 (file)
  *
  */
 
-#include "linux/string.h"
-#include "linux/bitops.h"
-#include "drmP.h"
-#include "drm.h"
-#include "i915_drm.h"
+#include <linux/string.h>
+#include <linux/bitops.h>
+#include <drm/drmP.h>
+#include <drm/i915_drm.h>
 #include "i915_drv.h"
 
 /** @file i915_gem_tiling.c
@@ -92,7 +91,10 @@ i915_gem_detect_bit_6_swizzle(struct drm_device *dev)
        uint32_t swizzle_x = I915_BIT_6_SWIZZLE_UNKNOWN;
        uint32_t swizzle_y = I915_BIT_6_SWIZZLE_UNKNOWN;
 
-       if (INTEL_INFO(dev)->gen >= 6) {
+       if (IS_VALLEYVIEW(dev)) {
+               swizzle_x = I915_BIT_6_SWIZZLE_NONE;
+               swizzle_y = I915_BIT_6_SWIZZLE_NONE;
+       } else if (INTEL_INFO(dev)->gen >= 6) {
                uint32_t dimm_c0, dimm_c1;
                dimm_c0 = I915_READ(MAD_DIMM_C0);
                dimm_c1 = I915_READ(MAD_DIMM_C1);
@@ -470,18 +472,20 @@ i915_gem_swizzle_page(struct page *page)
 void
 i915_gem_object_do_bit_17_swizzle(struct drm_i915_gem_object *obj)
 {
+       struct scatterlist *sg;
        int page_count = obj->base.size >> PAGE_SHIFT;
        int i;
 
        if (obj->bit_17 == NULL)
                return;
 
-       for (i = 0; i < page_count; i++) {
-               char new_bit_17 = page_to_phys(obj->pages[i]) >> 17;
+       for_each_sg(obj->pages->sgl, sg, page_count, i) {
+               struct page *page = sg_page(sg);
+               char new_bit_17 = page_to_phys(page) >> 17;
                if ((new_bit_17 & 0x1) !=
                    (test_bit(i, obj->bit_17) != 0)) {
-                       i915_gem_swizzle_page(obj->pages[i]);
-                       set_page_dirty(obj->pages[i]);
+                       i915_gem_swizzle_page(page);
+                       set_page_dirty(page);
                }
        }
 }
@@ -489,6 +493,7 @@ i915_gem_object_do_bit_17_swizzle(struct drm_i915_gem_object *obj)
 void
 i915_gem_object_save_bit_17_swizzle(struct drm_i915_gem_object *obj)
 {
+       struct scatterlist *sg;
        int page_count = obj->base.size >> PAGE_SHIFT;
        int i;
 
@@ -502,8 +507,9 @@ i915_gem_object_save_bit_17_swizzle(struct drm_i915_gem_object *obj)
                }
        }
 
-       for (i = 0; i < page_count; i++) {
-               if (page_to_phys(obj->pages[i]) & (1 << 17))
+       for_each_sg(obj->pages->sgl, sg, page_count, i) {
+               struct page *page = sg_page(sg);
+               if (page_to_phys(page) & (1 << 17))
                        __set_bit(i, obj->bit_17);
                else
                        __clear_bit(i, obj->bit_17);