]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/pci/host/pci-tegra.c
Merge branch 'irq-irqdomain-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[karo-tx-linux.git] / drivers / pci / host / pci-tegra.c
index 19bb19c7db4a77eb649ddc3c9fc77b95a1f7c479..feccfa6b6c11d4cbe5772b05e28c8dfb64973424 100644 (file)
        )
 
 struct tegra_msi {
-       struct msi_chip chip;
+       struct msi_controller chip;
        DECLARE_BITMAP(used, INT_PCI_MSI_NR);
        struct irq_domain *domain;
        unsigned long pages;
@@ -259,7 +259,7 @@ struct tegra_pcie_soc_data {
        bool has_gen2;
 };
 
-static inline struct tegra_msi *to_tegra_msi(struct msi_chip *chip)
+static inline struct tegra_msi *to_tegra_msi(struct msi_controller *chip)
 {
        return container_of(chip, struct tegra_msi, chip);
 }
@@ -692,15 +692,6 @@ static int tegra_pcie_map_irq(const struct pci_dev *pdev, u8 slot, u8 pin)
        return irq;
 }
 
-static void tegra_pcie_add_bus(struct pci_bus *bus)
-{
-       if (IS_ENABLED(CONFIG_PCI_MSI)) {
-               struct tegra_pcie *pcie = sys_to_pcie(bus->sysdata);
-
-               bus->msi = &pcie->msi.chip;
-       }
-}
-
 static struct pci_bus *tegra_pcie_scan_bus(int nr, struct pci_sys_data *sys)
 {
        struct tegra_pcie *pcie = sys_to_pcie(sys);
@@ -1280,8 +1271,8 @@ static irqreturn_t tegra_pcie_msi_irq(int irq, void *data)
        return processed > 0 ? IRQ_HANDLED : IRQ_NONE;
 }
 
-static int tegra_msi_setup_irq(struct msi_chip *chip, struct pci_dev *pdev,
-                              struct msi_desc *desc)
+static int tegra_msi_setup_irq(struct msi_controller *chip,
+                              struct pci_dev *pdev, struct msi_desc *desc)
 {
        struct tegra_msi *msi = to_tegra_msi(chip);
        struct msi_msg msg;
@@ -1305,12 +1296,13 @@ static int tegra_msi_setup_irq(struct msi_chip *chip, struct pci_dev *pdev,
        msg.address_hi = 0;
        msg.data = hwirq;
 
-       write_msi_msg(irq, &msg);
+       pci_write_msi_msg(irq, &msg);
 
        return 0;
 }
 
-static void tegra_msi_teardown_irq(struct msi_chip *chip, unsigned int irq)
+static void tegra_msi_teardown_irq(struct msi_controller *chip,
+                                  unsigned int irq)
 {
        struct tegra_msi *msi = to_tegra_msi(chip);
        struct irq_data *d = irq_get_irq_data(irq);
@@ -1322,10 +1314,10 @@ static void tegra_msi_teardown_irq(struct msi_chip *chip, unsigned int irq)
 
 static struct irq_chip tegra_msi_irq_chip = {
        .name = "Tegra PCIe MSI",
-       .irq_enable = unmask_msi_irq,
-       .irq_disable = mask_msi_irq,
-       .irq_mask = mask_msi_irq,
-       .irq_unmask = unmask_msi_irq,
+       .irq_enable = pci_msi_unmask_irq,
+       .irq_disable = pci_msi_mask_irq,
+       .irq_mask = pci_msi_mask_irq,
+       .irq_unmask = pci_msi_unmask_irq,
 };
 
 static int tegra_msi_map(struct irq_domain *domain, unsigned int irq,
@@ -1893,11 +1885,14 @@ static int tegra_pcie_enable(struct tegra_pcie *pcie)
 
        memset(&hw, 0, sizeof(hw));
 
+#ifdef CONFIG_PCI_MSI
+       hw.msi_ctrl = &pcie->msi.chip;
+#endif
+
        hw.nr_controllers = 1;
        hw.private_data = (void **)&pcie;
        hw.setup = tegra_pcie_setup;
        hw.map_irq = tegra_pcie_map_irq;
-       hw.add_bus = tegra_pcie_add_bus;
        hw.scan = tegra_pcie_scan_bus;
        hw.ops = &tegra_pcie_ops;