• Home
  • Raw
  • Download

Lines Matching full:lpp

88 static inline u32 pcie_app_rd(struct intel_pcie_port *lpp, u32 ofs)  in pcie_app_rd()  argument
90 return readl(lpp->app_base + ofs); in pcie_app_rd()
93 static inline void pcie_app_wr(struct intel_pcie_port *lpp, u32 ofs, u32 val) in pcie_app_wr() argument
95 writel(val, lpp->app_base + ofs); in pcie_app_wr()
98 static void pcie_app_wr_mask(struct intel_pcie_port *lpp, u32 ofs, in pcie_app_wr_mask() argument
101 pcie_update_bits(lpp->app_base, ofs, mask, val); in pcie_app_wr_mask()
104 static inline u32 pcie_rc_cfg_rd(struct intel_pcie_port *lpp, u32 ofs) in pcie_rc_cfg_rd() argument
106 return dw_pcie_readl_dbi(&lpp->pci, ofs); in pcie_rc_cfg_rd()
109 static inline void pcie_rc_cfg_wr(struct intel_pcie_port *lpp, u32 ofs, u32 val) in pcie_rc_cfg_wr() argument
111 dw_pcie_writel_dbi(&lpp->pci, ofs, val); in pcie_rc_cfg_wr()
114 static void pcie_rc_cfg_wr_mask(struct intel_pcie_port *lpp, u32 ofs, in pcie_rc_cfg_wr_mask() argument
117 pcie_update_bits(lpp->pci.dbi_base, ofs, mask, val); in pcie_rc_cfg_wr_mask()
120 static void intel_pcie_ltssm_enable(struct intel_pcie_port *lpp) in intel_pcie_ltssm_enable() argument
122 pcie_app_wr_mask(lpp, PCIE_APP_CCR, PCIE_APP_CCR_LTSSM_ENABLE, in intel_pcie_ltssm_enable()
126 static void intel_pcie_ltssm_disable(struct intel_pcie_port *lpp) in intel_pcie_ltssm_disable() argument
128 pcie_app_wr_mask(lpp, PCIE_APP_CCR, PCIE_APP_CCR_LTSSM_ENABLE, 0); in intel_pcie_ltssm_disable()
131 static void intel_pcie_link_setup(struct intel_pcie_port *lpp) in intel_pcie_link_setup() argument
134 u8 offset = dw_pcie_find_capability(&lpp->pci, PCI_CAP_ID_EXP); in intel_pcie_link_setup()
136 val = pcie_rc_cfg_rd(lpp, offset + PCI_EXP_LNKCTL); in intel_pcie_link_setup()
139 pcie_rc_cfg_wr(lpp, offset + PCI_EXP_LNKCTL, val); in intel_pcie_link_setup()
158 static void intel_pcie_rc_setup(struct intel_pcie_port *lpp) in intel_pcie_rc_setup() argument
160 intel_pcie_ltssm_disable(lpp); in intel_pcie_rc_setup()
161 intel_pcie_link_setup(lpp); in intel_pcie_rc_setup()
162 intel_pcie_init_n_fts(&lpp->pci); in intel_pcie_rc_setup()
163 dw_pcie_setup_rc(&lpp->pci.pp); in intel_pcie_rc_setup()
164 dw_pcie_upconfig_setup(&lpp->pci); in intel_pcie_rc_setup()
167 static int intel_pcie_ep_rst_init(struct intel_pcie_port *lpp) in intel_pcie_ep_rst_init() argument
169 struct device *dev = lpp->pci.dev; in intel_pcie_ep_rst_init()
172 lpp->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); in intel_pcie_ep_rst_init()
173 if (IS_ERR(lpp->reset_gpio)) { in intel_pcie_ep_rst_init()
174 ret = PTR_ERR(lpp->reset_gpio); in intel_pcie_ep_rst_init()
186 static void intel_pcie_core_rst_assert(struct intel_pcie_port *lpp) in intel_pcie_core_rst_assert() argument
188 reset_control_assert(lpp->core_rst); in intel_pcie_core_rst_assert()
191 static void intel_pcie_core_rst_deassert(struct intel_pcie_port *lpp) in intel_pcie_core_rst_deassert() argument
198 reset_control_deassert(lpp->core_rst); in intel_pcie_core_rst_deassert()
207 static void intel_pcie_device_rst_assert(struct intel_pcie_port *lpp) in intel_pcie_device_rst_assert() argument
209 gpiod_set_value_cansleep(lpp->reset_gpio, 1); in intel_pcie_device_rst_assert()
212 static void intel_pcie_device_rst_deassert(struct intel_pcie_port *lpp) in intel_pcie_device_rst_deassert() argument
214 msleep(lpp->rst_intrvl); in intel_pcie_device_rst_deassert()
215 gpiod_set_value_cansleep(lpp->reset_gpio, 0); in intel_pcie_device_rst_deassert()
218 static int intel_pcie_app_logic_setup(struct intel_pcie_port *lpp) in intel_pcie_app_logic_setup() argument
220 intel_pcie_device_rst_deassert(lpp); in intel_pcie_app_logic_setup()
221 intel_pcie_ltssm_enable(lpp); in intel_pcie_app_logic_setup()
223 return dw_pcie_wait_for_link(&lpp->pci); in intel_pcie_app_logic_setup()
226 static void intel_pcie_core_irq_disable(struct intel_pcie_port *lpp) in intel_pcie_core_irq_disable() argument
228 pcie_app_wr(lpp, PCIE_APP_IRNEN, 0); in intel_pcie_core_irq_disable()
229 pcie_app_wr(lpp, PCIE_APP_IRNCR, PCIE_APP_IRN_INT); in intel_pcie_core_irq_disable()
234 struct intel_pcie_port *lpp = platform_get_drvdata(pdev); in intel_pcie_get_resources() local
235 struct dw_pcie *pci = &lpp->pci; in intel_pcie_get_resources()
243 lpp->core_clk = devm_clk_get(dev, NULL); in intel_pcie_get_resources()
244 if (IS_ERR(lpp->core_clk)) { in intel_pcie_get_resources()
245 ret = PTR_ERR(lpp->core_clk); in intel_pcie_get_resources()
251 lpp->core_rst = devm_reset_control_get(dev, NULL); in intel_pcie_get_resources()
252 if (IS_ERR(lpp->core_rst)) { in intel_pcie_get_resources()
253 ret = PTR_ERR(lpp->core_rst); in intel_pcie_get_resources()
260 &lpp->rst_intrvl); in intel_pcie_get_resources()
262 lpp->rst_intrvl = RESET_INTERVAL_MS; in intel_pcie_get_resources()
264 lpp->app_base = devm_platform_ioremap_resource_byname(pdev, "app"); in intel_pcie_get_resources()
265 if (IS_ERR(lpp->app_base)) in intel_pcie_get_resources()
266 return PTR_ERR(lpp->app_base); in intel_pcie_get_resources()
268 lpp->phy = devm_phy_get(dev, "pcie"); in intel_pcie_get_resources()
269 if (IS_ERR(lpp->phy)) { in intel_pcie_get_resources()
270 ret = PTR_ERR(lpp->phy); in intel_pcie_get_resources()
279 static void intel_pcie_deinit_phy(struct intel_pcie_port *lpp) in intel_pcie_deinit_phy() argument
281 phy_exit(lpp->phy); in intel_pcie_deinit_phy()
284 static int intel_pcie_wait_l2(struct intel_pcie_port *lpp) in intel_pcie_wait_l2() argument
288 struct dw_pcie *pci = &lpp->pci; in intel_pcie_wait_l2()
294 pcie_app_wr_mask(lpp, PCIE_APP_MSG_CR, PCIE_APP_MSG_XMT_PM_TURNOFF, in intel_pcie_wait_l2()
298 ret = readl_poll_timeout(lpp->app_base + PCIE_APP_PMC, value, in intel_pcie_wait_l2()
302 dev_err(lpp->pci.dev, "PCIe link enter L2 timeout!\n"); in intel_pcie_wait_l2()
307 static void intel_pcie_turn_off(struct intel_pcie_port *lpp) in intel_pcie_turn_off() argument
309 if (dw_pcie_link_up(&lpp->pci)) in intel_pcie_turn_off()
310 intel_pcie_wait_l2(lpp); in intel_pcie_turn_off()
313 intel_pcie_device_rst_assert(lpp); in intel_pcie_turn_off()
314 pcie_rc_cfg_wr_mask(lpp, PCI_COMMAND, PCI_COMMAND_MEMORY, 0); in intel_pcie_turn_off()
317 static int intel_pcie_host_setup(struct intel_pcie_port *lpp) in intel_pcie_host_setup() argument
321 intel_pcie_core_rst_assert(lpp); in intel_pcie_host_setup()
322 intel_pcie_device_rst_assert(lpp); in intel_pcie_host_setup()
324 ret = phy_init(lpp->phy); in intel_pcie_host_setup()
328 intel_pcie_core_rst_deassert(lpp); in intel_pcie_host_setup()
330 ret = clk_prepare_enable(lpp->core_clk); in intel_pcie_host_setup()
332 dev_err(lpp->pci.dev, "Core clock enable failed: %d\n", ret); in intel_pcie_host_setup()
336 intel_pcie_rc_setup(lpp); in intel_pcie_host_setup()
337 ret = intel_pcie_app_logic_setup(lpp); in intel_pcie_host_setup()
342 pcie_app_wr_mask(lpp, PCIE_APP_IRNEN, PCIE_APP_IRN_INT, in intel_pcie_host_setup()
348 clk_disable_unprepare(lpp->core_clk); in intel_pcie_host_setup()
350 intel_pcie_core_rst_assert(lpp); in intel_pcie_host_setup()
351 intel_pcie_deinit_phy(lpp); in intel_pcie_host_setup()
356 static void __intel_pcie_remove(struct intel_pcie_port *lpp) in __intel_pcie_remove() argument
358 intel_pcie_core_irq_disable(lpp); in __intel_pcie_remove()
359 intel_pcie_turn_off(lpp); in __intel_pcie_remove()
360 clk_disable_unprepare(lpp->core_clk); in __intel_pcie_remove()
361 intel_pcie_core_rst_assert(lpp); in __intel_pcie_remove()
362 intel_pcie_deinit_phy(lpp); in __intel_pcie_remove()
367 struct intel_pcie_port *lpp = platform_get_drvdata(pdev); in intel_pcie_remove() local
368 struct pcie_port *pp = &lpp->pci.pp; in intel_pcie_remove()
371 __intel_pcie_remove(lpp); in intel_pcie_remove()
378 struct intel_pcie_port *lpp = dev_get_drvdata(dev); in intel_pcie_suspend_noirq() local
381 intel_pcie_core_irq_disable(lpp); in intel_pcie_suspend_noirq()
382 ret = intel_pcie_wait_l2(lpp); in intel_pcie_suspend_noirq()
386 intel_pcie_deinit_phy(lpp); in intel_pcie_suspend_noirq()
387 clk_disable_unprepare(lpp->core_clk); in intel_pcie_suspend_noirq()
393 struct intel_pcie_port *lpp = dev_get_drvdata(dev); in intel_pcie_resume_noirq() local
395 return intel_pcie_host_setup(lpp); in intel_pcie_resume_noirq()
401 struct intel_pcie_port *lpp = dev_get_drvdata(pci->dev); in intel_pcie_rc_init() local
403 return intel_pcie_host_setup(lpp); in intel_pcie_rc_init()
438 struct intel_pcie_port *lpp; in intel_pcie_probe() local
443 lpp = devm_kzalloc(dev, sizeof(*lpp), GFP_KERNEL); in intel_pcie_probe()
444 if (!lpp) in intel_pcie_probe()
447 platform_set_drvdata(pdev, lpp); in intel_pcie_probe()
448 pci = &lpp->pci; in intel_pcie_probe()
456 ret = intel_pcie_ep_rst_init(lpp); in intel_pcie_probe()