diff mbox

[v8,08/12] drm/i915: Read DP branch device SW revision

Message ID 1471430989-28161-9-git-send-email-mika.kahola@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Mika Kahola Aug. 17, 2016, 10:49 a.m. UTC
SW revision is mandatory field for DisplayPort branch
devices. This is defined in DPCD register field 0x50A.

v2: move drm_dp_ds_revision structure to be part of
    drm_dp_link structure (Daniel)
v3: remove dependency to drm_dp_helper but instead parse
    DPCD and print SW revision info to dmesg (Ville)

Signed-off-by: Mika Kahola <mika.kahola@intel.com>
---
 drivers/gpu/drm/i915/intel_dp.c | 20 ++++++++++++++++++++
 include/drm/drm_dp_helper.h     |  1 +
 2 files changed, 21 insertions(+)

Comments

jim.bride@linux.intel.com Sept. 7, 2016, 9:20 p.m. UTC | #1
On Wed, Aug 17, 2016 at 01:49:44PM +0300, Mika Kahola wrote:
> SW revision is mandatory field for DisplayPort branch
> devices. This is defined in DPCD register field 0x50A.

To be precise, the revision info is in 0x50A and 0x50B. Since
both the major and minor versions are called out separately
in the DP spec it's probably worth mentioning both addresses
in the commit message.

> 
> v2: move drm_dp_ds_revision structure to be part of
>     drm_dp_link structure (Daniel)
> v3: remove dependency to drm_dp_helper but instead parse
>     DPCD and print SW revision info to dmesg (Ville)
> 
> Signed-off-by: Mika Kahola <mika.kahola@intel.com>

With the commit message change requested above, this is:

Reviewed-by: Jim Bride <jim.bride@linux.intel.com>

> ---
>  drivers/gpu/drm/i915/intel_dp.c | 20 ++++++++++++++++++++
>  include/drm/drm_dp_helper.h     |  1 +
>  2 files changed, 21 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
> index 9aebdf6..91ffb79 100644
> --- a/drivers/gpu/drm/i915/intel_dp.c
> +++ b/drivers/gpu/drm/i915/intel_dp.c
> @@ -1438,6 +1438,25 @@ static void intel_dp_print_hw_revision(struct intel_dp *intel_dp)
>  	DRM_DEBUG_KMS("sink hw revision: %d.%d\n", (rev & 0xf0) >> 4, rev & 0xf);
>  }
>  
> +static void intel_dp_print_sw_revision(struct intel_dp *intel_dp)
> +{
> +	uint8_t rev[2];
> +	int len;
> +
> +	if ((drm_debug & DRM_UT_KMS) == 0)
> +		return;
> +
> +	if (!(intel_dp->dpcd[DP_DOWNSTREAMPORT_PRESENT] &
> +	      DP_DWN_STRM_PORT_PRESENT))
> +		return;
> +
> +	len = drm_dp_dpcd_read(&intel_dp->aux, DP_BRANCH_SW_REV, &rev, 2);
> +	if (len < 0)
> +		return;
> +
> +	DRM_DEBUG_KMS("sink sw revision: %d.%d\n", rev[0], rev[1]);
> +}
> +
>  static int rate_to_index(int find, const int *rates)
>  {
>  	int i = 0;
> @@ -4302,6 +4321,7 @@ intel_dp_long_pulse(struct intel_connector *intel_connector)
>  	intel_dp_probe_oui(intel_dp);
>  
>  	intel_dp_print_hw_revision(intel_dp);
> +	intel_dp_print_sw_revision(intel_dp);
>  
>  	intel_dp_configure_mst(intel_dp);
>  
> diff --git a/include/drm/drm_dp_helper.h b/include/drm/drm_dp_helper.h
> index 19ac599..215202f 100644
> --- a/include/drm/drm_dp_helper.h
> +++ b/include/drm/drm_dp_helper.h
> @@ -447,6 +447,7 @@
>  #define DP_BRANCH_OUI			    0x500
>  #define DP_BRANCH_ID                        0x503
>  #define DP_BRANCH_HW_REV                    0x509
> +#define DP_BRANCH_SW_REV                    0x50A
>  
>  #define DP_SET_POWER                        0x600
>  # define DP_SET_POWER_D0                    0x1
> -- 
> 1.9.1
Mika Kahola Sept. 8, 2016, 11:51 a.m. UTC | #2
> -----Original Message-----
> From: Jim Bride [mailto:jim.bride@linux.intel.com]
> Sent: Thursday, September 8, 2016 12:20 AM
> To: Kahola, Mika <mika.kahola@intel.com>
> Cc: intel-gfx@lists.freedesktop.org; dri-devel@lists.freedesktop.org;
> ville.syrjala@linux.intel.com; daniel.vetter@ffwll.ch
> Subject: Re: [PATCH v8 08/12] drm/i915: Read DP branch device SW revision
> 
> On Wed, Aug 17, 2016 at 01:49:44PM +0300, Mika Kahola wrote:
> > SW revision is mandatory field for DisplayPort branch devices. This is
> > defined in DPCD register field 0x50A.
> 
> To be precise, the revision info is in 0x50A and 0x50B. Since both the major
> and minor versions are called out separately in the DP spec it's probably
> worth mentioning both addresses in the commit message.
You're right. I will update the commit message to be more exact.

> 
> >
> > v2: move drm_dp_ds_revision structure to be part of
> >     drm_dp_link structure (Daniel)
> > v3: remove dependency to drm_dp_helper but instead parse
> >     DPCD and print SW revision info to dmesg (Ville)
> >
> > Signed-off-by: Mika Kahola <mika.kahola@intel.com>
> 
> With the commit message change requested above, this is:
> 
> Reviewed-by: Jim Bride <jim.bride@linux.intel.com>
> 
> > ---
> >  drivers/gpu/drm/i915/intel_dp.c | 20 ++++++++++++++++++++
> >  include/drm/drm_dp_helper.h     |  1 +
> >  2 files changed, 21 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/i915/intel_dp.c
> > b/drivers/gpu/drm/i915/intel_dp.c index 9aebdf6..91ffb79 100644
> > --- a/drivers/gpu/drm/i915/intel_dp.c
> > +++ b/drivers/gpu/drm/i915/intel_dp.c
> > @@ -1438,6 +1438,25 @@ static void intel_dp_print_hw_revision(struct
> intel_dp *intel_dp)
> >  	DRM_DEBUG_KMS("sink hw revision: %d.%d\n", (rev & 0xf0) >> 4,
> rev &
> > 0xf);  }
> >
> > +static void intel_dp_print_sw_revision(struct intel_dp *intel_dp) {
> > +	uint8_t rev[2];
> > +	int len;
> > +
> > +	if ((drm_debug & DRM_UT_KMS) == 0)
> > +		return;
> > +
> > +	if (!(intel_dp->dpcd[DP_DOWNSTREAMPORT_PRESENT] &
> > +	      DP_DWN_STRM_PORT_PRESENT))
> > +		return;
> > +
> > +	len = drm_dp_dpcd_read(&intel_dp->aux, DP_BRANCH_SW_REV,
> &rev, 2);
> > +	if (len < 0)
> > +		return;
> > +
> > +	DRM_DEBUG_KMS("sink sw revision: %d.%d\n", rev[0], rev[1]); }
> > +
> >  static int rate_to_index(int find, const int *rates)  {
> >  	int i = 0;
> > @@ -4302,6 +4321,7 @@ intel_dp_long_pulse(struct intel_connector
> *intel_connector)
> >  	intel_dp_probe_oui(intel_dp);
> >
> >  	intel_dp_print_hw_revision(intel_dp);
> > +	intel_dp_print_sw_revision(intel_dp);
> >
> >  	intel_dp_configure_mst(intel_dp);
> >
> > diff --git a/include/drm/drm_dp_helper.h
> b/include/drm/drm_dp_helper.h
> > index 19ac599..215202f 100644
> > --- a/include/drm/drm_dp_helper.h
> > +++ b/include/drm/drm_dp_helper.h
> > @@ -447,6 +447,7 @@
> >  #define DP_BRANCH_OUI			    0x500
> >  #define DP_BRANCH_ID                        0x503
> >  #define DP_BRANCH_HW_REV                    0x509
> > +#define DP_BRANCH_SW_REV                    0x50A
> >
> >  #define DP_SET_POWER                        0x600
> >  # define DP_SET_POWER_D0                    0x1
> > --
> > 1.9.1
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 9aebdf6..91ffb79 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -1438,6 +1438,25 @@  static void intel_dp_print_hw_revision(struct intel_dp *intel_dp)
 	DRM_DEBUG_KMS("sink hw revision: %d.%d\n", (rev & 0xf0) >> 4, rev & 0xf);
 }
 
+static void intel_dp_print_sw_revision(struct intel_dp *intel_dp)
+{
+	uint8_t rev[2];
+	int len;
+
+	if ((drm_debug & DRM_UT_KMS) == 0)
+		return;
+
+	if (!(intel_dp->dpcd[DP_DOWNSTREAMPORT_PRESENT] &
+	      DP_DWN_STRM_PORT_PRESENT))
+		return;
+
+	len = drm_dp_dpcd_read(&intel_dp->aux, DP_BRANCH_SW_REV, &rev, 2);
+	if (len < 0)
+		return;
+
+	DRM_DEBUG_KMS("sink sw revision: %d.%d\n", rev[0], rev[1]);
+}
+
 static int rate_to_index(int find, const int *rates)
 {
 	int i = 0;
@@ -4302,6 +4321,7 @@  intel_dp_long_pulse(struct intel_connector *intel_connector)
 	intel_dp_probe_oui(intel_dp);
 
 	intel_dp_print_hw_revision(intel_dp);
+	intel_dp_print_sw_revision(intel_dp);
 
 	intel_dp_configure_mst(intel_dp);
 
diff --git a/include/drm/drm_dp_helper.h b/include/drm/drm_dp_helper.h
index 19ac599..215202f 100644
--- a/include/drm/drm_dp_helper.h
+++ b/include/drm/drm_dp_helper.h
@@ -447,6 +447,7 @@ 
 #define DP_BRANCH_OUI			    0x500
 #define DP_BRANCH_ID                        0x503
 #define DP_BRANCH_HW_REV                    0x509
+#define DP_BRANCH_SW_REV                    0x50A
 
 #define DP_SET_POWER                        0x600
 # define DP_SET_POWER_D0                    0x1