Commit 95086cb9 authored by Jani Nikula's avatar Jani Nikula

drm/i915: split gem quirks from display quirks

The lone gem quirk is an outlier, not even handled by the common quirk
code. Split it to a separate gem_quirks member.
Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
Reviewed-by: default avatarLucas De Marchi <lucas.demarchi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/fe9c0cb1e49da0ddc31d24c996af5fd09bce3042.1661346845.git.jani.nikula@intel.com
parent df22d67e
...@@ -65,7 +65,7 @@ void __i915_gem_object_set_pages(struct drm_i915_gem_object *obj, ...@@ -65,7 +65,7 @@ void __i915_gem_object_set_pages(struct drm_i915_gem_object *obj,
shrinkable = i915_gem_object_is_shrinkable(obj); shrinkable = i915_gem_object_is_shrinkable(obj);
if (i915_gem_object_is_tiled(obj) && if (i915_gem_object_is_tiled(obj) &&
i915->quirks & QUIRK_PIN_SWIZZLED_PAGES) { i915->gem_quirks & GEM_QUIRK_PIN_SWIZZLED_PAGES) {
GEM_BUG_ON(i915_gem_object_has_tiling_quirk(obj)); GEM_BUG_ON(i915_gem_object_has_tiling_quirk(obj));
i915_gem_object_set_tiling_quirk(obj); i915_gem_object_set_tiling_quirk(obj);
GEM_BUG_ON(!list_empty(&obj->mm.link)); GEM_BUG_ON(!list_empty(&obj->mm.link));
......
...@@ -278,7 +278,7 @@ i915_gem_object_set_tiling(struct drm_i915_gem_object *obj, ...@@ -278,7 +278,7 @@ i915_gem_object_set_tiling(struct drm_i915_gem_object *obj,
*/ */
if (i915_gem_object_has_pages(obj) && if (i915_gem_object_has_pages(obj) &&
obj->mm.madv == I915_MADV_WILLNEED && obj->mm.madv == I915_MADV_WILLNEED &&
i915->quirks & QUIRK_PIN_SWIZZLED_PAGES) { i915->gem_quirks & GEM_QUIRK_PIN_SWIZZLED_PAGES) {
if (tiling == I915_TILING_NONE) { if (tiling == I915_TILING_NONE) {
GEM_BUG_ON(!i915_gem_object_has_tiling_quirk(obj)); GEM_BUG_ON(!i915_gem_object_has_tiling_quirk(obj));
i915_gem_object_clear_tiling_quirk(obj); i915_gem_object_clear_tiling_quirk(obj);
...@@ -458,7 +458,7 @@ i915_gem_get_tiling_ioctl(struct drm_device *dev, void *data, ...@@ -458,7 +458,7 @@ i915_gem_get_tiling_ioctl(struct drm_device *dev, void *data,
} }
/* Hide bit 17 from the user -- see comment in i915_gem_set_tiling */ /* Hide bit 17 from the user -- see comment in i915_gem_set_tiling */
if (dev_priv->quirks & QUIRK_PIN_SWIZZLED_PAGES) if (dev_priv->gem_quirks & GEM_QUIRK_PIN_SWIZZLED_PAGES)
args->phys_swizzle_mode = I915_BIT_6_SWIZZLE_UNKNOWN; args->phys_swizzle_mode = I915_BIT_6_SWIZZLE_UNKNOWN;
else else
args->phys_swizzle_mode = args->swizzle_mode; args->phys_swizzle_mode = args->swizzle_mode;
......
...@@ -711,7 +711,7 @@ static bool bad_swizzling(struct drm_i915_private *i915) ...@@ -711,7 +711,7 @@ static bool bad_swizzling(struct drm_i915_private *i915)
{ {
struct i915_ggtt *ggtt = to_gt(i915)->ggtt; struct i915_ggtt *ggtt = to_gt(i915)->ggtt;
if (i915->quirks & QUIRK_PIN_SWIZZLED_PAGES) if (i915->gem_quirks & GEM_QUIRK_PIN_SWIZZLED_PAGES)
return true; return true;
if (has_bit17_swizzle(ggtt->bit_6_swizzle_x) || if (has_bit17_swizzle(ggtt->bit_6_swizzle_x) ||
......
...@@ -367,7 +367,7 @@ static int igt_partial_tiling(void *arg) ...@@ -367,7 +367,7 @@ static int igt_partial_tiling(void *arg)
unsigned int pitch; unsigned int pitch;
struct tile tile; struct tile tile;
if (i915->quirks & QUIRK_PIN_SWIZZLED_PAGES) if (i915->gem_quirks & GEM_QUIRK_PIN_SWIZZLED_PAGES)
/* /*
* The swizzling pattern is actually unknown as it * The swizzling pattern is actually unknown as it
* varies based on physical address of each page. * varies based on physical address of each page.
...@@ -464,7 +464,7 @@ static int igt_smoke_tiling(void *arg) ...@@ -464,7 +464,7 @@ static int igt_smoke_tiling(void *arg)
* Remember to look at the st_seed if we see a flip-flop in BAT! * Remember to look at the st_seed if we see a flip-flop in BAT!
*/ */
if (i915->quirks & QUIRK_PIN_SWIZZLED_PAGES) if (i915->gem_quirks & GEM_QUIRK_PIN_SWIZZLED_PAGES)
return 0; return 0;
obj = huge_gem_object(i915, obj = huge_gem_object(i915,
......
...@@ -727,7 +727,7 @@ static void detect_bit_6_swizzle(struct i915_ggtt *ggtt) ...@@ -727,7 +727,7 @@ static void detect_bit_6_swizzle(struct i915_ggtt *ggtt)
* bit17 dependent, and so we need to also prevent the pages * bit17 dependent, and so we need to also prevent the pages
* from being moved. * from being moved.
*/ */
i915->quirks |= QUIRK_PIN_SWIZZLED_PAGES; i915->gem_quirks |= GEM_QUIRK_PIN_SWIZZLED_PAGES;
swizzle_x = I915_BIT_6_SWIZZLE_NONE; swizzle_x = I915_BIT_6_SWIZZLE_NONE;
swizzle_y = I915_BIT_6_SWIZZLE_NONE; swizzle_y = I915_BIT_6_SWIZZLE_NONE;
} }
......
...@@ -410,7 +410,7 @@ static int i915_swizzle_info(struct seq_file *m, void *data) ...@@ -410,7 +410,7 @@ static int i915_swizzle_info(struct seq_file *m, void *data)
seq_printf(m, "bit6 swizzle for Y-tiling = %s\n", seq_printf(m, "bit6 swizzle for Y-tiling = %s\n",
swizzle_string(to_gt(dev_priv)->ggtt->bit_6_swizzle_y)); swizzle_string(to_gt(dev_priv)->ggtt->bit_6_swizzle_y));
if (dev_priv->quirks & QUIRK_PIN_SWIZZLED_PAGES) if (dev_priv->gem_quirks & GEM_QUIRK_PIN_SWIZZLED_PAGES)
seq_puts(m, "L-shaped memory detected\n"); seq_puts(m, "L-shaped memory detected\n");
/* On BDW+, swizzling is not used. See detect_bit_6_swizzle() */ /* On BDW+, swizzling is not used. See detect_bit_6_swizzle() */
......
...@@ -107,10 +107,11 @@ struct sdvo_device_mapping { ...@@ -107,10 +107,11 @@ struct sdvo_device_mapping {
#define I915_COLOR_UNEVICTABLE (-1) /* a non-vma sharing the address space */ #define I915_COLOR_UNEVICTABLE (-1) /* a non-vma sharing the address space */
#define GEM_QUIRK_PIN_SWIZZLED_PAGES BIT(0)
#define QUIRK_LVDS_SSC_DISABLE (1<<1) #define QUIRK_LVDS_SSC_DISABLE (1<<1)
#define QUIRK_INVERT_BRIGHTNESS (1<<2) #define QUIRK_INVERT_BRIGHTNESS (1<<2)
#define QUIRK_BACKLIGHT_PRESENT (1<<3) #define QUIRK_BACKLIGHT_PRESENT (1<<3)
#define QUIRK_PIN_SWIZZLED_PAGES (1<<5)
#define QUIRK_INCREASE_T12_DELAY (1<<6) #define QUIRK_INCREASE_T12_DELAY (1<<6)
#define QUIRK_INCREASE_DDI_DISABLED_TIME (1<<7) #define QUIRK_INCREASE_DDI_DISABLED_TIME (1<<7)
#define QUIRK_NO_PPS_BACKLIGHT_POWER_HOOK (1<<8) #define QUIRK_NO_PPS_BACKLIGHT_POWER_HOOK (1<<8)
...@@ -392,6 +393,7 @@ struct drm_i915_private { ...@@ -392,6 +393,7 @@ struct drm_i915_private {
enum intel_pch pch_type; enum intel_pch pch_type;
unsigned short pch_id; unsigned short pch_id;
unsigned long gem_quirks;
unsigned long quirks; unsigned long quirks;
struct drm_atomic_state *modeset_restore_state; struct drm_atomic_state *modeset_restore_state;
......
...@@ -1035,7 +1035,7 @@ i915_gem_madvise_ioctl(struct drm_device *dev, void *data, ...@@ -1035,7 +1035,7 @@ i915_gem_madvise_ioctl(struct drm_device *dev, void *data,
if (i915_gem_object_has_pages(obj) && if (i915_gem_object_has_pages(obj) &&
i915_gem_object_is_tiled(obj) && i915_gem_object_is_tiled(obj) &&
i915->quirks & QUIRK_PIN_SWIZZLED_PAGES) { i915->gem_quirks & GEM_QUIRK_PIN_SWIZZLED_PAGES) {
if (obj->mm.madv == I915_MADV_WILLNEED) { if (obj->mm.madv == I915_MADV_WILLNEED) {
GEM_BUG_ON(!i915_gem_object_has_tiling_quirk(obj)); GEM_BUG_ON(!i915_gem_object_has_tiling_quirk(obj));
i915_gem_object_clear_tiling_quirk(obj); i915_gem_object_clear_tiling_quirk(obj);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment