From: Roman Kisel <rom...@linux.microsoft.com>

This change allows Hyper-V PCI to be enabled on arm64
via DT when booting in a Virtual Trust Level.

Signed-off-by: Roman Kisel <rom...@linux.microsoft.com>
---
 drivers/pci/controller/pci-hyperv.c | 13 ++++++++++---
 include/linux/acpi.h                | 10 ++++++++++
 2 files changed, 20 insertions(+), 3 deletions(-)

diff --git a/drivers/pci/controller/pci-hyperv.c 
b/drivers/pci/controller/pci-hyperv.c
index 1eaffff40b8d..ccc2b54206f4 100644
--- a/drivers/pci/controller/pci-hyperv.c
+++ b/drivers/pci/controller/pci-hyperv.c
@@ -906,9 +906,16 @@ static int hv_pci_irqchip_init(void)
         * way to ensure that all the corresponding devices are also gone and
         * no interrupts will be generated.
         */
-       hv_msi_gic_irq_domain = acpi_irq_create_hierarchy(0, HV_PCI_MSI_SPI_NR,
-                                                         fn, 
&hv_pci_domain_ops,
-                                                         chip_data);
+       if (acpi_disabled)
+               hv_msi_gic_irq_domain = irq_domain_create_hierarchy(
+                       irq_find_matching_fwnode(fn, DOMAIN_BUS_ANY),
+                       0, HV_PCI_MSI_SPI_NR,
+                       fn, &hv_pci_domain_ops,
+                       chip_data);
+       else
+               hv_msi_gic_irq_domain = acpi_irq_create_hierarchy(0, 
HV_PCI_MSI_SPI_NR,
+                       fn, &hv_pci_domain_ops,
+                       chip_data);
 
        if (!hv_msi_gic_irq_domain) {
                pr_err("Failed to create Hyper-V arm64 vPCI MSI IRQ domain\n");
diff --git a/include/linux/acpi.h b/include/linux/acpi.h
index b7165e52b3c6..eb93d355bb6d 100644
--- a/include/linux/acpi.h
+++ b/include/linux/acpi.h
@@ -1077,6 +1077,16 @@ static inline bool acpi_sleep_state_supported(u8 
sleep_state)
        return false;
 }
 
+
+static inline struct irq_domain *acpi_irq_create_hierarchy(unsigned int flags,
+                                            unsigned int size,
+                                            struct fwnode_handle *fwnode,
+                                            const struct irq_domain_ops *ops,
+                                            void *host_data)
+{
+       return NULL;
+}
+
 #endif /* !CONFIG_ACPI */
 
 extern void arch_post_acpi_subsys_init(void);
-- 
2.45.0


Reply via email to