[PATCH] drm/gma500: Add CedarView LVDS blacklist

Hans de Goede hdegoede at redhat.com
Tue Apr 9 14:44:50 UTC 2019


Hi,

On 09-04-19 14:05, Patrik Jakobsson wrote:
> On Tue, Apr 9, 2019 at 12:20 PM Hans de Goede <hdegoede at redhat.com> wrote:
>>
>> Hi,
>>
>> On 09-04-19 11:47, Patrik Jakobsson wrote:
>>> On Tue, Apr 9, 2019 at 8:51 AM Hans de Goede <hdegoede at redhat.com> wrote:
>>>>
>>>> Some CedarView VBT-s claim that there is a LVDS panel, while there is none.
>>>> Specifically this happens on the Thecus N2800 / N5550 NAS models.
>>>>
>>>> This commit adds a LVDS blacklist to deal with this and adds an entry for
>>>> the Thecus NAS-es.
>>>
>>> Hi Hans,
>>> Sometimes LVDS can be configured in the BIOS on CDV devices. Can you
>>> check that it's not just a bad BIOS configuration first?
>>
>> I've asked the reporter to test, but even if there is a BIOS option it
>> seems that the BIOS default setting is wrong and we cannot expect every
>> user to go into the BIOS to fix a wrong BIOS setting.
>>
>> According to this blogpost, which is about the Linux the device ships with:
>> https://astroweasel.blogspot.com/2016/02/updating-thecus-n5550-nas-to-report.html
>>
>> The pre-installed grub config includes 'video=LVDS-1:d' on the kernel
>> commandline, so this clearly seems to be a case where the system is just
>> shipping with a broken BIOS or at least with default BIOS settings which
>> is just as bad.
> 
> I agree that we should try to fix a broken default but are you sure
> this will only affect the n5550? IIUC Milstead / Granite Well is an
> Intel product / board name and perhaps some of those use LVDS.

Milstead is the name of Intel's NAS reference design:

https://www.hardwarezone.com.my/tech-news-intel-unveils-milstead-platform-nas-devices

I seriously doubt that any NAS-es have a LVDS (laptop/tablet) LCD panel.

> Also, if the pre-installed OS solves this on the cmdline then it's
> only a problem if the user is trying to install a custom OS on the
> device. I would expect such a user to be able to change bios settings.
> 
> I'm not totally against this but not sure about the consequences. Is
> there perhaps a better dmi string to match against?

No there are no better DMI strings to match against I'm afraid.

Regards,

Hans



>>>> BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1665766
>>>> Signed-off-by: Hans de Goede <hdegoede at redhat.com>
>>>> ---
>>>>    drivers/gpu/drm/gma500/cdv_intel_lvds.c | 23 +++++++++++++++++++++++
>>>>    1 file changed, 23 insertions(+)
>>>>
>>>> diff --git a/drivers/gpu/drm/gma500/cdv_intel_lvds.c b/drivers/gpu/drm/gma500/cdv_intel_lvds.c
>>>> index de9531caaca0..268643af114c 100644
>>>> --- a/drivers/gpu/drm/gma500/cdv_intel_lvds.c
>>>> +++ b/drivers/gpu/drm/gma500/cdv_intel_lvds.c
>>>> @@ -572,6 +572,20 @@ static bool lvds_is_present_in_vbt(struct drm_device *dev,
>>>>           return false;
>>>>    }
>>>>
>>>> +static const struct dmi_system_id cdv_intel_lvds_blacklist[] = {
>>>> +       {
>>>> +               /* Thecus N2800 and N5550 family NAS-es */
>>>> +               .matches = {
>>>> +                       DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Intel Corporation"),
>>>> +                       DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Milstead Platform"),
>>>> +                       DMI_EXACT_MATCH(DMI_BOARD_NAME, "Granite Well"),
>>>> +                       /* BIOS version is CDV_T<version> X64 */
>>>> +                       DMI_MATCH(DMI_BIOS_VERSION, "CDV_T"),
>>>> +               },
>>>> +       },
>>>> +       {}
>>>> +};
>>>> +
>>>>    /**
>>>>     * cdv_intel_lvds_init - setup LVDS connectors on this device
>>>>     * @dev: drm device
>>>> @@ -594,6 +608,15 @@ void cdv_intel_lvds_init(struct drm_device *dev,
>>>>           int pipe;
>>>>           u8 pin;
>>>>
>>>> +       /*
>>>> +        * Check blacklist for machines with BIOSes that list an LVDS panel
>>>> +        * without actually having one.
>>>> +        */
>>>> +       if (dmi_check_system(cdv_intel_lvds_blacklist)) {
>>>> +               dev_info(&dev->pdev->dev, "System is on LVDS blacklist, skipping LVDS panel detection\n");
>>>> +               return;
>>>> +       }
>>>> +
>>>>           pin = GMBUS_PORT_PANEL;
>>>>           if (!lvds_is_present_in_vbt(dev, &pin)) {
>>>>                   DRM_DEBUG_KMS("LVDS is not present in VBT\n");
>>>> --
>>>> 2.21.0
>>>>


More information about the dri-devel mailing list