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.

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