Lines Matching +full:pcie +full:- +full:phy
1 // SPDX-License-Identifier: GPL-2.0
17 #include <linux/phy/phy.h>
20 #include "pcie-iproc.h"
24 .compatible = "brcm,iproc-pcie",
27 .compatible = "brcm,iproc-pcie-paxb-v2",
30 .compatible = "brcm,iproc-pcie-paxc",
33 .compatible = "brcm,iproc-pcie-paxc-v2",
42 struct device *dev = &pdev->dev; in iproc_pcie_pltfm_probe()
43 struct iproc_pcie *pcie; in iproc_pcie_pltfm_probe() local
44 struct device_node *np = dev->of_node; in iproc_pcie_pltfm_probe()
51 bridge = devm_pci_alloc_host_bridge(dev, sizeof(*pcie)); in iproc_pcie_pltfm_probe()
53 return -ENOMEM; in iproc_pcie_pltfm_probe()
55 pcie = pci_host_bridge_priv(bridge); in iproc_pcie_pltfm_probe()
57 pcie->dev = dev; in iproc_pcie_pltfm_probe()
58 pcie->type = (enum iproc_pcie_type) of_device_get_match_data(dev); in iproc_pcie_pltfm_probe()
66 pcie->base = devm_pci_remap_cfgspace(dev, reg.start, in iproc_pcie_pltfm_probe()
68 if (!pcie->base) { in iproc_pcie_pltfm_probe()
70 return -ENOMEM; in iproc_pcie_pltfm_probe()
72 pcie->base_addr = reg.start; in iproc_pcie_pltfm_probe()
74 if (of_property_read_bool(np, "brcm,pcie-ob")) { in iproc_pcie_pltfm_probe()
77 ret = of_property_read_u32(np, "brcm,pcie-ob-axi-offset", in iproc_pcie_pltfm_probe()
81 "missing brcm,pcie-ob-axi-offset property\n"); in iproc_pcie_pltfm_probe()
84 pcie->ob.axi_offset = val; in iproc_pcie_pltfm_probe()
85 pcie->need_ob_cfg = true; in iproc_pcie_pltfm_probe()
89 * DT nodes are not used by all platforms that use the iProc PCIe in iproc_pcie_pltfm_probe()
91 * configuration, "dma-ranges" would have been present in DT in iproc_pcie_pltfm_probe()
93 pcie->need_ib_cfg = of_property_read_bool(np, "dma-ranges"); in iproc_pcie_pltfm_probe()
95 /* PHY use is optional */ in iproc_pcie_pltfm_probe()
96 pcie->phy = devm_phy_get(dev, "pcie-phy"); in iproc_pcie_pltfm_probe()
97 if (IS_ERR(pcie->phy)) { in iproc_pcie_pltfm_probe()
98 if (PTR_ERR(pcie->phy) == -EPROBE_DEFER) in iproc_pcie_pltfm_probe()
99 return -EPROBE_DEFER; in iproc_pcie_pltfm_probe()
100 pcie->phy = NULL; in iproc_pcie_pltfm_probe()
111 switch (pcie->type) { in iproc_pcie_pltfm_probe()
116 pcie->map_irq = of_irq_parse_and_map_pci; in iproc_pcie_pltfm_probe()
119 ret = iproc_pcie_setup(pcie, &resources); in iproc_pcie_pltfm_probe()
121 dev_err(dev, "PCIe controller setup failed\n"); in iproc_pcie_pltfm_probe()
126 platform_set_drvdata(pdev, pcie); in iproc_pcie_pltfm_probe()
132 struct iproc_pcie *pcie = platform_get_drvdata(pdev); in iproc_pcie_pltfm_remove() local
134 return iproc_pcie_remove(pcie); in iproc_pcie_pltfm_remove()
139 struct iproc_pcie *pcie = platform_get_drvdata(pdev); in iproc_pcie_pltfm_shutdown() local
141 iproc_pcie_shutdown(pcie); in iproc_pcie_pltfm_shutdown()
146 .name = "iproc-pcie",
156 MODULE_DESCRIPTION("Broadcom iPROC PCIe platform driver");