On 9/12/2025 6:44 AM, Greg Kroah-Hartman wrote:
On Thu, Sep 11, 2025 at 10:50:23AM -0700, Daniele Ceraolo Spurio 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 device is available is to check the
available devices against the PCI ID list of the mei_me driver. To avoid
duplication, this patch adds an exported function that the GFX driver
can call to obtain the list. Locking around the checks, if required,
is left to the caller.

Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospu...@intel.com>
Cc: Alexander Usyskin <alexander.usys...@intel.com>
Cc: Greg Kroah-Hartman <gre...@linuxfoundation.org>
---
  drivers/misc/mei/pci-me.c | 22 ++++++++++++++++++++++
  include/linux/mei_me.h    | 20 ++++++++++++++++++++
  2 files changed, 42 insertions(+)
  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 3f9c60b579ae..147e79b4ae1f 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"
@@ -133,6 +134,27 @@ static const struct pci_device_id mei_me_pci_tbl[] = {
MODULE_DEVICE_TABLE(pci, mei_me_pci_tbl); +/**
+ * mei_me_get_device_id_table - get the list of ME pci device IDs
+ *
+ * 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. This
+ * function offers a way for those drivers to get the list of ME device IDs,
+ * so they can check if one of them is available before attempting to
+ * interface with it. Locking around the availability check, if required,
+ * is left to the caller.
+ *
+ * Return: An array of struct pci_device_id entries containing the IDs of
+ * the ME devices.
+ */
+const struct pci_device_id *mei_me_get_device_id_table(void)
+{
+       return mei_me_pci_tbl;
+}
+EXPORT_SYMBOL_GPL(mei_me_get_device_id_table);
Why not just do:

        EXPORT_SYMBOL_GPL(mei_me_pci_tbl);

instead?

Much simpler :)

Good point! :P
I'll update.

Thanks,
Daniele


thanks,

greg k-h

Reply via email to