[Intel-gfx] [PATCH] drm/i915: Use atomic state in debugfs.
Maarten Lankhorst
maarten.lankhorst at linux.intel.com
Thu Mar 24 14:03:52 UTC 2016
Use proper locking, connector_state and encoder masks.
Signed-off-by: Maarten Lankhorst <maarten.lankhorst at linux.intel.com>
---
drivers/gpu/drm/i915/i915_debugfs.c | 72 ++++++++++++++++++-------------------
1 file changed, 34 insertions(+), 38 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index 9b740d8a3f5e..37b06ea9b112 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -2655,13 +2655,11 @@ static int i915_sink_crc(struct seq_file *m, void *data)
drm_modeset_lock_all(dev);
for_each_intel_connector(dev, connector) {
- if (connector->base.dpms != DRM_MODE_DPMS_ON)
+ if (!connector->base.state->crtc ||
+ !connector->base.state->crtc->state->active)
continue;
- if (!connector->base.encoder)
- continue;
-
- encoder = to_intel_encoder(connector->base.encoder);
+ encoder = to_intel_encoder(connector->base.state->best_encoder);
if (encoder->type != INTEL_OUTPUT_EDP)
continue;
@@ -2837,14 +2835,17 @@ static void intel_encoder_info(struct seq_file *m,
struct drm_info_node *node = m->private;
struct drm_device *dev = node->minor->dev;
struct drm_crtc *crtc = &intel_crtc->base;
- struct intel_connector *intel_connector;
+ struct drm_connector *connector;
struct drm_encoder *encoder;
encoder = &intel_encoder->base;
seq_printf(m, "\tencoder %d: type: %s, connectors:\n",
encoder->base.id, encoder->name);
- for_each_connector_on_encoder(dev, encoder, intel_connector) {
- struct drm_connector *connector = &intel_connector->base;
+
+ drm_for_each_connector(connector, dev) {
+ if (connector->state->best_encoder != &intel_encoder->base)
+ continue;
+
seq_printf(m, "\t\tconnector %d: type: %s, status: %s",
connector->base.id,
connector->name,
@@ -3695,30 +3696,24 @@ static int i8xx_pipe_crc_ctl_reg(enum intel_pipe_crc_source *source,
static int i9xx_pipe_crc_auto_source(struct drm_device *dev, enum pipe pipe,
enum intel_pipe_crc_source *source)
{
- struct intel_encoder *encoder;
- struct intel_crtc *crtc;
+ struct drm_encoder *encoder;
+ struct drm_crtc *crtc;
struct intel_digital_port *dig_port;
int ret = 0;
*source = INTEL_PIPE_CRC_SOURCE_PIPE;
drm_modeset_lock_all(dev);
- for_each_intel_encoder(dev, encoder) {
- if (!encoder->base.crtc)
- continue;
+ crtc = to_i915(dev)->pipe_to_crtc_mapping[pipe];
- crtc = to_intel_crtc(encoder->base.crtc);
-
- if (crtc->pipe != pipe)
- continue;
-
- switch (encoder->type) {
+ drm_for_each_encoder_mask(encoder, dev, crtc->state->encoder_mask) {
+ switch (to_intel_encoder(encoder)->type) {
case INTEL_OUTPUT_TVOUT:
*source = INTEL_PIPE_CRC_SOURCE_TV;
break;
case INTEL_OUTPUT_DISPLAYPORT:
case INTEL_OUTPUT_EDP:
- dig_port = enc_to_dig_port(&encoder->base);
+ dig_port = enc_to_dig_port(encoder);
switch (dig_port->port) {
case PORT_B:
*source = INTEL_PIPE_CRC_SOURCE_DP_B;
@@ -4322,14 +4317,11 @@ static ssize_t i915_displayport_test_active_write(struct file *file,
int status = 0;
struct drm_device *dev;
struct drm_connector *connector;
- struct list_head *connector_list;
struct intel_dp *intel_dp;
int val = 0;
dev = ((struct seq_file *)file->private_data)->private;
- connector_list = &dev->mode_config.connector_list;
-
if (len == 0)
return 0;
@@ -4337,6 +4329,8 @@ static ssize_t i915_displayport_test_active_write(struct file *file,
if (!input_buffer)
return -ENOMEM;
+ drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
+
if (copy_from_user(input_buffer, ubuf, len)) {
status = -EFAULT;
goto out;
@@ -4345,15 +4339,14 @@ static ssize_t i915_displayport_test_active_write(struct file *file,
input_buffer[len] = '\0';
DRM_DEBUG_DRIVER("Copied %d bytes from user\n", (unsigned int)len);
- list_for_each_entry(connector, connector_list, head) {
-
+ drm_for_each_connector(connector, dev) {
if (connector->connector_type !=
DRM_MODE_CONNECTOR_DisplayPort)
continue;
if (connector->status == connector_status_connected &&
- connector->encoder != NULL) {
- intel_dp = enc_to_intel_dp(connector->encoder);
+ connector->state->best_encoder != NULL) {
+ intel_dp = enc_to_intel_dp(connector->state->best_encoder);
status = kstrtoint(input_buffer, 10, &val);
if (status < 0)
goto out;
@@ -4368,6 +4361,7 @@ static ssize_t i915_displayport_test_active_write(struct file *file,
}
}
out:
+ drm_modeset_unlock(&dev->mode_config.connection_mutex);
kfree(input_buffer);
if (status < 0)
return status;
@@ -4380,18 +4374,18 @@ static int i915_displayport_test_active_show(struct seq_file *m, void *data)
{
struct drm_device *dev = m->private;
struct drm_connector *connector;
- struct list_head *connector_list = &dev->mode_config.connector_list;
struct intel_dp *intel_dp;
- list_for_each_entry(connector, connector_list, head) {
+ drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
+ drm_for_each_connector(connector, dev) {
if (connector->connector_type !=
DRM_MODE_CONNECTOR_DisplayPort)
continue;
if (connector->status == connector_status_connected &&
- connector->encoder != NULL) {
- intel_dp = enc_to_intel_dp(connector->encoder);
+ connector->state->best_encoder != NULL) {
+ intel_dp = enc_to_intel_dp(connector->state->best_encoder);
if (intel_dp->compliance_test_active)
seq_puts(m, "1");
else
@@ -4399,6 +4393,7 @@ static int i915_displayport_test_active_show(struct seq_file *m, void *data)
} else
seq_puts(m, "0");
}
+ drm_modeset_unlock(&dev->mode_config.connection_mutex);
return 0;
}
@@ -4424,10 +4419,10 @@ static int i915_displayport_test_data_show(struct seq_file *m, void *data)
{
struct drm_device *dev = m->private;
struct drm_connector *connector;
- struct list_head *connector_list = &dev->mode_config.connector_list;
struct intel_dp *intel_dp;
- list_for_each_entry(connector, connector_list, head) {
+ drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
+ drm_for_each_connector(connector, dev) {
if (connector->connector_type !=
DRM_MODE_CONNECTOR_DisplayPort)
@@ -4435,11 +4430,12 @@ static int i915_displayport_test_data_show(struct seq_file *m, void *data)
if (connector->status == connector_status_connected &&
connector->encoder != NULL) {
- intel_dp = enc_to_intel_dp(connector->encoder);
+ intel_dp = enc_to_intel_dp(connector->state->best_encoder);
seq_printf(m, "%lx", intel_dp->compliance_test_data);
} else
seq_puts(m, "0");
}
+ drm_modeset_unlock(&dev->mode_config.connection_mutex);
return 0;
}
@@ -4463,22 +4459,22 @@ static int i915_displayport_test_type_show(struct seq_file *m, void *data)
{
struct drm_device *dev = m->private;
struct drm_connector *connector;
- struct list_head *connector_list = &dev->mode_config.connector_list;
struct intel_dp *intel_dp;
- list_for_each_entry(connector, connector_list, head) {
-
+ drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
+ drm_for_each_connector(connector, dev) {
if (connector->connector_type !=
DRM_MODE_CONNECTOR_DisplayPort)
continue;
if (connector->status == connector_status_connected &&
connector->encoder != NULL) {
- intel_dp = enc_to_intel_dp(connector->encoder);
+ intel_dp = enc_to_intel_dp(connector->state->best_encoder);
seq_printf(m, "%02lx", intel_dp->compliance_test_type);
} else
seq_puts(m, "0");
}
+ drm_modeset_unlock(&dev->mode_config.connection_mutex);
return 0;
}
--
2.1.0
More information about the Intel-gfx
mailing list