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
