From: Tvrtko Ursulin <tvrtko.ursu...@intel.com>

Continuing the conversion and elimination of implicit dev_priv.

Signed-off-by: Tvrtko Ursulin <tvrtko.ursu...@intel.com>
Suggested-by: Rodrigo Vivi <rodrigo.v...@intel.com>
---
 drivers/gpu/drm/i915/gt/intel_engine_cs.c |   4 +-
 drivers/gpu/drm/i915/gt/intel_gt.c        | 129 ++++++++++++++++++++++
 drivers/gpu/drm/i915/gt/intel_gt.h        |   5 +
 drivers/gpu/drm/i915/gt/intel_reset.c     | 126 +--------------------
 drivers/gpu/drm/i915/gt/intel_reset.h     |   2 -
 drivers/gpu/drm/i915/i915_drv.c           |   3 +-
 drivers/gpu/drm/i915/i915_gem_gtt.c       |   6 +-
 7 files changed, 145 insertions(+), 130 deletions(-)

diff --git a/drivers/gpu/drm/i915/gt/intel_engine_cs.c 
b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
index c0d986db5a75..35a9f754bcb9 100644
--- a/drivers/gpu/drm/i915/gt/intel_engine_cs.c
+++ b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
@@ -28,6 +28,8 @@
 
 #include "i915_drv.h"
 
+#include "gt/intel_gt.h"
+
 #include "intel_engine.h"
 #include "intel_engine_pm.h"
 #include "intel_context.h"
@@ -453,7 +455,7 @@ int intel_engines_init_mmio(struct drm_i915_private *i915)
 
        RUNTIME_INFO(i915)->num_engines = hweight32(mask);
 
-       i915_check_and_clear_faults(i915);
+       intel_gt_check_and_clear_faults(&i915->gt);
 
        intel_setup_engine_capabilities(i915);
 
diff --git a/drivers/gpu/drm/i915/gt/intel_gt.c 
b/drivers/gpu/drm/i915/gt/intel_gt.c
index 29e8dc766ba4..58efcdd78119 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt.c
+++ b/drivers/gpu/drm/i915/gt/intel_gt.c
@@ -7,6 +7,7 @@
 #include "i915_drv.h"
 
 #include "intel_gt.h"
+#include "intel_uncore.h"
 
 void intel_gt_init(struct intel_gt *gt, struct drm_i915_private *i915)
 {
@@ -22,3 +23,131 @@ void intel_gt_init(struct intel_gt *gt, struct 
drm_i915_private *i915)
 
        lockdep_init_map(&gt->reset_lockmap, "i915.reset", &reset_key, 0);
 }
+
+static void rmw_set(struct intel_uncore *uncore, i915_reg_t reg, u32 set)
+{
+       intel_uncore_rmw(uncore, reg, 0, set);
+}
+
+static void rmw_clear(struct intel_uncore *uncore, i915_reg_t reg, u32 clr)
+{
+       intel_uncore_rmw(uncore, reg, clr, 0);
+}
+
+static void clear_register(struct intel_uncore *uncore, i915_reg_t reg)
+{
+       intel_uncore_rmw(uncore, reg, 0, 0);
+}
+
+static void gen8_clear_engine_error_register(struct intel_engine_cs *engine)
+{
+       GEN6_RING_FAULT_REG_RMW(engine, RING_FAULT_VALID, 0);
+       GEN6_RING_FAULT_REG_POSTING_READ(engine);
+}
+
+void
+intel_gt_clear_error_registers(struct intel_gt *gt,
+                              intel_engine_mask_t engine_mask)
+{
+       struct drm_i915_private *i915 = gt->i915;
+       struct intel_uncore *uncore = gt->uncore;
+       u32 eir;
+
+       if (!IS_GEN(i915, 2))
+               clear_register(uncore, PGTBL_ER);
+
+       if (INTEL_GEN(i915) < 4)
+               clear_register(uncore, IPEIR(RENDER_RING_BASE));
+       else
+               clear_register(uncore, IPEIR_I965);
+
+       clear_register(uncore, EIR);
+       eir = intel_uncore_read(uncore, EIR);
+       if (eir) {
+               /*
+                * some errors might have become stuck,
+                * mask them.
+                */
+               DRM_DEBUG_DRIVER("EIR stuck: 0x%08x, masking\n", eir);
+               rmw_set(uncore, EMR, eir);
+               intel_uncore_write(uncore, GEN2_IIR,
+                                  I915_MASTER_ERROR_INTERRUPT);
+       }
+
+       if (INTEL_GEN(i915) >= 8) {
+               rmw_clear(uncore, GEN8_RING_FAULT_REG, RING_FAULT_VALID);
+               intel_uncore_posting_read(uncore, GEN8_RING_FAULT_REG);
+       } else if (INTEL_GEN(i915) >= 6) {
+               struct intel_engine_cs *engine;
+               enum intel_engine_id id;
+
+               for_each_engine_masked(engine, i915, engine_mask, id)
+                       gen8_clear_engine_error_register(engine);
+       }
+}
+
+static void gen6_check_faults(struct intel_gt *gt)
+{
+       struct intel_engine_cs *engine;
+       enum intel_engine_id id;
+       u32 fault;
+
+       for_each_engine(engine, gt->i915, id) {
+               fault = GEN6_RING_FAULT_REG_READ(engine);
+               if (fault & RING_FAULT_VALID) {
+                       DRM_DEBUG_DRIVER("Unexpected fault\n"
+                                        "\tAddr: 0x%08lx\n"
+                                        "\tAddress space: %s\n"
+                                        "\tSource ID: %d\n"
+                                        "\tType: %d\n",
+                                        fault & PAGE_MASK,
+                                        fault & RING_FAULT_GTTSEL_MASK ? 
"GGTT" : "PPGTT",
+                                        RING_FAULT_SRCID(fault),
+                                        RING_FAULT_FAULT_TYPE(fault));
+               }
+       }
+}
+
+static void gen8_check_faults(struct intel_gt *gt)
+{
+       struct intel_uncore *uncore = gt->uncore;
+       u32 fault = intel_uncore_read(uncore, GEN8_RING_FAULT_REG);
+
+       if (fault & RING_FAULT_VALID) {
+               u32 fault_data0, fault_data1;
+               u64 fault_addr;
+
+               fault_data0 = intel_uncore_read(uncore, GEN8_FAULT_TLB_DATA0);
+               fault_data1 = intel_uncore_read(uncore, GEN8_FAULT_TLB_DATA1);
+               fault_addr = ((u64)(fault_data1 & FAULT_VA_HIGH_BITS) << 44) |
+                            ((u64)fault_data0 << 12);
+
+               DRM_DEBUG_DRIVER("Unexpected fault\n"
+                                "\tAddr: 0x%08x_%08x\n"
+                                "\tAddress space: %s\n"
+                                "\tEngine ID: %d\n"
+                                "\tSource ID: %d\n"
+                                "\tType: %d\n",
+                                upper_32_bits(fault_addr),
+                                lower_32_bits(fault_addr),
+                                fault_data1 & FAULT_GTT_SEL ? "GGTT" : "PPGTT",
+                                GEN8_RING_FAULT_ENGINE_ID(fault),
+                                RING_FAULT_SRCID(fault),
+                                RING_FAULT_FAULT_TYPE(fault));
+       }
+}
+
+void intel_gt_check_and_clear_faults(struct intel_gt *gt)
+{
+       struct drm_i915_private *i915 = gt->i915;
+
+       /* From GEN8 onwards we only have one 'All Engine Fault Register' */
+       if (INTEL_GEN(i915) >= 8)
+               gen8_check_faults(gt);
+       else if (INTEL_GEN(i915) >= 6)
+               gen6_check_faults(gt);
+       else
+               return;
+
+       intel_gt_clear_error_registers(gt, ALL_ENGINES);
+}
diff --git a/drivers/gpu/drm/i915/gt/intel_gt.h 
b/drivers/gpu/drm/i915/gt/intel_gt.h
index f57ff3758f54..d4f585151527 100644
--- a/drivers/gpu/drm/i915/gt/intel_gt.h
+++ b/drivers/gpu/drm/i915/gt/intel_gt.h
@@ -7,10 +7,15 @@
 #ifndef __INTEL_GT__
 #define __INTEL_GT__
 
+#include "gt/intel_engine_types.h"
 #include "gt/intel_gt_types.h"
 
 struct drm_i915_private;
 
 void intel_gt_init(struct intel_gt *gt, struct drm_i915_private *i915);
 
+void intel_gt_check_and_clear_faults(struct intel_gt *gt);
+void intel_gt_clear_error_registers(struct intel_gt *gt,
+                                   intel_engine_mask_t engine_mask);
+
 #endif /* __INTEL_GT_H__ */
diff --git a/drivers/gpu/drm/i915/gt/intel_reset.c 
b/drivers/gpu/drm/i915/gt/intel_reset.c
index 8ba7af8b7ced..c786ac5d47d1 100644
--- a/drivers/gpu/drm/i915/gt/intel_reset.c
+++ b/drivers/gpu/drm/i915/gt/intel_reset.c
@@ -13,6 +13,7 @@
 #include "i915_gpu_error.h"
 #include "i915_irq.h"
 #include "intel_engine_pm.h"
+#include "intel_gt.h"
 #include "intel_gt_pm.h"
 #include "intel_reset.h"
 
@@ -24,16 +25,6 @@
 /* XXX How to handle concurrent GGTT updates using tiling registers? */
 #define RESET_UNDER_STOP_MACHINE 0
 
-static void rmw_set(struct intel_uncore *uncore, i915_reg_t reg, u32 set)
-{
-       intel_uncore_rmw(uncore, reg, 0, set);
-}
-
-static void rmw_clear(struct intel_uncore *uncore, i915_reg_t reg, u32 clr)
-{
-       intel_uncore_rmw(uncore, reg, clr, 0);
-}
-
 static void rmw_set_fw(struct intel_uncore *uncore, i915_reg_t reg, u32 set)
 {
        intel_uncore_rmw_fw(uncore, reg, 0, set);
@@ -1158,119 +1149,6 @@ static void i915_reset_device(struct drm_i915_private 
*i915,
                kobject_uevent_env(kobj, KOBJ_CHANGE, reset_done_event);
 }
 
-static void clear_register(struct intel_uncore *uncore, i915_reg_t reg)
-{
-       intel_uncore_rmw(uncore, reg, 0, 0);
-}
-
-static void gen8_clear_engine_error_register(struct intel_engine_cs *engine)
-{
-       GEN6_RING_FAULT_REG_RMW(engine, RING_FAULT_VALID, 0);
-       GEN6_RING_FAULT_REG_POSTING_READ(engine);
-}
-
-static void clear_error_registers(struct drm_i915_private *i915,
-                                 intel_engine_mask_t engine_mask)
-{
-       struct intel_uncore *uncore = &i915->uncore;
-       u32 eir;
-
-       if (!IS_GEN(i915, 2))
-               clear_register(uncore, PGTBL_ER);
-
-       if (INTEL_GEN(i915) < 4)
-               clear_register(uncore, IPEIR(RENDER_RING_BASE));
-       else
-               clear_register(uncore, IPEIR_I965);
-
-       clear_register(uncore, EIR);
-       eir = intel_uncore_read(uncore, EIR);
-       if (eir) {
-               /*
-                * some errors might have become stuck,
-                * mask them.
-                */
-               DRM_DEBUG_DRIVER("EIR stuck: 0x%08x, masking\n", eir);
-               rmw_set(uncore, EMR, eir);
-               intel_uncore_write(uncore, GEN2_IIR,
-                                  I915_MASTER_ERROR_INTERRUPT);
-       }
-
-       if (INTEL_GEN(i915) >= 8) {
-               rmw_clear(uncore, GEN8_RING_FAULT_REG, RING_FAULT_VALID);
-               intel_uncore_posting_read(uncore, GEN8_RING_FAULT_REG);
-       } else if (INTEL_GEN(i915) >= 6) {
-               struct intel_engine_cs *engine;
-               enum intel_engine_id id;
-
-               for_each_engine_masked(engine, i915, engine_mask, id)
-                       gen8_clear_engine_error_register(engine);
-       }
-}
-
-static void gen6_check_faults(struct drm_i915_private *dev_priv)
-{
-       struct intel_engine_cs *engine;
-       enum intel_engine_id id;
-       u32 fault;
-
-       for_each_engine(engine, dev_priv, id) {
-               fault = GEN6_RING_FAULT_REG_READ(engine);
-               if (fault & RING_FAULT_VALID) {
-                       DRM_DEBUG_DRIVER("Unexpected fault\n"
-                                        "\tAddr: 0x%08lx\n"
-                                        "\tAddress space: %s\n"
-                                        "\tSource ID: %d\n"
-                                        "\tType: %d\n",
-                                        fault & PAGE_MASK,
-                                        fault & RING_FAULT_GTTSEL_MASK ? 
"GGTT" : "PPGTT",
-                                        RING_FAULT_SRCID(fault),
-                                        RING_FAULT_FAULT_TYPE(fault));
-               }
-       }
-}
-
-static void gen8_check_faults(struct drm_i915_private *dev_priv)
-{
-       u32 fault = I915_READ(GEN8_RING_FAULT_REG);
-
-       if (fault & RING_FAULT_VALID) {
-               u32 fault_data0, fault_data1;
-               u64 fault_addr;
-
-               fault_data0 = I915_READ(GEN8_FAULT_TLB_DATA0);
-               fault_data1 = I915_READ(GEN8_FAULT_TLB_DATA1);
-               fault_addr = ((u64)(fault_data1 & FAULT_VA_HIGH_BITS) << 44) |
-                            ((u64)fault_data0 << 12);
-
-               DRM_DEBUG_DRIVER("Unexpected fault\n"
-                                "\tAddr: 0x%08x_%08x\n"
-                                "\tAddress space: %s\n"
-                                "\tEngine ID: %d\n"
-                                "\tSource ID: %d\n"
-                                "\tType: %d\n",
-                                upper_32_bits(fault_addr),
-                                lower_32_bits(fault_addr),
-                                fault_data1 & FAULT_GTT_SEL ? "GGTT" : "PPGTT",
-                                GEN8_RING_FAULT_ENGINE_ID(fault),
-                                RING_FAULT_SRCID(fault),
-                                RING_FAULT_FAULT_TYPE(fault));
-       }
-}
-
-void i915_check_and_clear_faults(struct drm_i915_private *i915)
-{
-       /* From GEN8 onwards we only have one 'All Engine Fault Register' */
-       if (INTEL_GEN(i915) >= 8)
-               gen8_check_faults(i915);
-       else if (INTEL_GEN(i915) >= 6)
-               gen6_check_faults(i915);
-       else
-               return;
-
-       clear_error_registers(i915, ALL_ENGINES);
-}
-
 /**
  * i915_handle_error - handle a gpu error
  * @i915: i915 device private
@@ -1319,7 +1197,7 @@ void i915_handle_error(struct drm_i915_private *i915,
 
        if (flags & I915_ERROR_CAPTURE) {
                i915_capture_error_state(i915, engine_mask, msg);
-               clear_error_registers(i915, engine_mask);
+               intel_gt_clear_error_registers(&i915->gt, engine_mask);
        }
 
        /*
diff --git a/drivers/gpu/drm/i915/gt/intel_reset.h 
b/drivers/gpu/drm/i915/gt/intel_reset.h
index 580ebdb59eca..03fba0ab3868 100644
--- a/drivers/gpu/drm/i915/gt/intel_reset.h
+++ b/drivers/gpu/drm/i915/gt/intel_reset.h
@@ -25,8 +25,6 @@ void i915_handle_error(struct drm_i915_private *i915,
                       const char *fmt, ...);
 #define I915_ERROR_CAPTURE BIT(0)
 
-void i915_check_and_clear_faults(struct drm_i915_private *i915);
-
 void i915_reset(struct drm_i915_private *i915,
                intel_engine_mask_t stalled_mask,
                const char *reason);
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index 254f7b7df306..97155c5eb7e1 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -49,6 +49,7 @@
 
 #include "gem/i915_gem_context.h"
 #include "gem/i915_gem_ioctls.h"
+#include "gt/intel_gt.h"
 #include "gt/intel_gt_pm.h"
 #include "gt/intel_reset.h"
 #include "gt/intel_workarounds.h"
@@ -2339,7 +2340,7 @@ static int i915_drm_resume_early(struct drm_device *dev)
 
        intel_uncore_resume_early(&dev_priv->uncore);
 
-       i915_check_and_clear_faults(dev_priv);
+       intel_gt_check_and_clear_faults(&dev_priv->gt);
 
        if (INTEL_GEN(dev_priv) >= 11 || IS_GEN9_LP(dev_priv)) {
                gen9_sanitize_dc_state(dev_priv);
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c 
b/drivers/gpu/drm/i915/i915_gem_gtt.c
index 90d9669ff313..ac6ed459720e 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
@@ -35,6 +35,8 @@
 
 #include <drm/i915_drm.h>
 
+#include "gt/intel_gt.h"
+
 #include "i915_drv.h"
 #include "i915_scatterlist.h"
 #include "i915_trace.h"
@@ -2311,7 +2313,7 @@ void i915_gem_suspend_gtt_mappings(struct 
drm_i915_private *dev_priv)
        if (INTEL_GEN(dev_priv) < 6)
                return;
 
-       i915_check_and_clear_faults(dev_priv);
+       intel_gt_check_and_clear_faults(&dev_priv->gt);
 
        ggtt->vm.clear_range(&ggtt->vm, 0, ggtt->vm.total);
 
@@ -3620,7 +3622,7 @@ void i915_gem_restore_gtt_mappings(struct 
drm_i915_private *dev_priv)
        struct i915_ggtt *ggtt = &dev_priv->ggtt;
        struct i915_vma *vma, *vn;
 
-       i915_check_and_clear_faults(dev_priv);
+       intel_gt_check_and_clear_faults(&dev_priv->gt);
 
        mutex_lock(&ggtt->vm.mutex);
 
-- 
2.20.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to