Re: [PATCH] drm/i915: Quirk to ignore VBT bpp

Jani Nikula
2013-09-23T18:02:38Z

On Mon, 23 Sep 2013, Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com> wrote:
> On 09/22/2013 11:18 PM, Jani Nikula wrote:
>> On Sat, 21 Sep 2013, Ben Widawsky <benjamin.widawsky@intel.com> wrote:
>>> We've had several reports of an Asus Zenbook reporting an 18bpp eDP
>>> display, which then proceeds to not work. Using the default 24, work
>>> just fine. Since it appears this is somewhat common in the budding world
>>> of eDP, make a new quirk for it, and use it.
>> Srinivas, are you using UEFI boot? Does the problem go away if you try
>> enabling CSM or legacy boot?
>>
>> That would be [1]. On certain machines we need to use the bpp from VBT,
>> otherwise eDP fails. For some reason the VBT on certain other machines
>> reports a different bpp value depending on UEFI vs. CSM/legacy boot,
>> where the former fails but latter works.
>>
>> There are more affected machines than just Asus Zenbook UX31A IVB, and
>> I'm not sure if quirking is the right option... still hoping to find a
>> good solution that works out of the box for everyone.
>>
> I see for some folks enabling legacy mode solves this issue and for some
> it doesn't solve (There are number of report of this issue).

I'd be interested in references and hard data; I was pretty much under
the impression it always works in legacy.

> For me UEFI boot is important because I am working on some feature
> requiring UEFI boot.

Of course; I'm not saying enabling legacy is a fix, or even a decent
workaround. Just interested in another data point.

Jani.

>> BR,
>> Jani.
>>
>>
>> [1] https://bugzilla.kernel.org/show_bug.cgi?id=59841
>>
>>
>>> This code has been changed several times. Amongst the most recent with
>>> the best history are:
>>>
>>> commit 57c219633275c7e7413f8bc7be250dc092887458
>>> Author: Daniel Vetter <daniel.vetter@ffwll.ch>
>>> Date: Thu Apr 4 17:19:37 2013 +0200
>>>
>>> drm/i915: revert eDP bpp clamping code changes
>>>
>>> and
>>>
>>> commit af13188a1a6623fc8b4b6c42178046fb80f8b1d0
>>> Author: Daniel Vetter <daniel.vetter@ffwll.ch>
>>> Date: Tue Feb 19 17:45:00 2013 +0100
>>>
>>> drm/i915: force bpp for eDP panels
>>>
>>> Reported-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
>>> CC: Adam Jackson <ajax@redhat.com>
>>> CC: Daniel Vetter <daniel.vetter@ffwll.ch>
>>> Signed-off-by: Ben Widawsky <ben@bwidawsk.net>
>>> ---
>>> drivers/gpu/drm/i915/i915_drv.h | 1 +
>>> drivers/gpu/drm/i915/intel_display.c | 12 ++++++++++++
>>> drivers/gpu/drm/i915/intel_dp.c | 4 +++-
>>> 3 files changed, 16 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
>>> index 8c52cbd..bc8ff0a 100644
>>> --- a/drivers/gpu/drm/i915/i915_drv.h
>>> +++ b/drivers/gpu/drm/i915/i915_drv.h
>>> @@ -672,6 +672,7 @@ enum intel_sbi_destination {
>>> #define QUIRK_LVDS_SSC_DISABLE (1<<1)
>>> #define QUIRK_INVERT_BRIGHTNESS (1<<2)
>>> #define QUIRK_NO_PCH_PWM_ENABLE (1<<3)
>>> +#define QUIRK_IGNORE_VBT_BPP (1<<4)
>>>
>>> struct intel_fbdev;
>>> struct intel_fbc_work;
>>> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
>>> index 8206ee7..c364377 100644
>>> --- a/drivers/gpu/drm/i915/intel_display.c
>>> +++ b/drivers/gpu/drm/i915/intel_display.c
>>> @@ -10139,6 +10139,15 @@ static void quirk_no_pcm_pwm_enable(struct drm_device *dev)
>>> DRM_INFO("applying no-PCH_PWM_ENABLE quirk\n");
>>> }
>>>
>>> +/* Some machines (ux31a) advertise the panel should use 18bpp, but it lies.
>>> + */
>>> +static void quirk_ignore_vbt_bpp(struct drm_device *dev)
>>> +{
>>> + struct drm_i915_private *dev_priv = dev->dev_private;
>>> + dev_priv->quirks |= QUIRK_IGNORE_VBT_BPP;
>>> + DRM_INFO("applying IGNORE_VBT_BPP quirk\n");
>>> +}
>>> +
>>> struct intel_quirk {
>>> int device;
>>> int subsystem_vendor;
>>> @@ -10213,6 +10222,9 @@ static struct intel_quirk intel_quirks[] = {
>>> { 0x0116, 0x1028, 0x052e, quirk_no_pcm_pwm_enable },
>>> /* Dell XPS13 HD and XPS13 FHD Ivy Bridge */
>>> { 0x0166, 0x1028, 0x058b, quirk_no_pcm_pwm_enable },
>>> +
>>> + /* Asus Zenbook UX31A Ivybridge eDP */
>>> + { 0x0166, 0x1043, 0x1517, quirk_ignore_vbt_bpp },
>>> };
>>>
>>> static void intel_init_quirks(struct drm_device *dev)
>>> diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
>>> index 9770160..fd47be8 100644
>>> --- a/drivers/gpu/drm/i915/intel_dp.c
>>> +++ b/drivers/gpu/drm/i915/intel_dp.c
>>> @@ -805,7 +805,9 @@ intel_dp_compute_config(struct intel_encoder *encoder,
>>> /* Walk through all bpp values. Luckily they're all nicely spaced with 2
>>> * bpc in between. */
>>> bpp = pipe_config->pipe_bpp;
>>> - if (is_edp(intel_dp) && dev_priv->vbt.edp_bpp) {
>>> + if (is_edp(intel_dp) &&
>>> + dev_priv->vbt.edp_bpp &&
>>> + (dev_priv->quirks & QUIRK_IGNORE_VBT_BPP) == 0) {
>>> DRM_DEBUG_KMS("clamping bpp for eDP panel to BIOS-provided %i\n",
>>> dev_priv->vbt.edp_bpp);
>>> bpp = min_t(int, bpp, dev_priv->vbt.edp_bpp);
>>> --
>>> 1.8.4
>>>
>>> _______________________________________________
>>> Intel-gfx mailing list
>>> Intel-gfx@lists.freedesktop.org
>>> http://lists.freedesktop.org/mailman/listinfo/intel-gfx