fix touch screen lag and crashing in ipts module
This commit is contained in:
parent
148e917631
commit
1143fcaa6b
|
@ -1,7 +1,7 @@
|
|||
From bcd4a6318d1e33330eade2b1716ac8d1010c2d25 Mon Sep 17 00:00:00 2001
|
||||
From 0ee4cc7146ffaf31332c845ae7242f746d88e0e7 Mon Sep 17 00:00:00 2001
|
||||
From: Jake Day <jake@ninebysix.com>
|
||||
Date: Sun, 27 Jan 2019 10:52:28 -0500
|
||||
Subject: [PATCH 05/11] ipts
|
||||
Date: Mon, 28 Jan 2019 19:24:45 -0500
|
||||
Subject: [PATCH 5/5] ipts
|
||||
|
||||
---
|
||||
drivers/gpu/drm/i915/Makefile | 3 +
|
||||
|
@ -13,7 +13,7 @@ Subject: [PATCH 05/11] ipts
|
|||
drivers/gpu/drm/i915/i915_params.h | 5 +-
|
||||
drivers/gpu/drm/i915/intel_dp.c | 4 +-
|
||||
drivers/gpu/drm/i915/intel_guc.h | 1 +
|
||||
drivers/gpu/drm/i915/intel_guc_submission.c | 79 +-
|
||||
drivers/gpu/drm/i915/intel_guc_submission.c | 89 +-
|
||||
drivers/gpu/drm/i915/intel_guc_submission.h | 4 +
|
||||
drivers/gpu/drm/i915/intel_ipts.c | 642 ++++++++++++
|
||||
drivers/gpu/drm/i915/intel_ipts.h | 34 +
|
||||
|
@ -45,7 +45,7 @@ Subject: [PATCH 05/11] ipts
|
|||
drivers/misc/mei/hw-me-regs.h | 1 +
|
||||
drivers/misc/mei/pci-me.c | 1 +
|
||||
include/linux/intel_ipts_if.h | 75 ++
|
||||
41 files changed, 5541 insertions(+), 22 deletions(-)
|
||||
41 files changed, 5548 insertions(+), 25 deletions(-)
|
||||
create mode 100644 drivers/gpu/drm/i915/intel_ipts.c
|
||||
create mode 100644 drivers/gpu/drm/i915/intel_ipts.h
|
||||
create mode 100644 drivers/misc/ipts/Kconfig
|
||||
|
@ -153,7 +153,7 @@ index b10770cfccd2..0222f0a55262 100644
|
|||
{
|
||||
struct i915_gem_context *ctx;
|
||||
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
|
||||
index 29877969310d..e199a6d687b2 100644
|
||||
index 29877969310d..f98fdb5fc282 100644
|
||||
--- a/drivers/gpu/drm/i915/i915_irq.c
|
||||
+++ b/drivers/gpu/drm/i915/i915_irq.c
|
||||
@@ -36,6 +36,7 @@
|
||||
|
@ -168,7 +168,7 @@ index 29877969310d..e199a6d687b2 100644
|
|||
tasklet |= USES_GUC_SUBMISSION(engine->i915);
|
||||
}
|
||||
|
||||
+ if (iir & GT_RENDER_PIPECTL_NOTIFY_INTERRUPT)
|
||||
+ if (iir & GT_RENDER_PIPECTL_NOTIFY_INTERRUPT && i915_modparams.enable_ipts)
|
||||
+ intel_ipts_notify_complete();
|
||||
+
|
||||
if (tasklet)
|
||||
|
@ -251,10 +251,22 @@ index 4121928a495e..8967376accf3 100644
|
|||
struct guc_preempt_work preempt_work[I915_NUM_ENGINES];
|
||||
struct workqueue_struct *preempt_wq;
|
||||
diff --git a/drivers/gpu/drm/i915/intel_guc_submission.c b/drivers/gpu/drm/i915/intel_guc_submission.c
|
||||
index 4aa5e6463e7b..c153ee6af69a 100644
|
||||
index 4aa5e6463e7b..8f517c7e93a3 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_guc_submission.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_guc_submission.c
|
||||
@@ -94,6 +94,7 @@ static inline bool is_high_priority(struct intel_guc_client *client)
|
||||
@@ -88,12 +88,17 @@ static inline struct i915_priolist *to_priolist(struct rb_node *rb)
|
||||
|
||||
static inline bool is_high_priority(struct intel_guc_client *client)
|
||||
{
|
||||
- return (client->priority == GUC_CLIENT_PRIORITY_KMD_HIGH ||
|
||||
- client->priority == GUC_CLIENT_PRIORITY_HIGH);
|
||||
+ return (client->priority == GUC_CLIENT_PRIORITY_HIGH);
|
||||
+}
|
||||
+
|
||||
+static inline bool is_high_priority_kmd(struct intel_guc_client *client)
|
||||
+{
|
||||
+ return (client->priority == GUC_CLIENT_PRIORITY_KMD_HIGH);
|
||||
}
|
||||
|
||||
static int reserve_doorbell(struct intel_guc_client *client)
|
||||
{
|
||||
|
@ -262,7 +274,7 @@ index 4aa5e6463e7b..c153ee6af69a 100644
|
|||
unsigned long offset;
|
||||
unsigned long end;
|
||||
u16 id;
|
||||
@@ -106,10 +107,15 @@ static int reserve_doorbell(struct intel_guc_client *client)
|
||||
@@ -106,10 +111,15 @@ static int reserve_doorbell(struct intel_guc_client *client)
|
||||
* priority contexts, the second half for high-priority ones.
|
||||
*/
|
||||
offset = 0;
|
||||
|
@ -282,12 +294,13 @@ index 4aa5e6463e7b..c153ee6af69a 100644
|
|||
}
|
||||
|
||||
id = find_next_zero_bit(client->guc->doorbell_bitmap, end, offset);
|
||||
@@ -355,8 +361,14 @@ static void guc_stage_desc_init(struct intel_guc *guc,
|
||||
@@ -355,9 +365,15 @@ static void guc_stage_desc_init(struct intel_guc *guc,
|
||||
desc = __get_stage_desc(client);
|
||||
memset(desc, 0, sizeof(*desc));
|
||||
|
||||
- desc->attribute = GUC_STAGE_DESC_ATTR_ACTIVE |
|
||||
- GUC_STAGE_DESC_ATTR_KERNEL;
|
||||
- if (is_high_priority(client))
|
||||
+ desc->attribute = GUC_STAGE_DESC_ATTR_ACTIVE;
|
||||
+ if ((client->priority == GUC_CLIENT_PRIORITY_KMD_NORMAL) ||
|
||||
+ (client->priority == GUC_CLIENT_PRIORITY_KMD_HIGH)) {
|
||||
|
@ -296,10 +309,11 @@ index 4aa5e6463e7b..c153ee6af69a 100644
|
|||
+ desc->attribute |= GUC_STAGE_DESC_ATTR_PCH;
|
||||
+ }
|
||||
+
|
||||
if (is_high_priority(client))
|
||||
+ if (is_high_priority_kmd(client))
|
||||
desc->attribute |= GUC_STAGE_DESC_ATTR_PREEMPT;
|
||||
desc->stage_id = client->stage_id;
|
||||
@@ -1204,7 +1216,8 @@ static void guc_interrupts_capture(struct drm_i915_private *dev_priv)
|
||||
desc->priority = client->priority;
|
||||
@@ -1204,7 +1220,8 @@ static void guc_interrupts_capture(struct drm_i915_private *dev_priv)
|
||||
I915_WRITE(RING_MODE_GEN7(engine), irqs);
|
||||
|
||||
/* route USER_INTERRUPT to Host, all others are sent to GuC. */
|
||||
|
@ -309,7 +323,7 @@ index 4aa5e6463e7b..c153ee6af69a 100644
|
|||
GT_RENDER_USER_INTERRUPT << GEN8_BCS_IRQ_SHIFT;
|
||||
/* These three registers have the same bit definitions */
|
||||
I915_WRITE(GUC_BCS_RCS_IER, ~irqs);
|
||||
@@ -1349,6 +1362,58 @@ void intel_guc_submission_disable(struct intel_guc *guc)
|
||||
@@ -1349,6 +1366,58 @@ void intel_guc_submission_disable(struct intel_guc *guc)
|
||||
guc_clients_doorbell_fini(guc);
|
||||
}
|
||||
|
||||
|
@ -324,7 +338,7 @@ index 4aa5e6463e7b..c153ee6af69a 100644
|
|||
+ /* client for execbuf submission */
|
||||
+ client = guc_client_alloc(dev_priv,
|
||||
+ INTEL_INFO(dev_priv)->ring_mask,
|
||||
+ GUC_CLIENT_PRIORITY_NORMAL,
|
||||
+ IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv) ? GUC_CLIENT_PRIORITY_HIGH : GUC_CLIENT_PRIORITY_NORMAL,
|
||||
+ ctx);
|
||||
+ if (IS_ERR(client)) {
|
||||
+ DRM_ERROR("Failed to create normal GuC client!\n");
|
||||
|
|
Loading…
Reference in a new issue