> Do you expect to have other settings that you won't get from a VBIOS VBT
> (e.g. video timings, dual refresh info)?
>
> If so, it might make more sense to have an alternate init path for the
> non-VBT values to replace all the VBT parsing.  I.e. if your DMI match
> happens, call into something other than our init_bios routine to set up
> defaults for the platform.
>
> --
> Jesse Barnes, Intel Open Source Technology Center

Hi Jesse,

I am not expecting any other settings.  Having an alternate init path
isn't quite what I have in mind.  This patch is specifically for
intel_bios_ssc_frequency, which has 2 choices for frequency (primary &
alternate).

You do bring up a good point about other settings though.  What if,
for example, there were another system that wanted lvds_dither=0 and
another wanted edp.bpp=8 and another wanted edp.bpp=16?.  It would be
impractical to define separate functions for them -- we would have to
accommodate each of these system-specific settings independently.

Instead, I think we could introduce a function that would allow for
quick DMI checks, without having to define bulky DMI tables:

        static bool is_product(const char *name) {
                struct dmi_system_id id[] = {
                        {
                                .callback = NULL,
                                .matches = {
                                        DMI_MATCH(DMI_PRODUCT_NAME, name),
                                }
                        },
                        {}
                }
        
                return dmi_check_system(id);
        }

In this current patch, we can simply have:

        if (is_product("Lumpy"))
                dev_priv->lvds_ssc_freq = intel_bios_ssc_frequency(dev, 0);
        else
                dev_priv->lvds_ssc_freq = intel_bios_ssc_frequency(dev, 1);

In the future, if others want to add the example defaults I listed
earlier (lvds_dither and edp.bpp), they can do something like:

        if (is_product("AAA") || is_product("BBB"))
                dev_priv->lvds_dither = 1;
        else
                dev_priv->lvds_dither = 0;
        ...
        if (is_product("CCC") || is_product("DDD"))
                dev_priv->edp.bpp = 8;
        else if (is_product("EEE"))
                dev_priv->edp.bpp = 16;
        else
                dev_priv->edp.bpp = 18;

These selections are all independent of each other.  All this will
still happen within init_vbt_defaults() but without the need to define
more DMI structures for each check.

Some ideas for developing this further:
- Create more quick DMI check functions for the other possible DMI
match criteria.
- Include all these functions in the DMI API, so all modules can use them.

Thanks,
Simon
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to