mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-21 14:56:34 -04:00
platform/x86/intel/vsec: Skip driverless features
If a feature lacks a corresponding driver and that feature is also a supplier, registering it would be prevent the consumer driver from probing. Introduces logic to skip such features during device registration. Signed-off-by: David E. Box <david.e.box@linux.intel.com> Link: https://lore.kernel.org/r/20250703022832.1302928-7-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>
This commit is contained in:
committed by
Ilpo Järvinen
parent
1f3855ea7d
commit
e4436e9867
@@ -123,6 +123,26 @@ get_consumer_dependencies(struct vsec_priv *priv, int cap_id)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static bool vsec_driver_present(int cap_id)
|
||||
{
|
||||
unsigned long bit = BIT(cap_id);
|
||||
|
||||
switch (bit) {
|
||||
case VSEC_CAP_TELEMETRY:
|
||||
return IS_ENABLED(CONFIG_INTEL_PMT_TELEMETRY);
|
||||
case VSEC_CAP_WATCHER:
|
||||
return IS_ENABLED(CONFIG_INTEL_PMT_WATCHER);
|
||||
case VSEC_CAP_CRASHLOG:
|
||||
return IS_ENABLED(CONFIG_INTEL_PMT_CRASHLOG);
|
||||
case VSEC_CAP_SDSI:
|
||||
return IS_ENABLED(CONFIG_INTEL_SDSI);
|
||||
case VSEC_CAP_TPMI:
|
||||
return IS_ENABLED(CONFIG_INTEL_TPMI);
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Although pci_device_id table is available in the pdev, this prototype is
|
||||
* necessary because the code using it can be called by an exported API that
|
||||
@@ -158,7 +178,8 @@ static int intel_vsec_link_devices(struct pci_dev *pdev, struct device *dev,
|
||||
for_each_set_bit(supplier_id, &deps->supplier_bitmap, VSEC_FEATURE_COUNT) {
|
||||
struct device_link *link;
|
||||
|
||||
if (state[supplier_id] != STATE_REGISTERED)
|
||||
if (state[supplier_id] != STATE_REGISTERED ||
|
||||
!vsec_driver_present(supplier_id))
|
||||
continue;
|
||||
|
||||
if (!suppliers[supplier_id]) {
|
||||
@@ -405,6 +426,11 @@ static int intel_vsec_register_device(struct pci_dev *pdev,
|
||||
|
||||
priv->found_caps |= BIT(cap_id);
|
||||
|
||||
if (!vsec_driver_present(cap_id)) {
|
||||
priv->state[cap_id] = STATE_SKIP;
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
consumer_deps = get_consumer_dependencies(priv, cap_id);
|
||||
if (!consumer_deps || suppliers_ready(priv, consumer_deps, cap_id)) {
|
||||
ret = intel_vsec_add_dev(pdev, header, info, cap_id);
|
||||
|
||||
Reference in New Issue
Block a user