drm/i915/dp: move DP test debugfs files next to the functionality
authorJani Nikula <jani.nikula@intel.com>
Fri, 20 Sep 2024 11:56:47 +0000 (14:56 +0300)
committerJani Nikula <jani.nikula@intel.com>
Mon, 23 Sep 2024 06:54:16 +0000 (09:54 +0300)
Move the DP test debugfs files to intel_dp_test.[ch].

Side note: The debugfs looks like it begs to be converted to connector
debugfs, but that's for another day.

Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/46779bc4e420868e21bd5e72fdf245a541252fde.1726833193.git.jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
drivers/gpu/drm/i915/display/intel_display_debugfs.c
drivers/gpu/drm/i915/display/intel_dp_test.c
drivers/gpu/drm/i915/display/intel_dp_test.h

index a3f9514..484be08 100644 (file)
@@ -27,6 +27,7 @@
 #include "intel_dp.h"
 #include "intel_dp_link_training.h"
 #include "intel_dp_mst.h"
+#include "intel_dp_test.h"
 #include "intel_drrs.h"
 #include "intel_fb.h"
 #include "intel_fbc.h"
@@ -792,198 +793,6 @@ static int i915_dp_mst_info(struct seq_file *m, void *unused)
        return 0;
 }
 
-static ssize_t i915_displayport_test_active_write(struct file *file,
-                                                 const char __user *ubuf,
-                                                 size_t len, loff_t *offp)
-{
-       char *input_buffer;
-       int status = 0;
-       struct drm_device *dev;
-       struct drm_connector *connector;
-       struct drm_connector_list_iter conn_iter;
-       struct intel_dp *intel_dp;
-       int val = 0;
-
-       dev = ((struct seq_file *)file->private_data)->private;
-
-       if (len == 0)
-               return 0;
-
-       input_buffer = memdup_user_nul(ubuf, len);
-       if (IS_ERR(input_buffer))
-               return PTR_ERR(input_buffer);
-
-       drm_dbg(dev, "Copied %d bytes from user\n", (unsigned int)len);
-
-       drm_connector_list_iter_begin(dev, &conn_iter);
-       drm_for_each_connector_iter(connector, &conn_iter) {
-               struct intel_encoder *encoder;
-
-               if (connector->connector_type !=
-                   DRM_MODE_CONNECTOR_DisplayPort)
-                       continue;
-
-               encoder = to_intel_encoder(connector->encoder);
-               if (encoder && encoder->type == INTEL_OUTPUT_DP_MST)
-                       continue;
-
-               if (encoder && connector->status == connector_status_connected) {
-                       intel_dp = enc_to_intel_dp(encoder);
-                       status = kstrtoint(input_buffer, 10, &val);
-                       if (status < 0)
-                               break;
-                       drm_dbg(dev, "Got %d for test active\n", val);
-                       /* To prevent erroneous activation of the compliance
-                        * testing code, only accept an actual value of 1 here
-                        */
-                       if (val == 1)
-                               intel_dp->compliance.test_active = true;
-                       else
-                               intel_dp->compliance.test_active = false;
-               }
-       }
-       drm_connector_list_iter_end(&conn_iter);
-       kfree(input_buffer);
-       if (status < 0)
-               return status;
-
-       *offp += len;
-       return len;
-}
-
-static int i915_displayport_test_active_show(struct seq_file *m, void *data)
-{
-       struct drm_i915_private *dev_priv = m->private;
-       struct drm_connector *connector;
-       struct drm_connector_list_iter conn_iter;
-       struct intel_dp *intel_dp;
-
-       drm_connector_list_iter_begin(&dev_priv->drm, &conn_iter);
-       drm_for_each_connector_iter(connector, &conn_iter) {
-               struct intel_encoder *encoder;
-
-               if (connector->connector_type !=
-                   DRM_MODE_CONNECTOR_DisplayPort)
-                       continue;
-
-               encoder = to_intel_encoder(connector->encoder);
-               if (encoder && encoder->type == INTEL_OUTPUT_DP_MST)
-                       continue;
-
-               if (encoder && connector->status == connector_status_connected) {
-                       intel_dp = enc_to_intel_dp(encoder);
-                       if (intel_dp->compliance.test_active)
-                               seq_puts(m, "1");
-                       else
-                               seq_puts(m, "0");
-               } else
-                       seq_puts(m, "0");
-       }
-       drm_connector_list_iter_end(&conn_iter);
-
-       return 0;
-}
-
-static int i915_displayport_test_active_open(struct inode *inode,
-                                            struct file *file)
-{
-       return single_open(file, i915_displayport_test_active_show,
-                          inode->i_private);
-}
-
-static const struct file_operations i915_displayport_test_active_fops = {
-       .owner = THIS_MODULE,
-       .open = i915_displayport_test_active_open,
-       .read = seq_read,
-       .llseek = seq_lseek,
-       .release = single_release,
-       .write = i915_displayport_test_active_write
-};
-
-static int i915_displayport_test_data_show(struct seq_file *m, void *data)
-{
-       struct drm_i915_private *dev_priv = m->private;
-       struct drm_connector *connector;
-       struct drm_connector_list_iter conn_iter;
-       struct intel_dp *intel_dp;
-
-       drm_connector_list_iter_begin(&dev_priv->drm, &conn_iter);
-       drm_for_each_connector_iter(connector, &conn_iter) {
-               struct intel_encoder *encoder;
-
-               if (connector->connector_type !=
-                   DRM_MODE_CONNECTOR_DisplayPort)
-                       continue;
-
-               encoder = to_intel_encoder(connector->encoder);
-               if (encoder && encoder->type == INTEL_OUTPUT_DP_MST)
-                       continue;
-
-               if (encoder && connector->status == connector_status_connected) {
-                       intel_dp = enc_to_intel_dp(encoder);
-                       if (intel_dp->compliance.test_type ==
-                           DP_TEST_LINK_EDID_READ)
-                               seq_printf(m, "%lx",
-                                          intel_dp->compliance.test_data.edid);
-                       else if (intel_dp->compliance.test_type ==
-                                DP_TEST_LINK_VIDEO_PATTERN) {
-                               seq_printf(m, "hdisplay: %d\n",
-                                          intel_dp->compliance.test_data.hdisplay);
-                               seq_printf(m, "vdisplay: %d\n",
-                                          intel_dp->compliance.test_data.vdisplay);
-                               seq_printf(m, "bpc: %u\n",
-                                          intel_dp->compliance.test_data.bpc);
-                       } else if (intel_dp->compliance.test_type ==
-                                  DP_TEST_LINK_PHY_TEST_PATTERN) {
-                               seq_printf(m, "pattern: %d\n",
-                                          intel_dp->compliance.test_data.phytest.phy_pattern);
-                               seq_printf(m, "Number of lanes: %d\n",
-                                          intel_dp->compliance.test_data.phytest.num_lanes);
-                               seq_printf(m, "Link Rate: %d\n",
-                                          intel_dp->compliance.test_data.phytest.link_rate);
-                               seq_printf(m, "level: %02x\n",
-                                          intel_dp->train_set[0]);
-                       }
-               } else
-                       seq_puts(m, "0");
-       }
-       drm_connector_list_iter_end(&conn_iter);
-
-       return 0;
-}
-DEFINE_SHOW_ATTRIBUTE(i915_displayport_test_data);
-
-static int i915_displayport_test_type_show(struct seq_file *m, void *data)
-{
-       struct drm_i915_private *dev_priv = m->private;
-       struct drm_connector *connector;
-       struct drm_connector_list_iter conn_iter;
-       struct intel_dp *intel_dp;
-
-       drm_connector_list_iter_begin(&dev_priv->drm, &conn_iter);
-       drm_for_each_connector_iter(connector, &conn_iter) {
-               struct intel_encoder *encoder;
-
-               if (connector->connector_type !=
-                   DRM_MODE_CONNECTOR_DisplayPort)
-                       continue;
-
-               encoder = to_intel_encoder(connector->encoder);
-               if (encoder && encoder->type == INTEL_OUTPUT_DP_MST)
-                       continue;
-
-               if (encoder && connector->status == connector_status_connected) {
-                       intel_dp = enc_to_intel_dp(encoder);
-                       seq_printf(m, "%02lx\n", intel_dp->compliance.test_type);
-               } else
-                       seq_puts(m, "0");
-       }
-       drm_connector_list_iter_end(&conn_iter);
-
-       return 0;
-}
-DEFINE_SHOW_ATTRIBUTE(i915_displayport_test_type);
-
 static ssize_t
 i915_fifo_underrun_reset_write(struct file *filp,
                               const char __user *ubuf,
@@ -1062,9 +871,6 @@ static const struct {
        const struct file_operations *fops;
 } intel_display_debugfs_files[] = {
        {"i915_fifo_underrun_reset", &i915_fifo_underrun_reset_ops},
-       {"i915_dp_test_data", &i915_displayport_test_data_fops},
-       {"i915_dp_test_type", &i915_displayport_test_type_fops},
-       {"i915_dp_test_active", &i915_displayport_test_active_fops},
 };
 
 void intel_display_debugfs_register(struct drm_i915_private *i915)
@@ -1088,6 +894,7 @@ void intel_display_debugfs_register(struct drm_i915_private *i915)
        intel_bios_debugfs_register(display);
        intel_cdclk_debugfs_register(display);
        intel_dmc_debugfs_register(display);
+       intel_dp_test_debugfs_register(display);
        intel_fbc_debugfs_register(display);
        intel_hpd_debugfs_register(i915);
        intel_opregion_debugfs_register(display);
index 4608aa3..7a9b0ad 100644 (file)
@@ -1,6 +1,8 @@
 // SPDX-License-Identifier: MIT
 /* Copyright © 2024 Intel Corporation */
 
+#include <linux/debugfs.h>
+
 #include <drm/display/drm_dp.h>
 #include <drm/display/drm_dp_helper.h>
 #include <drm/drm_edid.h>
@@ -507,3 +509,218 @@ bool intel_dp_test_phy(struct intel_dp *intel_dp)
 
        return true;
 }
+
+static ssize_t i915_displayport_test_active_write(struct file *file,
+                                                 const char __user *ubuf,
+                                                 size_t len, loff_t *offp)
+{
+       char *input_buffer;
+       int status = 0;
+       struct drm_device *dev;
+       struct drm_connector *connector;
+       struct drm_connector_list_iter conn_iter;
+       struct intel_dp *intel_dp;
+       int val = 0;
+
+       dev = ((struct seq_file *)file->private_data)->private;
+
+       if (len == 0)
+               return 0;
+
+       input_buffer = memdup_user_nul(ubuf, len);
+       if (IS_ERR(input_buffer))
+               return PTR_ERR(input_buffer);
+
+       drm_dbg(dev, "Copied %d bytes from user\n", (unsigned int)len);
+
+       drm_connector_list_iter_begin(dev, &conn_iter);
+       drm_for_each_connector_iter(connector, &conn_iter) {
+               struct intel_encoder *encoder;
+
+               if (connector->connector_type !=
+                   DRM_MODE_CONNECTOR_DisplayPort)
+                       continue;
+
+               encoder = to_intel_encoder(connector->encoder);
+               if (encoder && encoder->type == INTEL_OUTPUT_DP_MST)
+                       continue;
+
+               if (encoder && connector->status == connector_status_connected) {
+                       intel_dp = enc_to_intel_dp(encoder);
+                       status = kstrtoint(input_buffer, 10, &val);
+                       if (status < 0)
+                               break;
+                       drm_dbg(dev, "Got %d for test active\n", val);
+                       /* To prevent erroneous activation of the compliance
+                        * testing code, only accept an actual value of 1 here
+                        */
+                       if (val == 1)
+                               intel_dp->compliance.test_active = true;
+                       else
+                               intel_dp->compliance.test_active = false;
+               }
+       }
+       drm_connector_list_iter_end(&conn_iter);
+       kfree(input_buffer);
+       if (status < 0)
+               return status;
+
+       *offp += len;
+       return len;
+}
+
+static int i915_displayport_test_active_show(struct seq_file *m, void *data)
+{
+       struct drm_i915_private *dev_priv = m->private;
+       struct drm_connector *connector;
+       struct drm_connector_list_iter conn_iter;
+       struct intel_dp *intel_dp;
+
+       drm_connector_list_iter_begin(&dev_priv->drm, &conn_iter);
+       drm_for_each_connector_iter(connector, &conn_iter) {
+               struct intel_encoder *encoder;
+
+               if (connector->connector_type !=
+                   DRM_MODE_CONNECTOR_DisplayPort)
+                       continue;
+
+               encoder = to_intel_encoder(connector->encoder);
+               if (encoder && encoder->type == INTEL_OUTPUT_DP_MST)
+                       continue;
+
+               if (encoder && connector->status == connector_status_connected) {
+                       intel_dp = enc_to_intel_dp(encoder);
+                       if (intel_dp->compliance.test_active)
+                               seq_puts(m, "1");
+                       else
+                               seq_puts(m, "0");
+               } else
+                       seq_puts(m, "0");
+       }
+       drm_connector_list_iter_end(&conn_iter);
+
+       return 0;
+}
+
+static int i915_displayport_test_active_open(struct inode *inode,
+                                            struct file *file)
+{
+       return single_open(file, i915_displayport_test_active_show,
+                          inode->i_private);
+}
+
+static const struct file_operations i915_displayport_test_active_fops = {
+       .owner = THIS_MODULE,
+       .open = i915_displayport_test_active_open,
+       .read = seq_read,
+       .llseek = seq_lseek,
+       .release = single_release,
+       .write = i915_displayport_test_active_write
+};
+
+static int i915_displayport_test_data_show(struct seq_file *m, void *data)
+{
+       struct drm_i915_private *dev_priv = m->private;
+       struct drm_connector *connector;
+       struct drm_connector_list_iter conn_iter;
+       struct intel_dp *intel_dp;
+
+       drm_connector_list_iter_begin(&dev_priv->drm, &conn_iter);
+       drm_for_each_connector_iter(connector, &conn_iter) {
+               struct intel_encoder *encoder;
+
+               if (connector->connector_type !=
+                   DRM_MODE_CONNECTOR_DisplayPort)
+                       continue;
+
+               encoder = to_intel_encoder(connector->encoder);
+               if (encoder && encoder->type == INTEL_OUTPUT_DP_MST)
+                       continue;
+
+               if (encoder && connector->status == connector_status_connected) {
+                       intel_dp = enc_to_intel_dp(encoder);
+                       if (intel_dp->compliance.test_type ==
+                           DP_TEST_LINK_EDID_READ)
+                               seq_printf(m, "%lx",
+                                          intel_dp->compliance.test_data.edid);
+                       else if (intel_dp->compliance.test_type ==
+                                DP_TEST_LINK_VIDEO_PATTERN) {
+                               seq_printf(m, "hdisplay: %d\n",
+                                          intel_dp->compliance.test_data.hdisplay);
+                               seq_printf(m, "vdisplay: %d\n",
+                                          intel_dp->compliance.test_data.vdisplay);
+                               seq_printf(m, "bpc: %u\n",
+                                          intel_dp->compliance.test_data.bpc);
+                       } else if (intel_dp->compliance.test_type ==
+                                  DP_TEST_LINK_PHY_TEST_PATTERN) {
+                               seq_printf(m, "pattern: %d\n",
+                                          intel_dp->compliance.test_data.phytest.phy_pattern);
+                               seq_printf(m, "Number of lanes: %d\n",
+                                          intel_dp->compliance.test_data.phytest.num_lanes);
+                               seq_printf(m, "Link Rate: %d\n",
+                                          intel_dp->compliance.test_data.phytest.link_rate);
+                               seq_printf(m, "level: %02x\n",
+                                          intel_dp->train_set[0]);
+                       }
+               } else
+                       seq_puts(m, "0");
+       }
+       drm_connector_list_iter_end(&conn_iter);
+
+       return 0;
+}
+DEFINE_SHOW_ATTRIBUTE(i915_displayport_test_data);
+
+static int i915_displayport_test_type_show(struct seq_file *m, void *data)
+{
+       struct drm_i915_private *dev_priv = m->private;
+       struct drm_connector *connector;
+       struct drm_connector_list_iter conn_iter;
+       struct intel_dp *intel_dp;
+
+       drm_connector_list_iter_begin(&dev_priv->drm, &conn_iter);
+       drm_for_each_connector_iter(connector, &conn_iter) {
+               struct intel_encoder *encoder;
+
+               if (connector->connector_type !=
+                   DRM_MODE_CONNECTOR_DisplayPort)
+                       continue;
+
+               encoder = to_intel_encoder(connector->encoder);
+               if (encoder && encoder->type == INTEL_OUTPUT_DP_MST)
+                       continue;
+
+               if (encoder && connector->status == connector_status_connected) {
+                       intel_dp = enc_to_intel_dp(encoder);
+                       seq_printf(m, "%02lx\n", intel_dp->compliance.test_type);
+               } else
+                       seq_puts(m, "0");
+       }
+       drm_connector_list_iter_end(&conn_iter);
+
+       return 0;
+}
+DEFINE_SHOW_ATTRIBUTE(i915_displayport_test_type);
+
+static const struct {
+       const char *name;
+       const struct file_operations *fops;
+} intel_display_debugfs_files[] = {
+       {"i915_dp_test_data", &i915_displayport_test_data_fops},
+       {"i915_dp_test_type", &i915_displayport_test_type_fops},
+       {"i915_dp_test_active", &i915_displayport_test_active_fops},
+};
+
+void intel_dp_test_debugfs_register(struct intel_display *display)
+{
+       struct drm_minor *minor = display->drm->primary;
+       int i;
+
+       for (i = 0; i < ARRAY_SIZE(intel_display_debugfs_files); i++) {
+               debugfs_create_file(intel_display_debugfs_files[i].name,
+                                   0644,
+                                   minor->debugfs_root,
+                                   to_i915(minor->dev),
+                                   intel_display_debugfs_files[i].fops);
+       }
+}
index cfd3dcc..d64158b 100644 (file)
@@ -7,6 +7,7 @@
 #include <linux/types.h>
 
 struct intel_crtc_state;
+struct intel_display;
 struct intel_dp;
 struct link_config_limits;
 
@@ -15,5 +16,6 @@ void intel_dp_test_compute_config(struct intel_dp *intel_dp,
                                  struct intel_crtc_state *pipe_config,
                                  struct link_config_limits *limits);
 bool intel_dp_test_phy(struct intel_dp *intel_dp);
+void intel_dp_test_debugfs_register(struct intel_display *display);
 
 #endif /* __INTEL_DP_TEST_H__ */