PCI: dwc: Move dw_pcie_setup_rc() to DWC common code
[linux-2.6-microblaze.git] / drivers / pci / controller / dwc / pci-meson.c
index 33deb29..04589f0 100644 (file)
@@ -17,6 +17,7 @@
 #include <linux/resource.h>
 #include <linux/types.h>
 #include <linux/phy/phy.h>
+#include <linux/module.h>
 
 #include "pcie-designware.h"
 
@@ -230,7 +231,7 @@ static void meson_pcie_assert_reset(struct meson_pcie *mp)
        gpiod_set_value_cansleep(mp->reset_gpio, 0);
 }
 
-static void meson_pcie_init_dw(struct meson_pcie *mp)
+static void meson_pcie_ltssm_enable(struct meson_pcie *mp)
 {
        u32 val;
 
@@ -288,20 +289,14 @@ static void meson_set_max_rd_req_size(struct meson_pcie *mp, int size)
        dw_pcie_writel_dbi(pci, offset + PCI_EXP_DEVCTL, val);
 }
 
-static int meson_pcie_establish_link(struct meson_pcie *mp)
+static int meson_pcie_start_link(struct dw_pcie *pci)
 {
-       struct dw_pcie *pci = &mp->pci;
-       struct pcie_port *pp = &pci->pp;
-
-       meson_pcie_init_dw(mp);
-       meson_set_max_payload(mp, MAX_PAYLOAD_SIZE);
-       meson_set_max_rd_req_size(mp, MAX_READ_REQ_SIZE);
-
-       dw_pcie_setup_rc(pp);
+       struct meson_pcie *mp = to_meson_pcie(pci);
 
+       meson_pcie_ltssm_enable(mp);
        meson_pcie_assert_reset(mp);
 
-       return dw_pcie_wait_for_link(pci);
+       return 0;
 }
 
 static int meson_pcie_rd_own_conf(struct pci_bus *bus, u32 devfn,
@@ -379,15 +374,11 @@ static int meson_pcie_host_init(struct pcie_port *pp)
 {
        struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
        struct meson_pcie *mp = to_meson_pcie(pci);
-       int ret;
 
        pp->bridge->ops = &meson_pci_ops;
 
-       ret = meson_pcie_establish_link(mp);
-       if (ret)
-               return ret;
-
-       dw_pcie_msi_init(pp);
+       meson_set_max_payload(mp, MAX_PAYLOAD_SIZE);
+       meson_set_max_rd_req_size(mp, MAX_READ_REQ_SIZE);
 
        return 0;
 }
@@ -404,12 +395,6 @@ static int meson_add_pcie_port(struct meson_pcie *mp,
        struct device *dev = &pdev->dev;
        int ret;
 
-       if (IS_ENABLED(CONFIG_PCI_MSI)) {
-               pp->msi_irq = platform_get_irq(pdev, 0);
-               if (pp->msi_irq < 0)
-                       return pp->msi_irq;
-       }
-
        pp->ops = &meson_pcie_host_ops;
 
        ret = dw_pcie_host_init(pp);
@@ -423,6 +408,7 @@ static int meson_add_pcie_port(struct meson_pcie *mp,
 
 static const struct dw_pcie_ops dw_pcie_ops = {
        .link_up = meson_pcie_link_up,
+       .start_link = meson_pcie_start_link,
 };
 
 static int meson_pcie_probe(struct platform_device *pdev)
@@ -507,6 +493,7 @@ static const struct of_device_id meson_pcie_of_match[] = {
        },
        {},
 };
+MODULE_DEVICE_TABLE(of, meson_pcie_of_match);
 
 static struct platform_driver meson_pcie_driver = {
        .probe = meson_pcie_probe,
@@ -516,4 +503,8 @@ static struct platform_driver meson_pcie_driver = {
        },
 };
 
-builtin_platform_driver(meson_pcie_driver);
+module_platform_driver(meson_pcie_driver);
+
+MODULE_AUTHOR("Yue Wang <yue.wang@amlogic.com>");
+MODULE_DESCRIPTION("Amlogic PCIe Controller driver");
+MODULE_LICENSE("GPL v2");