]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
platform/x86/intel/vsec: Set OOBMSM to CPU mapping
authorDavid E. Box <david.e.box@linux.intel.com>
Thu, 3 Jul 2025 02:28:26 +0000 (19:28 -0700)
committerIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Thu, 3 Jul 2025 08:09:36 +0000 (11:09 +0300)
Add functions, intel_vsec_set/get_mapping(), to set and retrieve the
OOBMSM-to-CPU mapping data in the private data of the parent Intel VSEC
driver. With this mapping information available, other Intel VSEC features
on the same OOBMSM device can easily access and use the mapping data,
allowing each of the OOBMSM features to map to the CPUs they provides data
for.

Signed-off-by: David E. Box <david.e.box@linux.intel.com>
Link: https://lore.kernel.org/r/20250703022832.1302928-12-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 4d76f1ac3c8c0922680b33404bc821aa332806ca..711ff4edfe21080b7cd3c05bf680cf0d0b8e1b28 100644 (file)
@@ -44,6 +44,7 @@ enum vsec_device_state {
 struct vsec_priv {
        struct intel_vsec_platform_info *info;
        struct device *suppliers[VSEC_FEATURE_COUNT];
+       struct oobmsm_plat_info plat_info;
        enum vsec_device_state state[VSEC_FEATURE_COUNT];
        unsigned long found_caps;
 };
@@ -665,6 +666,36 @@ static int intel_vsec_pci_probe(struct pci_dev *pdev, const struct pci_device_id
        return 0;
 }
 
+int intel_vsec_set_mapping(struct oobmsm_plat_info *plat_info,
+                          struct intel_vsec_device *vsec_dev)
+{
+       struct vsec_priv *priv;
+
+       priv = pci_get_drvdata(vsec_dev->pcidev);
+       if (!priv)
+               return -EINVAL;
+
+       priv->plat_info = *plat_info;
+
+       return 0;
+}
+EXPORT_SYMBOL_NS_GPL(intel_vsec_set_mapping, "INTEL_VSEC");
+
+struct oobmsm_plat_info *intel_vsec_get_mapping(struct pci_dev *pdev)
+{
+       struct vsec_priv *priv;
+
+       if (!pci_match_id(intel_vsec_pci_ids, pdev))
+               return ERR_PTR(-EINVAL);
+
+       priv = pci_get_drvdata(pdev);
+       if (!priv)
+               return ERR_PTR(-EINVAL);
+
+       return &priv->plat_info;
+}
+EXPORT_SYMBOL_NS_GPL(intel_vsec_get_mapping, "INTEL_VSEC");
+
 /* DG1 info */
 static struct intel_vsec_header dg1_header = {
        .length = 0x10,
index cd78d0b2e623c27818148c1310d979c01c87ee50..4bd0c6e7857c0b312e7e114809e812f8daaca978 100644 (file)
@@ -183,11 +183,23 @@ static inline struct intel_vsec_device *auxdev_to_ivdev(struct auxiliary_device
 #if IS_ENABLED(CONFIG_INTEL_VSEC)
 int intel_vsec_register(struct pci_dev *pdev,
                         struct intel_vsec_platform_info *info);
+int intel_vsec_set_mapping(struct oobmsm_plat_info *plat_info,
+                          struct intel_vsec_device *vsec_dev);
+struct oobmsm_plat_info *intel_vsec_get_mapping(struct pci_dev *pdev);
 #else
 static inline int intel_vsec_register(struct pci_dev *pdev,
                                       struct intel_vsec_platform_info *info)
 {
        return -ENODEV;
 }
+static inline int intel_vsec_set_mapping(struct oobmsm_plat_info *plat_info,
+                                        struct intel_vsec_device *vsec_dev)
+{
+       return -ENODEV;
+}
+static inline struct oobmsm_plat_info *intel_vsec_get_mapping(struct pci_dev *pdev)
+{
+       return ERR_PTR(-ENODEV);
+}
 #endif
 #endif