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.

[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 */

Reply via email to