Difference layerscape chip have not difference exit_from_l2() method.
Using function pointer for ls1028. It prepare for other layerscape
suspend/resume support.

Signed-off-by: Frank Li <frank...@nxp.com>
---

Notes:
    Change from v1 to v2
    - change subject 'a' to 'A'

 drivers/pci/controller/dwc/pci-layerscape.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/pci/controller/dwc/pci-layerscape.c 
b/drivers/pci/controller/dwc/pci-layerscape.c
index b931d597656f..20c48c06e224 100644
--- a/drivers/pci/controller/dwc/pci-layerscape.c
+++ b/drivers/pci/controller/dwc/pci-layerscape.c
@@ -39,6 +39,8 @@
 
 struct ls_pcie_drvdata {
        const u32 pf_off;
+       const struct dw_pcie_host_ops *ops;
+       void (*exit_from_l2)(struct dw_pcie_rp *pp);
        bool pm_support;
 };
 
@@ -180,6 +182,7 @@ static const struct ls_pcie_drvdata ls1021a_drvdata = {
 static const struct ls_pcie_drvdata layerscape_drvdata = {
        .pf_off = 0xc0000,
        .pm_support = true,
+       .exit_from_l2 = ls_pcie_exit_from_l2,
 };
 
 static const struct of_device_id ls_pcie_of_match[] = {
@@ -213,7 +216,7 @@ static int ls_pcie_probe(struct platform_device *pdev)
        pcie->drvdata = of_device_get_match_data(dev);
 
        pci->dev = dev;
-       pci->pp.ops = &ls_pcie_host_ops;
+       pci->pp.ops = pcie->drvdata->ops ? pcie->drvdata->ops : 
&ls_pcie_host_ops;
 
        pcie->pci = pci;
 
@@ -251,7 +254,7 @@ static int ls_pcie_resume_noirq(struct device *dev)
        if (!pcie->drvdata->pm_support)
                return 0;
 
-       ls_pcie_exit_from_l2(&pcie->pci->pp);
+       pcie->drvdata->exit_from_l2(&pcie->pci->pp);
 
        return dw_pcie_resume_noirq(pcie->pci);
 }
-- 
2.34.1

Reply via email to