]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
platform/x86/intel/vsec: Add new Discovery feature
authorDavid E. Box <david.e.box@linux.intel.com>
Thu, 3 Jul 2025 02:28:22 +0000 (19:28 -0700)
committerIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Thu, 3 Jul 2025 08:09:30 +0000 (11:09 +0300)
Add the PCIe VSEC ID for new Intel Platform Monitoring Technology
Capability Discovery feature. Discovery provides detailed information for
the various Intel VSEC features. Also make the driver a supplier for
TPMI and Telemetry drivers which will use the information.

Signed-off-by: David E. Box <david.e.box@linux.intel.com>
Link: https://lore.kernel.org/r/20250703022832.1302928-8-david.e.box@linux.intel.com
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
drivers/platform/x86/intel/vsec.c
include/linux/intel_vsec.h

index 30e558af6888770862a96f79eb12b6aaff089593..4d76f1ac3c8c0922680b33404bc821aa332806ca 100644 (file)
@@ -66,6 +66,9 @@ static const char *intel_vsec_name(enum intel_vsec_id id)
        case VSEC_ID_TPMI:
                return "tpmi";
 
+       case VSEC_ID_DISCOVERY:
+               return "discovery";
+
        default:
                return NULL;
        }
@@ -84,6 +87,8 @@ static bool intel_vsec_supported(u16 id, unsigned long caps)
                return !!(caps & VSEC_CAP_SDSI);
        case VSEC_ID_TPMI:
                return !!(caps & VSEC_CAP_TPMI);
+       case VSEC_ID_DISCOVERY:
+               return !!(caps & VSEC_CAP_DISCOVERY);
        default:
                return false;
        }
@@ -138,6 +143,8 @@ static bool vsec_driver_present(int cap_id)
                return IS_ENABLED(CONFIG_INTEL_SDSI);
        case VSEC_CAP_TPMI:
                return IS_ENABLED(CONFIG_INTEL_TPMI);
+       case VSEC_CAP_DISCOVERY:
+               return IS_ENABLED(CONFIG_INTEL_PMT_DISCOVERY);
        default:
                return false;
        }
@@ -392,6 +399,9 @@ static int get_cap_id(u32 header_id, unsigned long *cap_id)
        case VSEC_ID_TPMI:
                *cap_id = ilog2(VSEC_CAP_TPMI);
                break;
+       case VSEC_ID_DISCOVERY:
+               *cap_id = ilog2(VSEC_CAP_DISCOVERY);
+               break;
        default:
                return -EINVAL;
        }
@@ -681,14 +691,26 @@ static const struct intel_vsec_platform_info mtl_info = {
        .caps = VSEC_CAP_TELEMETRY,
 };
 
+static const struct vsec_feature_dependency oobmsm_deps[] = {
+       {
+               .feature = VSEC_CAP_TELEMETRY,
+               .supplier_bitmap = VSEC_CAP_DISCOVERY,
+       },
+};
+
 /* OOBMSM info */
 static const struct intel_vsec_platform_info oobmsm_info = {
-       .caps = VSEC_CAP_TELEMETRY | VSEC_CAP_SDSI | VSEC_CAP_TPMI,
+       .caps = VSEC_CAP_TELEMETRY | VSEC_CAP_SDSI | VSEC_CAP_TPMI |
+               VSEC_CAP_DISCOVERY,
+       .deps = oobmsm_deps,
+       .num_deps = ARRAY_SIZE(oobmsm_deps),
 };
 
 /* DMR OOBMSM info */
 static const struct intel_vsec_platform_info dmr_oobmsm_info = {
-       .caps = VSEC_CAP_TELEMETRY | VSEC_CAP_TPMI,
+       .caps = VSEC_CAP_TELEMETRY | VSEC_CAP_TPMI | VSEC_CAP_DISCOVERY,
+       .deps = oobmsm_deps,
+       .num_deps = ARRAY_SIZE(oobmsm_deps),
 };
 
 /* TGL info */
index 71067afaca9922894d8ea933e56067475ddf1fa7..a07796d7d43be95a54e663ee5ac2e18bd313eca0 100644 (file)
@@ -16,7 +16,8 @@
 #define VSEC_CAP_CRASHLOG      BIT(3)
 #define VSEC_CAP_SDSI          BIT(4)
 #define VSEC_CAP_TPMI          BIT(5)
-#define VSEC_FEATURE_COUNT     6
+#define VSEC_CAP_DISCOVERY     BIT(6)
+#define VSEC_FEATURE_COUNT     7
 
 /* Intel DVSEC offsets */
 #define INTEL_DVSEC_ENTRIES            0xA
@@ -33,6 +34,7 @@ enum intel_vsec_id {
        VSEC_ID_TELEMETRY       = 2,
        VSEC_ID_WATCHER         = 3,
        VSEC_ID_CRASHLOG        = 4,
+       VSEC_ID_DISCOVERY       = 12,
        VSEC_ID_SDSI            = 65,
        VSEC_ID_TPMI            = 66,
 };