Lines Matching refs:pcie

20 #include "pcie-designware.h"
84 static inline void pcie_app_wr(struct intel_pcie *pcie, u32 ofs, u32 val)
86 writel(val, pcie->app_base + ofs);
89 static void pcie_app_wr_mask(struct intel_pcie *pcie, u32 ofs,
92 pcie_update_bits(pcie->app_base, ofs, mask, val);
95 static inline u32 pcie_rc_cfg_rd(struct intel_pcie *pcie, u32 ofs)
97 return dw_pcie_readl_dbi(&pcie->pci, ofs);
100 static inline void pcie_rc_cfg_wr(struct intel_pcie *pcie, u32 ofs, u32 val)
102 dw_pcie_writel_dbi(&pcie->pci, ofs, val);
105 static void pcie_rc_cfg_wr_mask(struct intel_pcie *pcie, u32 ofs,
108 pcie_update_bits(pcie->pci.dbi_base, ofs, mask, val);
111 static void intel_pcie_ltssm_enable(struct intel_pcie *pcie)
113 pcie_app_wr_mask(pcie, PCIE_APP_CCR, PCIE_APP_CCR_LTSSM_ENABLE,
117 static void intel_pcie_ltssm_disable(struct intel_pcie *pcie)
119 pcie_app_wr_mask(pcie, PCIE_APP_CCR, PCIE_APP_CCR_LTSSM_ENABLE, 0);
122 static void intel_pcie_link_setup(struct intel_pcie *pcie)
125 u8 offset = dw_pcie_find_capability(&pcie->pci, PCI_CAP_ID_EXP);
127 val = pcie_rc_cfg_rd(pcie, offset + PCI_EXP_LNKCTL);
130 pcie_rc_cfg_wr(pcie, offset + PCI_EXP_LNKCTL, val);
149 static int intel_pcie_ep_rst_init(struct intel_pcie *pcie)
151 struct device *dev = pcie->pci.dev;
154 pcie->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW);
155 if (IS_ERR(pcie->reset_gpio)) {
156 ret = PTR_ERR(pcie->reset_gpio);
168 static void intel_pcie_core_rst_assert(struct intel_pcie *pcie)
170 reset_control_assert(pcie->core_rst);
173 static void intel_pcie_core_rst_deassert(struct intel_pcie *pcie)
180 reset_control_deassert(pcie->core_rst);
189 static void intel_pcie_device_rst_assert(struct intel_pcie *pcie)
191 gpiod_set_value_cansleep(pcie->reset_gpio, 1);
194 static void intel_pcie_device_rst_deassert(struct intel_pcie *pcie)
196 msleep(pcie->rst_intrvl);
197 gpiod_set_value_cansleep(pcie->reset_gpio, 0);
200 static void intel_pcie_core_irq_disable(struct intel_pcie *pcie)
202 pcie_app_wr(pcie, PCIE_APP_IRNEN, 0);
203 pcie_app_wr(pcie, PCIE_APP_IRNCR, PCIE_APP_IRN_INT);
208 struct intel_pcie *pcie = platform_get_drvdata(pdev);
209 struct dw_pcie *pci = &pcie->pci;
213 pcie->core_clk = devm_clk_get(dev, NULL);
214 if (IS_ERR(pcie->core_clk)) {
215 ret = PTR_ERR(pcie->core_clk);
221 pcie->core_rst = devm_reset_control_get(dev, NULL);
222 if (IS_ERR(pcie->core_rst)) {
223 ret = PTR_ERR(pcie->core_rst);
230 &pcie->rst_intrvl);
232 pcie->rst_intrvl = RESET_INTERVAL_MS;
234 pcie->app_base = devm_platform_ioremap_resource_byname(pdev, "app");
235 if (IS_ERR(pcie->app_base))
236 return PTR_ERR(pcie->app_base);
238 pcie->phy = devm_phy_get(dev, "pcie");
239 if (IS_ERR(pcie->phy)) {
240 ret = PTR_ERR(pcie->phy);
242 dev_err(dev, "Couldn't get pcie-phy: %d\n", ret);
249 static int intel_pcie_wait_l2(struct intel_pcie *pcie)
253 struct dw_pcie *pci = &pcie->pci;
259 pcie_app_wr_mask(pcie, PCIE_APP_MSG_CR, PCIE_APP_MSG_XMT_PM_TURNOFF,
263 ret = readl_poll_timeout(pcie->app_base + PCIE_APP_PMC, value,
267 dev_err(pcie->pci.dev, "PCIe link enter L2 timeout!\n");
272 static void intel_pcie_turn_off(struct intel_pcie *pcie)
274 if (dw_pcie_link_up(&pcie->pci))
275 intel_pcie_wait_l2(pcie);
278 intel_pcie_device_rst_assert(pcie);
279 pcie_rc_cfg_wr_mask(pcie, PCI_COMMAND, PCI_COMMAND_MEMORY, 0);
282 static int intel_pcie_host_setup(struct intel_pcie *pcie)
285 struct dw_pcie *pci = &pcie->pci;
287 intel_pcie_core_rst_assert(pcie);
288 intel_pcie_device_rst_assert(pcie);
290 ret = phy_init(pcie->phy);
294 intel_pcie_core_rst_deassert(pcie);
296 ret = clk_prepare_enable(pcie->core_clk);
298 dev_err(pcie->pci.dev, "Core clock enable failed: %d\n", ret);
304 intel_pcie_ltssm_disable(pcie);
305 intel_pcie_link_setup(pcie);
314 intel_pcie_device_rst_deassert(pcie);
315 intel_pcie_ltssm_enable(pcie);
322 pcie_app_wr_mask(pcie, PCIE_APP_IRNEN, PCIE_APP_IRN_INT,
328 clk_disable_unprepare(pcie->core_clk);
330 intel_pcie_core_rst_assert(pcie);
331 phy_exit(pcie->phy);
336 static void __intel_pcie_remove(struct intel_pcie *pcie)
338 intel_pcie_core_irq_disable(pcie);
339 intel_pcie_turn_off(pcie);
340 clk_disable_unprepare(pcie->core_clk);
341 intel_pcie_core_rst_assert(pcie);
342 phy_exit(pcie->phy);
347 struct intel_pcie *pcie = platform_get_drvdata(pdev);
348 struct dw_pcie_rp *pp = &pcie->pci.pp;
351 __intel_pcie_remove(pcie);
356 struct intel_pcie *pcie = dev_get_drvdata(dev);
359 intel_pcie_core_irq_disable(pcie);
360 ret = intel_pcie_wait_l2(pcie);
364 phy_exit(pcie->phy);
365 clk_disable_unprepare(pcie->core_clk);
371 struct intel_pcie *pcie = dev_get_drvdata(dev);
373 return intel_pcie_host_setup(pcie);
379 struct intel_pcie *pcie = dev_get_drvdata(pci->dev);
381 return intel_pcie_host_setup(pcie);
384 static u64 intel_pcie_cpu_addr(struct dw_pcie *pcie, u64 cpu_addr)
400 struct intel_pcie *pcie;
405 pcie = devm_kzalloc(dev, sizeof(*pcie), GFP_KERNEL);
406 if (!pcie)
409 platform_set_drvdata(pdev, pcie);
410 pci = &pcie->pci;
418 ret = intel_pcie_ep_rst_init(pcie);
440 { .compatible = "intel,lgm-pcie" },
448 .name = "intel-gw-pcie",