]> git.baikalelectronics.ru Git - kernel.git/commitdiff
PCI: dwc: Add start_link/stop_link inlines
authorSerge Semin <Sergey.Semin@baikalelectronics.ru>
Fri, 24 Jun 2022 14:34:23 +0000 (17:34 +0300)
committerBjorn Helgaas <bhelgaas@google.com>
Wed, 6 Jul 2022 00:00:52 +0000 (19:00 -0500)
Factor out this pattern:

  if (!pci->ops || !pci->ops->start_link)
    return -EINVAL;

  return pci->ops->start_link(pci);

into a new dw_pcie_start_link() wrapper and do the same for the stop_link()
method.

Note that dw_pcie_ep_start() previously returned -EINVAL if there was no
platform start_link() method, which didn't make much sense since that is
not an error.  It will now return 0 in that case.

As a side-effect, drop the empty start_link() and dummy dw_pcie_ops
instances from the generic DW PCIe and Layerscape EP platform drivers.

[bhelgaas: commit log]
Link: https://lore.kernel.org/r/20220624143428.8334-14-Sergey.Semin@baikalelectronics.ru
Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Rob Herring <robh@kernel.org>
Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
drivers/pci/controller/dwc/pci-layerscape-ep.c
drivers/pci/controller/dwc/pcie-designware-ep.c
drivers/pci/controller/dwc/pcie-designware-host.c
drivers/pci/controller/dwc/pcie-designware-plat.c
drivers/pci/controller/dwc/pcie-designware.h

index 39f4664bd84c7c8241fef799740b07ada75b96c9..ad99707b3b994f26da992e6ecb736518f2ae6553 100644 (file)
@@ -32,15 +32,6 @@ struct ls_pcie_ep {
        const struct ls_pcie_ep_drvdata *drvdata;
 };
 
-static int ls_pcie_establish_link(struct dw_pcie *pci)
-{
-       return 0;
-}
-
-static const struct dw_pcie_ops dw_ls_pcie_ep_ops = {
-       .start_link = ls_pcie_establish_link,
-};
-
 static const struct pci_epc_features*
 ls_pcie_ep_get_features(struct dw_pcie_ep *ep)
 {
@@ -106,19 +97,16 @@ static const struct dw_pcie_ep_ops ls_pcie_ep_ops = {
 
 static const struct ls_pcie_ep_drvdata ls1_ep_drvdata = {
        .ops = &ls_pcie_ep_ops,
-       .dw_pcie_ops = &dw_ls_pcie_ep_ops,
 };
 
 static const struct ls_pcie_ep_drvdata ls2_ep_drvdata = {
        .func_offset = 0x20000,
        .ops = &ls_pcie_ep_ops,
-       .dw_pcie_ops = &dw_ls_pcie_ep_ops,
 };
 
 static const struct ls_pcie_ep_drvdata lx2_ep_drvdata = {
        .func_offset = 0x8000,
        .ops = &ls_pcie_ep_ops,
-       .dw_pcie_ops = &dw_ls_pcie_ep_ops,
 };
 
 static const struct of_device_id ls_pcie_ep_of_match[] = {
index 7ad349c32082fd1912ef2876898eeeebbd7ff755..15b8059544e347da56fa211b96753770d99b24da 100644 (file)
@@ -435,8 +435,7 @@ static void dw_pcie_ep_stop(struct pci_epc *epc)
        struct dw_pcie_ep *ep = epc_get_drvdata(epc);
        struct dw_pcie *pci = to_dw_pcie_from_ep(ep);
 
-       if (pci->ops && pci->ops->stop_link)
-               pci->ops->stop_link(pci);
+       dw_pcie_stop_link(pci);
 }
 
 static int dw_pcie_ep_start(struct pci_epc *epc)
@@ -444,10 +443,7 @@ static int dw_pcie_ep_start(struct pci_epc *epc)
        struct dw_pcie_ep *ep = epc_get_drvdata(epc);
        struct dw_pcie *pci = to_dw_pcie_from_ep(ep);
 
-       if (!pci->ops || !pci->ops->start_link)
-               return -EINVAL;
-
-       return pci->ops->start_link(pci);
+       return dw_pcie_start_link(pci);
 }
 
 static const struct pci_epc_features*
index 775b192f13dc7a68c65eea81fc67300c4ef5ca46..089a328118682d19d3c0ee015afb8db69b36a5a9 100644 (file)
@@ -409,8 +409,8 @@ int dw_pcie_host_init(struct pcie_port *pp)
 
        dw_pcie_setup_rc(pp);
 
-       if (!dw_pcie_link_up(pci) && pci->ops && pci->ops->start_link) {
-               ret = pci->ops->start_link(pci);
+       if (!dw_pcie_link_up(pci)) {
+               ret = dw_pcie_start_link(pci);
                if (ret)
                        goto err_free_msi;
        }
@@ -427,8 +427,7 @@ int dw_pcie_host_init(struct pcie_port *pp)
        return 0;
 
 err_stop_link:
-       if (pci->ops && pci->ops->stop_link)
-               pci->ops->stop_link(pci);
+       dw_pcie_stop_link(pci);
 
 err_free_msi:
        if (pp->has_msi_ctrl)
@@ -444,8 +443,7 @@ void dw_pcie_host_deinit(struct pcie_port *pp)
        pci_stop_root_bus(pp->bridge->bus);
        pci_remove_root_bus(pp->bridge->bus);
 
-       if (pci->ops && pci->ops->stop_link)
-               pci->ops->stop_link(pci);
+       dw_pcie_stop_link(pci);
 
        if (pp->has_msi_ctrl)
                dw_pcie_free_msi(pp);
index 0c5de87d3cc630f2625140f2eb24f3ad01a372e8..abf1afac6064d4a4044f508a8402f8bb3854c2d0 100644 (file)
@@ -36,15 +36,6 @@ static const struct of_device_id dw_plat_pcie_of_match[];
 static const struct dw_pcie_host_ops dw_plat_pcie_host_ops = {
 };
 
-static int dw_plat_pcie_establish_link(struct dw_pcie *pci)
-{
-       return 0;
-}
-
-static const struct dw_pcie_ops dw_pcie_ops = {
-       .start_link = dw_plat_pcie_establish_link,
-};
-
 static void dw_plat_pcie_ep_init(struct dw_pcie_ep *ep)
 {
        struct dw_pcie *pci = to_dw_pcie_from_ep(ep);
@@ -140,7 +131,6 @@ static int dw_plat_pcie_probe(struct platform_device *pdev)
                return -ENOMEM;
 
        pci->dev = dev;
-       pci->ops = &dw_pcie_ops;
 
        dw_plat_pcie->pci = pci;
        dw_plat_pcie->mode = mode;
index 7d6e9b7576be51398e2221aa9627c08013ca69f5..8ba239292634661f2dd1a2a04a27a67fe50dd447 100644 (file)
@@ -365,6 +365,20 @@ static inline void dw_pcie_dbi_ro_wr_dis(struct dw_pcie *pci)
        dw_pcie_writel_dbi(pci, reg, val);
 }
 
+static inline int dw_pcie_start_link(struct dw_pcie *pci)
+{
+       if (pci->ops && pci->ops->start_link)
+               return pci->ops->start_link(pci);
+
+       return 0;
+}
+
+static inline void dw_pcie_stop_link(struct dw_pcie *pci)
+{
+       if (pci->ops && pci->ops->stop_link)
+               pci->ops->stop_link(pci);
+}
+
 #ifdef CONFIG_PCIE_DW_HOST
 irqreturn_t dw_handle_msi_irq(struct pcie_port *pp);
 void dw_pcie_setup_rc(struct pcie_port *pp);