static inline void brcm_pcie_perst_set_4908(struct brcm_pcie *pcie, u32 val);
 static inline void brcm_pcie_perst_set_7278(struct brcm_pcie *pcie, u32 val);
 static inline void brcm_pcie_perst_set_generic(struct brcm_pcie *pcie, u32 val);
-static int brcm_pcie_linkup(struct brcm_pcie *pcie);
-static int brcm_pcie_add_bus(struct pci_bus *bus);
 
 enum {
        RGR1_SW_INIT_1,
        u32                     hw_rev;
        void                    (*perst_set)(struct brcm_pcie *pcie, u32 val);
        void                    (*bridge_sw_init_set)(struct brcm_pcie *pcie, u32 val);
-       bool                    refusal_mode;
-       struct subdev_regulators *sr;
 };
 
 static inline bool is_bmips(const struct brcm_pcie *pcie)
        return 0;
 }
 
-static int brcm_pcie_add_bus(struct pci_bus *bus)
-{
-       struct device *dev = &bus->dev;
-       struct brcm_pcie *pcie = (struct brcm_pcie *) bus->sysdata;
-       int ret;
-
-       if (!dev->of_node || !bus->parent || !pci_is_root_bus(bus->parent))
-               return 0;
-
-       ret = pci_subdev_regulators_add_bus(bus);
-       if (ret)
-               return ret;
-
-       /* Grab the regulators for suspend/resume */
-       pcie->sr = bus->dev.driver_data;
-
-       /*
-        * If we have failed linkup there is no point to return an error as
-        * currently it will cause a WARNING() from pci_alloc_child_bus().
-        * We return 0 and turn on the "refusal_mode" so that any further
-        * accesses to the pci_dev just get 0xffffffff
-        */
-       if (brcm_pcie_linkup(pcie) != 0)
-               pcie->refusal_mode = true;
-
-       return 0;
-}
-
 static void pci_subdev_regulators_remove_bus(struct pci_bus *bus)
 {
        struct device *dev = &bus->dev;
        /* Accesses to the RC go right to the RC registers if slot==0 */
        if (pci_is_root_bus(bus))
                return PCI_SLOT(devfn) ? NULL : base + where;
-       if (pcie->refusal_mode) {
-               /*
-                * At this point we do not have link.  There will be a CPU
-                * abort -- a quirk with this controller --if Linux tries
-                * to read any config-space registers besides those
-                * targeting the host bridge.  To prevent this we hijack
-                * the address to point to a safe access that will return
-                * 0xffffffff.
-                */
-               writel(0xffffffff, base + PCIE_MISC_RC_BAR2_CONFIG_HI);
-               return base + PCIE_MISC_RC_BAR2_CONFIG_HI + (where & 0x3);
-       }
 
        /* For devices, write to the config space index register */
        idx = PCIE_ECAM_OFFSET(bus->number, devfn, 0);
        .map_bus = brcm_pcie_map_conf,
        .read = pci_generic_config_read,
        .write = pci_generic_config_write,
-       .add_bus = brcm_pcie_add_bus,
+       .add_bus = pci_subdev_regulators_add_bus,
        .remove_bus = pci_subdev_regulators_remove_bus,
 };
 
                return ret;
        }
 
-       if (pcie->sr) {
-               ret = regulator_bulk_disable(pcie->sr->num_supplies, pcie->sr->supplies);
-               if (ret) {
-                       dev_err(dev, "Could not turn off regulators\n");
-                       reset_control_reset(pcie->rescal);
-                       return ret;
-               }
-       }
        clk_disable_unprepare(pcie->clk);
 
        return 0;
        if (ret)
                return ret;
 
-       if (pcie->sr) {
-               ret = regulator_bulk_enable(pcie->sr->num_supplies, pcie->sr->supplies);
-               if (ret) {
-                       dev_err(dev, "Could not turn on regulators\n");
-                       goto err_disable_clk;
-               }
-       }
-
        ret = reset_control_reset(pcie->rescal);
        if (ret)
-               goto err_regulator;
+               goto err_disable_clk;
 
        ret = brcm_phy_start(pcie);
        if (ret)
 
 err_reset:
        reset_control_rearm(pcie->rescal);
-err_regulator:
-       if (pcie->sr)
-               regulator_bulk_disable(pcie->sr->num_supplies, pcie->sr->supplies);
 err_disable_clk:
        clk_disable_unprepare(pcie->clk);
        return ret;
 
        platform_set_drvdata(pdev, pcie);
 
-       ret = pci_host_probe(bridge);
-       if (!ret && !brcm_pcie_link_up(pcie))
-               ret = -ENODEV;
-
-       if (ret) {
-               brcm_pcie_remove(pdev);
-               return ret;
-       }
-
-       return 0;
-
+       return pci_host_probe(bridge);
 fail:
        __brcm_pcie_remove(pcie);
        return ret;
 MODULE_DEVICE_TABLE(of, brcm_pcie_match);
 
 static const struct dev_pm_ops brcm_pcie_pm_ops = {
-       .suspend_noirq = brcm_pcie_suspend,
-       .resume_noirq = brcm_pcie_resume,
+       .suspend = brcm_pcie_suspend,
+       .resume = brcm_pcie_resume,
 };
 
 static struct platform_driver brcm_pcie_driver = {