platform/x86/intel/tpmi: Don't create devices for disabled features
authorSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Mon, 4 Dec 2023 22:17:36 +0000 (14:17 -0800)
committerHans de Goede <hdegoede@redhat.com>
Mon, 11 Dec 2023 10:06:41 +0000 (11:06 +0100)
If some TPMI features are disabled, don't create auxiliary devices. In
this way feature drivers will not load.

While creating auxiliary devices, call tpmi_read_feature_status() to
check feature state and return if the feature is disabled without
creating a device.

Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Link: https://lore.kernel.org/r/20231204221740.3645130-2-srinivas.pandruvada@linux.intel.com
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
drivers/platform/x86/intel/tpmi.c

index 311abcac894a63c005d571a34c9ab23c4c536b2f..09972e2b8a068e3eb7e41bf135b88346ed9dca46 100644 (file)
@@ -598,9 +598,21 @@ static int tpmi_create_device(struct intel_tpmi_info *tpmi_info,
        struct intel_vsec_device *vsec_dev = tpmi_info->vsec_dev;
        char feature_id_name[TPMI_FEATURE_NAME_LEN];
        struct intel_vsec_device *feature_vsec_dev;
+       struct tpmi_feature_state feature_state;
        struct resource *res, *tmp;
        const char *name;
-       int i;
+       int i, ret;
+
+       ret = tpmi_read_feature_status(tpmi_info, pfs->pfs_header.tpmi_id, &feature_state);
+       if (ret)
+               return ret;
+
+       /*
+        * If not enabled, continue to look at other features in the PFS, so return -EOPNOTSUPP.
+        * This will not cause failure of loading of this driver.
+        */
+       if (!feature_state.enabled)
+               return -EOPNOTSUPP;
 
        name = intel_tpmi_name(pfs->pfs_header.tpmi_id);
        if (!name)