IPTS: Add debugfs entries

This commit is contained in:
kitakar5525 2019-07-27 19:54:39 +02:00 committed by qzed
parent a5e6433117
commit 360a2b1c45
8 changed files with 317 additions and 15 deletions

View file

@ -1,10 +1,11 @@
From e1567eb4f8e8f69efcf9730efa17b56c0781f4da Mon Sep 17 00:00:00 2001
From 20a9d7520a725aebf3fb9fdedd91525041345378 Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Fri, 26 Jul 2019 04:45:32 +0200
Subject: [PATCH 05/12] ipts
---
drivers/gpu/drm/i915/Makefile | 3 +
drivers/gpu/drm/i915/i915_debugfs.c | 63 +-
drivers/gpu/drm/i915/i915_drv.c | 7 +
drivers/gpu/drm/i915/i915_drv.h | 3 +
drivers/gpu/drm/i915/i915_gem_context.c | 12 +
@ -26,7 +27,7 @@ Subject: [PATCH 05/12] ipts
drivers/misc/ipts/Kconfig | 9 +
drivers/misc/ipts/Makefile | 13 +
drivers/misc/ipts/ipts-binary-spec.h | 118 +++
drivers/misc/ipts/ipts-dbgfs.c | 152 +++
drivers/misc/ipts/ipts-dbgfs.c | 364 +++++++
drivers/misc/ipts/ipts-gfx.c | 185 ++++
drivers/misc/ipts/ipts-gfx.h | 24 +
drivers/misc/ipts/ipts-hid.c | 456 ++++++++
@ -36,7 +37,7 @@ Subject: [PATCH 05/12] ipts
drivers/misc/ipts/ipts-mei-msgs.h | 585 +++++++++++
drivers/misc/ipts/ipts-mei.c | 282 +++++
drivers/misc/ipts/ipts-msg-handler.c | 437 ++++++++
drivers/misc/ipts/ipts-msg-handler.h | 32 +
drivers/misc/ipts/ipts-msg-handler.h | 33 +
drivers/misc/ipts/ipts-resource.c | 277 +++++
drivers/misc/ipts/ipts-resource.h | 30 +
drivers/misc/ipts/ipts-sensor-regs.h | 700 +++++++++++++
@ -45,7 +46,7 @@ Subject: [PATCH 05/12] ipts
drivers/misc/mei/hw-me-regs.h | 1 +
drivers/misc/mei/pci-me.c | 1 +
include/linux/intel_ipts_if.h | 76 ++
41 files changed, 5566 insertions(+), 25 deletions(-)
42 files changed, 5841 insertions(+), 26 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
@ -83,6 +84,94 @@ index fbcb0904f4a8..1a273956b41c 100644
# Post-mortem debug and GPU hang state capture
i915-$(CONFIG_DRM_I915_CAPTURE_ERROR) += i915_gpu_error.o
i915-$(CONFIG_DRM_I915_SELFTEST) += \
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index 5823ffb17821..2ffad9712041 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -41,6 +41,7 @@
#include "intel_hdmi.h"
#include "intel_pm.h"
#include "intel_psr.h"
+#include "intel_ipts.h"
static inline struct drm_i915_private *node_to_i915(struct drm_info_node *node)
{
@@ -4567,6 +4568,64 @@ static const struct file_operations i915_fifo_underrun_reset_ops = {
.llseek = default_llseek,
};
+static ssize_t
+i915_intel_ipts_cleanup_write(struct file *filp,
+ const char __user *ubuf,
+ size_t cnt, loff_t *ppos)
+{
+ struct drm_i915_private *dev_priv = filp->private_data;
+ struct drm_device *dev = &dev_priv->drm;
+ int ret;
+ bool flag;
+
+ ret = kstrtobool_from_user(ubuf, cnt, &flag);
+ if (ret)
+ return ret;
+
+ if (!flag)
+ return cnt;
+
+ intel_ipts_cleanup(dev);
+
+ return cnt;
+}
+
+static const struct file_operations i915_intel_ipts_cleanup_ops = {
+ .owner = THIS_MODULE,
+ .open = simple_open,
+ .write = i915_intel_ipts_cleanup_write,
+ .llseek = default_llseek,
+};
+
+static ssize_t
+i915_intel_ipts_init_write(struct file *filp,
+ const char __user *ubuf,
+ size_t cnt, loff_t *ppos)
+{
+ struct drm_i915_private *dev_priv = filp->private_data;
+ struct drm_device *dev = &dev_priv->drm;
+ int ret;
+ bool flag;
+
+ ret = kstrtobool_from_user(ubuf, cnt, &flag);
+ if (ret)
+ return ret;
+
+ if (!flag)
+ return cnt;
+
+ intel_ipts_init(dev);
+
+ return cnt;
+}
+
+static const struct file_operations i915_intel_ipts_init_ops = {
+ .owner = THIS_MODULE,
+ .open = simple_open,
+ .write = i915_intel_ipts_init_write,
+ .llseek = default_llseek,
+};
+
static const struct drm_info_list i915_debugfs_list[] = {
{"i915_capabilities", i915_capabilities, 0},
{"i915_gem_objects", i915_gem_object_info, 0},
@@ -4642,7 +4701,9 @@ static const struct i915_debugfs_files {
{"i915_hpd_short_storm_ctl", &i915_hpd_short_storm_ctl_fops},
{"i915_ipc_status", &i915_ipc_status_fops},
{"i915_drrs_ctl", &i915_drrs_ctl_fops},
- {"i915_edp_psr_debug", &i915_edp_psr_debug_fops}
+ {"i915_edp_psr_debug", &i915_edp_psr_debug_fops},
+ {"i915_intel_ipts_cleanup", &i915_intel_ipts_cleanup_ops},
+ {"i915_intel_ipts_init", &i915_intel_ipts_init_ops},
};
int i915_debugfs_register(struct drm_i915_private *dev_priv)
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index 1ad88e6d7c04..b50823fd30fb 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
@ -1456,10 +1545,10 @@ index 000000000000..87d4bc4133c4
+#endif /* _IPTS_BINARY_SPEC_H */
diff --git a/drivers/misc/ipts/ipts-dbgfs.c b/drivers/misc/ipts/ipts-dbgfs.c
new file mode 100644
index 000000000000..1c5c92f7d4ba
index 000000000000..7581b21f81e0
--- /dev/null
+++ b/drivers/misc/ipts/ipts-dbgfs.c
@@ -0,0 +1,152 @@
@@ -0,0 +1,364 @@
+/*
+ * Intel Precise Touch & Stylus device driver
+ * Copyright (c) 2016, Intel Corporation.
@ -1482,9 +1571,13 @@ index 000000000000..1c5c92f7d4ba
+#include "ipts-sensor-regs.h"
+#include "ipts-msg-handler.h"
+#include "ipts-state.h"
+#include "../mei/mei_dev.h"
+
+const char sensor_mode_fmt[] = "sensor mode : %01d\n";
+const char ipts_status_fmt[] = "sensor mode : %01d\nipts state : %01d\n";
+const char ipts_debug_fmt[] = ">> tdt : fw status : %s\n"
+ ">> == DB s:%x, c:%x ==\n"
+ ">> == WQ h:%u, t:%u ==\n";
+
+static ssize_t ipts_dbgfs_mode_read(struct file *fp, char __user *ubuf,
+ size_t cnt, loff_t *ppos)
@ -1574,6 +1667,172 @@ index 000000000000..1c5c92f7d4ba
+ .llseek = generic_file_llseek,
+};
+
+static ssize_t ipts_dbgfs_quiesce_io_cmd_write(struct file *fp, const char __user *ubuf,
+ size_t cnt, loff_t *ppos)
+{
+ ipts_info_t *ipts = fp->private_data;
+ bool result;
+ int rc;
+
+ rc = kstrtobool_from_user(ubuf, cnt, &result);
+ if (rc)
+ return rc;
+
+ if (!result)
+ return -EINVAL;
+
+ ipts_send_sensor_quiesce_io_cmd(ipts);
+
+ return cnt;
+}
+
+static const struct file_operations ipts_quiesce_io_cmd_dbgfs_fops = {
+ .open = simple_open,
+ .write = ipts_dbgfs_quiesce_io_cmd_write,
+ .llseek = generic_file_llseek,
+};
+
+static ssize_t ipts_dbgfs_clear_mem_window_cmd_write(struct file *fp, const char __user *ubuf,
+ size_t cnt, loff_t *ppos)
+{
+ ipts_info_t *ipts = fp->private_data;
+ bool result;
+ int rc;
+
+ rc = kstrtobool_from_user(ubuf, cnt, &result);
+ if (rc)
+ return rc;
+
+ if (!result)
+ return -EINVAL;
+
+ ipts_send_sensor_clear_mem_window_cmd(ipts);
+
+ return cnt;
+}
+
+static const struct file_operations ipts_clear_mem_window_cmd_dbgfs_fops = {
+ .open = simple_open,
+ .write = ipts_dbgfs_clear_mem_window_cmd_write,
+ .llseek = generic_file_llseek,
+};
+
+static ssize_t ipts_dbgfs_debug_read(struct file *fp, char __user *ubuf,
+ size_t cnt, loff_t *ppos)
+{
+ ipts_info_t *ipts = fp->private_data;
+ char dbg_info[1024];
+ int len = 0;
+
+ char fw_sts_str[MEI_FW_STATUS_STR_SZ];
+ u32 *db, *head, *tail;
+ intel_ipts_wq_info_t* wq_info;
+
+ wq_info = &ipts->resource.wq_info;
+
+ mei_fw_status_str(ipts->cldev->bus, fw_sts_str, MEI_FW_STATUS_STR_SZ);
+ // pr_info(">> tdt : fw status : %s\n", fw_sts_str);
+
+ db = (u32*)wq_info->db_addr;
+ head = (u32*)wq_info->wq_head_addr;
+ tail = (u32*)wq_info->wq_tail_addr;
+ // pr_info(">> == DB s:%x, c:%x ==\n", *db, *(db+1));
+ // pr_info(">> == WQ h:%u, t:%u ==\n", *head, *tail);
+
+ if (cnt < sizeof(ipts_debug_fmt) - 3)
+ return -EINVAL;
+
+ len = scnprintf(dbg_info, 1024, ipts_debug_fmt,
+ fw_sts_str,
+ *db, *(db+1),
+ *head, *tail);
+ if (len < 0)
+ return -EIO;
+
+ return simple_read_from_buffer(ubuf, cnt, ppos, dbg_info, len);
+}
+
+static const struct file_operations ipts_debug_dbgfs_fops = {
+ .open = simple_open,
+ .read = ipts_dbgfs_debug_read,
+ .llseek = generic_file_llseek,
+};
+
+static ssize_t ipts_dbgfs_ipts_restart_write(struct file *fp, const char __user *ubuf,
+ size_t cnt, loff_t *ppos)
+{
+ ipts_info_t *ipts = fp->private_data;
+ bool result;
+ int rc;
+
+ rc = kstrtobool_from_user(ubuf, cnt, &result);
+ if (rc)
+ return rc;
+
+ if (!result)
+ return -EINVAL;
+
+ ipts_restart(ipts);
+
+ return cnt;
+}
+
+static const struct file_operations ipts_ipts_restart_dbgfs_fops = {
+ .open = simple_open,
+ .write = ipts_dbgfs_ipts_restart_write,
+ .llseek = generic_file_llseek,
+};
+
+static ssize_t ipts_dbgfs_ipts_stop_write(struct file *fp, const char __user *ubuf,
+ size_t cnt, loff_t *ppos)
+{
+ ipts_info_t *ipts = fp->private_data;
+ bool result;
+ int rc;
+
+ rc = kstrtobool_from_user(ubuf, cnt, &result);
+ if (rc)
+ return rc;
+
+ if (!result)
+ return -EINVAL;
+
+ ipts_stop(ipts);
+
+ return cnt;
+}
+
+static const struct file_operations ipts_ipts_stop_dbgfs_fops = {
+ .open = simple_open,
+ .write = ipts_dbgfs_ipts_stop_write,
+ .llseek = generic_file_llseek,
+};
+
+static ssize_t ipts_dbgfs_ipts_start_write(struct file *fp, const char __user *ubuf,
+ size_t cnt, loff_t *ppos)
+{
+ ipts_info_t *ipts = fp->private_data;
+ bool result;
+ int rc;
+
+ rc = kstrtobool_from_user(ubuf, cnt, &result);
+ if (rc)
+ return rc;
+
+ if (!result)
+ return -EINVAL;
+
+ ipts_start(ipts);
+
+ return cnt;
+}
+
+static const struct file_operations ipts_ipts_start_dbgfs_fops = {
+ .open = simple_open,
+ .write = ipts_dbgfs_ipts_start_write,
+ .llseek = generic_file_llseek,
+};
+
+void ipts_dbgfs_deregister(ipts_info_t* ipts)
+{
+ if (!ipts->dbgfs_dir)
@ -1605,6 +1864,48 @@ index 000000000000..1c5c92f7d4ba
+ goto err;
+ }
+
+ f = debugfs_create_file("quiesce_io_cmd", S_IWUSR, dir,
+ ipts, &ipts_quiesce_io_cmd_dbgfs_fops);
+ if (!f) {
+ ipts_err(ipts, "debugfs quiesce_io_cmd creation failed\n");
+ goto err;
+ }
+
+ f = debugfs_create_file("clear_mem_window_cmd", S_IWUSR, dir,
+ ipts, &ipts_clear_mem_window_cmd_dbgfs_fops);
+ if (!f) {
+ ipts_err(ipts, "debugfs clear_mem_window_cmd creation failed\n");
+ goto err;
+ }
+
+ f = debugfs_create_file("debug", S_IRUSR, dir,
+ ipts, &ipts_debug_dbgfs_fops);
+ if (!f) {
+ ipts_err(ipts, "debugfs debug creation failed\n");
+ goto err;
+ }
+
+ f = debugfs_create_file("ipts_restart", S_IWUSR, dir,
+ ipts, &ipts_ipts_restart_dbgfs_fops);
+ if (!f) {
+ ipts_err(ipts, "debugfs ipts_restart creation failed\n");
+ goto err;
+ }
+
+ f = debugfs_create_file("ipts_stop", S_IWUSR, dir,
+ ipts, &ipts_ipts_stop_dbgfs_fops);
+ if (!f) {
+ ipts_err(ipts, "debugfs ipts_stop creation failed\n");
+ goto err;
+ }
+
+ f = debugfs_create_file("ipts_start", S_IWUSR, dir,
+ ipts, &ipts_ipts_start_dbgfs_fops);
+ if (!f) {
+ ipts_err(ipts, "debugfs ipts_start creation failed\n");
+ goto err;
+ }
+
+ ipts->dbgfs_dir = dir;
+
+ return 0;
@ -4744,10 +5045,10 @@ index 000000000000..db5356a1c84e
+}
diff --git a/drivers/misc/ipts/ipts-msg-handler.h b/drivers/misc/ipts/ipts-msg-handler.h
new file mode 100644
index 000000000000..15038814dfec
index 000000000000..f37d9ad9af8c
--- /dev/null
+++ b/drivers/misc/ipts/ipts-msg-handler.h
@@ -0,0 +1,32 @@
@@ -0,0 +1,33 @@
+/*
+ *
+ * Intel Precise Touch & Stylus ME message handler
@ -4778,6 +5079,7 @@ index 000000000000..15038814dfec
+int ipts_send_sensor_quiesce_io_cmd(ipts_info_t *ipts);
+int ipts_send_sensor_hid_ready_for_data_cmd(ipts_info_t *ipts);
+int ipts_send_sensor_clear_mem_window_cmd(ipts_info_t *ipts);
+int ipts_restart(ipts_info_t *ipts);
+
+#endif /* _IPTS_MSG_HANDLER_H */
diff --git a/drivers/misc/ipts/ipts-resource.c b/drivers/misc/ipts/ipts-resource.c

View file

@ -1,4 +1,4 @@
From eb09d34d712ce43d1e49a7688fbd546b765a51e3 Mon Sep 17 00:00:00 2001
From fa2a845d01e823ffadd8d6061f0ddcb0a8de09b1 Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Fri, 26 Jul 2019 04:45:42 +0200
Subject: [PATCH 06/12] hid

View file

@ -1,4 +1,4 @@
From cb930c106c5fc77a82b5618a90505969cad891d0 Mon Sep 17 00:00:00 2001
From a9f00cceed704f4a4aa76f40ef4673b816080fa3 Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Fri, 26 Jul 2019 04:45:55 +0200
Subject: [PATCH 07/12] sdcard-reader

View file

@ -1,4 +1,4 @@
From 4ed9479cb2f70e1f70d0fad46f5e9520bcf5d343 Mon Sep 17 00:00:00 2001
From e9907ea84cfb7bf1f9a817f3587fef598f18c4f1 Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Fri, 26 Jul 2019 04:46:16 +0200
Subject: [PATCH 08/12] wifi

View file

@ -1,4 +1,4 @@
From b86a410281265c14152d3389974b47948b4a2b3e Mon Sep 17 00:00:00 2001
From 6a801441718660cc54b95de8dee4cf74c5e90c8c Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Fri, 26 Jul 2019 04:46:48 +0200
Subject: [PATCH 09/12] surface3-power

View file

@ -1,4 +1,4 @@
From 2230abf98a6f22cc91e50f33c619c18a8e0acacb Mon Sep 17 00:00:00 2001
From 16181905a434e631631ec7a404036a6dd8103c30 Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Fri, 26 Jul 2019 04:47:02 +0200
Subject: [PATCH 10/12] mwlwifi

View file

@ -1,4 +1,4 @@
From d5f08272b93c572c64ae545bfb7d690a0221f882 Mon Sep 17 00:00:00 2001
From 1efb611bb6afb999ed05fb48406772a7b1d0ce29 Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Fri, 26 Jul 2019 04:47:13 +0200
Subject: [PATCH 11/12] surface-lte

View file

@ -1,4 +1,4 @@
From 4ddea969d6d0ecb6d55e95159cdd7d302c0fc2bd Mon Sep 17 00:00:00 2001
From 52ba324703a43f17f8f1bde749daa3d29a654b9d Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Fri, 26 Jul 2019 04:47:27 +0200
Subject: [PATCH 12/12] surfacebook2-dgpu