From bc2d4e51f7e8f7bc34cded24a3f7e1a392e0ba4b Mon Sep 17 00:00:00 2001 From: Jake Day Date: Fri, 3 Nov 2017 19:47:27 -0400 Subject: [PATCH] updating ipts to be more compatible with newer i915 modules --- kernel/drivers/gpu/drm/i915/i915_drv.c | 3 +-- kernel/drivers/gpu/drm/i915/i915_gem.c | 2 +- .../gpu/drm/i915/i915_guc_submission.c | 4 ++-- kernel/drivers/gpu/drm/i915/i915_params.c | 8 +++---- kernel/drivers/gpu/drm/i915/intel_ipts.c | 23 +++++++++++-------- kernel/drivers/misc/ipts/ipts-gfx.c | 2 ++ kernel/drivers/misc/ipts/ipts-resource.c | 6 ++--- 7 files changed, 26 insertions(+), 22 deletions(-) diff --git a/kernel/drivers/gpu/drm/i915/i915_drv.c b/kernel/drivers/gpu/drm/i915/i915_drv.c index fbb0d7b4c..34ec3cc70 100644 --- a/kernel/drivers/gpu/drm/i915/i915_drv.c +++ b/kernel/drivers/gpu/drm/i915/i915_drv.c @@ -680,9 +680,8 @@ static int i915_load_modeset_init(struct drm_device *dev) drm_kms_helper_poll_init(dev); -pr_info(">> let init ipts\n"); if (INTEL_GEN(dev_priv) >= 9 && i915.enable_guc_submission) - intel_ipts_init(dev); + intel_ipts_init(dev); return 0; diff --git a/kernel/drivers/gpu/drm/i915/i915_gem.c b/kernel/drivers/gpu/drm/i915/i915_gem.c index 32e857dc5..ee42a5f69 100644 --- a/kernel/drivers/gpu/drm/i915/i915_gem.c +++ b/kernel/drivers/gpu/drm/i915/i915_gem.c @@ -179,7 +179,7 @@ i915_gem_object_get_pages_phys(struct drm_i915_gem_object *obj) * the alignment of the buddy allocation will naturally match. */ phys = drm_pci_alloc(obj->base.dev, - obj->base.size, + roundup_pow_of_two(obj->base.size), roundup_pow_of_two(obj->base.size)); if (!phys) return ERR_PTR(-ENOMEM); diff --git a/kernel/drivers/gpu/drm/i915/i915_guc_submission.c b/kernel/drivers/gpu/drm/i915/i915_guc_submission.c index ca24ac851..505fdd864 100644 --- a/kernel/drivers/gpu/drm/i915/i915_guc_submission.c +++ b/kernel/drivers/gpu/drm/i915/i915_guc_submission.c @@ -1358,7 +1358,7 @@ int i915_guc_ipts_submission_enable(struct drm_i915_private *dev_priv, /* client for execbuf submission */ client = guc_client_alloc(dev_priv, INTEL_INFO(dev_priv)->ring_mask, - GUC_CLIENT_PRIORITY_KMD_NORMAL, + GUC_CLIENT_PRIORITY_NORMAL, ctx); if (!client) { DRM_ERROR("Failed to create normal GuC client!\n"); @@ -1387,7 +1387,7 @@ void i915_guc_ipts_reacquire_doorbell(struct drm_i915_private *dev_priv) { struct intel_guc *guc = &dev_priv->guc; - int err = __guc_allocate_doorbell(guc, guc->ipts_client); + int err = __guc_allocate_doorbell(guc, guc->ipts_client->stage_id); if (err) DRM_ERROR("Not able to reacquire IPTS doorbell\n"); diff --git a/kernel/drivers/gpu/drm/i915/i915_params.c b/kernel/drivers/gpu/drm/i915/i915_params.c index 8ab003dca..db559100b 100644 --- a/kernel/drivers/gpu/drm/i915/i915_params.c +++ b/kernel/drivers/gpu/drm/i915/i915_params.c @@ -56,8 +56,8 @@ struct i915_params i915 __read_mostly = { .verbose_state_checks = 1, .nuclear_pageflip = 0, .edp_vswing = 0, - .enable_guc_loading = 0, - .enable_guc_submission = 0, + .enable_guc_loading = 1, + .enable_guc_submission = 1, .guc_log_level = -1, .guc_firmware_path = NULL, .huc_firmware_path = NULL, @@ -225,12 +225,12 @@ MODULE_PARM_DESC(edp_vswing, module_param_named_unsafe(enable_guc_loading, i915.enable_guc_loading, int, 0400); MODULE_PARM_DESC(enable_guc_loading, "Enable GuC firmware loading " - "(-1=auto, 0=never [default], 1=if available, 2=required)"); + "(-1=auto, 0=never, 1=if available [default], 2=required)"); module_param_named_unsafe(enable_guc_submission, i915.enable_guc_submission, int, 0400); MODULE_PARM_DESC(enable_guc_submission, "Enable GuC submission " - "(-1=auto, 0=never [default], 1=if available, 2=required)"); + "(-1=auto, 0=never, 1=if available [default], 2=required)"); module_param_named(guc_log_level, i915.guc_log_level, int, 0400); MODULE_PARM_DESC(guc_log_level, diff --git a/kernel/drivers/gpu/drm/i915/intel_ipts.c b/kernel/drivers/gpu/drm/i915/intel_ipts.c index 3ab9b5020..f5fa1118b 100644 --- a/kernel/drivers/gpu/drm/i915/intel_ipts.c +++ b/kernel/drivers/gpu/drm/i915/intel_ipts.c @@ -69,7 +69,7 @@ typedef struct intel_ipts_object { static intel_ipts_object_t *ipts_object_create(size_t size, u32 flags) { - struct drm_i915_private *dev_priv = intel_ipts.dev->dev_private; + struct drm_i915_private *dev_priv = to_i915(intel_ipts.dev); intel_ipts_object_t *obj = NULL; struct drm_i915_gem_object *gem_obj = NULL; int ret = 0; @@ -132,7 +132,7 @@ static int ipts_object_pin(intel_ipts_object_t* obj, { struct i915_address_space *vm = NULL; struct i915_vma *vma = NULL; - struct drm_i915_private *dev_priv = intel_ipts.dev->dev_private; + struct drm_i915_private *dev_priv = to_i915(intel_ipts.dev); int ret = 0; if (ipts_ctx->ppgtt) { @@ -172,7 +172,8 @@ static void ipts_object_unmap(intel_ipts_object_t* obj) static int create_ipts_context(void) { struct i915_gem_context *ipts_ctx = NULL; - struct drm_i915_private *dev_priv = intel_ipts.dev->dev_private; + struct drm_i915_private *dev_priv = to_i915(intel_ipts.dev); + struct intel_ring *pin_ret; int ret = 0; /* Initialize the context right away.*/ @@ -196,9 +197,9 @@ static int create_ipts_context(void) goto err_ctx; } - ret = execlists_context_pin(dev_priv->engine[RCS], ipts_ctx); - if (ret) { - DRM_DEBUG("lr context pinning failed : %d\n", ret); + pin_ret = execlists_context_pin(dev_priv->engine[RCS], ipts_ctx); + if (IS_ERR(pin_ret)) { + DRM_DEBUG("lr context pinning failed : %ld\n", PTR_ERR(pin_ret)); goto err_ctx; } @@ -225,7 +226,7 @@ err_unlock: static void destroy_ipts_context(void) { struct i915_gem_context *ipts_ctx = NULL; - struct drm_i915_private *dev_priv = intel_ipts.dev->dev_private; + struct drm_i915_private *dev_priv = to_i915(intel_ipts.dev); int ret = 0; ipts_ctx = intel_ipts.ipts_context; @@ -308,7 +309,7 @@ static int intel_ipts_get_wq_info(uint64_t gfx_handle, static int set_wq_info(void) { - struct drm_i915_private *dev_priv = intel_ipts.dev->dev_private; + struct drm_i915_private *dev_priv = to_i915(intel_ipts.dev); struct intel_guc *guc = &dev_priv->guc; struct i915_guc_client *client; struct guc_process_desc *desc; @@ -402,7 +403,7 @@ static int intel_ipts_map_buffer(u64 gfx_handle, intel_ipts_mapbuffer_t *mapbuf) { intel_ipts_object_t* obj; struct i915_gem_context *ipts_ctx = NULL; - struct drm_i915_private *dev_priv = intel_ipts.dev->dev_private; + struct drm_i915_private *dev_priv = to_i915(intel_ipts.dev); struct i915_address_space *vm = NULL; struct i915_vma *vma = NULL; int ret = 0; @@ -482,7 +483,7 @@ static int intel_ipts_unmap_buffer(uint64_t gfx_handle, uint64_t buf_handle) int intel_ipts_connect(intel_ipts_connect_t *ipts_connect) { - struct drm_i915_private *dev_priv = intel_ipts.dev->dev_private; + struct drm_i915_private *dev_priv = to_i915(intel_ipts.dev); int ret = 0; if (!intel_ipts.initialized) @@ -584,6 +585,8 @@ int intel_ipts_init(struct drm_device *dev) { int ret = 0; + pr_info("ipts: initializing ipts\n"); + intel_ipts.dev = dev; INIT_DELAYED_WORK(&intel_ipts.reacquire_db_work, reacquire_db_work_func); diff --git a/kernel/drivers/misc/ipts/ipts-gfx.c b/kernel/drivers/misc/ipts/ipts-gfx.c index 51727770e..ff4356507 100644 --- a/kernel/drivers/misc/ipts/ipts-gfx.c +++ b/kernel/drivers/misc/ipts/ipts-gfx.c @@ -67,6 +67,8 @@ static void disconnect_gfx(ipts_info_t *ipts) intel_ipts_disconnect(ipts->gfx_info.gfx_handle); } +#define RUN_DBG_THREAD + #ifdef RUN_DBG_THREAD #include "../mei/mei_dev.h" diff --git a/kernel/drivers/misc/ipts/ipts-resource.c b/kernel/drivers/misc/ipts/ipts-resource.c index c353b815a..47607ef7c 100644 --- a/kernel/drivers/misc/ipts/ipts-resource.c +++ b/kernel/drivers/misc/ipts/ipts-resource.c @@ -55,7 +55,7 @@ static int allocate_common_resource(ipts_info_t *ipts) addr = dmam_alloc_coherent(&ipts->cldev->dev, buffer_size, &dma_addr, - GFP_ATOMIC|GFP_DMA32); + GFP_ATOMIC|__GFP_ZERO); if (addr == NULL) return -ENOMEM; @@ -76,7 +76,7 @@ static int allocate_common_resource(ipts_info_t *ipts) feedback_buffer[i].addr = dmam_alloc_coherent(&ipts->cldev->dev, ipts->device_info.feedback_size, &feedback_buffer[i].dma_addr, - GFP_ATOMIC|GFP_DMA32); + GFP_ATOMIC|__GFP_ZERO); if (feedback_buffer[i].addr == NULL) { ret = -ENOMEM; @@ -110,7 +110,7 @@ static int allocate_hid_resource(ipts_info_t *ipts) buffer_hid->addr = dmam_alloc_coherent(&ipts->cldev->dev, ipts->device_info.frame_size, &buffer_hid->dma_addr, - GFP_ATOMIC|GFP_DMA32); + GFP_ATOMIC|__GFP_ZERO); if (buffer_hid->addr == NULL) { return -ENOMEM; }