• Home
  • Raw
  • Download

Lines Matching +full:pci +full:- +full:phy

1 // SPDX-License-Identifier: GPL-2.0
7 * Copyright (C) 2010-2014 ST Microelectronics
17 #include <linux/pci.h>
18 #include <linux/phy/phy.h>
22 #include "pcie-designware.h"
25 struct dw_pcie *pci; member
27 struct phy *phy; member
67 #define to_spear13xx_pcie(x) dev_get_drvdata((x)->dev)
71 struct dw_pcie *pci = spear13xx_pcie->pci; in spear13xx_pcie_establish_link() local
72 struct pcie_port *pp = &pci->pp; in spear13xx_pcie_establish_link()
73 struct pcie_app_reg *app_reg = spear13xx_pcie->app_base; in spear13xx_pcie_establish_link()
75 u32 exp_cap_off = dw_pcie_find_capability(pci, PCI_CAP_ID_EXP); in spear13xx_pcie_establish_link()
77 if (dw_pcie_link_up(pci)) { in spear13xx_pcie_establish_link()
78 dev_err(pci->dev, "link already up\n"); in spear13xx_pcie_establish_link()
89 val = dw_pcie_readw_dbi(pci, exp_cap_off + PCI_EXP_DEVCTL); in spear13xx_pcie_establish_link()
91 dw_pcie_writew_dbi(pci, exp_cap_off + PCI_EXP_DEVCTL, val); in spear13xx_pcie_establish_link()
93 dw_pcie_writew_dbi(pci, PCI_VENDOR_ID, 0x104A); in spear13xx_pcie_establish_link()
94 dw_pcie_writew_dbi(pci, PCI_DEVICE_ID, 0xCD80); in spear13xx_pcie_establish_link()
100 &app_reg->app_ctrl_0); in spear13xx_pcie_establish_link()
102 return dw_pcie_wait_for_link(pci); in spear13xx_pcie_establish_link()
108 struct pcie_app_reg *app_reg = spear13xx_pcie->app_base; in spear13xx_pcie_irq_handler()
109 struct dw_pcie *pci = spear13xx_pcie->pci; in spear13xx_pcie_irq_handler() local
110 struct pcie_port *pp = &pci->pp; in spear13xx_pcie_irq_handler()
113 status = readl(&app_reg->int_sts); in spear13xx_pcie_irq_handler()
120 writel(status, &app_reg->int_clr); in spear13xx_pcie_irq_handler()
127 struct dw_pcie *pci = spear13xx_pcie->pci; in spear13xx_pcie_enable_interrupts() local
128 struct pcie_port *pp = &pci->pp; in spear13xx_pcie_enable_interrupts()
129 struct pcie_app_reg *app_reg = spear13xx_pcie->app_base; in spear13xx_pcie_enable_interrupts()
134 writel(readl(&app_reg->int_mask) | in spear13xx_pcie_enable_interrupts()
135 MSI_CTRL_INT, &app_reg->int_mask); in spear13xx_pcie_enable_interrupts()
139 static int spear13xx_pcie_link_up(struct dw_pcie *pci) in spear13xx_pcie_link_up() argument
141 struct spear13xx_pcie *spear13xx_pcie = to_spear13xx_pcie(pci); in spear13xx_pcie_link_up()
142 struct pcie_app_reg *app_reg = spear13xx_pcie->app_base; in spear13xx_pcie_link_up()
144 if (readl(&app_reg->app_status_1) & XMLH_LINK_UP) in spear13xx_pcie_link_up()
152 struct dw_pcie *pci = to_dw_pcie_from_pp(pp); in spear13xx_pcie_host_init() local
153 struct spear13xx_pcie *spear13xx_pcie = to_spear13xx_pcie(pci); in spear13xx_pcie_host_init()
168 struct dw_pcie *pci = spear13xx_pcie->pci; in spear13xx_add_pcie_port() local
169 struct pcie_port *pp = &pci->pp; in spear13xx_add_pcie_port()
170 struct device *dev = &pdev->dev; in spear13xx_add_pcie_port()
173 pp->irq = platform_get_irq(pdev, 0); in spear13xx_add_pcie_port()
174 if (pp->irq < 0) in spear13xx_add_pcie_port()
175 return pp->irq; in spear13xx_add_pcie_port()
177 ret = devm_request_irq(dev, pp->irq, spear13xx_pcie_irq_handler, in spear13xx_add_pcie_port()
179 "spear1340-pcie", spear13xx_pcie); in spear13xx_add_pcie_port()
181 dev_err(dev, "failed to request irq %d\n", pp->irq); in spear13xx_add_pcie_port()
185 pp->ops = &spear13xx_pcie_host_ops; in spear13xx_add_pcie_port()
202 struct device *dev = &pdev->dev; in spear13xx_pcie_probe()
203 struct dw_pcie *pci; in spear13xx_pcie_probe() local
205 struct device_node *np = dev->of_node; in spear13xx_pcie_probe()
211 return -ENOMEM; in spear13xx_pcie_probe()
213 pci = devm_kzalloc(dev, sizeof(*pci), GFP_KERNEL); in spear13xx_pcie_probe()
214 if (!pci) in spear13xx_pcie_probe()
215 return -ENOMEM; in spear13xx_pcie_probe()
217 pci->dev = dev; in spear13xx_pcie_probe()
218 pci->ops = &dw_pcie_ops; in spear13xx_pcie_probe()
220 spear13xx_pcie->pci = pci; in spear13xx_pcie_probe()
222 spear13xx_pcie->phy = devm_phy_get(dev, "pcie-phy"); in spear13xx_pcie_probe()
223 if (IS_ERR(spear13xx_pcie->phy)) { in spear13xx_pcie_probe()
224 ret = PTR_ERR(spear13xx_pcie->phy); in spear13xx_pcie_probe()
225 if (ret == -EPROBE_DEFER) in spear13xx_pcie_probe()
228 dev_err(dev, "couldn't get pcie-phy\n"); in spear13xx_pcie_probe()
232 phy_init(spear13xx_pcie->phy); in spear13xx_pcie_probe()
234 spear13xx_pcie->clk = devm_clk_get(dev, NULL); in spear13xx_pcie_probe()
235 if (IS_ERR(spear13xx_pcie->clk)) { in spear13xx_pcie_probe()
237 return PTR_ERR(spear13xx_pcie->clk); in spear13xx_pcie_probe()
239 ret = clk_prepare_enable(spear13xx_pcie->clk); in spear13xx_pcie_probe()
246 pci->dbi_base = devm_pci_remap_cfg_resource(dev, dbi_base); in spear13xx_pcie_probe()
247 if (IS_ERR(pci->dbi_base)) { in spear13xx_pcie_probe()
248 ret = PTR_ERR(pci->dbi_base); in spear13xx_pcie_probe()
251 spear13xx_pcie->app_base = pci->dbi_base + 0x2000; in spear13xx_pcie_probe()
253 if (of_property_read_bool(np, "st,pcie-is-gen1")) in spear13xx_pcie_probe()
254 pci->link_gen = 1; in spear13xx_pcie_probe()
265 clk_disable_unprepare(spear13xx_pcie->clk); in spear13xx_pcie_probe()
271 { .compatible = "st,spear1340-pcie", },
278 .name = "spear-pcie",