mei: pxp: support matching with a gfx discrete card
authorTomas Winkler <tomas.winkler@intel.com>
Wed, 28 Sep 2022 00:41:36 +0000 (17:41 -0700)
committerDaniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Mon, 3 Oct 2022 18:29:12 +0000 (11:29 -0700)
With on-boards graphics card, both i915 and MEI
are in the same device hierarchy with the same parent,
while for discrete gfx card the MEI is its child device.
Adjust the match function for that scenario
by matching MEI parent device with i915.

Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: Vitaly Lubart <vitaly.lubart@intel.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Reviewed-by: Alan Previn <alan.previn.teres.alexis@intel.com>
Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20220928004145.745803-7-daniele.ceraolospurio@intel.com
drivers/misc/mei/pxp/mei_pxp.c

index f221464c400984c3e75499d4ae2afbe381e2c31c..8dd09b1722ebdd0c0c4ccb61c3e4cca5fafeda29 100644 (file)
@@ -156,17 +156,24 @@ static int mei_pxp_component_match(struct device *dev, int subcomponent,
 {
        struct device *base = data;
 
+       if (!dev)
+               return 0;
+
        if (!dev->driver || strcmp(dev->driver->name, "i915") ||
            subcomponent != I915_COMPONENT_PXP)
                return 0;
 
        base = base->parent;
-       if (!base)
+       if (!base) /* mei device */
                return 0;
 
-       base = base->parent;
-       dev = dev->parent;
+       base = base->parent; /* pci device */
+       /* for dgfx */
+       if (base && dev == base)
+               return 1;
 
+       /* for pch */
+       dev = dev->parent;
        return (base && dev && dev == base);
 }