drm/i915: Fix not finding the VBT when it overlaps with OPREGION_ASLE_EXT
If there is no OPREGION_ASLE_EXT then a VBT stored in mailbox #4 may use the ASLE_EXT parts of the opregion. Adjust the vbt_size calculation for a vbt in mailbox #4 for this. This fixes the driver not finding the VBT on a jumper ezpad mini3 cherrytrail tablet and on a ACER SW5_017 machine. Cc: stable@vger.kernel.org Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Jani Nikula <jani.nikula@intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/1487088758-30050-1-git-send-email-jani.nikula@intel.com
This commit is contained in:
parent
4ac9659ef9
commit
dfb65e71ea
|
@ -982,7 +982,18 @@ int intel_opregion_setup(struct drm_i915_private *dev_priv)
|
||||||
opregion->vbt_size = vbt_size;
|
opregion->vbt_size = vbt_size;
|
||||||
} else {
|
} else {
|
||||||
vbt = base + OPREGION_VBT_OFFSET;
|
vbt = base + OPREGION_VBT_OFFSET;
|
||||||
vbt_size = OPREGION_ASLE_EXT_OFFSET - OPREGION_VBT_OFFSET;
|
/*
|
||||||
|
* The VBT specification says that if the ASLE ext
|
||||||
|
* mailbox is not used its area is reserved, but
|
||||||
|
* on some CHT boards the VBT extends into the
|
||||||
|
* ASLE ext area. Allow this even though it is
|
||||||
|
* against the spec, so we do not end up rejecting
|
||||||
|
* the VBT on those boards (and end up not finding the
|
||||||
|
* LCD panel because of this).
|
||||||
|
*/
|
||||||
|
vbt_size = (mboxes & MBOX_ASLE_EXT) ?
|
||||||
|
OPREGION_ASLE_EXT_OFFSET : OPREGION_SIZE;
|
||||||
|
vbt_size -= OPREGION_VBT_OFFSET;
|
||||||
if (intel_bios_is_valid_vbt(vbt, vbt_size)) {
|
if (intel_bios_is_valid_vbt(vbt, vbt_size)) {
|
||||||
DRM_DEBUG_KMS("Found valid VBT in ACPI OpRegion (Mailbox #4)\n");
|
DRM_DEBUG_KMS("Found valid VBT in ACPI OpRegion (Mailbox #4)\n");
|
||||||
opregion->vbt = vbt;
|
opregion->vbt = vbt;
|
||||||
|
|
Loading…
Reference in New Issue