mirror of
https://github.com/torvalds/linux.git
synced 2026-05-26 16:12:59 +02:00
platform/x86/intel/vsec: Refactor base_addr handling
The base_addr field in intel_vsec_platform_info was originally added to support devices that emulate PCI VSEC capabilities in MMIO. Previously, the code would check at registration time whether base_addr was set, falling back to the PCI BAR if not. Refactor this by making base_addr an explicit function parameter. This clarifies ownership of the value and removes conditional logic from intel_vsec_add_dev(). It also enables making intel_vsec_platform_info const in a later patch, since the function no longer needs to write to info->base_addr. No functional change intended. Signed-off-by: David E. Box <david.e.box@linux.intel.com> Reviewed-by: Michael J. Ruhl <michael.j.ruhl@intel.com> Link: https://patch.msgid.link/20260313015202.3660072-2-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:
parent
fa5062e99b
commit
904b333fc5
|
|
@ -271,14 +271,13 @@ EXPORT_SYMBOL_NS_GPL(intel_vsec_add_aux, "INTEL_VSEC");
|
|||
|
||||
static int intel_vsec_add_dev(struct pci_dev *pdev, struct intel_vsec_header *header,
|
||||
struct intel_vsec_platform_info *info,
|
||||
unsigned long cap_id)
|
||||
unsigned long cap_id, u64 base_addr)
|
||||
{
|
||||
struct intel_vsec_device __free(kfree) *intel_vsec_dev = NULL;
|
||||
struct resource __free(kfree) *res = NULL;
|
||||
struct resource *tmp;
|
||||
struct device *parent;
|
||||
unsigned long quirks = info->quirks;
|
||||
u64 base_addr;
|
||||
int i;
|
||||
|
||||
if (info->parent)
|
||||
|
|
@ -310,11 +309,6 @@ static int intel_vsec_add_dev(struct pci_dev *pdev, struct intel_vsec_header *he
|
|||
if (quirks & VSEC_QUIRK_TABLE_SHIFT)
|
||||
header->offset >>= TABLE_OFFSET_SHIFT;
|
||||
|
||||
if (info->base_addr)
|
||||
base_addr = info->base_addr;
|
||||
else
|
||||
base_addr = pdev->resource[header->tbir].start;
|
||||
|
||||
/*
|
||||
* The DVSEC/VSEC contains the starting offset and count for a block of
|
||||
* discovery tables. Create a resource array of these tables to the
|
||||
|
|
@ -412,7 +406,8 @@ static int get_cap_id(u32 header_id, unsigned long *cap_id)
|
|||
|
||||
static int intel_vsec_register_device(struct pci_dev *pdev,
|
||||
struct intel_vsec_header *header,
|
||||
struct intel_vsec_platform_info *info)
|
||||
struct intel_vsec_platform_info *info,
|
||||
u64 base_addr)
|
||||
{
|
||||
const struct vsec_feature_dependency *consumer_deps;
|
||||
struct vsec_priv *priv;
|
||||
|
|
@ -428,7 +423,7 @@ static int intel_vsec_register_device(struct pci_dev *pdev,
|
|||
* For others using the exported APIs, add the device directly.
|
||||
*/
|
||||
if (!pci_match_id(intel_vsec_pci_ids, pdev))
|
||||
return intel_vsec_add_dev(pdev, header, info, cap_id);
|
||||
return intel_vsec_add_dev(pdev, header, info, cap_id, base_addr);
|
||||
|
||||
priv = pci_get_drvdata(pdev);
|
||||
if (priv->state[cap_id] == STATE_REGISTERED ||
|
||||
|
|
@ -444,7 +439,7 @@ static int intel_vsec_register_device(struct pci_dev *pdev,
|
|||
|
||||
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);
|
||||
ret = intel_vsec_add_dev(pdev, header, info, cap_id, base_addr);
|
||||
if (ret)
|
||||
priv->state[cap_id] = STATE_SKIP;
|
||||
else
|
||||
|
|
@ -464,7 +459,7 @@ static bool intel_vsec_walk_header(struct pci_dev *pdev,
|
|||
int ret;
|
||||
|
||||
for ( ; *header; header++) {
|
||||
ret = intel_vsec_register_device(pdev, *header, info);
|
||||
ret = intel_vsec_register_device(pdev, *header, info, info->base_addr);
|
||||
if (!ret)
|
||||
have_devices = true;
|
||||
}
|
||||
|
|
@ -512,7 +507,8 @@ static bool intel_vsec_walk_dvsec(struct pci_dev *pdev,
|
|||
pci_read_config_dword(pdev, pos + PCI_DVSEC_HEADER2, &hdr);
|
||||
header.id = PCI_DVSEC_HEADER2_ID(hdr);
|
||||
|
||||
ret = intel_vsec_register_device(pdev, &header, info);
|
||||
ret = intel_vsec_register_device(pdev, &header, info,
|
||||
pci_resource_start(pdev, header.tbir));
|
||||
if (ret)
|
||||
continue;
|
||||
|
||||
|
|
@ -557,7 +553,8 @@ static bool intel_vsec_walk_vsec(struct pci_dev *pdev,
|
|||
header.tbir = INTEL_DVSEC_TABLE_BAR(table);
|
||||
header.offset = INTEL_DVSEC_TABLE_OFFSET(table);
|
||||
|
||||
ret = intel_vsec_register_device(pdev, &header, info);
|
||||
ret = intel_vsec_register_device(pdev, &header, info,
|
||||
pci_resource_start(pdev, header.tbir));
|
||||
if (ret)
|
||||
continue;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user