return bus;
 }
 
-static void mvebu_pcie_add_bus(struct pci_bus *bus)
-{
-       struct mvebu_pcie *pcie = sys_to_pcie(bus->sysdata);
-       bus->msi = pcie->msi;
-}
-
 static resource_size_t mvebu_pcie_align_resource(struct pci_dev *dev,
                                                 const struct resource *res,
                                                 resource_size_t start,
 
        memset(&hw, 0, sizeof(hw));
 
+#ifdef CONFIG_PCI_MSI
+       hw.msi_ctrl = pcie->msi;
+#endif
+
        hw.nr_controllers = 1;
        hw.private_data   = (void **)&pcie;
        hw.setup          = mvebu_pcie_setup;
        hw.map_irq        = of_irq_parse_and_map_pci;
        hw.ops            = &mvebu_pcie_ops;
        hw.align_resource = mvebu_pcie_align_resource;
-       hw.add_bus        = mvebu_pcie_add_bus;
 
        pci_common_init(&hw);
 }