On Wed, 15 Feb 2017, Hans de Goede <hdegoede@xxxxxxxxxx> wrote: > Hi, > > On 14-02-17 17:12, Jani Nikula wrote: >> From: Hans de Goede <hdegoede@xxxxxxxxxx> >> >> 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@xxxxxxxxxxxxxxx >> Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx> >> Signed-off-by: Jani Nikula <jani.nikula@xxxxxxxxx> >> >> --- >> >> Hans, I'm resending because for some reason our CI didn't pick this >> up. Fixed a s/one/on/ typo in the comment while at it. > > Ok. Let me know if you need me to do anything to move this forward. No, just sit back. Pushed to drm-intel-next-queued, thanks for the patch. BR, Jani. > > Regards, > > Hans > > >> --- >> drivers/gpu/drm/i915/intel_opregion.c | 13 ++++++++++++- >> 1 file changed, 12 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/gpu/drm/i915/intel_opregion.c b/drivers/gpu/drm/i915/intel_opregion.c >> index f4429f67a4e3..4a862a358c70 100644 >> --- a/drivers/gpu/drm/i915/intel_opregion.c >> +++ b/drivers/gpu/drm/i915/intel_opregion.c >> @@ -982,7 +982,18 @@ int intel_opregion_setup(struct drm_i915_private *dev_priv) >> opregion->vbt_size = vbt_size; >> } else { >> 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)) { >> DRM_DEBUG_KMS("Found valid VBT in ACPI OpRegion (Mailbox #4)\n"); >> opregion->vbt = vbt; >> -- Jani Nikula, Intel Open Source Technology Center