From: Todd Previte <tprevite@gmail.com>
To: Paulo Zanoni <przanoni@gmail.com>
Cc: Intel Graphics Development <intel-gfx@lists.freedesktop.org>
Subject: Re: [PATCH 07/17] drm/i915: Add and implement the debugfs 'show' functions for Displayport compliance
Date: Wed, 18 Feb 2015 09:41:28 -0700 [thread overview]
Message-ID: <54E4C0B8.9070105@gmail.com> (raw)
In-Reply-To: <CA+gsUGSwYg=g=J0bc10mrW0Lh0pJ6YwgAKTk_OPF-yMAMXnKqQ@mail.gmail.com>
Responses inline below. Any changes have been rolled into the monster
patch.
-T
On 12/16/14 12:00 PM, Paulo Zanoni wrote:
> 2014-12-10 21:53 GMT-02:00 Todd Previte<tprevite@gmail.com>:
>> This patch was previously part of "[PATCH 05/10] drm/i915: Add debugfs
>> interface for Displayport debug and compliance testing". This patch implements
>> the 'show' functions for the debugfs interface for Displayport compliance
>> testing.
>>
>> Signed-off-by: Todd Previte<tprevite@gmail.com>
>> ---
>> drivers/gpu/drm/i915/i915_debugfs.c | 85 +++++++++++++++++++++++++++++++++++++
>> 1 file changed, 85 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
>> index ce091c1..184797d 100644
>> --- a/drivers/gpu/drm/i915/i915_debugfs.c
>> +++ b/drivers/gpu/drm/i915/i915_debugfs.c
>> @@ -3694,6 +3694,56 @@ static const struct file_operations i915_display_crc_ctl_fops = {
>> .write = display_crc_ctl_write
>> };
>>
>> +static void displayport_show_config_info(struct seq_file *m,
>> + struct intel_connector *intel_connector)
>> +{
>> + struct intel_encoder *intel_encoder = intel_connector->encoder;
>> + struct intel_dp *intel_dp;
>> + struct intel_crtc *icrtc;
> Please don't use "icrtc": the current trend is to call intel_crtc as
> just "crtc". In the past, "struct drm_crtc" would be "crtc" and
> "struct intel_crtc" would be "intel_crtc", but I don't remember seeing
> icrtc.
Just an attempt to get the code under the 80 char line limit. With the
other changes below it's unnecessary anyways. It's fixed in V3.
>> + struct intel_crtc_config *crtc_config;
>> + char *conn_name = intel_connector->base.name;
>> + int pipe_bpp, hres, vres;
>> + uint8_t vs[4], pe[4];
>> + struct drm_display_mode *mode;
>> + int i = 0;
>> +
>> + if (intel_encoder) {
> Bikeshedding: since the whole function implementation is inside the
> "if" statement, we usually prefer to just "if (!intel_encoder)
> return;", because that saves one indentation level.
Changed for V3. Also changed the intel_encode->type check to the same
thing, again saving a level of indent.
>
>> + intel_dp = enc_to_intel_dp(&intel_encoder->base);
>> + for (i = 0; i < intel_dp->lane_count; i++) {
>> + vs[i] = intel_dp->train_set[i]
>> + & DP_TRAIN_VOLTAGE_SWING_MASK;
>> + pe[i] = (intel_dp->train_set[i]
>> + & DP_TRAIN_PRE_EMPHASIS_MASK) >> 3;
> Please use DP_TRAIN_PRE_EMPHASIS_SHIFT instead of the hardcoded "3".
Fixed.
>> + }
>> + if (intel_encoder->type == INTEL_OUTPUT_DISPLAYPORT) {
>> + if (intel_encoder->new_crtc) {
>> + crtc_config = &intel_encoder->new_crtc->config;
>> + pipe_bpp = crtc_config->pipe_bpp;
>> + mode = &crtc_config->adjusted_mode;
>> + hres = mode->hdisplay;
>> + vres = mode->vdisplay;
>> + } else if (intel_encoder->base.crtc) {
>> + icrtc = to_intel_crtc(intel_encoder->base.crtc);
>> + pipe_bpp = icrtc->config.pipe_bpp;
>> + mode = &icrtc->config.adjusted_mode;
>> + hres = mode->hdisplay;
>> + vres = mode->vdisplay;
>> + } else {
>> + pipe_bpp = 0;
>> + hres = vres = 0;
>> + }
> Why do you have this new_crtc vs current_crtc vs no crtc distinction
> here? Is it really necessary? Shouldn't the "DP testing debugfs
> protocol" establish when exactly the information should be queried,
> and then give some errors in case information is being requested at
> the wrong time?
That code is a hold-over from when I was making sure I wasn't missing
test events because of invalid data structures. Part of the problem is
that link training is tied to mode sets, which is where this code
originally came from as I recall. In any case, I've removed the new_crtc
case (in light of Daniel's reply) so it shouldn't be an issue.
>> + seq_printf(m, DP_CONF_STR_CONNECTOR, conn_name);
>> + seq_printf(m, DP_CONF_STR_LINKRATE, intel_dp->link_bw);
>> + seq_printf(m, DP_CONF_STR_LANES, intel_dp->lane_count);
>> + seq_printf(m, DP_CONF_STR_VSWING, vs[0]);
>> + seq_printf(m, DP_CONF_STR_PREEMP, pe[0]);
>> + seq_printf(m, DP_CONF_STR_HRES, hres);
>> + seq_printf(m, DP_CONF_STR_VRES, vres);
>> + seq_printf(m, DP_CONF_STR_BPP, pipe_bpp);
>> + }
>> + }
>> +}
>> +
>> enum dp_config_param displayport_get_config_param_type(char *input_string)
>> {
>> enum dp_config_param param_type = DP_CONFIG_PARAM_INVALID;
>> @@ -3742,6 +3792,41 @@ int value_for_config_param(enum dp_config_param param,
>> return status;
>> }
>>
>> +static int displayport_config_ctl_show(struct seq_file *m, void *data)
>> +{
>> + struct drm_device *dev = m->private;
>> + struct drm_connector *drm_connector;
>> + struct intel_encoder *encoder;
>> + struct intel_connector *connector;
> The standard is to make "struct drm_connector *connector" and "struct
> intel_connector *intel_connector", or "struct intel_connector
> *connector" and then always use &connector->base for when
> drm_connector is needed. Like the encoders and crtcs.
Fair enough. Fixed in V3.
>> +
>> + if (!dev)
>> + return -ENODEV;
>> +
>> + list_for_each_entry(drm_connector,
>> + &dev->mode_config.connector_list,
>> + head) {
>> + connector = to_intel_connector(drm_connector);
>> + encoder = connector->encoder;
>> + if (drm_connector->connector_type ==
>> + DRM_MODE_CONNECTOR_DisplayPort) {
>> + if (encoder->type == INTEL_OUTPUT_DISPLAYPORT ||
>> + encoder->type == INTEL_OUTPUT_UNKNOWN) {
> If the connector is DP, I think you don't need to check the encoder
> type (because you check for "connected" below). Also, you could have
> used "&&" instead of nesting if statements, which would save one
> indentation level.
I changed the code around to save some indentation levels and address
this particular issue. There was an issue I ran across where just using
the DRM connector wasn't enough, but I haven't been able to reproduce
that problem with the current code. So this has been removed.
>> + if (drm_connector->status ==
>> + connector_status_connected) {
>> + displayport_show_config_info(m,
>> + connector);
>> + } else {
>> + seq_printf(m, DP_CONF_STR_CONNECTOR,
>> + encoder->base.name);
>> + seq_puts(m, "disconnected\n");
>> + }
>> + }
>> + }
>> + }
>> +
>> + return 0;
>> +}
>> +
>> static int displayport_config_ctl_open(struct inode *inode,
>> struct file *file)
>> {
>> --
>> 1.9.1
>>
>> _______________________________________________
>> Intel-gfx mailing list
>> Intel-gfx@lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
>
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2015-02-18 16:41 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-12-10 23:53 [intel-gfx] Displayport Compliance Testing V2 Todd Previte
2014-12-10 23:53 ` [PATCH 01/17] drm/i915: Add automated testing support for Displayport compliance testing Todd Previte
2014-12-12 20:25 ` Paulo Zanoni
2015-02-18 16:36 ` Todd Previte
2014-12-10 23:53 ` [PATCH 02/17] drm/i915: Update intel_dp_check_link_status() " Todd Previte
2014-12-15 16:36 ` Paulo Zanoni
2015-02-18 16:36 ` Todd Previte
2015-04-06 23:52 ` Paulo Zanoni
2014-12-10 23:53 ` [PATCH 03/17] drm/i915: Add a delay in Displayport AUX transactions for " Todd Previte
2014-12-15 17:35 ` Paulo Zanoni
2015-02-18 16:37 ` Todd Previte
2014-12-10 23:53 ` [PATCH 04/17] drm/i915: Add debugfs information for Displayport " Todd Previte
2014-12-15 13:11 ` Jani Nikula
2015-02-18 16:37 ` Todd Previte
2014-12-10 23:53 ` [PATCH 05/17] drm/i915: Add file ops for Displayport configuration in debugfs Todd Previte
2014-12-10 23:53 ` [PATCH 06/17] drm/i915: Add support functions in debugfs for handling Displayport compliance configuration Todd Previte
2014-12-15 19:25 ` Paulo Zanoni
2014-12-10 23:53 ` [PATCH 07/17] drm/i915: Add and implement the debugfs 'show' functions for Displayport compliance Todd Previte
2014-12-16 19:00 ` Paulo Zanoni
2014-12-17 20:12 ` Daniel Vetter
2015-02-18 16:45 ` Todd Previte
2015-02-18 16:41 ` Todd Previte [this message]
2014-12-10 23:53 ` [PATCH 08/17] drm/i915: Add Displayport link configuration structure Todd Previte
2014-12-10 23:53 ` [PATCH 09/17] drm/i915: Add config parsing utilities in debugfs for Displayport compliance Todd Previte
2014-12-10 23:53 ` [PATCH 10/17] drm/i915: Implement the 'open' and 'write' debugfs functions " Todd Previte
2014-12-10 23:53 ` [PATCH 11/17] drm/i915: Update the EDID automated compliance test function Todd Previte
2014-12-17 16:25 ` Paulo Zanoni
2014-12-17 20:20 ` Daniel Vetter
[not found] ` <54E4C490.7080001@gmail.com>
2015-02-20 16:55 ` Daniel Vetter
2015-02-18 16:47 ` Todd Previte
2015-02-23 15:55 ` Daniel Vetter
2014-12-10 23:53 ` [PATCH 12/17] drm/i915: Update intel_dp_compute_config() to handle compliance test requests Todd Previte
2014-12-17 17:04 ` Paulo Zanoni
2015-01-07 19:28 ` Clint Taylor
2015-02-18 16:59 ` Todd Previte
2014-12-10 23:53 ` [PATCH 13/17] drm/i915: Update intel_dp_hpd_pulse() to check link status for non-MST operation Todd Previte
2014-12-17 17:57 ` Paulo Zanoni
2014-12-17 20:30 ` Daniel Vetter
2015-02-18 17:06 ` Todd Previte
2015-02-18 17:06 ` Todd Previte
2014-12-10 23:53 ` [PATCH 14/17] drm/i915: Add debugfs function to check connector status for compliance testing Todd Previte
2014-12-17 18:03 ` Paulo Zanoni
2015-02-18 17:08 ` Todd Previte
2015-02-18 23:09 ` Todd Previte
2014-12-10 23:53 ` [PATCH 15/17] drm/i915: Update debugfs functions for Displayport " Todd Previte
2014-12-10 23:53 ` [PATCH 16/17] drm/i915: Add new debugfs file for Displaypor compliance test control Todd Previte
2014-12-10 23:53 ` [PATCH 17/17] drm/i915: Add debugfs write and test param parsing function for DP " Todd Previte
2014-12-16 7:13 ` shuang.he
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=54E4C0B8.9070105@gmail.com \
--to=tprevite@gmail.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=przanoni@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.