summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_bios.h
diff options
context:
space:
mode:
authorVille Syrjälä2015-03-25 17:45:58 +0100
committerDaniel Vetter2015-04-10 08:56:14 +0200
commit90e4f1592bb6e82f6690f0e05a8aadcf04d7bce7 (patch)
tree52e9cd26c4d15f33bdad0c47218de4f7e8943224 /drivers/gpu/drm/i915/intel_bios.h
parentdrm/i915: Use complete address space in true PPGTT (diff)
downloadkernel-qcow2-linux-90e4f1592bb6e82f6690f0e05a8aadcf04d7bce7.tar.gz
kernel-qcow2-linux-90e4f1592bb6e82f6690f0e05a8aadcf04d7bce7.tar.xz
kernel-qcow2-linux-90e4f1592bb6e82f6690f0e05a8aadcf04d7bce7.zip
drm/i915: Fix the VBT child device parsing for BSW
Recent BSW VBT has a VBT child device size 37 bytes instead of the 33 bytes our code assumes. This means we fail to parse the VBT and thus fail to detect eDP ports properly and just register them as DP ports instead. Fix it up by using the reported child device size from the VBT instead of assuming it matches out struct defintions. The latest spec I have shows that the child device size should be 36 bytes for rev >= 195, however on my BSW the size is actually 37 bytes. And our current struct definition is 33 bytes. Feels like the entire VBT parses would need to be rewritten to handle changes in the layout better, but for now I've decided to do just the bare minimum to get my eDP port back. Cc: Vijay Purushothaman <vijay.a.purushothaman@linux.intel.com> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Reviewed-by: Damien Lespiau <damien.lespiau@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_bios.h')
-rw-r--r--drivers/gpu/drm/i915/intel_bios.h4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/gpu/drm/i915/intel_bios.h b/drivers/gpu/drm/i915/intel_bios.h
index 6afd5be33367..af0b47652752 100644
--- a/drivers/gpu/drm/i915/intel_bios.h
+++ b/drivers/gpu/drm/i915/intel_bios.h
@@ -277,9 +277,9 @@ struct bdb_general_definitions {
* And the device num is related with the size of general definition
* block. It is obtained by using the following formula:
* number = (block_size - sizeof(bdb_general_definitions))/
- * sizeof(child_device_config);
+ * defs->child_dev_size;
*/
- union child_device_config devices[0];
+ uint8_t devices[0];
} __packed;
/* Mask for DRRS / Panel Channel / SSC / BLT control bits extraction */