All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/8] drm/i915/bios: VBT parsing fixes and cleanups
@ 2017-09-28  8:21 Jani Nikula
  2017-09-28  8:21   ` Jani Nikula
                   ` (9 more replies)
  0 siblings, 10 replies; 15+ messages in thread
From: Jani Nikula @ 2017-09-28  8:21 UTC (permalink / raw)
  To: intel-gfx; +Cc: jani.nikula

More VBT parsing fixes and refactoring.

BR,
Jani.


Jani Nikula (8):
  drm/i915/bios: parse DDI ports also for CHV for HDMI DDC pin and DP
    AUX channel
  drm/i915/bios: refactor parse general definitions
  drm/i915/bios: don't initialize fields based on vbt version
  drm/i915/bios: remove an unnecessary temp variable
  drm/i915/bios: cleanup comments and useless return
  drm/i915/bios: merge parse_device_mapping() into
    parse_general_definitions()
  drm/i915/bios: parse SDVO device mapping from pre-parsed child devices
  drm/i915/bios: don't pass bdb to parsers that don't parse VBT directly

 drivers/gpu/drm/i915/intel_bios.c | 130 ++++++++++++--------------------------
 1 file changed, 41 insertions(+), 89 deletions(-)

-- 
2.11.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [PATCH 1/8] drm/i915/bios: parse DDI ports also for CHV for HDMI DDC pin and DP AUX channel
  2017-09-28  8:21 [PATCH 0/8] drm/i915/bios: VBT parsing fixes and cleanups Jani Nikula
@ 2017-09-28  8:21   ` Jani Nikula
  2017-09-28  8:21 ` [PATCH 2/8] drm/i915/bios: refactor parse general definitions Jani Nikula
                     ` (8 subsequent siblings)
  9 siblings, 0 replies; 15+ messages in thread
From: Jani Nikula @ 2017-09-28  8:21 UTC (permalink / raw)
  To: intel-gfx; +Cc: jani.nikula, ville.syrjala, stable

While technically CHV isn't DDI, we do look at the VBT based DDI port
info for HDMI DDC pin and DP AUX channel. (We call these "alternate",
but they're really just something that aren't platform defaults.)

In commit e4ab73a13291 ("drm/i915: Respect alternate_ddc_pin for all DDI
ports") Ville writes, "IIRC there may be CHV system that might actually
need this."

I'm not sure why there couldn't be even more platforms that need this,
but start conservative, and parse the info for CHV in addition to DDI.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=100553
Reported-by: Marek Wilczewski <mw@3cte.pl>
Cc: stable@vger.kernel.org
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/intel_bios.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
index 3747d8df0175..6b8d396ab605 100644
--- a/drivers/gpu/drm/i915/intel_bios.c
+++ b/drivers/gpu/drm/i915/intel_bios.c
@@ -1247,7 +1247,7 @@ static void parse_ddi_ports(struct drm_i915_private *dev_priv,
 {
 	enum port port;
 
-	if (!HAS_DDI(dev_priv))
+	if (!HAS_DDI(dev_priv) && !IS_CHERRYVIEW(dev_priv))
 		return;
 
 	if (!dev_priv->vbt.child_dev_num)
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 1/8] drm/i915/bios: parse DDI ports also for CHV for HDMI DDC pin and DP AUX channel
@ 2017-09-28  8:21   ` Jani Nikula
  0 siblings, 0 replies; 15+ messages in thread
From: Jani Nikula @ 2017-09-28  8:21 UTC (permalink / raw)
  To: intel-gfx; +Cc: jani.nikula, stable

While technically CHV isn't DDI, we do look at the VBT based DDI port
info for HDMI DDC pin and DP AUX channel. (We call these "alternate",
but they're really just something that aren't platform defaults.)

In commit e4ab73a13291 ("drm/i915: Respect alternate_ddc_pin for all DDI
ports") Ville writes, "IIRC there may be CHV system that might actually
need this."

I'm not sure why there couldn't be even more platforms that need this,
but start conservative, and parse the info for CHV in addition to DDI.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=100553
Reported-by: Marek Wilczewski <mw@3cte.pl>
Cc: stable@vger.kernel.org
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/intel_bios.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
index 3747d8df0175..6b8d396ab605 100644
--- a/drivers/gpu/drm/i915/intel_bios.c
+++ b/drivers/gpu/drm/i915/intel_bios.c
@@ -1247,7 +1247,7 @@ static void parse_ddi_ports(struct drm_i915_private *dev_priv,
 {
 	enum port port;
 
-	if (!HAS_DDI(dev_priv))
+	if (!HAS_DDI(dev_priv) && !IS_CHERRYVIEW(dev_priv))
 		return;
 
 	if (!dev_priv->vbt.child_dev_num)
-- 
2.11.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 2/8] drm/i915/bios: refactor parse general definitions
  2017-09-28  8:21 [PATCH 0/8] drm/i915/bios: VBT parsing fixes and cleanups Jani Nikula
  2017-09-28  8:21   ` Jani Nikula
@ 2017-09-28  8:21 ` Jani Nikula
  2017-09-28  8:21 ` [PATCH 3/8] drm/i915/bios: don't initialize fields based on vbt version Jani Nikula
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 15+ messages in thread
From: Jani Nikula @ 2017-09-28  8:21 UTC (permalink / raw)
  To: intel-gfx; +Cc: jani.nikula

Early return on failures. Rename the variable for later merging with
parse_device_mappings().

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/intel_bios.c | 34 ++++++++++++++++++++--------------
 1 file changed, 20 insertions(+), 14 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
index 6b8d396ab605..225e2ecde2a0 100644
--- a/drivers/gpu/drm/i915/intel_bios.c
+++ b/drivers/gpu/drm/i915/intel_bios.c
@@ -435,21 +435,27 @@ static void
 parse_general_definitions(struct drm_i915_private *dev_priv,
 			  const struct bdb_header *bdb)
 {
-	const struct bdb_general_definitions *general;
-
-	general = find_section(bdb, BDB_GENERAL_DEFINITIONS);
-	if (general) {
-		u16 block_size = get_blocksize(general);
-		if (block_size >= sizeof(*general)) {
-			int bus_pin = general->crt_ddc_gmbus_pin;
-			DRM_DEBUG_KMS("crt_ddc_bus_pin: %d\n", bus_pin);
-			if (intel_gmbus_is_valid_pin(dev_priv, bus_pin))
-				dev_priv->vbt.crt_ddc_pin = bus_pin;
-		} else {
-			DRM_DEBUG_KMS("BDB_GD too small (%d). Invalid.\n",
-				      block_size);
-		}
+	const struct bdb_general_definitions *defs;
+	u16 block_size;
+	int bus_pin;
+
+	defs = find_section(bdb, BDB_GENERAL_DEFINITIONS);
+	if (!defs) {
+		DRM_DEBUG_KMS("General definitions block not found\n");
+		return;
+	}
+
+	block_size = get_blocksize(defs);
+	if (block_size < sizeof(*defs)) {
+		DRM_DEBUG_KMS("General definitions block too small (%u)\n",
+			      block_size);
+		return;
 	}
+
+	bus_pin = defs->crt_ddc_gmbus_pin;
+	DRM_DEBUG_KMS("crt_ddc_bus_pin: %d\n", bus_pin);
+	if (intel_gmbus_is_valid_pin(dev_priv, bus_pin))
+		dev_priv->vbt.crt_ddc_pin = bus_pin;
 }
 
 static const struct child_device_config *
-- 
2.11.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 3/8] drm/i915/bios: don't initialize fields based on vbt version
  2017-09-28  8:21 [PATCH 0/8] drm/i915/bios: VBT parsing fixes and cleanups Jani Nikula
  2017-09-28  8:21   ` Jani Nikula
  2017-09-28  8:21 ` [PATCH 2/8] drm/i915/bios: refactor parse general definitions Jani Nikula
@ 2017-09-28  8:21 ` Jani Nikula
  2017-09-28  8:22 ` [PATCH 4/8] drm/i915/bios: remove an unnecessary temp variable Jani Nikula
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 15+ messages in thread
From: Jani Nikula @ 2017-09-28  8:21 UTC (permalink / raw)
  To: intel-gfx; +Cc: jani.nikula

In theory, these might clobber information for older VBT versions.

We might have to store the BDB version for later parsing, but currently
all code accessing these fields will only use them on newer platforms
with new enough BDB versions.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/intel_bios.c | 13 -------------
 1 file changed, 13 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
index 225e2ecde2a0..435db26f5a1f 100644
--- a/drivers/gpu/drm/i915/intel_bios.c
+++ b/drivers/gpu/drm/i915/intel_bios.c
@@ -1354,19 +1354,6 @@ parse_device_mapping(struct drm_i915_private *dev_priv,
 		 */
 		memcpy(child_dev_ptr, child,
 		       min_t(size_t, defs->child_dev_size, sizeof(*child)));
-
-		/*
-		 * copied full block, now init values when they are not
-		 * available in current version
-		 */
-		if (bdb->version < 196) {
-			/* Set default values for bits added from v196 */
-			child_dev_ptr->iboost = 0;
-			child_dev_ptr->hpd_invert = 0;
-		}
-
-		if (bdb->version < 192)
-			child_dev_ptr->lspcon = 0;
 	}
 	return;
 }
-- 
2.11.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 4/8] drm/i915/bios: remove an unnecessary temp variable
  2017-09-28  8:21 [PATCH 0/8] drm/i915/bios: VBT parsing fixes and cleanups Jani Nikula
                   ` (2 preceding siblings ...)
  2017-09-28  8:21 ` [PATCH 3/8] drm/i915/bios: don't initialize fields based on vbt version Jani Nikula
@ 2017-09-28  8:22 ` Jani Nikula
  2017-09-28  8:22 ` [PATCH 5/8] drm/i915/bios: cleanup comments and useless return Jani Nikula
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 15+ messages in thread
From: Jani Nikula @ 2017-09-28  8:22 UTC (permalink / raw)
  To: intel-gfx; +Cc: jani.nikula

Prepare for merging parse_device_mapping() into
parse_general_definitions(). No functional changes.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/intel_bios.c | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
index 435db26f5a1f..d0fedac0322f 100644
--- a/drivers/gpu/drm/i915/intel_bios.c
+++ b/drivers/gpu/drm/i915/intel_bios.c
@@ -1272,7 +1272,6 @@ parse_device_mapping(struct drm_i915_private *dev_priv,
 {
 	const struct bdb_general_definitions *defs;
 	const struct child_device_config *child;
-	struct child_device_config *child_dev_ptr;
 	int i, child_device_num, count;
 	u8 expected_size;
 	u16 block_size;
@@ -1344,16 +1343,14 @@ parse_device_mapping(struct drm_i915_private *dev_priv,
 			continue;
 		}
 
-		child_dev_ptr = dev_priv->vbt.child_dev + count;
-		count++;
-
 		/*
 		 * Copy as much as we know (sizeof) and is available
 		 * (child_dev_size) of the child device. Accessing the data must
 		 * depend on VBT version.
 		 */
-		memcpy(child_dev_ptr, child,
+		memcpy(dev_priv->vbt.child_dev + count, child,
 		       min_t(size_t, defs->child_dev_size, sizeof(*child)));
+		count++;
 	}
 	return;
 }
-- 
2.11.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 5/8] drm/i915/bios: cleanup comments and useless return
  2017-09-28  8:21 [PATCH 0/8] drm/i915/bios: VBT parsing fixes and cleanups Jani Nikula
                   ` (3 preceding siblings ...)
  2017-09-28  8:22 ` [PATCH 4/8] drm/i915/bios: remove an unnecessary temp variable Jani Nikula
@ 2017-09-28  8:22 ` Jani Nikula
  2017-09-28  8:22 ` [PATCH 6/8] drm/i915/bios: merge parse_device_mapping() into parse_general_definitions() Jani Nikula
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 15+ messages in thread
From: Jani Nikula @ 2017-09-28  8:22 UTC (permalink / raw)
  To: intel-gfx; +Cc: jani.nikula

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/intel_bios.c | 9 ++-------
 1 file changed, 2 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
index d0fedac0322f..9cfe89eed501 100644
--- a/drivers/gpu/drm/i915/intel_bios.c
+++ b/drivers/gpu/drm/i915/intel_bios.c
@@ -1318,10 +1318,8 @@ parse_device_mapping(struct drm_i915_private *dev_priv,
 	/* get the number of child device that is present */
 	for (i = 0; i < child_device_num; i++) {
 		child = child_device_ptr(defs, i);
-		if (!child->device_type) {
-			/* skip the device block if device type is invalid */
+		if (!child->device_type)
 			continue;
-		}
 		count++;
 	}
 	if (!count) {
@@ -1338,10 +1336,8 @@ parse_device_mapping(struct drm_i915_private *dev_priv,
 	count = 0;
 	for (i = 0; i < child_device_num; i++) {
 		child = child_device_ptr(defs, i);
-		if (!child->device_type) {
-			/* skip the device block if device type is invalid */
+		if (!child->device_type)
 			continue;
-		}
 
 		/*
 		 * Copy as much as we know (sizeof) and is available
@@ -1352,7 +1348,6 @@ parse_device_mapping(struct drm_i915_private *dev_priv,
 		       min_t(size_t, defs->child_dev_size, sizeof(*child)));
 		count++;
 	}
-	return;
 }
 
 /* Common defaults which may be overridden by VBT. */
-- 
2.11.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 6/8] drm/i915/bios: merge parse_device_mapping() into parse_general_definitions()
  2017-09-28  8:21 [PATCH 0/8] drm/i915/bios: VBT parsing fixes and cleanups Jani Nikula
                   ` (4 preceding siblings ...)
  2017-09-28  8:22 ` [PATCH 5/8] drm/i915/bios: cleanup comments and useless return Jani Nikula
@ 2017-09-28  8:22 ` Jani Nikula
  2017-09-28  8:22 ` [PATCH 7/8] drm/i915/bios: parse SDVO device mapping from pre-parsed child devices Jani Nikula
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 15+ messages in thread
From: Jani Nikula @ 2017-09-28  8:22 UTC (permalink / raw)
  To: intel-gfx; +Cc: jani.nikula

They're both parsing the same block, and there's no need for them to be
split. The former also benefits from the range checks in the latter.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/intel_bios.c | 48 +++++++++++++--------------------------
 1 file changed, 16 insertions(+), 32 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
index 9cfe89eed501..0845e13c59d1 100644
--- a/drivers/gpu/drm/i915/intel_bios.c
+++ b/drivers/gpu/drm/i915/intel_bios.c
@@ -431,33 +431,6 @@ parse_general_features(struct drm_i915_private *dev_priv,
 		      dev_priv->vbt.fdi_rx_polarity_inverted);
 }
 
-static void
-parse_general_definitions(struct drm_i915_private *dev_priv,
-			  const struct bdb_header *bdb)
-{
-	const struct bdb_general_definitions *defs;
-	u16 block_size;
-	int bus_pin;
-
-	defs = find_section(bdb, BDB_GENERAL_DEFINITIONS);
-	if (!defs) {
-		DRM_DEBUG_KMS("General definitions block not found\n");
-		return;
-	}
-
-	block_size = get_blocksize(defs);
-	if (block_size < sizeof(*defs)) {
-		DRM_DEBUG_KMS("General definitions block too small (%u)\n",
-			      block_size);
-		return;
-	}
-
-	bus_pin = defs->crt_ddc_gmbus_pin;
-	DRM_DEBUG_KMS("crt_ddc_bus_pin: %d\n", bus_pin);
-	if (intel_gmbus_is_valid_pin(dev_priv, bus_pin))
-		dev_priv->vbt.crt_ddc_pin = bus_pin;
-}
-
 static const struct child_device_config *
 child_device_ptr(const struct bdb_general_definitions *defs, int i)
 {
@@ -1267,20 +1240,34 @@ static void parse_ddi_ports(struct drm_i915_private *dev_priv,
 }
 
 static void
-parse_device_mapping(struct drm_i915_private *dev_priv,
-		     const struct bdb_header *bdb)
+parse_general_definitions(struct drm_i915_private *dev_priv,
+			  const struct bdb_header *bdb)
 {
 	const struct bdb_general_definitions *defs;
 	const struct child_device_config *child;
 	int i, child_device_num, count;
 	u8 expected_size;
 	u16 block_size;
+	int bus_pin;
 
 	defs = find_section(bdb, BDB_GENERAL_DEFINITIONS);
 	if (!defs) {
 		DRM_DEBUG_KMS("No general definition block is found, no devices defined.\n");
 		return;
 	}
+
+	block_size = get_blocksize(defs);
+	if (block_size < sizeof(*defs)) {
+		DRM_DEBUG_KMS("General definitions block too small (%u)\n",
+			      block_size);
+		return;
+	}
+
+	bus_pin = defs->crt_ddc_gmbus_pin;
+	DRM_DEBUG_KMS("crt_ddc_bus_pin: %d\n", bus_pin);
+	if (intel_gmbus_is_valid_pin(dev_priv, bus_pin))
+		dev_priv->vbt.crt_ddc_pin = bus_pin;
+
 	if (bdb->version < 106) {
 		expected_size = 22;
 	} else if (bdb->version < 111) {
@@ -1310,8 +1297,6 @@ parse_device_mapping(struct drm_i915_private *dev_priv,
 		return;
 	}
 
-	/* get the block size of general definitions */
-	block_size = get_blocksize(defs);
 	/* get the number of child device */
 	child_device_num = (block_size - sizeof(*defs)) / defs->child_dev_size;
 	count = 0;
@@ -1529,7 +1514,6 @@ void intel_bios_init(struct drm_i915_private *dev_priv)
 	parse_lfp_backlight(dev_priv, bdb);
 	parse_sdvo_panel_data(dev_priv, bdb);
 	parse_sdvo_device_mapping(dev_priv, bdb);
-	parse_device_mapping(dev_priv, bdb);
 	parse_driver_features(dev_priv, bdb);
 	parse_edp(dev_priv, bdb);
 	parse_psr(dev_priv, bdb);
-- 
2.11.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 7/8] drm/i915/bios: parse SDVO device mapping from pre-parsed child devices
  2017-09-28  8:21 [PATCH 0/8] drm/i915/bios: VBT parsing fixes and cleanups Jani Nikula
                   ` (5 preceding siblings ...)
  2017-09-28  8:22 ` [PATCH 6/8] drm/i915/bios: merge parse_device_mapping() into parse_general_definitions() Jani Nikula
@ 2017-09-28  8:22 ` Jani Nikula
  2017-09-28  8:22 ` [PATCH 8/8] drm/i915/bios: don't pass bdb to parsers that don't parse VBT directly Jani Nikula
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 15+ messages in thread
From: Jani Nikula @ 2017-09-28  8:22 UTC (permalink / raw)
  To: intel-gfx; +Cc: jani.nikula

We parse and store the child devices in
parse_general_definitions(). There is no need to parse the VBT block
again for SDVO device mapping. Do the same as we do in
parse_ddi_ports().

We no longer have access to child device size at this stage, but we also
don't need to worry about reading past the child device anymore. Instead
of a child device size check, do a mild optimization by limiting the
parsing to gens 3 through 7.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/intel_bios.c | 39 ++++++++++++---------------------------
 1 file changed, 12 insertions(+), 27 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
index 0845e13c59d1..391487a2a0b0 100644
--- a/drivers/gpu/drm/i915/intel_bios.c
+++ b/drivers/gpu/drm/i915/intel_bios.c
@@ -442,37 +442,21 @@ parse_sdvo_device_mapping(struct drm_i915_private *dev_priv,
 			  const struct bdb_header *bdb)
 {
 	struct sdvo_device_mapping *mapping;
-	const struct bdb_general_definitions *defs;
 	const struct child_device_config *child;
-	int i, child_device_num, count;
-	u16	block_size;
-
-	defs = find_section(bdb, BDB_GENERAL_DEFINITIONS);
-	if (!defs) {
-		DRM_DEBUG_KMS("No general definition block is found, unable to construct sdvo mapping.\n");
-		return;
-	}
+	int i, count = 0;
 
 	/*
-	 * Only parse SDVO mappings when the general definitions block child
-	 * device size matches that of the *legacy* child device config
-	 * struct. Thus, SDVO mapping will be skipped for newer VBT.
+	 * Only parse SDVO mappings on gens that could have SDVO. This isn't
+	 * accurate and doesn't have to be, as long as it's not too strict.
 	 */
-	if (defs->child_dev_size != LEGACY_CHILD_DEVICE_CONFIG_SIZE) {
-		DRM_DEBUG_KMS("Unsupported child device size for SDVO mapping.\n");
+	if (!IS_GEN(dev_priv, 3, 7)) {
+		DRM_DEBUG_KMS("Skipping SDVO device mapping\n");
 		return;
 	}
-	/* get the block size of general definitions */
-	block_size = get_blocksize(defs);
-	/* get the number of child device */
-	child_device_num = (block_size - sizeof(*defs)) / defs->child_dev_size;
-	count = 0;
-	for (i = 0; i < child_device_num; i++) {
-		child = child_device_ptr(defs, i);
-		if (!child->device_type) {
-			/* skip the device block if device type is invalid */
-			continue;
-		}
+
+	for (i = 0, count = 0; i < dev_priv->vbt.child_dev_num; i++) {
+		child = dev_priv->vbt.child_dev + i;
+
 		if (child->slave_addr != SLAVE_ADDR1 &&
 		    child->slave_addr != SLAVE_ADDR2) {
 			/*
@@ -523,7 +507,6 @@ parse_sdvo_device_mapping(struct drm_i915_private *dev_priv,
 		/* No SDVO device info is found */
 		DRM_DEBUG_KMS("No SDVO device info is found in VBT\n");
 	}
-	return;
 }
 
 static void
@@ -1513,12 +1496,14 @@ void intel_bios_init(struct drm_i915_private *dev_priv)
 	parse_lfp_panel_data(dev_priv, bdb);
 	parse_lfp_backlight(dev_priv, bdb);
 	parse_sdvo_panel_data(dev_priv, bdb);
-	parse_sdvo_device_mapping(dev_priv, bdb);
 	parse_driver_features(dev_priv, bdb);
 	parse_edp(dev_priv, bdb);
 	parse_psr(dev_priv, bdb);
 	parse_mipi_config(dev_priv, bdb);
 	parse_mipi_sequence(dev_priv, bdb);
+
+	/* Further processing on pre-parsed data */
+	parse_sdvo_device_mapping(dev_priv, bdb);
 	parse_ddi_ports(dev_priv, bdb);
 
 out:
-- 
2.11.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 8/8] drm/i915/bios: don't pass bdb to parsers that don't parse VBT directly
  2017-09-28  8:21 [PATCH 0/8] drm/i915/bios: VBT parsing fixes and cleanups Jani Nikula
                   ` (6 preceding siblings ...)
  2017-09-28  8:22 ` [PATCH 7/8] drm/i915/bios: parse SDVO device mapping from pre-parsed child devices Jani Nikula
@ 2017-09-28  8:22 ` Jani Nikula
  2017-09-28  8:47 ` ✓ Fi.CI.BAT: success for drm/i915/bios: VBT parsing fixes and cleanups Patchwork
  2017-09-28  9:53 ` ✓ Fi.CI.IGT: " Patchwork
  9 siblings, 0 replies; 15+ messages in thread
From: Jani Nikula @ 2017-09-28  8:22 UTC (permalink / raw)
  To: intel-gfx; +Cc: jani.nikula

Hint that you're not supposed to look at VBT in these functions.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/intel_bios.c | 20 +++++++++-----------
 1 file changed, 9 insertions(+), 11 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
index 391487a2a0b0..e809a9c347d3 100644
--- a/drivers/gpu/drm/i915/intel_bios.c
+++ b/drivers/gpu/drm/i915/intel_bios.c
@@ -438,8 +438,7 @@ child_device_ptr(const struct bdb_general_definitions *defs, int i)
 }
 
 static void
-parse_sdvo_device_mapping(struct drm_i915_private *dev_priv,
-			  const struct bdb_header *bdb)
+parse_sdvo_device_mapping(struct drm_i915_private *dev_priv, u8 bdb_version)
 {
 	struct sdvo_device_mapping *mapping;
 	const struct child_device_config *child;
@@ -1073,7 +1072,7 @@ static void sanitize_aux_ch(struct drm_i915_private *dev_priv,
 }
 
 static void parse_ddi_port(struct drm_i915_private *dev_priv, enum port port,
-			   const struct bdb_header *bdb)
+			   u8 bdb_version)
 {
 	struct child_device_config *it, *child = NULL;
 	struct ddi_vbt_port_info *info = &dev_priv->vbt.ddi_port_info[port];
@@ -1184,7 +1183,7 @@ static void parse_ddi_port(struct drm_i915_private *dev_priv, enum port port,
 		sanitize_aux_ch(dev_priv, port);
 	}
 
-	if (bdb->version >= 158) {
+	if (bdb_version >= 158) {
 		/* The VBT HDMI level shift values match the table we have. */
 		hdmi_level_shift = child->hdmi_level_shifter_value;
 		DRM_DEBUG_KMS("VBT HDMI level shift for port %c: %d\n",
@@ -1194,7 +1193,7 @@ static void parse_ddi_port(struct drm_i915_private *dev_priv, enum port port,
 	}
 
 	/* Parse the I_boost config for SKL and above */
-	if (bdb->version >= 196 && child->iboost) {
+	if (bdb_version >= 196 && child->iboost) {
 		info->dp_boost_level = translate_iboost(child->dp_iboost_level);
 		DRM_DEBUG_KMS("VBT (e)DP boost level for port %c: %d\n",
 			      port_name(port), info->dp_boost_level);
@@ -1204,8 +1203,7 @@ static void parse_ddi_port(struct drm_i915_private *dev_priv, enum port port,
 	}
 }
 
-static void parse_ddi_ports(struct drm_i915_private *dev_priv,
-			    const struct bdb_header *bdb)
+static void parse_ddi_ports(struct drm_i915_private *dev_priv, u8 bdb_version)
 {
 	enum port port;
 
@@ -1215,11 +1213,11 @@ static void parse_ddi_ports(struct drm_i915_private *dev_priv,
 	if (!dev_priv->vbt.child_dev_num)
 		return;
 
-	if (bdb->version < 155)
+	if (bdb_version < 155)
 		return;
 
 	for (port = PORT_A; port < I915_MAX_PORTS; port++)
-		parse_ddi_port(dev_priv, port, bdb);
+		parse_ddi_port(dev_priv, port, bdb_version);
 }
 
 static void
@@ -1503,8 +1501,8 @@ void intel_bios_init(struct drm_i915_private *dev_priv)
 	parse_mipi_sequence(dev_priv, bdb);
 
 	/* Further processing on pre-parsed data */
-	parse_sdvo_device_mapping(dev_priv, bdb);
-	parse_ddi_ports(dev_priv, bdb);
+	parse_sdvo_device_mapping(dev_priv, bdb->version);
+	parse_ddi_ports(dev_priv, bdb->version);
 
 out:
 	if (!vbt) {
-- 
2.11.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* ✓ Fi.CI.BAT: success for drm/i915/bios: VBT parsing fixes and cleanups
  2017-09-28  8:21 [PATCH 0/8] drm/i915/bios: VBT parsing fixes and cleanups Jani Nikula
                   ` (7 preceding siblings ...)
  2017-09-28  8:22 ` [PATCH 8/8] drm/i915/bios: don't pass bdb to parsers that don't parse VBT directly Jani Nikula
@ 2017-09-28  8:47 ` Patchwork
  2017-09-28  9:53 ` ✓ Fi.CI.IGT: " Patchwork
  9 siblings, 0 replies; 15+ messages in thread
From: Patchwork @ 2017-09-28  8:47 UTC (permalink / raw)
  To: Jani Nikula; +Cc: intel-gfx

== Series Details ==

Series: drm/i915/bios: VBT parsing fixes and cleanups
URL   : https://patchwork.freedesktop.org/series/31051/
State : success

== Summary ==

Series 31051v1 drm/i915/bios: VBT parsing fixes and cleanups
https://patchwork.freedesktop.org/api/1.0/series/31051/revisions/1/mbox/

Test drv_module_reload:
        Subgroup basic-reload-inject:
                pass       -> DMESG-WARN (fi-glk-1) fdo#102777

fdo#102777 https://bugs.freedesktop.org/show_bug.cgi?id=102777

fi-bdw-5557u     total:289  pass:268  dwarn:0   dfail:0   fail:0   skip:21  time:444s
fi-bdw-gvtdvm    total:289  pass:265  dwarn:0   dfail:0   fail:0   skip:24  time:466s
fi-blb-e6850     total:289  pass:224  dwarn:1   dfail:0   fail:0   skip:64  time:419s
fi-bsw-n3050     total:289  pass:243  dwarn:0   dfail:0   fail:0   skip:46  time:518s
fi-bwr-2160      total:289  pass:184  dwarn:0   dfail:0   fail:0   skip:105 time:279s
fi-bxt-j4205     total:289  pass:260  dwarn:0   dfail:0   fail:0   skip:29  time:500s
fi-byt-j1900     total:289  pass:254  dwarn:1   dfail:0   fail:0   skip:34  time:491s
fi-cnl-y         total:289  pass:258  dwarn:0   dfail:0   fail:4   skip:27  time:648s
fi-elk-e7500     total:289  pass:230  dwarn:0   dfail:0   fail:0   skip:59  time:416s
fi-glk-1         total:289  pass:259  dwarn:1   dfail:0   fail:0   skip:29  time:561s
fi-hsw-4770      total:289  pass:263  dwarn:0   dfail:0   fail:0   skip:26  time:430s
fi-hsw-4770r     total:289  pass:263  dwarn:0   dfail:0   fail:0   skip:26  time:403s
fi-ilk-650       total:289  pass:229  dwarn:0   dfail:0   fail:0   skip:60  time:431s
fi-ivb-3520m     total:289  pass:261  dwarn:0   dfail:0   fail:0   skip:28  time:493s
fi-ivb-3770      total:289  pass:261  dwarn:0   dfail:0   fail:0   skip:28  time:464s
fi-kbl-7500u     total:289  pass:264  dwarn:1   dfail:0   fail:0   skip:24  time:475s
fi-kbl-7560u     total:289  pass:270  dwarn:0   dfail:0   fail:0   skip:19  time:576s
fi-kbl-r         total:289  pass:262  dwarn:0   dfail:0   fail:0   skip:27  time:586s
fi-pnv-d510      total:289  pass:223  dwarn:1   dfail:0   fail:0   skip:65  time:545s
fi-skl-6260u     total:289  pass:269  dwarn:0   dfail:0   fail:0   skip:20  time:452s
fi-skl-6700k     total:289  pass:265  dwarn:0   dfail:0   fail:0   skip:24  time:762s
fi-skl-6770hq    total:289  pass:269  dwarn:0   dfail:0   fail:0   skip:20  time:488s
fi-skl-gvtdvm    total:289  pass:266  dwarn:0   dfail:0   fail:0   skip:23  time:482s
fi-snb-2520m     total:289  pass:251  dwarn:0   dfail:0   fail:0   skip:38  time:575s
fi-snb-2600      total:289  pass:250  dwarn:0   dfail:0   fail:0   skip:39  time:418s
fi-bxt-dsi failed to connect after reboot

c1ed501217782b35094792696924a1d22ee83c0f drm-tip: 2017y-09m-28d-04h-52m-47s UTC integration manifest
8b0e808a9c7e drm/i915/bios: don't pass bdb to parsers that don't parse VBT directly
d8998f883ab5 drm/i915/bios: parse SDVO device mapping from pre-parsed child devices
9488a8a7070d drm/i915/bios: merge parse_device_mapping() into parse_general_definitions()
82f12f508663 drm/i915/bios: cleanup comments and useless return
f60cb1a89dd3 drm/i915/bios: remove an unnecessary temp variable
3a41abe26c68 drm/i915/bios: don't initialize fields based on vbt version
5fcddd78ef61 drm/i915/bios: refactor parse general definitions
3027d6ddfb20 drm/i915/bios: parse DDI ports also for CHV for HDMI DDC pin and DP AUX channel

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_5844/
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 15+ messages in thread

* ✓ Fi.CI.IGT: success for drm/i915/bios: VBT parsing fixes and cleanups
  2017-09-28  8:21 [PATCH 0/8] drm/i915/bios: VBT parsing fixes and cleanups Jani Nikula
                   ` (8 preceding siblings ...)
  2017-09-28  8:47 ` ✓ Fi.CI.BAT: success for drm/i915/bios: VBT parsing fixes and cleanups Patchwork
@ 2017-09-28  9:53 ` Patchwork
  9 siblings, 0 replies; 15+ messages in thread
From: Patchwork @ 2017-09-28  9:53 UTC (permalink / raw)
  To: Jani Nikula; +Cc: intel-gfx

== Series Details ==

Series: drm/i915/bios: VBT parsing fixes and cleanups
URL   : https://patchwork.freedesktop.org/series/31051/
State : success

== Summary ==

Test perf:
        Subgroup blocking:
                pass       -> FAIL       (shard-hsw) fdo#102252
Test kms_cursor_legacy:
        Subgroup cursorA-vs-flipA-atomic-transitions:
                fail       -> PASS       (shard-hsw)
Test gem_exec_reloc:
        Subgroup basic-write-read-noreloc:
                incomplete -> PASS       (shard-hsw)

fdo#102252 https://bugs.freedesktop.org/show_bug.cgi?id=102252

shard-hsw        total:2429 pass:1332 dwarn:4   dfail:0   fail:10  skip:1083 time:9910s

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_5844/shards.html
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 1/8] drm/i915/bios: parse DDI ports also for CHV for HDMI DDC pin and DP AUX channel
  2017-09-28  8:21   ` Jani Nikula
@ 2017-10-09 16:45     ` Ville Syrjälä
  -1 siblings, 0 replies; 15+ messages in thread
From: Ville Syrjälä @ 2017-10-09 16:45 UTC (permalink / raw)
  To: Jani Nikula; +Cc: intel-gfx, stable

On Thu, Sep 28, 2017 at 11:21:57AM +0300, Jani Nikula wrote:
> While technically CHV isn't DDI, we do look at the VBT based DDI port
> info for HDMI DDC pin and DP AUX channel. (We call these "alternate",
> but they're really just something that aren't platform defaults.)
> 
> In commit e4ab73a13291 ("drm/i915: Respect alternate_ddc_pin for all DDI
> ports") Ville writes, "IIRC there may be CHV system that might actually
> need this."
> 
> I'm not sure why there couldn't be even more platforms that need this,
> but start conservative, and parse the info for CHV in addition to DDI.

Going back as far as VLV might make some sense since it came out at around
the same time as HSW, and IIRC the VBT versions seen on VLV and HSW are
more less the same.

Series lgtm
Reviewed-by: Ville Syrj�l� <ville.syrjala@linux.intel.com>

> 
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=100553
> Reported-by: Marek Wilczewski <mw@3cte.pl>
> Cc: stable@vger.kernel.org
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_bios.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
> index 3747d8df0175..6b8d396ab605 100644
> --- a/drivers/gpu/drm/i915/intel_bios.c
> +++ b/drivers/gpu/drm/i915/intel_bios.c
> @@ -1247,7 +1247,7 @@ static void parse_ddi_ports(struct drm_i915_private *dev_priv,
>  {
>  	enum port port;
>  
> -	if (!HAS_DDI(dev_priv))
> +	if (!HAS_DDI(dev_priv) && !IS_CHERRYVIEW(dev_priv))
>  		return;
>  
>  	if (!dev_priv->vbt.child_dev_num)
> -- 
> 2.11.0

-- 
Ville Syrj�l�
Intel OTC

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 1/8] drm/i915/bios: parse DDI ports also for CHV for HDMI DDC pin and DP AUX channel
@ 2017-10-09 16:45     ` Ville Syrjälä
  0 siblings, 0 replies; 15+ messages in thread
From: Ville Syrjälä @ 2017-10-09 16:45 UTC (permalink / raw)
  To: Jani Nikula; +Cc: intel-gfx, stable

On Thu, Sep 28, 2017 at 11:21:57AM +0300, Jani Nikula wrote:
> While technically CHV isn't DDI, we do look at the VBT based DDI port
> info for HDMI DDC pin and DP AUX channel. (We call these "alternate",
> but they're really just something that aren't platform defaults.)
> 
> In commit e4ab73a13291 ("drm/i915: Respect alternate_ddc_pin for all DDI
> ports") Ville writes, "IIRC there may be CHV system that might actually
> need this."
> 
> I'm not sure why there couldn't be even more platforms that need this,
> but start conservative, and parse the info for CHV in addition to DDI.

Going back as far as VLV might make some sense since it came out at around
the same time as HSW, and IIRC the VBT versions seen on VLV and HSW are
more less the same.

Series lgtm
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

> 
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=100553
> Reported-by: Marek Wilczewski <mw@3cte.pl>
> Cc: stable@vger.kernel.org
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_bios.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
> index 3747d8df0175..6b8d396ab605 100644
> --- a/drivers/gpu/drm/i915/intel_bios.c
> +++ b/drivers/gpu/drm/i915/intel_bios.c
> @@ -1247,7 +1247,7 @@ static void parse_ddi_ports(struct drm_i915_private *dev_priv,
>  {
>  	enum port port;
>  
> -	if (!HAS_DDI(dev_priv))
> +	if (!HAS_DDI(dev_priv) && !IS_CHERRYVIEW(dev_priv))
>  		return;
>  
>  	if (!dev_priv->vbt.child_dev_num)
> -- 
> 2.11.0

-- 
Ville Syrjälä
Intel OTC

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 1/8] drm/i915/bios: parse DDI ports also for CHV for HDMI DDC pin and DP AUX channel
  2017-10-09 16:45     ` Ville Syrjälä
  (?)
@ 2017-10-10 10:18     ` Jani Nikula
  -1 siblings, 0 replies; 15+ messages in thread
From: Jani Nikula @ 2017-10-10 10:18 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: intel-gfx, stable

On Mon, 09 Oct 2017, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
> On Thu, Sep 28, 2017 at 11:21:57AM +0300, Jani Nikula wrote:
>> While technically CHV isn't DDI, we do look at the VBT based DDI port
>> info for HDMI DDC pin and DP AUX channel. (We call these "alternate",
>> but they're really just something that aren't platform defaults.)
>> 
>> In commit e4ab73a13291 ("drm/i915: Respect alternate_ddc_pin for all DDI
>> ports") Ville writes, "IIRC there may be CHV system that might actually
>> need this."
>> 
>> I'm not sure why there couldn't be even more platforms that need this,
>> but start conservative, and parse the info for CHV in addition to DDI.
>
> Going back as far as VLV might make some sense since it came out at around
> the same time as HSW, and IIRC the VBT versions seen on VLV and HSW are
> more less the same.

Let's do that later as needed.

> Series lgtm
> Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

Pushed all to dinq, thanks for the review.

BR,
Jani.


>
>> 
>> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=100553
>> Reported-by: Marek Wilczewski <mw@3cte.pl>
>> Cc: stable@vger.kernel.org
>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>> ---
>>  drivers/gpu/drm/i915/intel_bios.c | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>> 
>> diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
>> index 3747d8df0175..6b8d396ab605 100644
>> --- a/drivers/gpu/drm/i915/intel_bios.c
>> +++ b/drivers/gpu/drm/i915/intel_bios.c
>> @@ -1247,7 +1247,7 @@ static void parse_ddi_ports(struct drm_i915_private *dev_priv,
>>  {
>>  	enum port port;
>>  
>> -	if (!HAS_DDI(dev_priv))
>> +	if (!HAS_DDI(dev_priv) && !IS_CHERRYVIEW(dev_priv))
>>  		return;
>>  
>>  	if (!dev_priv->vbt.child_dev_num)
>> -- 
>> 2.11.0

-- 
Jani Nikula, Intel Open Source Technology Center

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2017-10-10 10:18 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-09-28  8:21 [PATCH 0/8] drm/i915/bios: VBT parsing fixes and cleanups Jani Nikula
2017-09-28  8:21 ` [PATCH 1/8] drm/i915/bios: parse DDI ports also for CHV for HDMI DDC pin and DP AUX channel Jani Nikula
2017-09-28  8:21   ` Jani Nikula
2017-10-09 16:45   ` Ville Syrjälä
2017-10-09 16:45     ` Ville Syrjälä
2017-10-10 10:18     ` Jani Nikula
2017-09-28  8:21 ` [PATCH 2/8] drm/i915/bios: refactor parse general definitions Jani Nikula
2017-09-28  8:21 ` [PATCH 3/8] drm/i915/bios: don't initialize fields based on vbt version Jani Nikula
2017-09-28  8:22 ` [PATCH 4/8] drm/i915/bios: remove an unnecessary temp variable Jani Nikula
2017-09-28  8:22 ` [PATCH 5/8] drm/i915/bios: cleanup comments and useless return Jani Nikula
2017-09-28  8:22 ` [PATCH 6/8] drm/i915/bios: merge parse_device_mapping() into parse_general_definitions() Jani Nikula
2017-09-28  8:22 ` [PATCH 7/8] drm/i915/bios: parse SDVO device mapping from pre-parsed child devices Jani Nikula
2017-09-28  8:22 ` [PATCH 8/8] drm/i915/bios: don't pass bdb to parsers that don't parse VBT directly Jani Nikula
2017-09-28  8:47 ` ✓ Fi.CI.BAT: success for drm/i915/bios: VBT parsing fixes and cleanups Patchwork
2017-09-28  9:53 ` ✓ Fi.CI.IGT: " Patchwork

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.