On Tue, 25 Nov 2025, Daniele Ceraolo Spurio <[email protected]> 
wrote:
> On 11/25/2025 2:26 AM, Jani Nikula wrote:
>> On Fri, 14 Nov 2025, Daniele Ceraolo Spurio 
>> <[email protected]> wrote:
>>> The intel GFX drivers (i915/xe) interface with the ME device for some of
>>> their features (e.g. PXP, HDCP) via the component interface. Given that
>>> the ME device can be hidden by BIOS/Coreboot, the GFX drivers need a
>>> way to check if the device is available before attempting to bind the
>>> component, otherwise they'll go ahead and initialize features that will
>>> never work.
>>> The simplest way to check if the ME device is available is to check the
>>> available devices against the PCI ID list of the mei_me driver. To avoid
>>> duplication, this patch exports the list, so that it can be used directly
>>> from the GFX drivers.
>>>
>>> Signed-off-by: Daniele Ceraolo Spurio <[email protected]>
>>> Cc: Alexander Usyskin <[email protected]>
>>> Cc: Greg Kroah-Hartman <[email protected]>
>>> ---
>>>   drivers/misc/mei/pci-me.c | 12 +++++++++++-
>>>   include/linux/mei_me.h    | 15 +++++++++++++++
>>>   2 files changed, 26 insertions(+), 1 deletion(-)
>>>   create mode 100644 include/linux/mei_me.h
>>>
>>> diff --git a/drivers/misc/mei/pci-me.c b/drivers/misc/mei/pci-me.c
>>> index b017ff29dbd1..632756f9da66 100644
>>> --- a/drivers/misc/mei/pci-me.c
>>> +++ b/drivers/misc/mei/pci-me.c
>>> @@ -18,6 +18,7 @@
>>>   #include <linux/pm_runtime.h>
>>>   
>>>   #include <linux/mei.h>
>>> +#include <linux/mei_me.h>
>>>   
>>>   #include "mei_dev.h"
>>>   #include "client.h"
>>> @@ -25,7 +26,7 @@
>>>   #include "hw-me.h"
>>>   
>>>   /* mei_pci_tbl - PCI Device ID Table */
>>> -static const struct pci_device_id mei_me_pci_tbl[] = {
>>> +const struct pci_device_id mei_me_pci_tbl[] = {
>>>     {MEI_PCI_DEVICE(MEI_DEV_ID_82946GZ, MEI_ME_ICH_CFG)},
>>>     {MEI_PCI_DEVICE(MEI_DEV_ID_82G35, MEI_ME_ICH_CFG)},
>>>     {MEI_PCI_DEVICE(MEI_DEV_ID_82Q965, MEI_ME_ICH_CFG)},
>>> @@ -135,6 +136,15 @@ static const struct pci_device_id mei_me_pci_tbl[] = {
>>>   
>>>   MODULE_DEVICE_TABLE(pci, mei_me_pci_tbl);
>>>   
>>> +/*
>>> + * Other drivers (e.g., i915, xe) interface with the ME device for some of 
>>> their
>>> + * features (e.g., PXP, HDCP). However, the ME device can be unplugged via 
>>> the
>>> + * pci subsystem or hidden by BIOS/coreboot, so those drivers might want to
>>> + * check if the device is available before initializing those features. To
>>> + * allow them to perform such a check, we export the list of ME device IDs.
>>> + */
>>> +EXPORT_SYMBOL_GPL(mei_me_pci_tbl);
>> Data is not an interface.
>>
>> Please add an exported helper function (with a sensible stub for
>> CONFIG_INTEL_MEI_ME=n) and everything becomes much cleaner both mei and
>> i915 side.
>
> That is actually what I had in v2 [1], but Greg suggested to export the 
> table directly instead. I am ok either way.

Well I'm not asking to add a function to return the device id table,
which certainly has the worst of both approaches. I'm asking to add a
function that does the required check, which I think is overall
simplest.

BR,
Jani.


>
> [1] https://patchwork.freedesktop.org/patch/674368/?series=151677&rev=2
>
> Daniele
>
>>
>> BR,
>> Jani.
>>
>>> +
>>>   #ifdef CONFIG_PM
>>>   static inline void mei_me_set_pm_domain(struct mei_device *dev);
>>>   static inline void mei_me_unset_pm_domain(struct mei_device *dev);
>>> diff --git a/include/linux/mei_me.h b/include/linux/mei_me.h
>>> new file mode 100644
>>> index 000000000000..48fd913a3d95
>>> --- /dev/null
>>> +++ b/include/linux/mei_me.h
>>> @@ -0,0 +1,15 @@
>>> +/* SPDX-License-Identifier: GPL-2.0 */
>>> +/*
>>> + * Copyright (c) 2025, Intel Corporation. All rights reserved.
>>> + */
>>> +
>>> +#ifndef _LINUX_MEI_ME_H
>>> +#define _LINUX_MEI_ME_H
>>> +
>>> +#include <linux/pci.h>
>>> +
>>> +#if IS_ENABLED(CONFIG_INTEL_MEI_ME)
>>> +extern const struct pci_device_id mei_me_pci_tbl[];
>>> +#endif
>>> +
>>> +#endif /* _LINUX_MEI_ME_H */
>

-- 
Jani Nikula, Intel

Reply via email to