From: Ramalingam C <ramalingam.c@xxxxxxxxx> window_blt_copy feature is used for swapin and swapout based on the i915 module parameter called enable_eviction. Signed-off-by: Ramalingam C <ramalingam.c@xxxxxxxxx> Cc: Matthew Auld <matthew.auld@xxxxxxxxx> Cc: CQ Tang <cq.tang@xxxxxxxxx> --- drivers/gpu/drm/i915/gem/i915_gem_region.c | 14 ++++++++++---- drivers/gpu/drm/i915/i915_drv.c | 4 ++-- drivers/gpu/drm/i915/i915_params.c | 6 ++++-- drivers/gpu/drm/i915/i915_params.h | 2 +- 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/i915/gem/i915_gem_region.c b/drivers/gpu/drm/i915/gem/i915_gem_region.c index 4fab9f6b4bee..f9ff0aa31752 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_region.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_region.c @@ -16,7 +16,7 @@ i915_gem_object_swapout_pages(struct drm_i915_gem_object *obj, struct drm_i915_private *i915 = to_i915(obj->base.dev); struct drm_i915_gem_object *dst, *src; unsigned long start, diff, msec; - int err; + int err = -EINVAL; GEM_BUG_ON(obj->swapto); GEM_BUG_ON(i915_gem_object_has_pages(obj)); @@ -54,7 +54,10 @@ i915_gem_object_swapout_pages(struct drm_i915_gem_object *obj, __i915_gem_object_pin_pages(src); /* copying the pages */ - err = i915_gem_object_memcpy(dst, src); + if (i915->params.enable_eviction >= 2) + err = i915_window_blt_copy(dst, src); + if (err && i915->params.enable_eviction != 2) + err = i915_gem_object_memcpy(dst, src); __i915_gem_object_unpin_pages(src); __i915_gem_object_unset_pages(src); @@ -83,7 +86,7 @@ i915_gem_object_swapin_pages(struct drm_i915_gem_object *obj, struct drm_i915_private *i915 = to_i915(obj->base.dev); struct drm_i915_gem_object *dst, *src; unsigned long start, diff, msec; - int err; + int err = -EINVAL; GEM_BUG_ON(!obj->swapto); GEM_BUG_ON(i915_gem_object_has_pages(obj)); @@ -117,7 +120,10 @@ i915_gem_object_swapin_pages(struct drm_i915_gem_object *obj, __i915_gem_object_pin_pages(dst); /* copying the pages */ - err = i915_gem_object_memcpy(dst, src); + if (i915->params.enable_eviction >= 2) + err = i915_window_blt_copy(dst, src); + if (err && i915->params.enable_eviction != 2) + err = i915_gem_object_memcpy(dst, src); __i915_gem_object_unpin_pages(dst); __i915_gem_object_unset_pages(dst); diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c index 683643b211fa..78b528e89486 100644 --- a/drivers/gpu/drm/i915/i915_drv.c +++ b/drivers/gpu/drm/i915/i915_drv.c @@ -891,7 +891,7 @@ int i915_driver_probe(struct pci_dev *pdev, const struct pci_device_id *ent) i915_driver_register(i915); - if (HAS_LMEM(i915)) { + if (HAS_LMEM(i915) && i915->params.enable_eviction >= 2) { ret = i915_setup_blt_windows(i915); if (ret) goto out_cleanup_drv_register; @@ -939,7 +939,7 @@ int i915_driver_probe(struct pci_dev *pdev, const struct pci_device_id *ent) void i915_driver_remove(struct drm_i915_private *i915) { - if (HAS_LMEM(i915)) + if (HAS_LMEM(i915) && i915->params.enable_eviction >= 2) i915_teardown_blt_windows(i915); disable_rpm_wakeref_asserts(&i915->runtime_pm); diff --git a/drivers/gpu/drm/i915/i915_params.c b/drivers/gpu/drm/i915/i915_params.c index 264de32f3d6a..9fa58ed76614 100644 --- a/drivers/gpu/drm/i915/i915_params.c +++ b/drivers/gpu/drm/i915/i915_params.c @@ -197,8 +197,10 @@ i915_param_named_unsafe(fake_lmem_start, ulong, 0400, "Fake LMEM start offset (default: 0)"); #endif -i915_param_named_unsafe(enable_eviction, bool, 0600, - "Enable memcpy based eviction which does not rely on DMA resv refactoring)"); +i915_param_named_unsafe(enable_eviction, uint, 0600, + "Enable eviction which does not rely on DMA resv refactoring " + "0=disabled, 1=memcpy based only, 2=blt based only, " + "3=blt based but fallsback to memcpy based [default])"); i915_param_named_unsafe(lmem_size, uint, 0400, "Change lmem size for each region. (default: 0, all memory)"); diff --git a/drivers/gpu/drm/i915/i915_params.h b/drivers/gpu/drm/i915/i915_params.h index be6979e7feda..c835e592ee5f 100644 --- a/drivers/gpu/drm/i915/i915_params.h +++ b/drivers/gpu/drm/i915/i915_params.h @@ -72,8 +72,8 @@ struct drm_printer; param(char *, force_probe, CONFIG_DRM_I915_FORCE_PROBE, 0400) \ param(unsigned long, fake_lmem_start, 0, 0400) \ param(unsigned int, lmem_size, 0, 0400) \ + param(unsigned int, enable_eviction, 3, 0600) \ /* leave bools at the end to not create holes */ \ - param(bool, enable_eviction, true, 0600) \ param(bool, enable_hangcheck, true, 0600) \ param(bool, load_detect_test, false, 0600) \ param(bool, force_reset_modeset_test, false, 0600) \ -- 2.26.2 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel