Commit baea429d authored by Tvrtko Ursulin's avatar Tvrtko Ursulin

drm/i915: Move i915_gem_chipset_flush to intel_gt

This aligns better with the rest of restructuring.

v2:
 * Move call out of line. (Chris)
Signed-off-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
Suggested-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20190621070811.7006-24-tvrtko.ursulin@linux.intel.com
parent a1c8a09e
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include "gem/i915_gem_ioctls.h" #include "gem/i915_gem_ioctls.h"
#include "gt/intel_context.h" #include "gt/intel_context.h"
#include "gt/intel_gt.h"
#include "gt/intel_gt_pm.h" #include "gt/intel_gt_pm.h"
#include "i915_gem_ioctls.h" #include "i915_gem_ioctls.h"
...@@ -994,7 +995,7 @@ static void reloc_gpu_flush(struct reloc_cache *cache) ...@@ -994,7 +995,7 @@ static void reloc_gpu_flush(struct reloc_cache *cache)
__i915_gem_object_flush_map(cache->rq->batch->obj, 0, cache->rq_size); __i915_gem_object_flush_map(cache->rq->batch->obj, 0, cache->rq_size);
i915_gem_object_unpin_map(cache->rq->batch->obj); i915_gem_object_unpin_map(cache->rq->batch->obj);
i915_gem_chipset_flush(cache->rq->i915); intel_gt_chipset_flush(cache->rq->engine->gt);
i915_request_add(cache->rq); i915_request_add(cache->rq);
cache->rq = NULL; cache->rq = NULL;
...@@ -1954,7 +1955,7 @@ static int eb_move_to_gpu(struct i915_execbuffer *eb) ...@@ -1954,7 +1955,7 @@ static int eb_move_to_gpu(struct i915_execbuffer *eb)
eb->exec = NULL; eb->exec = NULL;
/* Unconditionally flush any chipset caches (for streaming writes). */ /* Unconditionally flush any chipset caches (for streaming writes). */
i915_gem_chipset_flush(eb->i915); intel_gt_chipset_flush(eb->engine->gt);
return 0; return 0;
err_skip: err_skip:
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include <drm/drm_legacy.h> /* for drm_pci.h! */ #include <drm/drm_legacy.h> /* for drm_pci.h! */
#include <drm/drm_pci.h> #include <drm/drm_pci.h>
#include "gt/intel_gt.h"
#include "i915_drv.h" #include "i915_drv.h"
#include "i915_gem_object.h" #include "i915_gem_object.h"
#include "i915_scatterlist.h" #include "i915_scatterlist.h"
...@@ -60,7 +61,7 @@ static int i915_gem_object_get_pages_phys(struct drm_i915_gem_object *obj) ...@@ -60,7 +61,7 @@ static int i915_gem_object_get_pages_phys(struct drm_i915_gem_object *obj)
vaddr += PAGE_SIZE; vaddr += PAGE_SIZE;
} }
i915_gem_chipset_flush(to_i915(obj->base.dev)); intel_gt_chipset_flush(&to_i915(obj->base.dev)->gt);
st = kmalloc(sizeof(*st), GFP_KERNEL); st = kmalloc(sizeof(*st), GFP_KERNEL);
if (!st) { if (!st) {
......
...@@ -10,6 +10,8 @@ ...@@ -10,6 +10,8 @@
#include "gem/i915_gem_pm.h" #include "gem/i915_gem_pm.h"
#include "gt/intel_gt.h"
#include "igt_gem_utils.h" #include "igt_gem_utils.h"
#include "mock_context.h" #include "mock_context.h"
...@@ -926,7 +928,7 @@ gpu_write_dw(struct i915_vma *vma, u64 offset, u32 val) ...@@ -926,7 +928,7 @@ gpu_write_dw(struct i915_vma *vma, u64 offset, u32 val)
} }
*cmd = MI_BATCH_BUFFER_END; *cmd = MI_BATCH_BUFFER_END;
i915_gem_chipset_flush(i915); intel_gt_chipset_flush(vma->vm->gt);
i915_gem_object_unpin_map(obj); i915_gem_object_unpin_map(obj);
......
...@@ -180,7 +180,7 @@ void intel_gt_flush_ggtt_writes(struct intel_gt *gt) ...@@ -180,7 +180,7 @@ void intel_gt_flush_ggtt_writes(struct intel_gt *gt)
if (INTEL_INFO(i915)->has_coherent_ggtt) if (INTEL_INFO(i915)->has_coherent_ggtt)
return; return;
i915_gem_chipset_flush(i915); intel_gt_chipset_flush(gt);
with_intel_runtime_pm(&i915->runtime_pm, wakeref) { with_intel_runtime_pm(&i915->runtime_pm, wakeref) {
struct intel_uncore *uncore = gt->uncore; struct intel_uncore *uncore = gt->uncore;
...@@ -191,3 +191,10 @@ void intel_gt_flush_ggtt_writes(struct intel_gt *gt) ...@@ -191,3 +191,10 @@ void intel_gt_flush_ggtt_writes(struct intel_gt *gt)
spin_unlock_irq(&uncore->lock); spin_unlock_irq(&uncore->lock);
} }
} }
void intel_gt_chipset_flush(struct intel_gt *gt)
{
wmb();
if (INTEL_GEN(gt->i915) < 6)
intel_gtt_chipset_flush();
}
...@@ -18,5 +18,6 @@ void intel_gt_clear_error_registers(struct intel_gt *gt, ...@@ -18,5 +18,6 @@ void intel_gt_clear_error_registers(struct intel_gt *gt,
intel_engine_mask_t engine_mask); intel_engine_mask_t engine_mask);
void intel_gt_flush_ggtt_writes(struct intel_gt *gt); void intel_gt_flush_ggtt_writes(struct intel_gt *gt);
void intel_gt_chipset_flush(struct intel_gt *gt);
#endif /* __INTEL_GT_H__ */ #endif /* __INTEL_GT_H__ */
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include <linux/kthread.h> #include <linux/kthread.h>
#include "gem/i915_gem_context.h" #include "gem/i915_gem_context.h"
#include "gt/intel_gt.h"
#include "intel_engine_pm.h" #include "intel_engine_pm.h"
#include "i915_selftest.h" #include "i915_selftest.h"
...@@ -43,6 +44,7 @@ ...@@ -43,6 +44,7 @@
struct hang { struct hang {
struct drm_i915_private *i915; struct drm_i915_private *i915;
struct intel_gt *gt;
struct drm_i915_gem_object *hws; struct drm_i915_gem_object *hws;
struct drm_i915_gem_object *obj; struct drm_i915_gem_object *obj;
struct i915_gem_context *ctx; struct i915_gem_context *ctx;
...@@ -135,6 +137,8 @@ hang_create_request(struct hang *h, struct intel_engine_cs *engine) ...@@ -135,6 +137,8 @@ hang_create_request(struct hang *h, struct intel_engine_cs *engine)
u32 *batch; u32 *batch;
int err; int err;
h->gt = engine->gt;
if (i915_gem_object_is_active(h->obj)) { if (i915_gem_object_is_active(h->obj)) {
struct drm_i915_gem_object *obj; struct drm_i915_gem_object *obj;
void *vaddr; void *vaddr;
...@@ -242,7 +246,7 @@ hang_create_request(struct hang *h, struct intel_engine_cs *engine) ...@@ -242,7 +246,7 @@ hang_create_request(struct hang *h, struct intel_engine_cs *engine)
*batch++ = lower_32_bits(vma->node.start); *batch++ = lower_32_bits(vma->node.start);
} }
*batch++ = MI_BATCH_BUFFER_END; /* not reached */ *batch++ = MI_BATCH_BUFFER_END; /* not reached */
i915_gem_chipset_flush(h->i915); intel_gt_chipset_flush(engine->gt);
if (rq->engine->emit_init_breadcrumb) { if (rq->engine->emit_init_breadcrumb) {
err = rq->engine->emit_init_breadcrumb(rq); err = rq->engine->emit_init_breadcrumb(rq);
...@@ -276,7 +280,9 @@ static u32 hws_seqno(const struct hang *h, const struct i915_request *rq) ...@@ -276,7 +280,9 @@ static u32 hws_seqno(const struct hang *h, const struct i915_request *rq)
static void hang_fini(struct hang *h) static void hang_fini(struct hang *h)
{ {
*h->batch = MI_BATCH_BUFFER_END; *h->batch = MI_BATCH_BUFFER_END;
i915_gem_chipset_flush(h->i915);
if (h->gt)
intel_gt_chipset_flush(h->gt);
i915_gem_object_unpin_map(h->obj); i915_gem_object_unpin_map(h->obj);
i915_gem_object_put(h->obj); i915_gem_object_put(h->obj);
...@@ -333,7 +339,7 @@ static int igt_hang_sanitycheck(void *arg) ...@@ -333,7 +339,7 @@ static int igt_hang_sanitycheck(void *arg)
i915_request_get(rq); i915_request_get(rq);
*h.batch = MI_BATCH_BUFFER_END; *h.batch = MI_BATCH_BUFFER_END;
i915_gem_chipset_flush(i915); intel_gt_chipset_flush(engine->gt);
i915_request_add(rq); i915_request_add(rq);
...@@ -1509,7 +1515,7 @@ static int igt_reset_queue(void *arg) ...@@ -1509,7 +1515,7 @@ static int igt_reset_queue(void *arg)
pr_info("%s: Completed %d resets\n", engine->name, count); pr_info("%s: Completed %d resets\n", engine->name, count);
*h.batch = MI_BATCH_BUFFER_END; *h.batch = MI_BATCH_BUFFER_END;
i915_gem_chipset_flush(i915); intel_gt_chipset_flush(engine->gt);
i915_request_put(prev); i915_request_put(prev);
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
*/ */
#include "gem/i915_gem_pm.h" #include "gem/i915_gem_pm.h"
#include "gt/intel_gt.h"
#include "i915_selftest.h" #include "i915_selftest.h"
#include "intel_reset.h" #include "intel_reset.h"
...@@ -542,7 +543,7 @@ static int check_dirty_whitelist(struct i915_gem_context *ctx, ...@@ -542,7 +543,7 @@ static int check_dirty_whitelist(struct i915_gem_context *ctx,
i915_gem_object_flush_map(batch->obj); i915_gem_object_flush_map(batch->obj);
i915_gem_object_unpin_map(batch->obj); i915_gem_object_unpin_map(batch->obj);
i915_gem_chipset_flush(ctx->i915); intel_gt_chipset_flush(engine->gt);
rq = igt_request_alloc(ctx, engine); rq = igt_request_alloc(ctx, engine);
if (IS_ERR(rq)) { if (IS_ERR(rq)) {
...@@ -806,7 +807,7 @@ static int scrub_whitelisted_registers(struct i915_gem_context *ctx, ...@@ -806,7 +807,7 @@ static int scrub_whitelisted_registers(struct i915_gem_context *ctx,
*cs++ = MI_BATCH_BUFFER_END; *cs++ = MI_BATCH_BUFFER_END;
i915_gem_object_flush_map(batch->obj); i915_gem_object_flush_map(batch->obj);
i915_gem_chipset_flush(ctx->i915); intel_gt_chipset_flush(engine->gt);
rq = igt_request_alloc(ctx, engine); rq = igt_request_alloc(ctx, engine);
if (IS_ERR(rq)) { if (IS_ERR(rq)) {
......
...@@ -2599,14 +2599,6 @@ int __must_check i915_gem_evict_for_node(struct i915_address_space *vm, ...@@ -2599,14 +2599,6 @@ int __must_check i915_gem_evict_for_node(struct i915_address_space *vm,
unsigned int flags); unsigned int flags);
int i915_gem_evict_vm(struct i915_address_space *vm); int i915_gem_evict_vm(struct i915_address_space *vm);
/* belongs in i915_gem_gtt.h */
static inline void i915_gem_chipset_flush(struct drm_i915_private *dev_priv)
{
wmb();
if (INTEL_GEN(dev_priv) < 6)
intel_gtt_chipset_flush();
}
/* i915_gem_stolen.c */ /* i915_gem_stolen.c */
int i915_gem_stolen_insert_node(struct drm_i915_private *dev_priv, int i915_gem_stolen_insert_node(struct drm_i915_private *dev_priv,
struct drm_mm_node *node, u64 size, struct drm_mm_node *node, u64 size,
......
...@@ -47,6 +47,7 @@ ...@@ -47,6 +47,7 @@
#include "gem/i915_gem_pm.h" #include "gem/i915_gem_pm.h"
#include "gem/i915_gemfs.h" #include "gem/i915_gemfs.h"
#include "gt/intel_engine_pm.h" #include "gt/intel_engine_pm.h"
#include "gt/intel_gt.h"
#include "gt/intel_gt_pm.h" #include "gt/intel_gt_pm.h"
#include "gt/intel_mocs.h" #include "gt/intel_mocs.h"
#include "gt/intel_reset.h" #include "gt/intel_reset.h"
...@@ -142,7 +143,7 @@ i915_gem_phys_pwrite(struct drm_i915_gem_object *obj, ...@@ -142,7 +143,7 @@ i915_gem_phys_pwrite(struct drm_i915_gem_object *obj,
return -EFAULT; return -EFAULT;
drm_clflush_virt_range(vaddr, args->size); drm_clflush_virt_range(vaddr, args->size);
i915_gem_chipset_flush(to_i915(obj->base.dev)); intel_gt_chipset_flush(&to_i915(obj->base.dev)->gt);
intel_fb_obj_flush(obj, ORIGIN_CPU); intel_fb_obj_flush(obj, ORIGIN_CPU);
return 0; return 0;
......
...@@ -27,6 +27,8 @@ ...@@ -27,6 +27,8 @@
#include "gem/i915_gem_pm.h" #include "gem/i915_gem_pm.h"
#include "gem/selftests/mock_context.h" #include "gem/selftests/mock_context.h"
#include "gt/intel_gt.h"
#include "i915_random.h" #include "i915_random.h"
#include "i915_selftest.h" #include "i915_selftest.h"
#include "igt_live_test.h" #include "igt_live_test.h"
...@@ -624,7 +626,7 @@ static struct i915_vma *empty_batch(struct drm_i915_private *i915) ...@@ -624,7 +626,7 @@ static struct i915_vma *empty_batch(struct drm_i915_private *i915)
__i915_gem_object_flush_map(obj, 0, 64); __i915_gem_object_flush_map(obj, 0, 64);
i915_gem_object_unpin_map(obj); i915_gem_object_unpin_map(obj);
i915_gem_chipset_flush(i915); intel_gt_chipset_flush(&i915->gt);
vma = i915_vma_instance(obj, &i915->ggtt.vm, NULL); vma = i915_vma_instance(obj, &i915->ggtt.vm, NULL);
if (IS_ERR(vma)) { if (IS_ERR(vma)) {
...@@ -793,7 +795,7 @@ static struct i915_vma *recursive_batch(struct drm_i915_private *i915) ...@@ -793,7 +795,7 @@ static struct i915_vma *recursive_batch(struct drm_i915_private *i915)
__i915_gem_object_flush_map(obj, 0, 64); __i915_gem_object_flush_map(obj, 0, 64);
i915_gem_object_unpin_map(obj); i915_gem_object_unpin_map(obj);
i915_gem_chipset_flush(i915); intel_gt_chipset_flush(&i915->gt);
return vma; return vma;
...@@ -811,7 +813,7 @@ static int recursive_batch_resolve(struct i915_vma *batch) ...@@ -811,7 +813,7 @@ static int recursive_batch_resolve(struct i915_vma *batch)
return PTR_ERR(cmd); return PTR_ERR(cmd);
*cmd = MI_BATCH_BUFFER_END; *cmd = MI_BATCH_BUFFER_END;
i915_gem_chipset_flush(batch->vm->i915); intel_gt_chipset_flush(batch->vm->gt);
i915_gem_object_unpin_map(batch->obj); i915_gem_object_unpin_map(batch->obj);
...@@ -1033,7 +1035,7 @@ static int live_sequential_engines(void *arg) ...@@ -1033,7 +1035,7 @@ static int live_sequential_engines(void *arg)
I915_MAP_WC); I915_MAP_WC);
if (!IS_ERR(cmd)) { if (!IS_ERR(cmd)) {
*cmd = MI_BATCH_BUFFER_END; *cmd = MI_BATCH_BUFFER_END;
i915_gem_chipset_flush(i915); intel_gt_chipset_flush(engine->gt);
i915_gem_object_unpin_map(request[id]->batch->obj); i915_gem_object_unpin_map(request[id]->batch->obj);
} }
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
* *
* Copyright © 2018 Intel Corporation * Copyright © 2018 Intel Corporation
*/ */
#include "gt/intel_gt.h"
#include "gem/selftests/igt_gem_utils.h" #include "gem/selftests/igt_gem_utils.h"
...@@ -94,6 +95,8 @@ igt_spinner_create_request(struct igt_spinner *spin, ...@@ -94,6 +95,8 @@ igt_spinner_create_request(struct igt_spinner *spin,
u32 *batch; u32 *batch;
int err; int err;
spin->gt = engine->gt;
vma = i915_vma_instance(spin->obj, ctx->vm, NULL); vma = i915_vma_instance(spin->obj, ctx->vm, NULL);
if (IS_ERR(vma)) if (IS_ERR(vma))
return ERR_CAST(vma); return ERR_CAST(vma);
...@@ -138,7 +141,7 @@ igt_spinner_create_request(struct igt_spinner *spin, ...@@ -138,7 +141,7 @@ igt_spinner_create_request(struct igt_spinner *spin,
*batch++ = upper_32_bits(vma->node.start); *batch++ = upper_32_bits(vma->node.start);
*batch++ = MI_BATCH_BUFFER_END; /* not reached */ *batch++ = MI_BATCH_BUFFER_END; /* not reached */
i915_gem_chipset_flush(spin->i915); intel_gt_chipset_flush(engine->gt);
if (engine->emit_init_breadcrumb && if (engine->emit_init_breadcrumb &&
rq->timeline->has_initial_breadcrumb) { rq->timeline->has_initial_breadcrumb) {
...@@ -172,7 +175,7 @@ hws_seqno(const struct igt_spinner *spin, const struct i915_request *rq) ...@@ -172,7 +175,7 @@ hws_seqno(const struct igt_spinner *spin, const struct i915_request *rq)
void igt_spinner_end(struct igt_spinner *spin) void igt_spinner_end(struct igt_spinner *spin)
{ {
*spin->batch = MI_BATCH_BUFFER_END; *spin->batch = MI_BATCH_BUFFER_END;
i915_gem_chipset_flush(spin->i915); intel_gt_chipset_flush(spin->gt);
} }
void igt_spinner_fini(struct igt_spinner *spin) void igt_spinner_fini(struct igt_spinner *spin)
......
...@@ -14,8 +14,11 @@ ...@@ -14,8 +14,11 @@
#include "i915_request.h" #include "i915_request.h"
#include "i915_selftest.h" #include "i915_selftest.h"
struct intel_gt;
struct igt_spinner { struct igt_spinner {
struct drm_i915_private *i915; struct drm_i915_private *i915;
struct intel_gt *gt;
struct drm_i915_gem_object *hws; struct drm_i915_gem_object *hws;
struct drm_i915_gem_object *obj; struct drm_i915_gem_object *obj;
u32 *batch; u32 *batch;
......
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