diff options
Diffstat (limited to 'drivers/acpi/arm64/iort.c')
-rw-r--r-- | drivers/acpi/arm64/iort.c | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/drivers/acpi/arm64/iort.c b/drivers/acpi/arm64/iort.c index 2a361e22d38d..2159ad9bf9ed 100644 --- a/drivers/acpi/arm64/iort.c +++ b/drivers/acpi/arm64/iort.c @@ -700,7 +700,7 @@ static void iort_set_device_domain(struct device *dev, */ static struct irq_domain *iort_get_platform_device_domain(struct device *dev) { - struct acpi_iort_node *node, *msi_parent; + struct acpi_iort_node *node, *msi_parent = NULL; struct fwnode_handle *iort_fwnode; struct acpi_iort_its_group *its; int i; @@ -1435,8 +1435,14 @@ dev_put: return ret; } -static bool __init iort_enable_acs(struct acpi_iort_node *iort_node) +#ifdef CONFIG_PCI +static void __init iort_enable_acs(struct acpi_iort_node *iort_node) { + static bool acs_enabled __initdata; + + if (acs_enabled) + return; + if (iort_node->type == ACPI_IORT_NODE_PCI_ROOT_COMPLEX) { struct acpi_iort_node *parent; struct acpi_iort_id_mapping *map; @@ -1458,13 +1464,15 @@ static bool __init iort_enable_acs(struct acpi_iort_node *iort_node) if ((parent->type == ACPI_IORT_NODE_SMMU) || (parent->type == ACPI_IORT_NODE_SMMU_V3)) { pci_request_acs(); - return true; + acs_enabled = true; + return; } } } - - return false; } +#else +static inline void iort_enable_acs(struct acpi_iort_node *iort_node) { } +#endif static void __init iort_init_platform_devices(void) { @@ -1472,7 +1480,6 @@ static void __init iort_init_platform_devices(void) struct acpi_table_iort *iort; struct fwnode_handle *fwnode; int i, ret; - bool acs_enabled = false; const struct iort_dev_config *ops; /* @@ -1493,8 +1500,7 @@ static void __init iort_init_platform_devices(void) return; } - if (!acs_enabled) - acs_enabled = iort_enable_acs(iort_node); + iort_enable_acs(iort_node); ops = iort_get_dev_cfg(iort_node); if (ops) { |