Lines Matching defs:pcie

22 #include "pcie-designware.h"
72 static void keembay_ep_reset_assert(struct keembay_pcie *pcie)
74 gpiod_set_value_cansleep(pcie->reset, 1);
78 static void keembay_ep_reset_deassert(struct keembay_pcie *pcie)
88 gpiod_set_value_cansleep(pcie->reset, 0);
92 static void keembay_pcie_ltssm_set(struct keembay_pcie *pcie, bool enable)
96 val = readl(pcie->apb_base + PCIE_REGS_PCIE_APP_CNTRL);
101 writel(val, pcie->apb_base + PCIE_REGS_PCIE_APP_CNTRL);
106 struct keembay_pcie *pcie = dev_get_drvdata(pci->dev);
109 val = readl(pcie->apb_base + PCIE_REGS_PCIE_SII_PM_STATE);
116 struct keembay_pcie *pcie = dev_get_drvdata(pci->dev);
120 if (pcie->mode == DW_PCIE_EP_TYPE)
123 keembay_pcie_ltssm_set(pcie, false);
125 ret = readl_poll_timeout(pcie->apb_base + PCIE_REGS_PCIE_PHY_STAT,
133 keembay_pcie_ltssm_set(pcie, true);
140 struct keembay_pcie *pcie = dev_get_drvdata(pci->dev);
142 keembay_pcie_ltssm_set(pcie, false);
185 static int keembay_pcie_probe_clocks(struct keembay_pcie *pcie)
187 struct dw_pcie *pci = &pcie->pci;
190 pcie->clk_master = keembay_pcie_probe_clock(dev, "master", 0);
191 if (IS_ERR(pcie->clk_master))
192 return dev_err_probe(dev, PTR_ERR(pcie->clk_master),
195 pcie->clk_aux = keembay_pcie_probe_clock(dev, "aux", AUX_CLK_RATE_HZ);
196 if (IS_ERR(pcie->clk_aux))
197 return dev_err_probe(dev, PTR_ERR(pcie->clk_aux),
209 static int keembay_pcie_pll_init(struct keembay_pcie *pcie)
211 struct dw_pcie *pci = &pcie->pci;
216 writel(val, pcie->apb_base + PCIE_REGS_LJPLL_CNTRL_2);
220 writel(val, pcie->apb_base + PCIE_REGS_LJPLL_CNTRL_3);
223 writel(val, pcie->apb_base + PCIE_REGS_LJPLL_CNTRL_0);
225 ret = readl_poll_timeout(pcie->apb_base + PCIE_REGS_LJPLL_STA,
236 struct keembay_pcie *pcie = irq_desc_get_handler_data(desc);
252 pp = &pcie->pci.pp;
253 val = readl(pcie->apb_base + PCIE_REGS_INTERRUPT_STATUS);
254 mask = readl(pcie->apb_base + PCIE_REGS_INTERRUPT_ENABLE);
260 writel(status, pcie->apb_base + PCIE_REGS_INTERRUPT_STATUS);
266 static int keembay_pcie_setup_msi_irq(struct keembay_pcie *pcie)
268 struct dw_pcie *pci = &pcie->pci;
273 irq = platform_get_irq_byname(pdev, "pcie");
278 pcie);
286 struct keembay_pcie *pcie = dev_get_drvdata(pci->dev);
288 writel(EDMA_INT_EN, pcie->apb_base + PCIE_REGS_INTERRUPT_ENABLE);
336 static int keembay_pcie_add_pcie_port(struct keembay_pcie *pcie,
339 struct dw_pcie *pci = &pcie->pci;
348 ret = keembay_pcie_setup_msi_irq(pcie);
352 pcie->reset = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH);
353 if (IS_ERR(pcie->reset))
354 return PTR_ERR(pcie->reset);
356 ret = keembay_pcie_probe_clocks(pcie);
360 val = readl(pcie->apb_base + PCIE_REGS_PCIE_PHY_CNTL);
362 writel(val, pcie->apb_base + PCIE_REGS_PCIE_PHY_CNTL);
364 writel(PCIE_DEVICE_TYPE, pcie->apb_base + PCIE_REGS_PCIE_CFG);
366 ret = keembay_pcie_pll_init(pcie);
370 val = readl(pcie->apb_base + PCIE_REGS_PCIE_CFG);
371 writel(val | PCIE_RSTN, pcie->apb_base + PCIE_REGS_PCIE_CFG);
372 keembay_ep_reset_deassert(pcie);
376 keembay_ep_reset_assert(pcie);
381 val = readl(pcie->apb_base + PCIE_REGS_INTERRUPT_ENABLE);
384 writel(val, pcie->apb_base + PCIE_REGS_INTERRUPT_ENABLE);
393 struct keembay_pcie *pcie;
403 pcie = devm_kzalloc(dev, sizeof(*pcie), GFP_KERNEL);
404 if (!pcie)
407 pci = &pcie->pci;
411 pcie->mode = mode;
413 pcie->apb_base = devm_platform_ioremap_resource_byname(pdev, "apb");
414 if (IS_ERR(pcie->apb_base))
415 return PTR_ERR(pcie->apb_base);
417 platform_set_drvdata(pdev, pcie);
419 switch (pcie->mode) {
424 return keembay_pcie_add_pcie_port(pcie, pdev);
432 dev_err(dev, "Invalid device type %d\n", pcie->mode);
447 .compatible = "intel,keembay-pcie",
451 .compatible = "intel,keembay-pcie-ep",
459 .name = "keembay-pcie",